Bug 1674871: Unlock fission.autostart and allow to ride the trains. r=mccr8
[gecko.git] / modules / libpref / init / StaticPrefList.yaml
blobb6a4f7857a821ae8f18fcfc0699ef2329d48edf7
1 # This Source Code Form is subject to the terms of the Mozilla Public
2 # License, v. 2.0. If a copy of the MPL was not distributed with this
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 # This file defines static prefs, i.e. those that are defined at startup and
6 # used entirely or mostly from C++ and/or Rust code.
8 # The file is separated into sections, where each section contains a group of
9 # prefs that all share the same first segment of their name -- all the "gfx.*"
10 # prefs are together, all the "network.*" prefs are together, etc. Sections
11 # must be kept in alphabetical order, but prefs within sections need not be.
13 # Basics
14 # ------
15 # Any pref defined in one of the files included here should *not* be defined
16 # in a data file such as all.js; that would just be useless duplication.
18 # (Except under unusual circumstances where the value defined here must be
19 # overridden, e.g. for some Thunderbird prefs. In those cases the default
20 # value from the data file will override the static default value defined
21 # here.)
23 # Please follow the existing prefs naming convention when considering adding a
24 # new pref, and don't create a new pref group unless it's appropriate and there
25 # are likely to be multiple prefs within that group. (If you do, you'll need to
26 # update the `pref_groups` variable in modules/libpref/moz.build.)
28 # Definitions
29 # -----------
30 # A pref definition looks like this:
32 #   - name: <pref-name>                    # mandatory
33 #     type: <cpp-type>                     # mandatory
34 #     value: <default-value>               # mandatory
35 #     mirror: <never | once | always>      # mandatory
36 #     do_not_use_directly: <true | false>  # optional
37 #     include: <header-file>               # optional
38 #     rust: <true | false>                 # optional
40 # - `name` is the name of the pref, without double-quotes, as it appears
41 #   in about:config. It is used in most libpref API functions (from both C++
42 #   and JS code).
44 # - `type` is one of `bool`, `int32_t`, `uint32_t`, `float`, an atomic version
45 #   of one of those, or `String`. Note that float prefs are stored internally
46 #   as strings. The C++ preprocessor doesn't like template syntax in a macro
47 #   argument, so use the typedefs defined in StaticPrefsBase.h; for example,
48 #   use `RelaxedAtomicBool` instead of `Atomic<bool, Relaxed>`.
50 # - `value` is the default value. Its type should be appropriate for
51 #   <cpp-type>, otherwise the generated code will fail to compile. A complex
52 #   C++ numeric expressions like `60 * 60` (which the YAML parser cannot treat
53 #   as an integer or float) is treated as a string and passed through without
54 #   change, which is useful.
56 # - `mirror` indicates how the pref value is mirrored into a C++ variable.
58 #   * `never`: There is no C++ mirror variable. The pref value can only be
59 #     accessed via the standard libpref API functions.
61 #   * `once`: The pref value is mirrored into a variable at startup; the
62 #     mirror variable is left unchanged after that. (The exact point at which
63 #     all `once` mirror variables are set is when the first `once` mirror
64 #     variable is accessed, via its getter function.) This is mostly useful for
65 #     graphics prefs where we often don't want a new pref value to apply until
66 #     restart. Otherwise, this update policy is best avoided because its
67 #     behaviour can cause confusion and bugs.
69 #   * `always`: The mirror variable is always kept in sync with the pref value.
70 #     This is the most common choice.
72 #   When a mirror variable is present, a getter will be created that can access
73 #   it. Using the getter function to read the pref's value has the two
74 #   following advantages over the normal API functions.
76 #   * A direct variable access is faster than a hash table lookup.
78 #   * A mirror variable can be accessed off the main thread. If a pref *is*
79 #     accessed off the main thread, it should have an atomic type. Assertions
80 #     enforce this.
82 #   Note that Rust code must access the mirror variable directly, rather than
83 #   via the getter function.
85 # - `do_not_use_directly` indicates if `_DoNotUseDirectly` should be appended to
86 #   the name of the getter function. This is simply a naming convention
87 #   indicating that there is some other wrapper getter function that should be
88 #   used in preference to the normal static pref getter. Defaults to `false` if
89 #   not present. Cannot be used with a `never` mirror value, because there is
90 #   no getter function in that case.
92 # - `include` names a header file that must be included for the pref value to
93 #   compile correctly, e.g. because it refers to a code constant. System
94 #   headers should be surrounded with angle brackets, e.g. `<cmath>`.
96 # - `rust` indicates if the mirror variable is used by Rust code. If so, it
97 #   will be usable via the `static_prefs::pref!` macro, e.g.
98 #   `static_prefs::pref!("layout.css.font-display.enabled")`.
100 # The getter function's base name is the same as the pref's name, but with
101 # '.' or '-' chars converted to '_', to make a valid identifier. For example,
102 # the getter for `foo.bar_baz` is `foo_bar_baz()`. This is ugly but clear,
103 # and you can search for both the pref name and the getter using the regexp
104 # /foo.bar.baz/. Suffixes are added as follows:
106 # - If the `mirror` value is `once`, `_AtStartup` is appended, to indicate the
107 #   value was obtained at startup.
109 # - If the `do_not_use_directly` value is true, `_DoNotUseDirectly` is
110 #   appended.
112 # Preprocessor
113 # ------------
114 # Note finally that this file is preprocessed by preprocessor.py, not the C++
115 # preprocessor. As a result, the following things may be surprising.
117 # - YAML comments start with a '#', so putting a comment on the same line as a
118 #   preprocessor directive is dubious. E.g. avoid lines like `#define X 3 #
119 #   three` because the ` # three` will be part of `X`.
121 # - '@' use is required for substitutions to occur. E.g. with `#define FOO 1`,
122 #   `FOO` won't be replaced with `1` unless it has '@' chars around it.
124 # - Spaces aren't permitted between the leading '#' and the name of a
125 #   directive, e.g. `#ifdef XYZ` works but `# ifdef XYZ` does not.
127 # Please indent all prefs defined within #ifdef/#ifndef conditions. This
128 # improves readability, particular for conditional blocks that exceed a single
129 # screen. But note that the leading '-' in a definition must remain in the
130 # first column for it to be valid YAML.
132 #ifdef RELEASE_OR_BETA
133 #define IS_NOT_RELEASE_OR_BETA false
134 #else
135 #define IS_NOT_RELEASE_OR_BETA true
136 #endif
138 #ifdef NIGHTLY_BUILD
139 #define IS_NIGHTLY_BUILD      true
140 #define IS_NOT_NIGHTLY_BUILD  false
141 #else
142 #define IS_NIGHTLY_BUILD      false
143 #define IS_NOT_NIGHTLY_BUILD  true
144 #endif
146 #if defined(NIGHTLY_BUILD) || defined(MOZ_DEV_EDITION)
147 #define IS_NIGHTLY_OR_DEV_EDITION true
148 #else
149 #define IS_NIGHTLY_OR_DEV_EDITION false
150 #endif
152 #ifdef MOZILLA_OFFICIAL
153 #define IS_NOT_MOZILLA_OFFICIAL false
154 #else
155 #define IS_NOT_MOZILLA_OFFICIAL true
156 #endif
158 #ifdef EARLY_BETA_OR_EARLIER
159 #define IS_EARLY_BETA_OR_EARLIER true
160 #define IS_NOT_EARLY_BETA_OR_EARLIER false
161 #else
162 #define IS_EARLY_BETA_OR_EARLIER false
163 #define IS_NOT_EARLY_BETA_OR_EARLIER true
164 #endif
166 #ifdef ANDROID
167 #define IS_ANDROID true
168 #define IS_NOT_ANDROID false
169 #else
170 #define IS_ANDROID false
171 #define IS_NOT_ANDROID true
172 #endif
174 #---------------------------------------------------------------------------
175 # Prefs starting with "accessibility."
176 #---------------------------------------------------------------------------
178 - name: accessibility.accesskeycausesactivation
179   type: bool
180   value: true
181   mirror: always
183 - name: accessibility.monoaudio.enable
184   type: RelaxedAtomicBool
185   value: false
186   mirror: always
188 - name: accessibility.browsewithcaret
189   type: RelaxedAtomicBool
190   value: false
191   mirror: always
193 - name: accessibility.AOM.enabled
194   type: bool
195   value: false
196   mirror: always
198 - name: accessibility.ARIAReflection.enabled
199   type: bool
200   value: false
201   mirror: always
203 #---------------------------------------------------------------------------
204 # Prefs starting with "alerts."
205 #---------------------------------------------------------------------------
207 # Whether to use platform-specific backends for showing desktop notifications.
208 # If no such backend is available, or if the pref is false, then XUL
209 # notifications are used.
210 - name: alerts.useSystemBackend
211   type: bool
212 #ifdef XP_WIN
213   # Linux and macOS turn on system level notification as default, but Windows is
214   # disabled due to instability (dependencies of bug 1497425).
215   value: false
216 #else
217   value: true
218 #endif
219   mirror: always
222 #ifdef ANDROID
223   #---------------------------------------------------------------------------
224   # Prefs starting with "android."
225   #---------------------------------------------------------------------------
227   # On Android, we want an opaque background to be visible under the page,
228   # so layout should not force a default background.
229 -   name: android.widget_paints_background
230     type: bool
231     value: true
232     mirror: always
234 -   name: android.touch_resampling.enabled
235     type: RelaxedAtomicBool
236     value: true
237     mirror: always
239 #endif
241 #---------------------------------------------------------------------------
242 # Prefs starting with "apz."
243 # The apz prefs are explained in AsyncPanZoomController.cpp
244 #---------------------------------------------------------------------------
246 - name: apz.allow_double_tap_zooming
247   type: RelaxedAtomicBool
248   value: true
249   mirror: always
251 - name: apz.allow_immediate_handoff
252   type: RelaxedAtomicBool
253   value: false
254   mirror: always
256 - name: apz.allow_zooming
257   type: RelaxedAtomicBool
258   value: true
259   mirror: always
261 - name: apz.allow_zooming_out
262   type: RelaxedAtomicBool
263   value: false
264   mirror: always
266 - name: apz.android.chrome_fling_physics.friction
267   type: AtomicFloat
268   value: 0.015f
269   mirror: always
271 - name: apz.android.chrome_fling_physics.inflexion
272   type: AtomicFloat
273   value: 0.35f
274   mirror: always
276 - name: apz.android.chrome_fling_physics.stop_threshold
277   type: AtomicFloat
278   value: 0.1f
279   mirror: always
281 - name: apz.autoscroll.enabled
282   type: RelaxedAtomicBool
283   value: true
284   mirror: always
286 - name: apz.axis_lock.breakout_angle
287   type: AtomicFloat
288   value: float(M_PI / 8.0)    # 22.5 degrees
289   mirror: always
290   include: <cmath>
292 - name: apz.axis_lock.breakout_threshold
293   type: AtomicFloat
294   value: 1.0f / 32.0f
295   mirror: always
297 - name: apz.axis_lock.direct_pan_angle
298   type: AtomicFloat
299   value: float(M_PI / 3.0)    # 60 degrees
300   mirror: always
301   include: <cmath>
303 - name: apz.axis_lock.lock_angle
304   type: AtomicFloat
305   value: float(M_PI / 6.0)    # 30 degrees
306   mirror: always
307   include: <cmath>
309 # Whether to lock touch scrolling to one axis at a time.
310 # 0 = FREE (No locking at all)
311 # 1 = STANDARD (Once locked, remain locked until scrolling ends)
312 # 2 = STICKY (Allow lock to be broken, with hysteresis)
313 - name: apz.axis_lock.mode
314   type: RelaxedAtomicInt32
315   value: 2
316   mirror: always
318 - name: apz.content_response_timeout
319   type: RelaxedAtomicInt32
320   value: 400
321   mirror: always
323 - name: apz.danger_zone_x
324   type: RelaxedAtomicInt32
325   value: 50
326   mirror: always
328 - name: apz.danger_zone_y
329   type: RelaxedAtomicInt32
330   value: 100
331   mirror: always
333 - name: apz.disable_for_scroll_linked_effects
334   type: RelaxedAtomicBool
335   value: false
336   mirror: always
338 - name: apz.displayport_expiry_ms
339   type: RelaxedAtomicUint32
340   value: 15000
341   mirror: always
343 - name: apz.drag.enabled
344   type: RelaxedAtomicBool
345   value: true
346   mirror: always
348 - name: apz.drag.initial.enabled
349   type: RelaxedAtomicBool
350   value: true
351   mirror: always
353 - name: apz.drag.touch.enabled
354   type: RelaxedAtomicBool
355   value: true
356   mirror: always
358 - name: apz.enlarge_displayport_when_clipped
359   type: RelaxedAtomicBool
360   value: @IS_ANDROID@
361   mirror: always
363 # Test only.
364 - name: apz.fixed-margin-override.enabled
365   type: RelaxedAtomicBool
366   value: false
367   mirror: always
369 # Test only.
370 - name: apz.fixed-margin-override.bottom
371   type: RelaxedAtomicInt32
372   value: 0
373   mirror: always
375 # Test only.
376 - name: apz.fixed-margin-override.top
377   type: RelaxedAtomicInt32
378   value: 0
379   mirror: always
381 - name: apz.fling_accel_base_mult
382   type: AtomicFloat
383   value: 1.0f
384   mirror: always
386 - name: apz.fling_accel_supplemental_mult
387   type: AtomicFloat
388   value: 1.0f
389   mirror: always
391 - name: apz.fling_accel_min_fling_velocity
392   type: AtomicFloat
393   value: 1.5f
394   mirror: always
396 - name: apz.fling_accel_min_pan_velocity
397   type: AtomicFloat
398   value: 0.8f
399   mirror: always
401 - name: apz.fling_accel_max_pause_interval_ms
402   type: RelaxedAtomicInt32
403   value: 50
404   mirror: always
406 - name: apz.fling_curve_function_x1
407   type: float
408   value: 0.0f
409   mirror: once
411 - name: apz.fling_curve_function_x2
412   type: float
413   value: 1.0f
414   mirror: once
416 - name: apz.fling_curve_function_y1
417   type: float
418   value: 0.0f
419   mirror: once
421 - name: apz.fling_curve_function_y2
422   type: float
423   value: 1.0f
424   mirror: once
426 - name: apz.fling_curve_threshold_inches_per_ms
427   type: AtomicFloat
428   value: -1.0f
429   mirror: always
431 - name: apz.fling_friction
432   type: AtomicFloat
433   value: 0.002f
434   mirror: always
436 - name: apz.fling_min_velocity_threshold
437   type: AtomicFloat
438   value: 0.5f
439   mirror: always
441 - name: apz.fling_stop_on_tap_threshold
442   type: AtomicFloat
443   value: 0.05f
444   mirror: always
446 - name: apz.fling_stopped_threshold
447   type: AtomicFloat
448   value: 0.01f
449   mirror: always
451 - name: apz.touch_acceleration_factor_x
452   type: float
453   value: 1.0f
454   mirror: always
456 - name: apz.touch_acceleration_factor_y
457   type: float
458   value: 1.0f
459   mirror: always
461 # new scrollbar code for desktop zooming
462 - name: apz.force_disable_desktop_zooming_scrollbars
463   type: RelaxedAtomicBool
464   value: false
465   mirror: always
467 #ifdef MOZ_WIDGET_GTK
468 -   name: apz.gtk.kinetic_scroll.enabled
469     type: RelaxedAtomicBool
470     value: true
471     mirror: always
472     
473 -   name: apz.gtk.touchpad_pinch.enabled
474     type: RelaxedAtomicBool
475     value: false
476     mirror: always
477 #endif
479 - name: apz.keyboard.enabled
480   type: bool
481   value: @IS_NOT_ANDROID@
482   mirror: once
484 - name: apz.keyboard.passive-listeners
485   type: RelaxedAtomicBool
486   value: @IS_NOT_ANDROID@
487   mirror: always
489 - name: apz.max_tap_time
490   type: RelaxedAtomicInt32
491   value: 300
492   mirror: always
494 - name: apz.max_velocity_inches_per_ms
495   type: AtomicFloat
496   value: -1.0f
497   mirror: always
499 - name: apz.max_velocity_queue_size
500   type: uint32_t
501   value: 5
502   mirror: once
504 - name: apz.min_skate_speed
505   type: AtomicFloat
506   value: 1.0f
507   mirror: always
509 - name: apz.minimap.enabled
510   type: RelaxedAtomicBool
511   value: false
512   mirror: always
514 - name: apz.mvm.force-enabled
515   type: RelaxedAtomicBool
516   value: true
517   mirror: always
519 - name: apz.one_touch_pinch.enabled
520   type: RelaxedAtomicBool
521   value: @IS_ANDROID@
522   mirror: always
524 - name: apz.overscroll.enabled
525   type: RelaxedAtomicBool
526   value: false
527   mirror: always
529 - name: apz.overscroll.min_pan_distance_ratio
530   type: AtomicFloat
531   value: 1.0f
532   mirror: always
534 - name: apz.overscroll.stop_distance_threshold
535   type: AtomicFloat
536   value: 5.0f
537   mirror: always
539 - name: apz.paint_skipping.enabled
540   type: RelaxedAtomicBool
541   value: true
542   mirror: always
544 - name: apz.peek_messages.enabled
545   type: RelaxedAtomicBool
546   value: true
547   mirror: always
549 # Fetch displayport updates early from the message queue.
550 - name: apz.pinch_lock.mode
551   type: RelaxedAtomicInt32
552   value: 1
553   mirror: always
555 - name: apz.pinch_lock.scroll_lock_threshold
556   type: AtomicFloat
557   value: 1.0f / 32.0f   # 1/32 inches
558   mirror: always
560 - name: apz.pinch_lock.span_breakout_threshold
561   type: AtomicFloat
562   value: 1.0f / 32.0f   # 1/32 inches
563   mirror: always
565 - name: apz.pinch_lock.span_lock_threshold
566   type: AtomicFloat
567   value: 1.0f / 32.0f   # 1/32 inches
568   mirror: always
570 - name: apz.pinch_lock.buffer_max_age
571   type: int32_t
572   value: 50   # milliseconds
573   mirror: once
575 - name: apz.popups.enabled
576   type: RelaxedAtomicBool
577   value: true
578   mirror: always
580 # Whether to print the APZC tree for debugging.
581 - name: apz.printtree
582   type: RelaxedAtomicBool
583   value: false
584   mirror: always
586 - name: apz.record_checkerboarding
587   type: RelaxedAtomicBool
588   value: @IS_NIGHTLY_BUILD@
589   mirror: always
591 - name: apz.second_tap_tolerance
592   type: AtomicFloat
593   value: 0.5f
594   mirror: always
596 - name: apz.test.fails_with_native_injection
597   type: RelaxedAtomicBool
598   value: false
599   mirror: always
601 - name: apz.test.logging_enabled
602   type: RelaxedAtomicBool
603   value: false
604   mirror: always
606 - name: apz.touch_move_tolerance
607   type: AtomicFloat
608   value: 0.1f
609   mirror: always
611 - name: apz.touch_start_tolerance
612   type: AtomicFloat
613   value: 0.1f
614   mirror: always
616 - name: apz.velocity_bias
617   type: AtomicFloat
618   value: 0.0f
619   mirror: always
621 - name: apz.velocity_relevance_time_ms
622   type: RelaxedAtomicUint32
623   value: 100
624   mirror: always
626 - name: apz.windows.force_disable_direct_manipulation
627   type: RelaxedAtomicBool
628   value: false
629   mirror: always
631 - name: apz.windows.use_direct_manipulation
632   type: RelaxedAtomicBool
633   value: true
634   mirror: always
636 - name: apz.x_skate_highmem_adjust
637   type: AtomicFloat
638   value: 0.0f
639   mirror: always
641 - name: apz.x_skate_size_multiplier
642   type: AtomicFloat
643   value: 1.25f
644   mirror: always
646 - name: apz.x_stationary_size_multiplier
647   type: AtomicFloat
648   value: 1.5f
649   mirror: always
651 - name: apz.y_skate_highmem_adjust
652   type: AtomicFloat
653   value: 0.0f
654   mirror: always
656 - name: apz.y_skate_size_multiplier
657   type: AtomicFloat
658 #if defined(MOZ_WIDGET_ANDROID)
659   value: 1.5f
660 #else
661   value: 3.5f
662 #endif
663   mirror: always
665 - name: apz.y_stationary_size_multiplier
666   type: AtomicFloat
667 #if defined(MOZ_WIDGET_ANDROID)
668   value: 1.5f
669 #else
670   value: 3.5f
671 #endif
672   mirror: always
674 - name: apz.zoom_animation_duration_ms
675   type: RelaxedAtomicInt32
676   value: 250
677   mirror: always
679 - name: apz.scale_repaint_delay_ms
680   type: RelaxedAtomicInt32
681   value: 500
682   mirror: always
684 #---------------------------------------------------------------------------
685 # Prefs starting with "beacon."
686 #---------------------------------------------------------------------------
688 # Is support for Navigator.sendBeacon enabled?
689 - name: beacon.enabled
690   type: bool
691   value: true
692   mirror: always
694 #---------------------------------------------------------------------------
695 # Prefs starting with "bidi."
696 #---------------------------------------------------------------------------
698 # Whether delete and backspace should immediately delete characters not
699 # visually adjacent to the caret, or adjust the visual position of the caret
700 # on the first keypress and delete the character on a second keypress
701 - name: bidi.edit.delete_immediately
702   type: bool
703   value: true
704   mirror: always
706 # Bidi caret movement style:
707 # 0 = logical
708 # 1 = visual
709 # 2 = visual, but logical during selection
710 - name: bidi.edit.caret_movement_style
711   type: int32_t
712 #if !defined(XP_LINUX) && defined(NIGHTLY_BUILD)
713   value: 1
714 #else
715   value: 2 # See Bug 1638240
716 #endif
717   mirror: always
719 #---------------------------------------------------------------------------
720 # Prefs starting with "browser."
721 #---------------------------------------------------------------------------
723 - name: browser.active_color
724   type: String
725   value: "#EE0000"
726   mirror: never
728 - name: browser.anchor_color
729   type: String
730   value: "#0000EE"
731   mirror: never
733 # See http://dev.w3.org/html5/spec/forms.html#attr-fe-autofocus
734 - name: browser.autofocus
735   type: bool
736   value: true
737   mirror: always
739 - name: browser.cache.offline.enable
740   type: bool
741   value: true
742   mirror: always
744 - name: browser.cache.offline.storage.enable
745   type: bool
746   value: false
747   mirror: always
749 - name: browser.cache.disk.enable
750   type: RelaxedAtomicBool
751   value: true
752   mirror: always
754 - name: browser.cache.memory.enable
755   type: RelaxedAtomicBool
756   value: true
757   mirror: always
759 # Limit of recent metadata we keep in memory for faster access, in KB.
760 - name: browser.cache.disk.metadata_memory_limit
761   type: RelaxedAtomicUint32
762   value: 250   # 0.25 MB
763   mirror: always
765 # Does the user want smart-sizing?
766 - name: browser.cache.disk.smart_size.enabled
767   type: RelaxedAtomicBool
768   value: true
769   mirror: always
771 # Disk cache capacity in kilobytes. It's used only when
772 # browser.cache.disk.smart_size.enabled == false
773 - name: browser.cache.disk.capacity
774   type: RelaxedAtomicUint32
775   value: 256000
776   mirror: always
778 # -1 = determine dynamically, 0 = none, n = memory capacity in kilobytes.
779 - name: browser.cache.memory.capacity
780   type: RelaxedAtomicInt32
781   value: -1
782   mirror: always
784 # When smartsizing is disabled we could potentially fill all disk space by
785 # cache data when the disk capacity is not set correctly. To avoid that we
786 # check the free space every time we write some data to the cache. The free
787 # space is checked against two limits. Once the soft limit is reached we start
788 # evicting the least useful entries, when we reach the hard limit writing to
789 # the entry fails.
790 - name: browser.cache.disk.free_space_soft_limit
791   type: RelaxedAtomicUint32
792   value: 5 * 1024   # 5MB
793   mirror: always
795 - name: browser.cache.disk.free_space_hard_limit
796   type: RelaxedAtomicUint32
797   value: 1024    # 1MB
798   mirror: always
800 # The number of chunks we preload ahead of read. One chunk currently has
801 # 256kB.
802 - name: browser.cache.disk.preload_chunk_count
803   type: RelaxedAtomicUint32
804   value: 4    # 1 MB of read ahead
805   mirror: always
807 # Max-size (in KB) for entries in disk cache. Set to -1 for no limit.
808 # (Note: entries bigger than 1/8 of disk-cache are never cached)
809 - name: browser.cache.disk.max_entry_size
810   type: RelaxedAtomicUint32
811   value: 50 * 1024    # 50 MB
812   mirror: always
814 # Max-size (in KB) for entries in memory cache. Set to -1 for no limit.
815 # (Note: entries bigger than than 90% of the mem-cache are never cached.)
816 - name: browser.cache.memory.max_entry_size
817   type: RelaxedAtomicInt32
818   value: 5 * 1024
819   mirror: always
821 # Memory limit (in kB) for new cache data not yet written to disk. Writes to
822 # the cache are buffered and written to disk on background with low priority.
823 # With a slow persistent storage these buffers may grow when data is coming
824 # fast from the network. When the amount of unwritten data is exceeded, new
825 # writes will simply fail. We have two buckets, one for important data
826 # (priority) like html, css, fonts and js, and one for other data like images,
827 # video, etc.
828 # Note: 0 means no limit.
829 - name: browser.cache.disk.max_chunks_memory_usage
830   type: RelaxedAtomicUint32
831   value: 40 * 1024
832   mirror: always
833 - name: browser.cache.disk.max_priority_chunks_memory_usage
834   type: RelaxedAtomicUint32
835   value: 40 * 1024
836   mirror: always
838 # Number of seconds the cache spends writing pending data and closing files
839 # after shutdown has been signalled. Past that time data is not written and
840 # files are left open for the OS to clean up.
841 - name: browser.cache.max_shutdown_io_lag
842   type: RelaxedAtomicUint32
843   value: 2
844   mirror: always
846 # A percentage limit for media content type in the disk cache. When some entries
847 # need to be evicted and media is over the limit, it's evicted first.
848 - name: browser.cache.disk.content_type_media_limit
849   type: RelaxedAtomicInt32
850   value: 50
851   mirror: always
853 # How often to validate document in cache
854 #   0 = once-per-session,
855 #   1 = each-time,
856 #   2 = never,
857 #   3 = when-appropriate/automatically
858 - name: browser.cache.check_doc_frequency
859   type: RelaxedAtomicUint32
860   value: 3
861   mirror: always
863 - name: browser.contentblocking.database.enabled
864   type: bool
865   value: false
866   mirror: always
868 # How many recent block/unblock actions per origins we remember in the
869 # Content Blocking log for each top-level window.
870 - name: browser.contentblocking.originlog.length
871   type: uint32_t
872   value: 32
873   mirror: always
875 - name: browser.display.background_color
876   type: String
877   value: "#FFFFFF"
878   mirror: never
880 # 0 = always, except in high contrast mode
881 # 1 = always
882 # 2 = never
884 # Default to 0 on windows, 1 elsewhere.
885 - name: browser.display.document_color_use
886   type: RelaxedAtomicUint32
887 #ifdef XP_WIN
888   value: 0
889 #else
890   value: 1
891 #endif
892   mirror: always
893   rust: true
895 # This pref dictates whether or not backplates and background images
896 # are to be drawn, when in high-contrast mode:
897 #   false: do not draw backplates or render background images
898 #   true: render background images and draw backplates
899 # This condition is only considered when high-contrast mode is enabled
900 # in Firefox, ie. when the user has:
901 #   (1) mUseAccessibilityMode set to true (Widows high-contrast mode is on)
902 #       AND browser.display.document_color_use set to 0
903 #       (only with high-contrast themes) OR
904 #   (2) browser.display.document_color_use set to 2 (always)
905 - name: browser.display.permit_backplate
906   type: RelaxedAtomicBool
907   value: true
908   mirror: always
909   rust: true
911 # Whether we should suppress the background-image of the canvas (the root
912 # frame) if we're in forced colors mode.
914 # This is important because some sites use background-image with a plain color
915 # and it causes undesirable results in high-contrast mode.
917 # See bug 1614921 for example.
918 - name: browser.display.suppress_canvas_background_image_on_forced_colors
919   type: bool
920   value: true
921   mirror: always
923 - name: browser.display.focus_ring_on_anything
924   type: bool
925   value: false
926   mirror: always
928 - name: browser.display.focus_ring_width
929   type: uint32_t
930   value: 1
931   mirror: always
933 - name: browser.display.focus_background_color
934   type: String
935   value: "#117722"
936   mirror: never
938 # Focus ring border style.
939 # 0 = solid border, 1 = dotted border
940 - name: browser.display.focus_ring_style
941   type: uint32_t
942   value: 1
943   mirror: always
945 - name: browser.display.focus_text_color
946   type: String
947   value: "#ffffff"
948   mirror: never
949 - name: browser.display.foreground_color
950   type: String
951   value: "#000000"
952   mirror: never
954 # Whether focus rings are always shown by default.
956 # This is the initial value of nsWindowRoot::mShowFocusRings, but it can be
957 # overridden by system preferences.  For Windows, we start with default-true,
958 # and by default the UISF_HIDEFOCUS message comes by and sets it to false.
959 - name: browser.display.show_focus_rings
960   type: bool
961 #ifndef XP_WIN
962   value: false
963 #else
964   value: true
965 #endif
966   mirror: always
968 # Whether we should always enable focus rings after focus was moved by keyboard.
970 # This behavior matches both historical and GTK / Windows focus behavior.
972 # :focus-visible is intended to provide better heuristics than this, so for now
973 # we make this false whenever layout.css.focus-visible.enabled is enabled by
974 # default.
975 - name: browser.display.always_show_rings_after_key_focus
976   type: bool
977   value: false
978   mirror: always
980 # In theory: 0 = never, 1 = quick, 2 = always, though we always just use it as
981 # a bool!
982 - name: browser.display.use_document_fonts
983   type: RelaxedAtomicInt32
984   value: 1
985   mirror: always
986   rust: true
988 - name: browser.display.use_focus_colors
989   type: bool
990   value: false
991   mirror: always
993 - name: browser.display.use_system_colors
994   type: bool
995   value: false
996   mirror: always
998 - name: browser.dom.window.dump.enabled
999   type: RelaxedAtomicBool
1000   value: @IS_NOT_MOZILLA_OFFICIAL@
1001   mirror: always
1003 - name: browser.download.sanitize_non_media_extensions
1004   type: bool
1005   value: true
1006   mirror: always
1008 # Image document's automatic image sizing.
1009 - name: browser.enable_automatic_image_resizing
1010   type: bool
1011   value: true
1012   mirror: always
1014 # Image document's click-to-resize.
1015 - name: browser.enable_click_image_resizing
1016   type: bool
1017   value: @IS_NOT_ANDROID@
1018   mirror: always
1020 # The max url length we'll store in history.
1022 # The default value is mostly a guess based on various facts:
1024 # * IE didn't support urls longer than 2083 chars
1025 # * Sitemaps protocol used to support a maximum of 2048 chars
1026 # * Various SEO guides suggest to not go over 2000 chars
1027 # * Various apps/services are known to have issues over 2000 chars
1028 # * RFC 2616 - HTTP/1.1 suggests being cautious about depending
1029 #   on URI lengths above 255 bytes
1031 - name: browser.history.maxUrlLength
1032   type: uint32_t
1033   value: 2000
1034   mirror: always
1036 # Render animations and videos as a solid color
1037 - name: browser.measurement.render_anims_and_video_solid
1038   type: RelaxedAtomicBool
1039   value: false
1040   mirror: always
1042 - name: browser.navigation.requireUserInteraction
1043   type: bool
1044   value: false
1045   mirror: always
1047 # Indicates if about:newtab shows content (enabled) or just blank.
1048 - name: browser.newtabpage.enabled
1049   type: bool
1050   value: true
1051   mirror: always
1053 # Open PDFs in Edge with the --app flag if it is the default.
1054 - name: browser.pdf.launchDefaultEdgeAsApp
1055   type: bool
1056   value: true
1057   mirror: always
1059 # Force usage of in-memory (rather than file on disk) media cache for video streaming when private browsing
1060 - name: browser.privatebrowsing.forceMediaMemoryCache
1061   type: bool
1062   value: false
1063   mirror: always
1065 # Blocked plugin content
1066 - name: browser.safebrowsing.blockedURIs.enabled
1067   type: bool
1068   value: true
1069   mirror: always
1071 # Malware protection
1072 - name: browser.safebrowsing.malware.enabled
1073   type: bool
1074   value: true
1075   mirror: always
1077 # Password protection
1078 - name: browser.safebrowsing.passwords.enabled
1079   type: bool
1080   value: false
1081   mirror: always
1083 # Phishing protection
1084 - name: browser.safebrowsing.phishing.enabled
1085   type: bool
1086   value: true
1087   mirror: always
1089 # Maximum size for an array to store the safebrowsing prefixset.
1090 - name: browser.safebrowsing.prefixset_max_array_size
1091   type: RelaxedAtomicUint32
1092   value: 512*1024
1093   mirror: always
1095 # ContentSessionStore prefs
1096 # Maximum number of bytes of DOMSessionStorage data we collect per origin.
1097 - name: browser.sessionstore.dom_storage_limit
1098   type: uint32_t
1099   value: 2048
1100   mirror: always
1102 # If set, use DocumentChannel to directly initiate loads entirely
1103 # from parent-process BrowsingContexts
1104 - name: browser.tabs.documentchannel.parent-controlled
1105   type: bool
1106   value: false
1107   mirror: always
1109 - name: browser.tabs.remote.desktopbehavior
1110   type: bool
1111   value: false
1112   mirror: always
1114 - name: browser.tabs.remote.force-paint
1115   type: bool
1116   value: true
1117   mirror: always
1119 # When this pref is enabled document loads with a mismatched
1120 # Cross-Origin-Embedder-Policy header will fail to load
1121 - name: browser.tabs.remote.useCrossOriginEmbedderPolicy
1122   type: RelaxedAtomicBool
1123 #if !defined(ANDROID)
1124   value: true
1125 #else
1126   value: false # Blocked by DocumentChannel, see Bug 1589982.
1127 #endif
1128   mirror: always
1130 # When this pref is enabled top level loads with a mismatched
1131 # Cross-Origin-Opener-Policy header will be loaded in a separate process.
1132 - name: browser.tabs.remote.useCrossOriginOpenerPolicy
1133   type: RelaxedAtomicBool
1134 #if !defined(ANDROID)
1135   value: true
1136 #else
1137   value: false # Blocked by DocumentChannel, see Bug 1589982.
1138 #endif
1139   mirror: always
1141 # When true, zooming will be enabled on all sites, even ones that declare
1142 # user-scalable=no.
1143 - name: browser.ui.zoom.force-user-scalable
1144   type: RelaxedAtomicBool
1145   value: false
1146   mirror: always
1148 - name: browser.underline_anchors
1149   type: bool
1150   value: true
1151   mirror: always
1153 - name: browser.viewport.desktopWidth
1154   type: RelaxedAtomicInt32
1155   value: 980
1156   mirror: always
1158 - name: browser.visited_color
1159   type: String
1160   value: "#551A8B"
1161   mirror: never
1163 #---------------------------------------------------------------------------
1164 # Prefs starting with "canvas."
1165 #---------------------------------------------------------------------------
1167 # Limit for the canvas image cache. 0 means unlimited.
1168 - name: canvas.image.cache.limit
1169   type: int32_t
1170   value: 0
1171   mirror: always
1173 # Add support for canvas path objects
1174 - name: canvas.path.enabled
1175   type: bool
1176   value: true
1177   mirror: always
1179 - name: canvas.capturestream.enabled
1180   type: bool
1181   value: true
1182   mirror: always
1184 # Is support for CanvasRenderingContext2D.filter enabled?
1185 - name: canvas.filters.enabled
1186   type: bool
1187   value: true
1188   mirror: always
1190 # Provide ability to turn on support for canvas focus rings.
1191 - name: canvas.focusring.enabled
1192   type: bool
1193   value: true
1194   mirror: always
1196 # Is support for CanvasRenderingContext2D's hitRegion APIs enabled?
1197 - name: canvas.hitregions.enabled
1198   type: bool
1199   value: false
1200   mirror: always
1202 # Is support for CanvasRenderingContext2D's createConicGradient API enabled?
1203 - name: canvas.createConicGradient.enabled
1204   type: RelaxedAtomicBool
1205   value: @IS_NIGHTLY_BUILD@
1206   mirror: always
1208 # Provide ability to turn on support for canvas mozGetAsFile API.
1209 - name: canvas.mozgetasfile.enabled
1210   type: bool
1211   value: false
1212   mirror: always
1214 #---------------------------------------------------------------------------
1215 # Prefs starting with "channelclassifier."
1216 #---------------------------------------------------------------------------
1218 - name: channelclassifier.allowlist_example
1219   type: bool
1220   value: false
1221   mirror: always
1223 #---------------------------------------------------------------------------
1224 # Prefs starting with "clipboard."
1225 #---------------------------------------------------------------------------
1227 # Clipboard behavior.
1228 - name: clipboard.autocopy
1229   type: bool
1230 #if !defined(ANDROID) && !defined(XP_MACOSX) && defined(XP_UNIX)
1231   value: true
1232 #else
1233   value: false
1234 #endif
1235   mirror: always
1237 #---------------------------------------------------------------------------
1238 # Prefs starting with "consoleservice."
1239 #---------------------------------------------------------------------------
1241 #if defined(ANDROID)
1242   # Disable sending console to logcat on release builds.
1243 -   name: consoleservice.logcat
1244     type: RelaxedAtomicBool
1245     value: @IS_NOT_RELEASE_OR_BETA@
1246     mirror: always
1247 #endif
1249 #---------------------------------------------------------------------------
1250 # Prefs starting with "content."
1251 #---------------------------------------------------------------------------
1253 - name: content.cors.disable
1254   type: bool
1255   value: false
1256   mirror: always
1258 # Back off timer notification after count.
1259 # -1 means never.
1260 - name: content.notify.backoffcount
1261   type: int32_t
1262   value: -1
1263   mirror: always
1265 # Notification interval in microseconds.
1266 # The notification interval has a dramatic effect on how long it takes to
1267 # initially display content for slow connections. The current value
1268 # provides good incremental display of content without causing an increase
1269 # in page load time. If this value is set below 1/10 of a second it starts
1270 # to impact page load performance.
1271 # See bugzilla bug 72138 for more info.
1272 - name: content.notify.interval
1273   type: int32_t
1274   value: 120000
1275   mirror: always
1277 # Do we notify based on time?
1278 - name: content.notify.ontimer
1279   type: bool
1280   value: true
1281   mirror: always
1283 # How many times to deflect in interactive mode.
1284 - name: content.sink.interactive_deflect_count
1285   type: int32_t
1286   value: 0
1287   mirror: always
1289 # How many times to deflect in perf mode.
1290 - name: content.sink.perf_deflect_count
1291   type: int32_t
1292   value: 200
1293   mirror: always
1295 # Parse mode for handling pending events.
1296 # 0 = don't check for pending events
1297 # 1 = don't deflect if there are pending events
1298 # 2 = bail if there are pending events
1299 - name: content.sink.pending_event_mode
1300   type: int32_t
1301 # ifdef XP_WIN
1302   value: 1
1303 # else
1304   value: 0
1305 # endif
1306   mirror: always
1308 # How often to probe for pending events. 1 = every token.
1309 - name: content.sink.event_probe_rate
1310   type: int32_t
1311   value: 1
1312   mirror: always
1314 # How long to stay off the event loop in interactive mode.
1315 - name: content.sink.interactive_parse_time
1316   type: int32_t
1317   value: 3000
1318   mirror: always
1320 # How long to stay off the event loop in perf mode.
1321 - name: content.sink.perf_parse_time
1322   type: int32_t
1323   value: 360000
1324   mirror: always
1326 #  How long to be in interactive mode after an event.
1327 - name: content.sink.interactive_time
1328   type: uint32_t
1329   value: 750000
1330   mirror: always
1332 # How long to stay in perf mode after initial loading.
1333 - name: content.sink.initial_perf_time
1334   type: uint32_t
1335   value: 2000000
1336   mirror: always
1338 # Should we switch between perf-mode and interactive-mode?
1339 # 0 = Switch
1340 # 1 = Interactive mode
1341 # 2 = Perf mode
1342 - name: content.sink.enable_perf_mode
1343   type: int32_t
1344   value: 0
1345   mirror: always
1347 #---------------------------------------------------------------------------
1348 # Prefs starting with "converter."
1349 #---------------------------------------------------------------------------
1351 # Whether we include ruby annotation in the text despite whether it
1352 # is requested. This was true because we didn't explicitly strip out
1353 # annotations. Set false by default to provide a better behavior, but
1354 # we want to be able to pref-off it if user doesn't like it.
1355 - name: converter.html2txt.always_include_ruby
1356   type: bool
1357   value: false
1358   mirror: always
1360 #---------------------------------------------------------------------------
1361 # Prefs starting with "datareporting."
1362 #---------------------------------------------------------------------------
1364 - name: datareporting.healthreport.uploadEnabled
1365   type: RelaxedAtomicBool
1366   value: false
1367   mirror: always
1368   rust: true
1370 #---------------------------------------------------------------------------
1371 # Prefs starting with "device."
1372 #---------------------------------------------------------------------------
1374 # Is support for the device sensors API enabled?
1375 - name: device.sensors.enabled
1376   type: bool
1377   value: true
1378   mirror: always
1380 - name: device.sensors.ambientLight.enabled
1381   type: bool
1382   value: false
1383   mirror: always
1385 - name: device.sensors.motion.enabled
1386   type: bool
1387   value: true
1388   mirror: always
1390 - name: device.sensors.orientation.enabled
1391   type: bool
1392   value: true
1393   mirror: always
1395 - name: device.sensors.proximity.enabled
1396   type: bool
1397   value: false
1398   mirror: always
1400 - name: device.sensors.test.events
1401   type: bool
1402   value: false
1403   mirror: always
1405 #---------------------------------------------------------------------------
1406 # Prefs starting with "devtools."
1407 #---------------------------------------------------------------------------
1409 # Tells if DevTools have been explicitely enabled by the user. This pref
1410 # allows to disable all features related to DevTools for users that never use
1411 # them. Until bug 1361080 lands, we always consider them enabled.
1412 - name: devtools.enabled
1413   type: RelaxedAtomicBool
1414   value: true
1415   mirror: always
1417 - name: devtools.console.stdout.chrome
1418   type: RelaxedAtomicBool
1419   value: @IS_NOT_MOZILLA_OFFICIAL@
1420   mirror: always
1422 - name: devtools.console.stdout.content
1423   type: RelaxedAtomicBool
1424   value: false
1425   mirror: always
1427 - name: devtools.toolbox.force-chrome-prefs
1428   type: RelaxedAtomicBool
1429   value: true
1430   mirror: always
1432 #---------------------------------------------------------------------------
1433 # Prefs starting with "docshell."
1434 #---------------------------------------------------------------------------
1436 # Used to indicate whether session history listeners should be notified
1437 # about content viewer eviction. Used only for testing.
1438 - name: docshell.shistory.testing.bfevict
1439   type: bool
1440   value: false
1441   mirror: always
1443 # If true, pages with an opener won't be bfcached.
1444 - name: docshell.shistory.bfcache.require_no_opener
1445   type: bool
1446   value: false
1447   mirror: always
1449 # If true, page with beforeunload or unload event listeners can be bfcached.
1450 - name: docshell.shistory.bfcache.allow_unload_listeners
1451   type: bool
1452   value: false
1453   mirror: always
1455 #---------------------------------------------------------------------------
1456 # Prefs starting with "dom."
1457 #---------------------------------------------------------------------------
1459 # Whether window.mozPaintCount is exposed to the web.
1460 - name: dom.mozPaintCount.enabled
1461   type: bool
1462   value: false
1463   mirror: always
1465 # Allow cut/copy
1466 - name: dom.allow_cut_copy
1467   type: bool
1468   value: true
1469   mirror: always
1471 - name: dom.allow_XUL_XBL_for_file
1472   type: bool
1473   value: false
1474   mirror: always
1476 # Checks if offscreen animation throttling is enabled.
1477 - name: dom.animations.offscreen-throttling
1478   type: bool
1479   value: true
1480   mirror: always
1482 # Is support for automatically removing replaced filling animations enabled?
1483 - name: dom.animations-api.autoremove.enabled
1484   type: bool
1485   value: true
1486   mirror: always
1488 # Is support for composite operations from the Web Animations API enabled?
1489 - name: dom.animations-api.compositing.enabled
1490   type: bool
1491   value: true
1492   mirror: always
1494 # Is support for the core interfaces of Web Animations API enabled?
1495 - name: dom.animations-api.core.enabled
1496   type: bool
1497   value: true
1498   mirror: always
1500 # Is support for Document.getAnimations() and Element.getAnimations()
1501 # supported?
1502 - name: dom.animations-api.getAnimations.enabled
1503   type: bool
1504   value: true
1505   mirror: always
1507 # Is support for animations from the Web Animations API without 0%/100%
1508 # keyframes enabled?
1509 - name: dom.animations-api.implicit-keyframes.enabled
1510   type: bool
1511   value: true
1512   mirror: always
1514 # Is support for timelines from the Web Animations API enabled?
1515 - name: dom.animations-api.timelines.enabled
1516   type: bool
1517   value: true
1518   mirror: always
1520 # Synchronize transform animations with geometric animations on the
1521 # main thread.
1522 - name: dom.animations.mainthread-synchronization-with-geometric-animations
1523   type: bool
1524   value: @IS_NOT_NIGHTLY_BUILD@
1525   mirror: always
1527 # Is support for AudioWorklet enabled?
1528 - name: dom.audioworklet.enabled
1529   type: bool
1530   value: true
1531   mirror: always
1533 # Is support for Navigator.getBattery enabled?
1534 - name: dom.battery.enabled
1535   type: bool
1536   value: true
1537   mirror: always
1539 # Block multiple external protocol URLs in iframes per single event.
1540 - name: dom.block_external_protocol_in_iframes
1541   type: bool
1542   value: true
1543   mirror: always
1545 # Block Insecure downloads from Secure Origins
1546 - name: dom.block_download_insecure
1547   type: bool
1548   value: @IS_NIGHTLY_BUILD@
1549   mirror: always
1551 # Block all downloads in iframes with the sandboxed attribute
1552 - name: dom.block_download_in_sandboxed_iframes
1553   type: bool
1554   value: true
1555   mirror: always
1557 # Block multiple window.open() per single event.
1558 - name: dom.block_multiple_popups
1559   type: bool
1560   value: true
1561   mirror: always
1563 # The maximum number of popup that is allowed to be opened. Set to -1 for no
1564 # limit.
1565 - name: dom.popup_maximum
1566   type: int32_t
1567   value: 20
1568   mirror: always
1570 # Whether window.location.reload() and window.history.go(0) should be blocked
1571 # if called directly from a window resize event handler.
1573 # This used to be necessary long ago to prevent terrible UX when using stuff
1574 # like TypeAheadFind (bug 258917), but it also causes compat issues on mobile
1575 # (bug 1570566).
1577 # So for now disable it on Android and Desktop Nightly, to see if we have any
1578 # desktop regression before removing it completely. Note that this means that
1579 # non-nightly RDM behaves different than Android in this case.
1580 - name: dom.block_reload_from_resize_event_handler
1581   type: bool
1582 #if defined(MOZ_WIDGET_ANDROID) || defined(NIGHTLY_BUILD)
1583   value: false
1584 #else
1585   value: true
1586 #endif
1587   mirror: always
1589 # SW Cache API
1590 - name: dom.caches.enabled
1591   type: RelaxedAtomicBool
1592   value: true
1593   mirror: always
1595 - name: dom.caches.testing.enabled
1596   type: RelaxedAtomicBool
1597   value: false
1598   mirror: always
1600 # Disable capture attribute for input elements; only supported on GeckoView.
1601 - name: dom.capture.enabled
1602   type: bool
1603   value: false
1604   mirror: always
1606 # Allow control characters appear in composition string.
1607 # When this is false, control characters except
1608 # CHARACTER TABULATION (horizontal tab) are removed from
1609 # both composition string and data attribute of compositionupdate
1610 # and compositionend events.
1611 - name: dom.compositionevent.allow_control_characters
1612   type: bool
1613   value: false
1614   mirror: always
1616 # Is support for CSSPseudoElement enabled?
1617 - name: dom.css_pseudo_element.enabled
1618   type: bool
1619   value: false
1620   mirror: always
1622 # After how many seconds we allow external protocol URLs in iframe when not in
1623 # single events
1624 - name: dom.delay.block_external_protocol_in_iframes
1625   type: uint32_t
1626   value: 10   # in seconds
1627   mirror: always
1629 # Whether the above pref has any effect at all.
1630 - name: dom.delay.block_external_protocol_in_iframes.enabled
1631   type: bool
1632   value: @IS_NOT_NIGHTLY_BUILD@
1633   mirror: always
1635 # HTML <dialog> element
1636 - name: dom.dialog_element.enabled
1637   type: bool
1638   value: @IS_NIGHTLY_BUILD@
1639   mirror: always
1641 # Only propagate the open window click permission if the setTimeout() is equal
1642 # to or less than this value.
1643 - name: dom.disable_open_click_delay
1644   type: int32_t
1645   value: 1000
1646   mirror: always
1648 - name: dom.disable_open_during_load
1649   type: bool
1650   value: false
1651   mirror: always
1653 - name: dom.disable_beforeunload
1654   type: bool
1655   value: false
1656   mirror: always
1658 - name: dom.require_user_interaction_for_beforeunload
1659   type: bool
1660   value: true
1661   mirror: always
1663 # If set this to true, `Document.execCommand` may be performed nestedly.
1664 # Otherwise, nested calls just return false.
1665 - name: dom.document.exec_command.nested_calls_allowed
1666   type: bool
1667   value: false
1668   mirror: always
1670 - name: dom.enable_window_print
1671   type: bool
1672   value: @IS_NOT_ANDROID@
1673   mirror: always
1675 - name: dom.element.transform-getters.enabled
1676   type: bool
1677   value: false
1678   mirror: always
1680 # Is support for Performance.mozMemory enabled?
1681 - name: dom.enable_memory_stats
1682   type: bool
1683   value: false
1684   mirror: always
1686 # Enable Performance API
1687 # Whether nonzero values can be returned from performance.timing.*
1688 - name: dom.enable_performance
1689   type: RelaxedAtomicBool
1690   value: true
1691   mirror: always
1693 # Enable Performance Observer API
1694 - name: dom.enable_performance_observer
1695   type: RelaxedAtomicBool
1696   value: true
1697   mirror: always
1699 # Whether resource timing will be gathered and returned by performance.GetEntries*
1700 - name: dom.enable_resource_timing
1701   type: bool
1702   value: true
1703   mirror: always
1705 # Whether performance.GetEntries* will contain an entry for the active document
1706 - name: dom.enable_performance_navigation_timing
1707   type: bool
1708   value: true
1709   mirror: always
1711 # If this is true, it's allowed to fire "cut", "copy" and "paste" events.
1712 # Additionally, "input" events may expose clipboard content when inputType
1713 # is "insertFromPaste" or something.
1714 - name: dom.event.clipboardevents.enabled
1715   type: bool
1716   value: true
1717   mirror: always
1719 # Whether touch event listeners are passive by default.
1720 - name: dom.event.default_to_passive_touch_listeners
1721   type: bool
1722   value: true
1723   mirror: always
1725 # Whether wheel listeners are passive by default.
1726 - name: dom.event.default_to_passive_wheel_listeners
1727   type: bool
1728   value: true
1729   mirror: always
1731 # Whether WheelEvent should return pixels instead of lines for
1732 # WheelEvent.deltaX/Y/Z, when deltaMode hasn't been checked.
1734 # Other browsers don't use line deltas and websites forget to check for it, see
1735 # bug 1392460.
1736 - name: dom.event.wheel-deltaMode-lines.disabled
1737   type: bool
1738   value: @IS_NIGHTLY_BUILD@
1739   mirror: always
1741 # Mostly for debugging. Whether we should do the same as
1742 # dom.event.wheel-deltaMode-lines.disabled, but unconditionally rather than
1743 # only when deltaMode hasn't been checked.
1744 - name: dom.event.wheel-deltaMode-lines.always-disabled
1745   type: bool
1746   value: false
1747   mirror: always
1749 # When dom.event.wheel-deltaMode-lines.disabled is true, this is the lines to
1750 # pixels multiplier that gets used.
1752 # The value here is taken from PIXELS_PER_LINE_SCALE from pdf.js.
1753 - name: dom.event.wheel-deltaMode-lines-to-pixel-scale
1754   type: uint32_t
1755   value: 30
1756   mirror: always
1758 #if defined(XP_MACOSX)
1759 # Whether to disable treating ctrl click as right click
1760 - name: dom.event.treat_ctrl_click_as_right_click.disabled
1761   type: bool
1762   value: @IS_NIGHTLY_BUILD@
1763   mirror: always
1764 #endif
1766 # Whether .offset{X,Y} for events targeted at SVG nodes returns bounds relative
1767 # to the outer SVG.
1768 - name: dom.events.offset-in-svg-relative-to-svg-root
1769   type: bool
1770   value: true
1771   mirror: always
1773 # Enable clipboard readText() and writeText() by default
1774 - name: dom.events.asyncClipboard
1775   type: bool
1776   value: true
1777   mirror: always
1779 # Disable clipboard read() by default
1780 - name: dom.events.asyncClipboard.dataTransfer
1781   type: bool
1782   value: false
1783   mirror: always
1785 # Disable ClipboardItem and clipboard.write by default
1786 - name: dom.events.asyncClipboard.clipboardItem
1787   type: bool
1788   value: false
1789   mirror: always
1791 # Should only be enabled in tests.
1792 # Access with Clipboard::IsTestingPrefEnabled().
1793 - name: dom.events.testing.asyncClipboard
1794   type: bool
1795   value: false
1796   mirror: always
1797   do_not_use_directly: true
1799 # This pref controls whether or not the `protected` dataTransfer state is
1800 # enabled. If the `protected` dataTransfer stae is disabled, then the
1801 # DataTransfer will be read-only whenever it should be protected, and will not
1802 # be disconnected after a drag event is completed.
1803 - name: dom.events.dataTransfer.protected.enabled
1804   type: bool
1805   value: false
1806   mirror: always
1808 # User interaction timer interval, in ms
1809 - name: dom.events.user_interaction_interval
1810   type: uint32_t
1811   value: 5000
1812   mirror: always
1814 # Whether to try to compress touchmove events on IPC layer.
1815 - name: dom.events.compress.touchmove
1816   type: bool
1817   value: true
1818   mirror: always
1820 # Whether to expose test interfaces of various sorts
1821 - name: dom.expose_test_interfaces
1822   type: bool
1823   value: false
1824   mirror: always
1826 - name: dom.fetchObserver.enabled
1827   type: RelaxedAtomicBool
1828   value: false
1829   mirror: always
1831 # Allow the content process to create a File from a path. This is allowed just
1832 # on parent process, on 'file' Content process, or for testing.
1833 - name: dom.file.createInChild
1834   type: RelaxedAtomicBool
1835   value: false
1836   mirror: always
1838 # Enable formData event
1839 - name: dom.formdata.event.enabled
1840   type: bool
1841   value: true
1842   mirror: always
1844 # Support @autocomplete values for form autofill feature.
1845 - name: dom.forms.autocomplete.formautofill
1846   type: bool
1847   value: false
1848   mirror: always
1850 # This pref just controls whether we format the number with grouping separator
1851 # characters when the internal value is set or updated. It does not stop the
1852 # user from typing in a number and using grouping separators.
1853 - name: dom.forms.number.grouping
1854   type: bool
1855   value: false
1856   mirror: always
1858 # Enable the form.requestSubmit API
1859 - name: dom.forms.requestsubmit.enabled
1860   type: bool
1861   value: true
1862   mirror: always
1864 # Whether the Gamepad API is enabled
1865 - name: dom.gamepad.enabled
1866   type: bool
1867   value: true
1868   mirror: always
1870 # Is Gamepad Extension API enabled?
1871 - name: dom.gamepad.extensions.enabled
1872   type: bool
1873   value: true
1874   mirror: always
1876 # Is LightIndicator API enabled in Gamepad Extension API?
1877 - name: dom.gamepad.extensions.lightindicator
1878   type: bool
1879   value: false
1880   mirror: always
1882 # Is MultiTouch API enabled in Gamepad Extension API?
1883 - name: dom.gamepad.extensions.multitouch
1884   type: bool
1885   value: false
1886   mirror: always
1888 # Is Gamepad vibrate haptic feedback function enabled?
1889 - name: dom.gamepad.haptic_feedback.enabled
1890   type: bool
1891   value: true
1892   mirror: always
1894 - name: dom.gamepad.non_standard_events.enabled
1895   type: bool
1896   value: @IS_NOT_RELEASE_OR_BETA@
1897   mirror: always
1899 - name: dom.gamepad.test.enabled
1900   type: bool
1901   value: false
1902   mirror: always
1904 # W3C draft ImageCapture API
1905 - name: dom.imagecapture.enabled
1906   type: bool
1907   value: false
1908   mirror: always
1910 # <img loading="lazy">
1912 # See https://github.com/whatwg/html/pull/3752
1913 - name: dom.image-lazy-loading.enabled
1914   type: RelaxedAtomicBool
1915   value: true
1916   mirror: always
1918 # The root margin for image lazy loading, defined as four (value, percentage)
1919 # pairs.
1921 # (0px, 0px, 0px, 0px) by default, for now. We could also consider an
1922 # adaptative version of this.
1923 - name: dom.image-lazy-loading.root-margin.top
1924   type: float
1925   value: 300
1926   mirror: always
1928 - name: dom.image-lazy-loading.root-margin.top.percentage
1929   type: bool
1930   value: false
1931   mirror: always
1933 - name: dom.image-lazy-loading.root-margin.bottom
1934   type: float
1935   value: 300
1936   mirror: always
1938 - name: dom.image-lazy-loading.root-margin.bottom.percentage
1939   type: bool
1940   value: false
1941   mirror: always
1943 - name: dom.image-lazy-loading.root-margin.left
1944   type: float
1945   value: 300
1946   mirror: always
1948 - name: dom.image-lazy-loading.root-margin.left.percentage
1949   type: bool
1950   value: false
1951   mirror: always
1953 - name: dom.image-lazy-loading.root-margin.right
1954   type: float
1955   value: 300
1956   mirror: always
1958 - name: dom.image-lazy-loading.root-margin.right.percentage
1959   type: bool
1960   value: false
1961   mirror: always
1963 # Enable passing the "storage" option to indexedDB.open.
1964 - name: dom.indexedDB.storageOption.enabled
1965   type: RelaxedAtomicBool
1966   value: false
1967   mirror: always
1969 # Enable indexedDB in private browsing mode.
1970 - name: dom.indexedDB.privateBrowsing.enabled
1971   type: RelaxedAtomicBool
1972   value: false
1973   mirror: always
1975 - name: dom.input_events.beforeinput.enabled
1976   type: bool
1977   value: true
1978   mirror: always
1980 # Whether innerWidth / innerHeight return rounded or fractional sizes.
1982 # NOTE(emilio): Fractional sizes are not web-compatible, see the regressions
1983 # from bug 1676843, but we want to expose the fractional sizes (probably in
1984 # another API) one way or another, see [1], so we're keeping the code for the
1985 # time being.
1987 # [1]: https://github.com/w3c/csswg-drafts/issues/5260
1988 - name: dom.innerSize.rounded
1989   type: bool
1990   value: true
1991   mirror: always
1993 # Whether we conform to Input Events Level 1 or Input Events Level 2.
1994 # true:  conforming to Level 1
1995 # false: conforming to Level 2
1996 - name: dom.input_events.conform_to_level_1
1997   type: bool
1998   value: true
1999   mirror: always
2001 # Whether we allow BrowsingContextGroup to suspend input events
2002 - name: dom.input_events.canSuspendInBCG.enabled
2003   type: bool
2004   value: false
2005   mirror: always
2007 # Enable not moving the cursor to end when a text input or textarea has .value
2008 # set to the value it already has.  By default, enabled.
2009 - name: dom.input.skip_cursor_move_for_same_value_set
2010   type: bool
2011   value: true
2012   mirror: always
2014 - name: dom.IntersectionObserver.enabled
2015   type: bool
2016   value: true
2017   mirror: always
2019 - name: dom.IntersectionObserverExplicitDocumentRoot.enabled
2020   type: bool
2021   value: true
2022   mirror: always
2024 - name: dom.ipc.cancel_content_js_when_navigating
2025   type: bool
2026   value: true
2027   mirror: always
2029 # How often to check for CPOW timeouts (ms). CPOWs are only timed
2030 # out by the hang monitor.
2031 - name: dom.ipc.cpow.timeout
2032   type: uint32_t
2033   value: 500
2034   mirror: always
2036 #ifdef MOZ_ENABLE_FORKSERVER
2037 - name: dom.ipc.forkserver.enable
2038   type: bool
2039   value: false
2040   mirror: once
2041 #endif
2043 # Whether or not to collect a paired minidump when force-killing a
2044 # content process.
2045 - name: dom.ipc.tabs.createKillHardCrashReports
2046   type: bool
2047   value: @IS_NOT_RELEASE_OR_BETA@
2048   mirror: once
2050 # Allow Flash async drawing mode in 64-bit release builds.
2051 - name: dom.ipc.plugins.asyncdrawing.enabled
2052   type: RelaxedAtomicBool
2053   value: true
2054   mirror: always
2056 # How long we wait before unloading an idle plugin process.
2057 - name: dom.ipc.plugins.unloadTimeoutSecs
2058   type: RelaxedAtomicUint32
2059   value: 30
2060   mirror: always
2062 - name: dom.ipc.plugins.allow_dxgi_surface
2063   type: bool
2064   value: true
2065   mirror: always
2067 # Enable e10s hang monitoring (slow script checking and plugin hang detection).
2068 - name: dom.ipc.processHangMonitor
2069   type: bool
2070   value: true
2071   mirror: once
2073 # Whether we report such process hangs
2074 - name: dom.ipc.reportProcessHangs
2075   type: RelaxedAtomicBool
2076 # Don't report hangs in DEBUG builds. They're too slow and often a
2077 # debugger is attached.
2078 #ifdef DEBUG
2079   value: false
2080 #else
2081   value: true
2082 #endif
2083   mirror: always
2085 - name: dom.ipc.tabs.disabled
2086   type: bool
2087   value: false
2088   mirror: always
2090 # Process launch delay (in milliseconds).
2091 - name: dom.ipc.processPrelaunch.delayMs
2092   type: uint32_t
2093 # This number is fairly arbitrary ... the intention is to put off
2094 # launching another app process until the last one has finished
2095 # loading its content, to reduce CPU/memory/IO contention.
2096   value: 1000
2097   mirror: always
2099 # Process preallocation cache
2100 # Only used in fission; in e10s we use 1 always
2101 - name: dom.ipc.processPrelaunch.fission.number
2102   type: uint32_t
2103   value: 3
2104   mirror: always
2106 - name: dom.ipc.processPriorityManager.enabled
2107   type: bool
2108   value: false
2109   mirror: always
2111 - name: dom.ipc.processPriorityManager.testMode
2112   type: bool
2113   value: false
2114   mirror: always
2116 - name: dom.ipc.processPriorityManager.backgroundPerceivableGracePeriodMS
2117   type: uint32_t
2118   value: 0
2119   mirror: always
2121 - name: dom.ipc.processPriorityManager.backgroundGracePeriodMS
2122   type: uint32_t
2123   value: 0
2124   mirror: always
2126 # Is support for HTMLElement.autocapitalize enabled?
2127 - name: dom.forms.autocapitalize
2128   type: bool
2129   value: @IS_NIGHTLY_BUILD@
2130   mirror: always
2132 # Support for input type=month, type=week and type=datetime-local. By default,
2133 # disabled.
2134 - name: dom.forms.datetime.others
2135   type: bool
2136   value: @IS_ANDROID@
2137   mirror: always
2139 # Is support for HTMLElement.enterKeyHint enabled?
2140 - name: dom.forms.enterkeyhint
2141   type: bool
2142   value: @IS_NIGHTLY_BUILD@
2143   mirror: always
2145 # Is support for HTMLElement.inputMode enabled?
2146 - name: dom.forms.inputmode
2147   type: bool
2148 #if defined(ANDROID)
2149   value: true
2150 #else
2151   value: @IS_NOT_RELEASE_OR_BETA@
2152 #endif
2153   mirror: always
2155 # Enable Directory API. By default, disabled.
2156 - name: dom.input.dirpicker
2157   type: bool
2158   value: false
2159   mirror: always
2161 # Whether to allow or disallow web apps to cancel `beforeinput` events caused
2162 # by MozEditableElement#setUserInput() which is used by autocomplete, autofill
2163 # and password manager.
2164 - name: dom.input_event.allow_to_cancel_set_user_input
2165   type: bool
2166   value: false
2167   mirror: always
2169 # How long a content process can take before closing its IPC channel
2170 # after shutdown is initiated.  If the process exceeds the timeout,
2171 # we fear the worst and kill it.
2172 - name: dom.ipc.tabs.shutdownTimeoutSecs
2173   type: RelaxedAtomicUint32
2174 #if !defined(DEBUG) && !defined(MOZ_ASAN) && !defined(MOZ_VALGRIND) && !defined(MOZ_TSAN)
2175   value: 20
2176 #else
2177   value: 0
2178 #endif
2179   mirror: always
2181 # Whether a native event loop should be used in the content process.
2182 - name: dom.ipc.useNativeEventProcessing.content
2183   type: RelaxedAtomicBool
2184 #if defined(XP_WIN) || defined(XP_MACOSX)
2185   value: false
2186 #else
2187   value: true
2188 #endif
2189   mirror: always
2191 # If this is true, TextEventDispatcher dispatches keydown and keyup events
2192 # even during composition (keypress events are never fired during composition
2193 # even if this is true).
2194 - name: dom.keyboardevent.dispatch_during_composition
2195   type: bool
2196   value: true
2197   mirror: always
2199 # If this is true, keypress events for non-printable keys are dispatched only
2200 # for event listeners of the system event group in web content.
2201 - name: dom.keyboardevent.keypress.dispatch_non_printable_keys_only_system_group_in_content
2202   type: bool
2203   value: true
2204   mirror: always
2206 # If this is true, "keypress" event's keyCode value and charCode value always
2207 # become same if the event is not created/initialized by JS.
2208 - name: dom.keyboardevent.keypress.set_keycode_and_charcode_to_same_value
2209   type: bool
2210   value: true
2211   mirror: always
2213 # Whether the Large-Allocation header is enabled.
2214 - name: dom.largeAllocationHeader.enabled
2215   type: bool
2216   value: true
2217   mirror: always
2219 - name: dom.largeAllocation.forceEnable
2220   type: bool
2221   value: false
2222   mirror: always
2224 # Whether "W3C Web Manifest" processing is enabled
2225 - name: dom.manifest.enabled
2226   type: bool
2227   value: true
2228   mirror: always
2230 # Enable mapped array buffer by default.
2231 - name: dom.mapped_arraybuffer.enabled
2232   type: bool
2233   value: true
2234   mirror: always
2236 # This pref is used to enable/disable the `document.autoplayPolicy` API which
2237 # returns a enum string which presents current autoplay policy and can change
2238 # overtime based on user session activity.
2239 - name: dom.media.autoplay.autoplay-policy-api
2240   type: bool
2241   value: false
2242   mirror: always
2244 # Media Session API
2245 - name: dom.media.mediasession.enabled
2246   type: bool
2247   value: true
2248   mirror: always
2250 # Number of seconds of very quiet or silent audio before considering the audio
2251 # inaudible.
2252 - name: dom.media.silence_duration_for_audibility
2253   type: AtomicFloat
2254   value: 2.0f
2255   mirror: always
2257 - name: dom.menuitem.enabled
2258   type: bool
2259   value: false
2260   mirror: always
2262 # Enable meta-viewport support in remote APZ-enabled frames.
2263 - name: dom.meta-viewport.enabled
2264   type: RelaxedAtomicBool
2265   value: false
2266   mirror: always
2268 # Timeout clamp in ms for timeouts we clamp.
2269 - name: dom.min_timeout_value
2270   type: int32_t
2271   value: 4
2272   mirror: always
2274 # Timeout clamp in ms for background windows.
2275 - name: dom.min_background_timeout_value
2276   type: int32_t
2277   value: 1000
2278   mirror: always
2280 # Timeout clamp in ms for background windows when throttling isn't enabled.
2281 - name: dom.min_background_timeout_value_without_budget_throttling
2282   type: int32_t
2283   value: 1000
2284   mirror: always
2286 # Are missing-property use counters for certain DOM attributes enabled?
2287 - name: dom.missing_prop_counters.enabled
2288   type: bool
2289   value: true
2290   mirror: always
2292 # Is support for module scripts (<script type="module">) enabled for content?
2293 - name: dom.moduleScripts.enabled
2294   type: bool
2295   value: true
2296   mirror: always
2298 # Whether we disable triggering mutation events for changes to style
2299 # attribute via CSSOM.
2300 # NOTE: This preference is used in unit tests. If it is removed or its default
2301 # value changes, please update test_sharedMap_static_prefs.js accordingly.
2302 - name: dom.mutation-events.cssom.disabled
2303   type: bool
2304   value: true
2305   mirror: always
2307 # Limit of location change caused by content scripts in a time span per
2308 # BrowsingContext. This includes calls to History and Location APIs.
2309 - name: dom.navigation.locationChangeRateLimit.count
2310   type: uint32_t
2311   value: 200
2312   mirror: always
2314 # Time span in seconds for location change rate limit.
2315 - name: dom.navigation.locationChangeRateLimit.timespan
2316   type: uint32_t
2317   value: 10
2318   mirror: always
2320 # Network Information API
2321 - name: dom.netinfo.enabled
2322   type: RelaxedAtomicBool
2323   value: @IS_ANDROID@
2324   mirror: always
2326 # Whether we should open noopener links in a new process.
2327 - name: dom.noopener.newprocess.enabled
2328   type: bool
2329   value: true
2330   mirror: always
2332 # Whether we shouldn't show an error page for unknown protocols (and should
2333 # show a console warning instead).
2334 - name: dom.no_unknown_protocol_error.enabled
2335   type: bool
2336   value: true
2337   mirror: always
2339 # Is support for Window.paintWorklet enabled?
2340 - name: dom.paintWorklet.enabled
2341   type: bool
2342   value: false
2343   mirror: always
2345 # Enable/disable the PaymentRequest API
2346 - name: dom.payments.request.enabled
2347   type: bool
2348   value: false
2349   mirror: always
2351 # Whether a user gesture is required to call PaymentRequest.prototype.show().
2352 - name: dom.payments.request.user_interaction_required
2353   type: bool
2354   value: true
2355   mirror: always
2357 # Time in milliseconds for PaymentResponse to wait for
2358 # the Web page to call complete().
2359 - name: dom.payments.response.timeout
2360   type: uint32_t
2361   value: 5000
2362   mirror: always
2364 # Enable printing performance marks/measures to log
2365 - name: dom.performance.enable_user_timing_logging
2366   type: RelaxedAtomicBool
2367   value: false
2368   mirror: always
2370 - name: dom.performance.children_results_ipc_timeout
2371   type: uint32_t
2372   value: 1000
2373   mirror: always
2375 # Enable notification of performance timing
2376 - name: dom.performance.enable_notify_performance_timing
2377   type: bool
2378   value: false
2379   mirror: always
2381 # Is support for PerformanceTiming.timeToContentfulPaint enabled?
2382 - name: dom.performance.time_to_contentful_paint.enabled
2383   type: bool
2384   value: false
2385   mirror: always
2387 # Is support for PerformanceTiming.timeToDOMContentFlushed enabled?
2388 - name: dom.performance.time_to_dom_content_flushed.enabled
2389   type: bool
2390   value: false
2391   mirror: always
2393 # Is support for PerformanceTiming.timeToFirstInteractive enabled?
2394 - name: dom.performance.time_to_first_interactive.enabled
2395   type: bool
2396   value: false
2397   mirror: always
2399 # Is support for PerformanceTiming.timeToNonBlankPaint enabled?
2400 - name: dom.performance.time_to_non_blank_paint.enabled
2401   type: bool
2402   value: false
2403   mirror: always
2405 # Is support for Permissions.revoke enabled?
2406 - name: dom.permissions.revoke.enable
2407   type: bool
2408   value: false
2409   mirror: always
2411 # Whether we should show the placeholder when the element is focused but empty.
2412 - name: dom.placeholder.show_on_focus
2413   type: bool
2414   value: true
2415   mirror: always
2417 # Is support for Element.requestPointerLock enabled?
2418 # This is added for accessibility purpose. When user has no way to exit
2419 # pointer lock (e.g. no keyboard available), they can use this pref to
2420 # disable the Pointer Lock API altogether.
2421 - name: dom.pointer-lock.enabled
2422   type: bool
2423   value: true
2424   mirror: always
2426 # re-SAB: Whether to allow postMessage of a SharedArrayBuffer if various
2427 # preconditions related to COOP and COEP are met
2428 - name: dom.postMessage.sharedArrayBuffer.withCOOP_COEP
2429   type: bool
2430 #if !defined(ANDROID)
2431   value: true
2432 #else
2433   value: false # Blocked by DocumentChannel, see Bug 1589982.
2434 #endif
2435   mirror: once
2437 # Overridden in all.js on RELEASE_OR_BETA in order to add the locked attribute.
2438 - name: dom.postMessage.sharedArrayBuffer.bypassCOOP_COEP.insecure.enabled
2439   type: RelaxedAtomicBool
2440   value: false
2441   mirror: always
2443 # Presentation API
2444 - name: dom.presentation.enabled
2445   type: bool
2446 #if defined(ANDROID)
2447   value: @IS_NOT_RELEASE_OR_BETA@
2448 #else
2449   value: false
2450 #endif
2451   mirror: always
2453 - name: dom.presentation.controller.enabled
2454   type: bool
2455 #if defined(ANDROID)
2456   value: @IS_NOT_RELEASE_OR_BETA@
2457 #else
2458   value: false
2459 #endif
2460   mirror: always
2462 - name: dom.presentation.receiver.enabled
2463   type: bool
2464 #if defined(ANDROID)
2465   value: @IS_NOT_RELEASE_OR_BETA@
2466 #else
2467   value: false
2468 #endif
2469   mirror: always
2471 - name: dom.presentation.testing.simulate-receiver
2472   type: bool
2473   value: false
2474   mirror: always
2476 # This currently only affects XHTML. For XUL the cache is always allowed.
2477 - name: dom.prototype_document_cache.enabled
2478   type: bool
2479   value: true
2480   mirror: always
2482 # Push
2483 - name: dom.push.enabled
2484   type: RelaxedAtomicBool
2485   value: false
2486   mirror: always
2488 # Preference that is primarily used for testing of problematic file paths.
2489 # It can also be used for switching between different storage directories, but
2490 # such feature is not officially supported.
2491 - name: dom.quotaManager.storageName
2492   type: String
2493   value: "storage"
2494   mirror: never
2496 # Should we try to load origin information from the cache?
2497 # See bug 1563023 for more details.
2498 - name: dom.quotaManager.loadQuotaFromCache
2499   type: RelaxedAtomicBool
2500   value: true
2501   mirror: always
2503 # Preference that users can set to override temporary storage smart limit
2504 # calculation.
2505 - name: dom.quotaManager.temporaryStorage.fixedLimit
2506   type: RelaxedAtomicInt32
2507   value: -1
2508   mirror: always
2510 # Preference that users can set to override temporary storage smart limit
2511 # calculation.
2512 - name: dom.quotaManager.temporaryStorage.chunkSize
2513   type: RelaxedAtomicUint32
2514   value: 10 * 1024
2515   mirror: always
2517 # A pref that is used to enable testing features.
2518 - name: dom.quotaManager.testing
2519   type: SequentiallyConsistentAtomicBool
2520   value: false
2521   mirror: always
2523 #ifdef XP_WIN
2524   # Preference that is used to set nsILocalFileWin::useDOSDevicePathSyntax
2525   # attribute for all local file instances created by QuotaManager and its
2526   # clients. The value of this preference is cached so changing the preference
2527   # during runtime has no effect.
2528   # See bug 1626846 for setting this to false by default.
2529 -   name: dom.quotaManager.useDOSDevicePathSyntax
2530     type: RelaxedAtomicBool
2531     value: true
2532     mirror: always
2533     do_not_use_directly: true
2535   # Preference that is used to enable the hack for overrriding xFullPathname in
2536   # TelemetryVFS.
2537 -   name: dom.quotaManager.overrideXFullPathname
2538     type: RelaxedAtomicBool
2539     value: true
2540     mirror: always
2541 #endif
2543 # Reporting API.
2544 - name: dom.reporting.enabled
2545   type: RelaxedAtomicBool
2546   value: @IS_NIGHTLY_BUILD@
2547   mirror: always
2549 - name: dom.reporting.testing.enabled
2550   type: RelaxedAtomicBool
2551   value: false
2552   mirror: always
2554 - name: dom.reporting.featurePolicy.enabled
2555   type: RelaxedAtomicBool
2556   value: @IS_NIGHTLY_BUILD@
2557   mirror: always
2559 - name: dom.reporting.crash.enabled
2560   type: RelaxedAtomicBool
2561   value: false
2562   mirror: always
2564 - name: dom.reporting.header.enabled
2565   type: RelaxedAtomicBool
2566   value: false
2567   mirror: always
2569 # In seconds. The timeout to remove not-active report-to endpoints.
2570 - name: dom.reporting.cleanup.timeout
2571   type: uint32_t
2572   value: 3600
2573   mirror: always
2575 # Any X seconds the reports are dispatched to endpoints.
2576 - name: dom.reporting.delivering.timeout
2577   type: uint32_t
2578   value: 5
2579   mirror: always
2581 # How many times the delivering of a report should be tried.
2582 - name: dom.reporting.delivering.maxFailures
2583   type: uint32_t
2584   value: 3
2585   mirror: always
2587 # How many reports should be stored in the report queue before being delivered.
2588 - name: dom.reporting.delivering.maxReports
2589   type: uint32_t
2590   value: 100
2591   mirror: always
2593 # Enable requestIdleCallback API
2594 - name: dom.requestIdleCallback.enabled
2595   type: bool
2596   value: true
2597   mirror: always
2599 # Whether to enable the JavaScript start-up cache. This causes one of the first
2600 # execution to record the bytecode of the JavaScript function used, and save it
2601 # in the existing cache entry. On the following loads of the same script, the
2602 # bytecode would be loaded from the cache instead of being generated once more.
2603 - name: dom.script_loader.bytecode_cache.enabled
2604   type: bool
2605   value: true
2606   mirror: always
2608 # Ignore the heuristics of the bytecode cache, and always record on the first
2609 # visit. (used for testing purposes).
2611 # Choose one strategy to use to decide when the bytecode should be encoded and
2612 # saved. The following strategies are available right now:
2613 #   * -2 : (reader mode) The bytecode cache would be read, but it would never
2614 #          be saved.
2615 #   * -1 : (eager mode) The bytecode would be saved as soon as the script is
2616 #          seen for the first time, independently of the size or last access
2617 #          time.
2618 #   *  0 : (default) The bytecode would be saved in order to minimize the
2619 #          page-load time.
2621 # Other values might lead to experimental strategies. For more details, have a
2622 # look at: ScriptLoader::ShouldCacheBytecode function.
2623 - name: dom.script_loader.bytecode_cache.strategy
2624   type: int32_t
2625   value: 0
2626   mirror: always
2628 # Is support for decoding external (non-inline) classic or module DOM scripts
2629 # (i.e. anything but workers) as UTF-8, then directly compiling without
2630 # inflating to UTF-16, enabled?
2631 - name: dom.script_loader.external_scripts.utf8_parsing.enabled
2632   type: bool
2633   value: true
2634   mirror: always
2636 # Enable  speculative off main thread parsing of external scripts as
2637 # soon as they are fetched.
2638 - name: dom.script_loader.external_scripts.speculative_omt_parse.enabled
2639   type: bool
2640   value: true
2641   mirror: always
2643 # Speculatively compile non parser inserted scripts
2644 - name: dom.script_loader.external_scripts.speculate_non_parser_inserted.enabled
2645   type: bool
2646   value: false
2647   mirror: always
2649 # Speculatively compile async scripts
2650 - name: dom.script_loader.external_scripts.speculate_async.enabled
2651   type: bool
2652   value: false
2653   mirror: always
2655 # Speculatively compile link preload scripts
2656 - name: dom.script_loader.external_scripts.speculate_link_preload.enabled
2657   type: bool
2658   value: false
2659   mirror: always
2661 - name: dom.securecontext.whitelist_onions
2662   type: bool
2663   value: false
2664   mirror: always
2666 # This pref enables Sec-Fetch-* logic and causes corresponding
2667 # request headers to be set.
2668 - name: dom.security.secFetch.enabled
2669   type: RelaxedAtomicBool
2670   value: @IS_NIGHTLY_BUILD@
2671   mirror: always
2673 # This pref enables the featurePolicy header support.
2674 - name: dom.security.featurePolicy.header.enabled
2675   type: bool
2676   value: false
2677   mirror: always
2679 - name: dom.security.featurePolicy.experimental.enabled
2680   type: bool
2681   value: false
2682   mirror: always
2684 # Expose the 'featurePolicy' attribute in document and HTMLIFrameElement
2685 - name: dom.security.featurePolicy.webidl.enabled
2686   type: bool
2687   value: false
2688   mirror: always
2690 # For testing purposes only: Flipping this pref to true allows
2691 # to skip the allowlist for about: pages and do not ship with a
2692 # CSP and NS_ASSERT right away.
2693 - name: dom.security.skip_about_page_csp_allowlist_and_assert
2694   type: RelaxedAtomicBool
2695   value: false
2696   mirror: always
2698 # For testing purposes only: Flipping this pref to true allows
2699 # to skip the assertion that every about page ships with a CSP.
2700 - name: dom.security.skip_about_page_has_csp_assert
2701   type: RelaxedAtomicBool
2702   value: false
2703   mirror: always
2705 # For testing purposes only: Flipping this pref to true allows
2706 # to skip the assertion that HTML fragments (e.g. innerHTML) can
2707 # not be used within chrome code or about: pages.
2708 - name: dom.security.skip_html_fragment_assertion
2709   type: RelaxedAtomicBool
2710   value: false
2711   mirror: always
2713 # For testing purposes only; Flipping this pref to true allows
2714 # to skip the assertion that remote scripts can not be loaded
2715 # in system privileged contexts.
2716 - name: dom.security.skip_remote_script_assertion_in_system_priv_context
2717   type: RelaxedAtomicBool
2718   value: false
2719   mirror: always
2721 # If true, all content requests will get upgraded to HTTPS://
2722 # (some Firefox functionality requests, like OCSP will not be affected)
2723 - name: dom.security.https_only_mode
2724   type: RelaxedAtomicBool
2725   value: false
2726   mirror: always
2728 # If true, all content requests in Private Browsing Mode will get
2729 # upgraded to HTTPS://. (If dom.security.https_only_mode is set
2730 # to true then this pref has no effect)
2731 - name: dom.security.https_only_mode_pbm
2732   type: RelaxedAtomicBool
2733   value: false
2734   mirror: always
2736 # If true, sends http background request for top-level sites to
2737 # counter long timeouts.
2738 - name: dom.security.https_only_mode_send_http_background_request
2739   type: RelaxedAtomicBool
2740   value: true
2741   mirror: always
2743 # If true and HTTPS-only mode is enabled, requests
2744 # to local IP addresses are also upgraded
2745 - name: dom.security.https_only_mode.upgrade_local
2746   type: RelaxedAtomicBool
2747   value: false
2748   mirror: always
2750 # If true and HTTPS-only mode is enabled, requests
2751 # to .onion hosts are also upgraded
2752 - name: dom.security.https_only_mode.upgrade_onion
2753   type: RelaxedAtomicBool
2754   value: false
2755   mirror: always
2757 # WARNING: Don't ever update that pref manually! It is only used
2758 # for telemetry purposes and allows to reason about retention of
2759 # the pref dom.security.https_only_mode from above.
2760 - name: dom.security.https_only_mode_ever_enabled
2761   type: RelaxedAtomicBool
2762   value: false
2763   mirror: always
2765 # WARNING: Don't ever update that pref manually! It is only used
2766 # for telemetry purposes and allows to reason about retention of
2767 # the pref dom.security.https_only_mode_pbm from above.
2768 - name: dom.security.https_only_mode_ever_enabled_pbm
2769   type: RelaxedAtomicBool
2770   value: false
2771   mirror: always
2773 - name: dom.security.unexpected_system_load_telemetry_enabled
2774   type: bool
2775   value: true
2776   mirror: always
2778 # pref controls `Sanitizer` API being exposed
2779 - name: dom.security.sanitizer.enabled
2780   type: bool
2781   value: false
2782   mirror: always
2784 # Is support for selection event APIs enabled?
2785 - name: dom.select_events.enabled
2786   type: bool
2787   value: true
2788   mirror: always
2790 # Whether or not selection events on text controls are enabled.
2791 - name: dom.select_events.textcontrols.enabled
2792   type: bool
2793   value: @IS_NIGHTLY_BUILD@
2794   mirror: always
2796 - name: dom.separate_event_queue_for_post_message.enabled
2797   type: bool
2798   value: true
2799   mirror: always
2801 - name: dom.arena_allocator.enabled
2802   type: bool
2803   value: true
2804   mirror: once
2806 - name: dom.serviceWorkers.enabled
2807   type: RelaxedAtomicBool
2808   value: false
2809   mirror: always
2811 # If true. then the service worker interception and the ServiceWorkerManager
2812 # will live in the parent process.  This only takes effect on browser start.
2813 - name: dom.serviceWorkers.parent_intercept
2814   type: bool
2815   value: true
2816   mirror: never
2818 - name: dom.serviceWorkers.testing.enabled
2819   type: RelaxedAtomicBool
2820   value: false
2821   mirror: always
2823 - name: dom.workers.serialized-sab-access
2824   type: RelaxedAtomicBool
2825   value: false
2826   mirror: always
2828 # Whether automatic storage access granting heuristics should be turned on.
2829 - name: dom.storage_access.auto_grants
2830   type: bool
2831   value: true
2832   mirror: always
2834 - name: dom.storage_access.auto_grants.delayed
2835   type: bool
2836   value: true
2837   mirror: always
2839 # Storage-access API.
2840 - name: dom.storage_access.enabled
2841   type: bool
2842   value: false
2843   mirror: always
2845 # The maximum number of origins that a given third-party tracker is allowed
2846 # to have concurrent access to before the user is presented with a storage
2847 # access prompt.  Only effective when the auto_grants pref is turned on.
2848 - name: dom.storage_access.max_concurrent_auto_grants
2849   type: int32_t
2850   value: 5
2851   mirror: always
2853 # Enable Storage API for all platforms except Android.
2854 - name: dom.storageManager.enabled
2855   type: RelaxedAtomicBool
2856   value: @IS_NOT_ANDROID@
2857   mirror: always
2859 # Should we abort LocalStorage requests when a sync message from parent is
2860 # detected?
2862 # LocalStorage is a synchronous API involving sync IPC from the child to the
2863 # parent. Accessibility interfaces currently also involve different forms of
2864 # synchronous parent-to-child communication. (See bug 1516136 comment 11 and
2865 # comment 15.) Although LocalStorage NextGen no longer needs to consult the
2866 # main thread, thereby eliminating the possibility of deadlock, the browser is
2867 # very complex and so we have retained a fail-safe mechanism that will cause
2868 # blocking LocalStorage operations to abort on synchronous IPC from the parent
2869 # to the child.
2871 # We are disabling this fail-safe mechanism because it is fundamentally visible
2872 # to content when activated. When we abort the synchronous LocalStorage
2873 # operation we throw an error which has the potential to break web content.
2874 # This is not a hypothetical. In bug 1574569 content broke due to accessibility
2875 # path aborting the LS call, but the LS call didn't need to abort because it
2876 # was not at risk of deadlock.
2878 # But we are retaining the preference in the event that regressions occur
2879 # anywhere in the code-base that could cause a cascade that would result in
2880 # deadlock. (There have been logic bugs in components that resulted in
2881 # PBackground synchronously blocking in a way that could result in deadlock.)
2882 # This allows us to re-enable the fail-safe with only a pref flip.
2883 - name: dom.storage.abort_on_sync_parent_to_child_messages
2884   type: bool
2885   value: false
2886   mirror: always
2888 # LocalStorage data limit as determined by summing up the lengths of all string
2889 # keys and values. This is consistent with the legacy implementation and other
2890 # browser engines. This value should really only ever change in unit testing
2891 # where being able to lower it makes it easier for us to test certain edge
2892 # cases. Measured in KiBs.
2893 - name: dom.storage.default_quota
2894   type: RelaxedAtomicUint32
2895   # Only allow relatively small amounts of data since performance of the
2896   # synchronous IO is very bad. We are enforcing simple per-origin quota only.
2897   value: 5 * 1024
2898   mirror: always
2900 # Per-site quota for legacy LocalStorage implementation.
2901 - name: dom.storage.default_site_quota
2902   type: RelaxedAtomicUint32
2903   value: 25 * 1024
2904   mirror: always
2906 # Whether or not LSNG (Next Generation Local Storage) is enabled.
2907 # See bug 1517090 for enabling this on Nightly.
2908 # See bug 1534736 for changing it to EARLY_BETA_OR_EARLIER.
2909 # See bug 1539835 for enabling this unconditionally.
2910 # See bug 1619948 for changing it back to EARLY_BETA_OR_EARLIER.
2911 - name: dom.storage.next_gen
2912   type: RelaxedAtomicBool
2913   value: @IS_EARLY_BETA_OR_EARLIER@
2914   mirror: always
2915   do_not_use_directly: true
2917 # Is support for Storage test APIs enabled?
2918 - name: dom.storage.testing
2919   type: bool
2920   value: false
2921   mirror: always
2923 # For area and anchor elements with target=_blank and no rel set to
2924 # opener/noopener.
2925 - name: dom.targetBlankNoOpener.enabled
2926   type: bool
2927   value: true
2928   mirror: always
2930 # Is support for Selection.GetRangesForInterval enabled?
2931 - name: dom.testing.selection.GetRangesForInterval
2932   type: bool
2933   value: false
2934   mirror: always
2936 - name: dom.testing.structuredclonetester.enabled
2937   type: RelaxedAtomicBool
2938   value: false
2939   mirror: always
2941 - name: dom.testing.sync-content-blocking-notifications
2942   type: bool
2943   value: false
2944   mirror: always
2946 - name: dom.textMetrics.actualBoundingBox.enabled
2947   type: bool
2948   value: true
2949   mirror: always
2951 - name: dom.textMetrics.baselines.enabled
2952   type: bool
2953   value: false
2954   mirror: always
2956 - name: dom.textMetrics.emHeight.enabled
2957   type: bool
2958   value: false
2959   mirror: always
2961 - name: dom.textMetrics.fontBoundingBox.enabled
2962   type: bool
2963   value: false
2964   mirror: always
2966 # Time (in ms) that it takes to regenerate 1ms.
2967 - name: dom.timeout.background_budget_regeneration_rate
2968   type: int32_t
2969   value: 100
2970   mirror: always
2972 # Time (in ms) that it takes to regenerate 1ms.
2973 - name: dom.timeout.foreground_budget_regeneration_rate
2974   type: int32_t
2975   value: 1
2976   mirror: always
2978 # Maximum value (in ms) for the background budget. Only valid for
2979 # values greater than 0.
2980 - name: dom.timeout.background_throttling_max_budget
2981   type: int32_t
2982   value: 50
2983   mirror: always
2985 # Maximum value (in ms) for the foreground budget. Only valid for
2986 # values greater than 0.
2987 - name: dom.timeout.foreground_throttling_max_budget
2988   type: int32_t
2989   value: -1
2990   mirror: always
2992 # The maximum amount a timeout can be delayed by budget throttling.
2993 - name: dom.timeout.budget_throttling_max_delay
2994   type: int32_t
2995   value: 15000
2996   mirror: always
2998 # Turn on budget throttling by default.
2999 - name: dom.timeout.enable_budget_timer_throttling
3000   type: bool
3001   value: true
3002   mirror: always
3004 # Should we defer timeouts and intervals while loading a page.  Released
3005 # on Idle or when the page is loaded.
3006 - name: dom.timeout.defer_during_load
3007   type: bool
3008   value: true
3009   mirror: always
3011 # Maximum amount of time in milliseconds consecutive setTimeout()/setInterval()
3012 # callback are allowed to run before yielding the event loop.
3013 - name: dom.timeout.max_consecutive_callbacks_ms
3014   type: uint32_t
3015   value: 4
3016   mirror: always
3018 # Maximum deferral time for setTimeout/Interval in milliseconds
3019 - name: dom.timeout.max_idle_defer_ms
3020   type: uint32_t
3021   value: 10*1000
3022   mirror: always
3024 # Delay in ms from document load until we start throttling background timeouts.
3025 - name: dom.timeout.throttling_delay
3026   type: int32_t
3027   value: 30000
3028   mirror: always
3030 # UDPSocket API
3031 - name: dom.udpsocket.enabled
3032   type: bool
3033   value: false
3034   mirror: always
3036 # Time limit, in milliseconds, for user gesture transient activation.
3037 - name: dom.user_activation.transient.timeout
3038   type: uint32_t
3039   value: 5000
3040   mirror: always
3042 # Whether to shim a Components object on untrusted windows.
3043 - name: dom.use_components_shim
3044   type: bool
3045   value: @IS_NOT_NIGHTLY_BUILD@
3046   mirror: always
3048 - name: dom.vibrator.enabled
3049   type: bool
3050   value: true
3051   mirror: always
3053 - name: dom.vibrator.max_vibrate_ms
3054   type: uint32_t
3055   value: 10000
3056   mirror: always
3058 - name: dom.vibrator.max_vibrate_list_len
3059   type: uint32_t
3060   value: 128
3061   mirror: always
3063 # Is support for Window.visualViewport enabled?
3064 - name: dom.visualviewport.enabled
3065   type: bool
3066   value: false
3067   mirror: always
3069 # Is support for WebVR APIs enabled?
3070 # Enabled by default in beta and release for Windows and OS X and for all
3071 # platforms in nightly and aurora.
3072 - name: dom.vr.enabled
3073   type: RelaxedAtomicBool
3074 #if defined(XP_WIN) || defined(XP_DARWIN) || !defined(RELEASE_OR_BETA)
3075   value: true
3076 #else
3077   value: false
3078 #endif
3079   mirror: always
3081 # Should VR sessions always be reported as supported, without first
3082 # checking for VR runtimes?  This will prevent permission prompts
3083 # from being suppressed on machines without VR runtimes and cause
3084 # navigatior.xr.isSessionSupported to always report that immersive-vr
3085 # is supported.
3086 - name: dom.vr.always_support_vr
3087   type: RelaxedAtomicBool
3088   value: false
3089   mirror: always
3091 # Should AR sessions always be reported as supported, without first
3092 # checking for AR runtimes?  This will prevent permission prompts
3093 # from being suppressed on machines without AR runtimes and cause
3094 # navigatior.xr.isSessionSupported to always report that immersive-ar
3095 # is supported.
3096 - name: dom.vr.always_support_ar
3097   type: RelaxedAtomicBool
3098   value: false
3099   mirror: always
3101 # It is often desirable to automatically start vr presentation when
3102 # a user puts on the VR headset.  This is done by emitting the
3103 # Window.vrdisplayactivate event when the headset's sensors detect it
3104 # being worn.  This can result in WebVR content taking over the headset
3105 # when the user is using it outside the browser or inadvertent start of
3106 # presentation due to the high sensitivity of the proximity sensor in some
3107 # headsets, so it is off by default.
3108 - name: dom.vr.autoactivate.enabled
3109   type: RelaxedAtomicBool
3110   value: false
3111   mirror: always
3113 # Minimum number of milliseconds that the browser will wait before
3114 # attempting to poll again for connected VR controllers.  The browser
3115 # will not attempt to poll for VR controllers until it needs to use them.
3116 - name: dom.vr.controller.enumerate.interval
3117   type: RelaxedAtomicInt32
3118   value: 1000
3119   mirror: always
3121 # The threshold value of trigger inputs for VR controllers.
3122 - name: dom.vr.controller_trigger_threshold
3123   type: AtomicFloat
3124   value: 0.1f
3125   mirror: always
3127 # Minimum number of milliseconds that the browser will wait before
3128 # attempting to poll again for connected VR displays.  The browser
3129 # will not attempt to poll for VR displays until it needs to use
3130 # them, such as when detecting a WebVR site.
3131 - name: dom.vr.display.enumerate.interval
3132   type: RelaxedAtomicInt32
3133   value: 5000
3134   mirror: always
3136 # The number of milliseconds since last frame start before triggering a new
3137 # frame. When content is failing to submit frames on time or the lower level
3138 # VR platform APIs are rejecting frames, it determines the rate at which RAF
3139 # callbacks will be called.
3140 - name: dom.vr.display.rafMaxDuration
3141   type: RelaxedAtomicUint32
3142   value: 50
3143   mirror: always
3145 # Minimum number of milliseconds the browser will wait before attempting
3146 # to re-start the VR service after an enumeration returned no devices.
3147 - name: dom.vr.external.notdetected.timeout
3148   type: RelaxedAtomicInt32
3149   value: 60000
3150   mirror: always
3152 # Minimum number of milliseconds the browser will wait before attempting
3153 # to re-start the VR service after a VR API (eg, OpenVR or Oculus)
3154 # requests that we shutdown and unload its libraries.
3155 # To ensure that we don't interfere with VR runtime software auto-updates,
3156 # we will not attempt to re-load the service until this timeout has elapsed.
3157 - name: dom.vr.external.quit.timeout
3158   type: RelaxedAtomicInt32
3159   value: 10000
3160   mirror: always
3162 # Minimum number of milliseconds that the VR session will be kept
3163 # alive after the browser and content no longer are using the
3164 # hardware.  If a VR multitasking environment, this should be set
3165 # very low or set to 0.
3166 - name: dom.vr.inactive.timeout
3167   type: RelaxedAtomicInt32
3168   value: 5000
3169   mirror: always
3171 # Maximum number of milliseconds the browser will wait for content to call
3172 # VRDisplay.requestPresent after emitting vrdisplayactivate during VR
3173 # link traversal.  This prevents a long running event handler for
3174 # vrdisplayactivate from later calling VRDisplay.requestPresent, which would
3175 # result in a non-responsive browser in the VR headset.
3176 - name: dom.vr.navigation.timeout
3177   type: RelaxedAtomicInt32
3178   value: 5000
3179   mirror: always
3181 # Oculus device
3182 - name: dom.vr.oculus.enabled
3183   type: RelaxedAtomicBool
3184 #if defined(HAVE_64BIT_BUILD) && !defined(ANDROID)
3185   # We are only enabling WebVR by default on 64-bit builds (Bug 1384459).
3186   value: true
3187 #else
3188   # On Android, this pref is irrelevant.
3189   value: false
3190 #endif
3191   mirror: always
3193 # When enabled, Oculus sessions may be created with the ovrInit_Invisible
3194 # flag if a page is using tracking but not presenting.  When a page
3195 # begins presenting VR frames, the session will be re-initialized without
3196 # the flag.  This eliminates the "Firefox not responding" warnings in
3197 # the headset, but might not be compatible with all versions of the Oculus
3198 # runtime.
3199 - name: dom.vr.oculus.invisible.enabled
3200   type: RelaxedAtomicBool
3201   value: true
3202   mirror: always
3204 # Minimum number of milliseconds after content has stopped VR presentation
3205 # before the Oculus session is re-initialized to an invisible / tracking
3206 # only mode.  If this value is too high, users will need to wait longer
3207 # after stopping WebVR presentation before automatically returning to the
3208 # Oculus home interface.  (They can immediately return to the Oculus Home
3209 # interface through the Oculus HUD without waiting this duration)
3210 # If this value is too low, the Oculus Home interface may be visible
3211 # momentarily during VR link navigation.
3212 - name: dom.vr.oculus.present.timeout
3213   type: RelaxedAtomicInt32
3214   value: 500
3215   mirror: always
3217 # OpenVR device
3218 - name: dom.vr.openvr.enabled
3219   type: RelaxedAtomicBool
3220 #if !defined(HAVE_64BIT_BUILD) && !defined(ANDROID)
3221   # We are only enabling WebVR by default on 64-bit builds (Bug 1384459).
3222   value: false
3223 #elif defined(XP_WIN) || defined(XP_MACOSX)
3224   # We enable OpenVR by default for Windows and macOS.
3225   value: true
3226 #else
3227   # See Bug 1310663 (Linux).  On Android, this pref is irrelevant.
3228   value: false
3229 #endif
3230   mirror: always
3232 # OSVR device
3233 - name: dom.vr.osvr.enabled
3234   type: RelaxedAtomicBool
3235   value: false
3236   mirror: always
3238 # Pose prediction reduces latency effects by returning future predicted HMD
3239 # poses to callers of the WebVR API.  This currently only has an effect for
3240 # Oculus Rift on SDK 0.8 or greater.
3241 - name: dom.vr.poseprediction.enabled
3242   type: RelaxedAtomicBool
3243   value: true
3244   mirror: always
3246 # Enable a separate process for VR module.
3247 - name: dom.vr.process.enabled
3248   type: bool
3249 #if defined(XP_WIN)
3250   value: true
3251 #else
3252   value: false
3253 #endif
3254   mirror: once
3256 - name: dom.vr.process.startup_timeout_ms
3257   type: int32_t
3258   value: 5000
3259   mirror: once
3261 # Puppet device, used for simulating VR hardware within tests and dev tools.
3262 - name: dom.vr.puppet.enabled
3263   type: RelaxedAtomicBool
3264   value: false
3265   mirror: always
3267 # Starting VR presentation is only allowed within a user gesture or event such
3268 # as VRDisplayActivate triggered by the system. dom.vr.require-gesture allows
3269 # this requirement to be disabled for special cases such as during automated
3270 # tests or in a headless kiosk system.
3271 - name: dom.vr.require-gesture
3272   type: RelaxedAtomicBool
3273   value: true
3274   mirror: always
3276 # Is support for WebXR APIs enabled?
3277 - name: dom.vr.webxr.enabled
3278   type: RelaxedAtomicBool
3279   value: false
3280   mirror: always
3282 #ifdef XP_WIN
3283   # Control firing WidgetMouseEvent by handling Windows pointer messages or
3284   # mouse messages.
3285 -   name: dom.w3c_pointer_events.dispatch_by_pointer_messages
3286     type: bool
3287     value: false
3288     mirror: always
3289 #endif
3291 # If the value is >= 0, it will be used for max touch points in child processes.
3292 - name: dom.maxtouchpoints.testing.value
3293   type: int32_t
3294   value: -1
3295   mirror: always
3297 # W3C pointer events draft.
3298 - name: dom.w3c_pointer_events.implicit_capture
3299   type: bool
3300   value: @IS_NIGHTLY_BUILD@
3301   mirror: always
3303 # Is support for Navigator.webdriver enabled?
3304 - name: dom.webdriver.enabled
3305   type: bool
3306   value: true
3307   mirror: always
3309 # In case Touch API is enabled, this pref controls whether to support
3310 # ontouch* event handlers, document.createTouch, document.createTouchList and
3311 # document.createEvent("TouchEvent").
3312 - name: dom.w3c_touch_events.legacy_apis.enabled
3313   type: bool
3314   value: @IS_ANDROID@
3315   mirror: always
3317 # W3C touch events
3318 # 0 - disabled, 1 - enabled, 2 - autodetect
3319 # Autodetection is currently only supported on Windows and GTK3 (and assumed on
3320 # Android).
3321 - name: dom.w3c_touch_events.enabled
3322   type: int32_t
3323 #if defined(XP_MACOSX)
3324   value: 0
3325 #else
3326   value: 2
3327 #endif
3328   mirror: always
3330 # Is support for the Web Audio API enabled?
3331 - name: dom.webaudio.enabled
3332   type: bool
3333   value: true
3334   mirror: always
3336 - name: dom.webkitBlink.dirPicker.enabled
3337   type: RelaxedAtomicBool
3338   value: @IS_NOT_ANDROID@
3339   mirror: always
3341 # NOTE: This preference is used in unit tests. If it is removed or its default
3342 # value changes, please update test_sharedMap_static_prefs.js accordingly.
3343 - name: dom.webcomponents.shadowdom.report_usage
3344   type: bool
3345   value: false
3346   mirror: always
3348 # Is support for form-associated custom element enabled?
3349 - name: dom.webcomponents.formAssociatedCustomElement.enabled
3350   type: bool
3351   value: @IS_NIGHTLY_BUILD@
3352   mirror: always
3354 # Is support for the Web GPU API enabled?
3355 - name: dom.webgpu.enabled
3356   type: RelaxedAtomicBool
3357   value: false
3358   mirror: always
3360 # Is support for HTMLInputElement.webkitEntries enabled?
3361 - name: dom.webkitBlink.filesystem.enabled
3362   type: bool
3363   value: @IS_NOT_ANDROID@
3364   mirror: always
3366 # Whether the WebMIDI API is enabled
3367 - name: dom.webmidi.enabled
3368   type: bool
3369   value: false
3370   mirror: always
3372 - name: dom.webnotifications.allowinsecure
3373   type: RelaxedAtomicBool
3374   value: false
3375   mirror: always
3377 - name: dom.webnotifications.allowcrossoriginiframe
3378   type: RelaxedAtomicBool
3379   value: false
3380   mirror: always
3382 - name: dom.webnotifications.enabled
3383   type: RelaxedAtomicBool
3384   value: true
3385   mirror: always
3387 - name: dom.webnotifications.requireuserinteraction
3388   type: RelaxedAtomicBool
3389   value: true
3390   mirror: always
3392 - name: dom.webnotifications.requireinteraction.enabled
3393   type: RelaxedAtomicBool
3394   value: @IS_NIGHTLY_BUILD@
3395   mirror: always
3397 - name: dom.webnotifications.serviceworker.enabled
3398   type: RelaxedAtomicBool
3399   value: true
3400   mirror: always
3402 # Is support for Window.event enabled?
3403 - name: dom.window.event.enabled
3404   type: bool
3405   value: true
3406   mirror: always
3408 - name: dom.window.history.async
3409   type: bool
3410   value: true
3411   mirror: always
3413 # Enable the "noreferrer" feature argument for window.open()
3414 - name: dom.window.open.noreferrer.enabled
3415   type: bool
3416   value: true
3417   mirror: always
3419 - name: dom.window.content.untrusted.enabled
3420   type: bool
3421   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
3422   mirror: always
3424 - name: dom.worker.canceling.timeoutMilliseconds
3425   type: RelaxedAtomicUint32
3426   value: 30000    # 30 seconds
3427   mirror: always
3429 # Is support for compiling DOM worker scripts directly from UTF-8 (without ever
3430 # inflating to UTF-16) enabled?
3431 - name: dom.worker.script_loader.utf8_parsing.enabled
3432   type: RelaxedAtomicBool
3433   value: true
3434   mirror: always
3436 - name: dom.worker.use_medium_high_event_queue
3437   type: RelaxedAtomicBool
3438   value: true
3439   mirror: always
3441 # Enables the dispatching of console log events from worker threads to the
3442 # main-thread.
3443 - name: dom.worker.console.dispatch_events_to_main_thread
3444   type: RelaxedAtomicBool
3445   value: true
3446   mirror: always
3448 - name: dom.worklet.enabled
3449   type: bool
3450   value: true
3451   mirror: always
3453 # Enable content type normalization of XHR uploads via MIME Sniffing standard
3454 - name: dom.xhr.standard_content_type_normalization
3455   type: RelaxedAtomicBool
3456   value: true
3457   mirror: always
3459 # When this pref is set, parent documents may consider child iframes have
3460 # loaded while they are still loading.
3461 - name: dom.cross_origin_iframes_loaded_in_background
3462   type: bool
3463   value: false
3464   mirror: always
3466 # WebIDL test prefs.
3467 - name: dom.webidl.test1
3468   type: bool
3469   value: true
3470   mirror: always
3471 - name: dom.webidl.test2
3472   type: bool
3473   value: true
3474   mirror: always
3476 # WebShare API - exposes navigator.share()
3477 - name: dom.webshare.enabled
3478   type: bool
3479   value: false
3480   mirror: always
3482 # WebShare API - allows WebShare without user interaction (for tests only).
3483 - name: dom.webshare.requireinteraction
3484   type: bool
3485   value: true
3486   mirror: always
3488 # about:home and about:newtab include remote snippets that contain arbitrarily
3489 # placed anchor tags in their content; we want sanitization to be turned off
3490 # in order to render them correctly
3491 - name: dom.about_newtab_sanitization.enabled
3492   type: bool
3493   value: false
3494   mirror: always
3496 # Hide the confirm dialog when a POST request is reloaded.
3497 - name: dom.confirm_repost.testing.always_accept
3498   type: bool
3499   value: false
3500   mirror: always
3502 # Whether we should suspend inactive tabs or not
3503 - name: dom.suspend_inactive.enabled
3504   type: bool
3505   value: @IS_ANDROID@
3506   mirror: always
3508 # The following four prefs control the maximum script run time before slow
3509 # script warning.
3510 - name: dom.max_script_run_time
3511   type: int32_t
3512   value: 10
3513   mirror: always
3515 - name: dom.max_script_run_time_without_important_user_input
3516   type: int32_t
3517 #ifdef NIGHTLY_BUILD
3518   value: 20
3519 #else
3520   value: 10
3521 #endif
3522   mirror: always
3524 - name: dom.max_chrome_script_run_time
3525   type: int32_t
3526   value: 0
3527   mirror: always
3529 - name: dom.max_ext_content_script_run_time
3530   type: int32_t
3531   value: 5
3532   mirror: always
3534 #---------------------------------------------------------------------------
3535 # Prefs starting with "editor"
3536 #---------------------------------------------------------------------------
3538 # Allow or disallow to delete `<hr>` element when caret is at start of
3539 # following line of the element.  If false, Backspace from start of following
3540 # line of an `<hr>` element causes moving caret to immediatly after the `<hr>`
3541 # element, and then, another Backspace can delete it.
3542 - name: editor.hr_element.allow_to_delete_from_following_line
3543   type: bool
3544   value: false
3545   mirror: always
3547 # Delay to mask last input character in password fields.
3548 # If negative value, to use platform's default behavior.
3549 # If 0, no delay to mask password.
3550 # Otherwise, password fields unmask last input character(s) during specified
3551 # time (in milliseconds).
3552 - name: editor.password.mask_delay
3553   type: int32_t
3554   value: -1
3555   mirror: always
3557 # Set to true when you test mask_delay of password editor.  If this is set
3558 # to true, "MozLastInputMasked" is fired when last input characters are
3559 # masked by timeout.
3560 - name: editor.password.testing.mask_delay
3561   type: bool
3562   value: false
3563   mirror: always
3565 # General prefs for editor, indicating whether Gecko-specific editing UI is
3566 # enabled by default. Those UIs are not implemented by any other browsers.  So,
3567 # only Firefox users can change some styles with them. This means that Firefox
3568 # users may get unexpected result of some web apps if they assume that users
3569 # cannot change such styles.
3570 - name: editor.resizing.enabled_by_default
3571   type: bool
3572   value: false
3573   mirror: always
3574 - name: editor.inline_table_editing.enabled_by_default
3575   type: bool
3576   value: false
3577   mirror: always
3578 - name: editor.positioning.enabled_by_default
3579   type: bool
3580   value: false
3581   mirror: always
3583 # Whether user pastes should be truncated.
3584 - name: editor.truncate_user_pastes
3585   type: bool
3586   value: true
3587   mirror: always
3589 # How line breakers are treated in single line editor:
3590 # * 0: Only remove the leading and trailing newlines.
3591 # * 1: Remove the first newline and all characters following it.
3592 # * 2: Replace newlines with spaces (default of Firefox).
3593 # * 3: Remove newlines from the string.
3594 # * 4: Replace newlines with commas (default of Thunderbird).
3595 # * 5: Collapse newlines and surrounding white space characters and
3596 #      remove them from the string.
3597 # Other values are treated as 1.
3598 - name: editor.singleLine.pasteNewlines
3599   type: int32_t
3600   value: 2
3601   mirror: always
3603 # Whether enabling blink compatible white-space normalizer or keep using
3604 # Gecko's traditional white-space normalizer.
3605 - name: editor.white_space_normalization.blink_compatible
3606   type: bool
3607   value: false
3608   mirror: always
3610 #---------------------------------------------------------------------------
3611 # Prefs starting with "extensions."
3612 #---------------------------------------------------------------------------
3614 # Private browsing opt-in is only supported on Firefox desktop.
3615 - name: extensions.allowPrivateBrowsingByDefault
3616   type: bool
3617   value: false
3618   mirror: always
3620 # Whether the background.service_worker in the extension manifest.json file
3621 # is enabled.
3622 - name: extensions.backgroundServiceWorker.enabled
3623   type: bool
3624   value: false
3625   mirror: once
3627 # Whether the extensions can register a service worker on its own.
3628 # NOTE: WebExtensions Framework ability to register a background service worker
3629 # is not controlled by this pref, only the extension code ability to use
3630 # navigator.serviceWorker.register is locked behind this pref.
3631 - name: extensions.serviceWorkerRegister.allowed
3632   type: bool
3633   value: false
3634   mirror: always
3636 # This pref governs whether we run webextensions in a separate process (true)
3637 # or the parent/main process (false)
3638 - name: extensions.webextensions.remote
3639   type: RelaxedAtomicBool
3640   value: false
3641   mirror: always
3643 #---------------------------------------------------------------------------
3644 # Prefs starting with "findbar."
3645 #---------------------------------------------------------------------------
3647 - name: findbar.modalHighlight
3648   type: bool
3649   value: false
3650   mirror: always
3652 #---------------------------------------------------------------------------
3653 # Prefs starting with "fission."
3654 #---------------------------------------------------------------------------
3656 # Whether to enable Fission in new windows by default.
3657 # IMPORTANT: This preference should *never* be checked directly, since any
3658 # session can contain a mix of Fission and non-Fission windows. Instead,
3659 # callers should check whether the relevant nsILoadContext has the
3660 # `useRemoteSubframes` flag set.
3661 # Callers which cannot use `useRemoteSubframes` must use
3662 # `Services.appinfo.fissionAutostart` or `mozilla::FissionAutostart()` to check
3663 # if fission is enabled by default.
3664 - name: fission.autostart
3665   type: bool
3666   value: false
3667   mirror: never
3669 # Prefs used by normandy to orchestrate the fission experiment. For more
3670 # details, see the comments in nsAppRunner.cpp.
3671 - name: fission.experiment.enrollmentStatus
3672   type: uint32_t
3673   value: 0
3674   mirror: never
3676 - name: fission.experiment.startupEnrollmentStatus
3677   type: uint32_t
3678   value: 0
3679   mirror: never
3681 # This pref has no effect within fission windows, it only controls the
3682 # behaviour within non-fission windows. If true, preserve browsing contexts
3683 # between process swaps.
3684 - name: fission.preserve_browsing_contexts
3685   type: bool
3686   value: true
3687   mirror: always
3689 # Store the session history in the parent process, and access it over IPC
3690 # from the child processes.
3691 - name: fission.sessionHistoryInParent
3692   type: bool
3693   value: false
3694   mirror: once
3695   do_not_use_directly: true
3697 # Allow renaming of process names to the origin on nightly
3698 # Setting this pref creates a privacy leak, but helps greatly with
3699 # debugging
3700 - name: fission.processOriginNames
3701   type: bool
3702   value: false
3703   mirror: always
3705 # If true, allow process-switching documents loaded by <object> and <embed>
3706 # elements into a remote process.
3707 # NOTE: This pref has no impact outside of windows with the
3708 # `useRemoteSubframes` flag set.
3709 - name: fission.remoteObjectEmbed
3710   type: bool
3711   value: true
3712   mirror: always
3714 # If true, show option for opening a non-Fission window in a menu, when Fission
3715 # is enabled.
3716 - name: fission.openNonFissionWindowOption
3717   type: bool
3718   value: false
3719   mirror: always
3721 #---------------------------------------------------------------------------
3722 # Prefs starting with "font."
3723 #---------------------------------------------------------------------------
3725 # A value greater than zero enables font size inflation for
3726 # pan-and-zoom UIs, so that the fonts in a block are at least the size
3727 # that, if a block's width is scaled to match the device's width, the
3728 # fonts in the block are big enough that at most the pref value ems of
3729 # text fit in *the width of the device*.
3731 # When both this pref and the next are set, the larger inflation is used.
3732 - name: font.size.inflation.emPerLine
3733   type: uint32_t
3734   value: 0
3735   mirror: always
3737 # A value greater than zero enables font size inflation for
3738 # pan-and-zoom UIs, so that if a block's width is scaled to match the
3739 # device's width, the fonts in a block are at least the given font size.
3740 # The value given is in twips, i.e., 1/20 of a point, or 1/1440 of an inch.
3742 # When both this pref and the previous are set, the larger inflation is used.
3743 - name: font.size.inflation.minTwips
3744   type: uint32_t
3745   value: 0
3746   mirror: always
3748 # In products with multi-mode pan-and-zoom and non-pan-and-zoom UIs,
3749 # this pref forces font inflation to always be enabled in all modes.
3750 # That is, any heuristics used to detect pan-and-zoom
3751 # vs. non-pan-and-zoom modes are disabled and all content is treated
3752 # as pan-and-zoom mode wrt font inflation.
3754 # This pref has no effect if font inflation is not enabled through
3755 # either of the prefs above.  It has no meaning in single-mode UIs.
3756 - name: font.size.inflation.forceEnabled
3757   type: bool
3758   value: false
3759   mirror: always
3761 # In products with multi-mode pan-and-zoom and non-pan-and-zoom UIs,
3762 # this pref disables font inflation in master-process contexts where
3763 # existing heuristics can't be used determine enabled-ness.
3765 # This pref has no effect if font inflation is not enabled through
3766 # either of the prefs above.  The "forceEnabled" pref above overrides
3767 # this pref.
3768 - name: font.size.inflation.disabledInMasterProcess
3769   type: bool
3770   value: false
3771   mirror: always
3773 # Defines the font size inflation mapping intercept parameter.
3775 # Font size inflation computes a minimum font size, m, based on
3776 # other preferences (see font.size.inflation.minTwips and
3777 # font.size.inflation.emPerLine, above) and the width of the
3778 # frame in which the text resides. Using this minimum, a specified
3779 # font size, s, is mapped to an inflated font size, i, using an
3780 # equation that varies depending on the value of the font size
3781 # inflation mapping intercept parameter, P.
3783 # If the intercept parameter is negative, then the following mapping
3784 # function is used:
3786 # i = m + s
3788 # If the intercept parameter is non-negative, then the mapping function
3789 # is a function such that its graph meets the graph of i = s at the
3790 # point where both i and s are (1 + P/2) * m for values of s that are
3791 # large enough. This means that when s=0, i is always equal to m.
3792 - name: font.size.inflation.mappingIntercept
3793   type: int32_t
3794   value: 1
3795   mirror: always
3797 # Since the goal of font size inflation is to avoid having to
3798 # repeatedly scroll side to side to read a block of text, and there are
3799 # a number of page layouts where a relatively small chunk of text is
3800 # better off not being inflated according to the same algorithm we use
3801 # for larger chunks of text, we want a threshold for an amount of text
3802 # that triggers font size inflation.  This preference controls that
3803 # threshold.
3805 # It controls the threshold used within an *approximation* of the
3806 # number of lines of text we use.  In particular, if we assume that
3807 # each character (collapsing collapsible whitespace) has a width the
3808 # same as the em-size of the font (when, normally, it's actually quite
3809 # a bit smaller on average), this preference gives the percentage of a
3810 # number of lines of text we'd need to trigger inflation.  This means
3811 # that a percentage of 100 means that we'd need a number of characters
3812 # (we know the font size and the width) equivalent to one line of
3813 # square text (which is actually a lot less than a real line of text).
3815 # A value of 0 means there's no character length threshold.
3816 - name: font.size.inflation.lineThreshold
3817   type: uint32_t
3818   value: 400
3819   mirror: always
3821 # This controls the percentage that fonts will be inflated, if font
3822 # size inflation is enabled. Essentially, if we have a specified font
3823 # size, s, and an inflated font size, i, this specifies that the ratio
3824 # i/s * 100 should never exceed the value of this preference. In order
3825 # for this preference to have any effect, its value must be greater
3826 # than 100, since font inflation can never decrease the ratio i/s.
3827 - name: font.size.inflation.maxRatio
3828   type: uint32_t
3829   value: 0
3830   mirror: always
3832 # This setting corresponds to a global text zoom setting affecting
3833 # all content that is not already subject to font size inflation.
3834 # It is interpreted as a percentage value that is applied on top
3835 # of the document's current text zoom setting.
3837 # The resulting total zoom factor (text zoom * system font scale)
3838 # will be limited by zoom.minPercent and maxPercent.
3839 - name: font.size.systemFontScale
3840   type: uint32_t
3841   value: 100
3842   mirror: always
3844 #---------------------------------------------------------------------------
3845 # Prefs starting with "full-screen-api."
3846 #---------------------------------------------------------------------------
3848 - name: full-screen-api.enabled
3849   type: bool
3850   value: false
3851   mirror: always
3853 - name: full-screen-api.allow-trusted-requests-only
3854   type: bool
3855   value: true
3856   mirror: always
3858 - name: full-screen-api.mouse-event-allow-left-button-only
3859   type: bool
3860   value: true
3861   mirror: always
3863 - name: full-screen-api.exit-on.windowOpen
3864   type: bool
3865   value: true
3866   mirror: always
3868 - name: full-screen-api.exit-on.windowRaise
3869   type: bool
3870   value: true
3871   mirror: always
3873 - name: full-screen-api.pointer-lock.enabled
3874   type: bool
3875   value: true
3876   mirror: always
3878 #---------------------------------------------------------------------------
3879 # Prefs starting with "fuzzing.". It's important that these can only be
3880 # checked in fuzzing builds (when FUZZING is defined), otherwise you could
3881 # enable the fuzzing stuff on your regular build which would be bad :)
3882 #---------------------------------------------------------------------------
3884 #ifdef FUZZING
3885 -   name: fuzzing.enabled
3886     type: bool
3887     value: false
3888     mirror: always
3890 -   name: fuzzing.necko.enabled
3891     type: RelaxedAtomicBool
3892     value: false
3893     mirror: always
3894 #endif
3896 #---------------------------------------------------------------------------
3897 # Prefs starting with "general."
3898 #---------------------------------------------------------------------------
3900 - name: general.aboutConfig.enable
3901   type: bool
3902   value: true
3903   mirror: always
3905 # Limits the depth of recursive conversion of data when opening
3906 # a content to view.  This is mostly intended to prevent infinite
3907 # loops with faulty converters involved.
3908 - name: general.document_open_conversion_depth_limit
3909   type: uint32_t
3910   value: 20
3911   mirror: always
3913 - name: general.smoothScroll
3914   type: RelaxedAtomicBool
3915   value: true
3916   mirror: always
3918 # This pref and general.smoothScroll.stopDecelerationWeighting determine
3919 # the timing function.
3920 - name: general.smoothScroll.currentVelocityWeighting
3921   type: AtomicFloat
3922   value: 0.25
3923   mirror: always
3925 # To connect consecutive scroll events into a continuous flow, the animation's
3926 # duration should be longer than scroll events intervals (or else the scroll
3927 # will stop before the next event arrives - we're guessing the next interval
3928 # by averaging recent intervals).
3929 # This defines how much longer the duration is compared to the events
3930 # interval (percentage).
3931 - name: general.smoothScroll.durationToIntervalRatio
3932   type: RelaxedAtomicInt32
3933   value: 200
3934   mirror: always
3936 - name: general.smoothScroll.lines
3937   type: RelaxedAtomicBool
3938   value: true
3939   mirror: always
3941 - name: general.smoothScroll.lines.durationMaxMS
3942   type: RelaxedAtomicInt32
3943   value: 150
3944   mirror: always
3946 - name: general.smoothScroll.lines.durationMinMS
3947   type: RelaxedAtomicInt32
3948   value: 150
3949   mirror: always
3951 - name: general.smoothScroll.mouseWheel
3952   type: RelaxedAtomicBool
3953   value: true
3954   mirror: always
3956 - name: general.smoothScroll.mouseWheel.durationMaxMS
3957   type: RelaxedAtomicInt32
3958   value: 200
3959   mirror: always
3961 - name: general.smoothScroll.mouseWheel.durationMinMS
3962   type: RelaxedAtomicInt32
3963   value: 50
3964   mirror: always
3966 - name: general.smoothScroll.mouseWheel.migrationPercent
3967   type: RelaxedAtomicInt32
3968   value: 100
3969   mirror: always
3971 - name: general.smoothScroll.other
3972   type: RelaxedAtomicBool
3973   value: true
3974   mirror: always
3976 - name: general.smoothScroll.other.durationMaxMS
3977   type: RelaxedAtomicInt32
3978   value: 150
3979   mirror: always
3981 - name: general.smoothScroll.other.durationMinMS
3982   type: RelaxedAtomicInt32
3983   value: 150
3984   mirror: always
3986 - name: general.smoothScroll.pages
3987   type: RelaxedAtomicBool
3988   value: true
3989   mirror: always
3991 - name: general.smoothScroll.pages.durationMaxMS
3992   type: RelaxedAtomicInt32
3993   value: 150
3994   mirror: always
3996 - name: general.smoothScroll.pages.durationMinMS
3997   type: RelaxedAtomicInt32
3998   value: 150
3999   mirror: always
4001 - name: general.smoothScroll.scrollbars
4002   type: RelaxedAtomicBool
4003   value: true
4004   mirror: always
4006 - name: general.smoothScroll.scrollbars.durationMaxMS
4007   type: RelaxedAtomicInt32
4008   value: 150
4009   mirror: always
4011 - name: general.smoothScroll.scrollbars.durationMinMS
4012   type: RelaxedAtomicInt32
4013   value: 150
4014   mirror: always
4016 - name: general.smoothScroll.pixels
4017   type: RelaxedAtomicBool
4018   value: true
4019   mirror: always
4021 - name: general.smoothScroll.pixels.durationMaxMS
4022   type: RelaxedAtomicInt32
4023   value: 150
4024   mirror: always
4026 - name: general.smoothScroll.pixels.durationMinMS
4027   type: RelaxedAtomicInt32
4028   value: 150
4029   mirror: always
4031 # This pref and general.smoothScroll.currentVelocityWeighting determine
4032 # the timing function.
4033 - name: general.smoothScroll.stopDecelerationWeighting
4034   type: AtomicFloat
4035   value: 0.4f
4036   mirror: always
4038 # Alternative smooth scroll physics. ("MSD" = Mass-Spring-Damper)
4039 - name: general.smoothScroll.msdPhysics.enabled
4040   type: RelaxedAtomicBool
4041   value: false
4042   mirror: always
4044 - name: general.smoothScroll.msdPhysics.continuousMotionMaxDeltaMS
4045   type: RelaxedAtomicInt32
4046   value: 120
4047   mirror: always
4049 - name: general.smoothScroll.msdPhysics.motionBeginSpringConstant
4050   type: RelaxedAtomicInt32
4051   value: 1250
4052   mirror: always
4054 - name: general.smoothScroll.msdPhysics.slowdownMinDeltaMS
4055   type: RelaxedAtomicInt32
4056   value: 12
4057   mirror: always
4059 - name: general.smoothScroll.msdPhysics.slowdownMinDeltaRatio
4060   type: AtomicFloat
4061   value: 1.3f
4062   mirror: always
4064 - name: general.smoothScroll.msdPhysics.slowdownSpringConstant
4065   type: RelaxedAtomicInt32
4066   value: 2000
4067   mirror: always
4069 - name: general.smoothScroll.msdPhysics.regularSpringConstant
4070   type: RelaxedAtomicInt32
4071   value: 1000
4072   mirror: always
4074 #---------------------------------------------------------------------------
4075 # Prefs starting with "geo."
4076 #---------------------------------------------------------------------------
4078 # Is support for Navigator.geolocation enabled?
4079 - name: geo.enabled
4080   type: bool
4081   value: true
4082   mirror: always
4084 # Time, in milliseconds, to wait for the location provider to spin up.
4085 - name: geo.timeout
4086   type: int32_t
4087   value: 6000
4088   mirror: always
4090 #---------------------------------------------------------------------------
4091 # Prefs starting with "gfx."
4092 #---------------------------------------------------------------------------
4094 - name: gfx.allow-texture-direct-mapping
4095   type: bool
4096   value: true
4097   mirror: once
4099 # Allow 24-bit colour when the hardware supports it.
4100 - name: gfx.android.rgb16.force
4101   type: bool
4102   value: false
4103   mirror: once
4105 - name: gfx.apitrace.enabled
4106   type: bool
4107   value: false
4108   mirror: once
4110 # Nb: we ignore this pref on release and beta.
4111 - name: gfx.blocklist.all
4112   type: int32_t
4113   value: 0
4114   mirror: once
4116 # 0x7fff is the maximum supported xlib surface size and is more than enough for canvases.
4117 - name: gfx.canvas.max-size
4118   type: RelaxedAtomicInt32
4119   value: 0x7fff
4120   mirror: always
4122 - name: gfx.canvas.remote
4123   type: RelaxedAtomicBool
4124 #if defined(XP_WIN)
4125   value: true
4126 #else
4127   value: false
4128 #endif
4129   mirror: always
4131 - name: gfx.color_management.enablev4
4132   type: RelaxedAtomicBool
4133   value: false
4134   mirror: always
4136 # 0 = Off, 1 = Full, 2 = Tagged Images Only.
4137 # See eCMSMode in gfx/thebes/gfxPlatform.h.
4138 - name: gfx.color_management.mode
4139   type: RelaxedAtomicInt32
4140   value: 2
4141   mirror: always
4143 # The zero default here should match QCMS_INTENT_DEFAULT from qcms.h
4144 - name: gfx.color_management.rendering_intent
4145   type: RelaxedAtomicInt32
4146   value: 0
4147   mirror: always
4149 - name: gfx.compositor.clearstate
4150   type: RelaxedAtomicBool
4151   value: false
4152   mirror: always
4154 # Whether GL contexts can be migrated to a different GPU (to match the one the
4155 # OS is using for composition).
4157 # 0 = force disable migration
4158 # 1 = use migration where in safe configurations (the default)
4159 # 2 = force enable migration (for testing)
4160 - name: gfx.compositor.gpu-migration
4161   type: RelaxedAtomicInt32
4162   value: 1
4163   mirror: always
4165 - name: gfx.core-animation.tint-opaque
4166   type: RelaxedAtomicBool
4167   value: false
4168   mirror: always
4170 #if defined(MOZ_WIDGET_ANDROID)
4171   # Overrides the glClear color used when the surface origin is not (0, 0)
4172   # Used for drawing a border around the content.
4173 -   name: gfx.compositor.override.clear-color.r
4174     type: AtomicFloat
4175     value: 0.0f
4176     mirror: always
4178 -   name: gfx.compositor.override.clear-color.g
4179     type: AtomicFloat
4180     value: 0.0f
4181     mirror: always
4183 -   name: gfx.compositor.override.clear-color.b
4184     type: AtomicFloat
4185     value: 0.0f
4186     mirror: always
4188 -   name: gfx.compositor.override.clear-color.a
4189     type: AtomicFloat
4190     value: 0.0f
4191     mirror: always
4192 #endif  # defined(MOZ_WIDGET_ANDROID)
4194 - name: gfx.content.always-paint
4195   type: RelaxedAtomicBool
4196   value: false
4197   mirror: always
4199 # Size in megabytes
4200 - name: gfx.content.skia-font-cache-size
4201   type: int32_t
4202   value: 5
4203   mirror: once
4205 - name: gfx.device-reset.limit
4206   type: int32_t
4207   value: 10
4208   mirror: once
4210 - name: gfx.device-reset.threshold-ms
4211   type: int32_t
4212   value: -1
4213   mirror: once
4216 # Whether to disable the automatic detection and use of direct2d.
4217 - name: gfx.direct2d.disabled
4218   type: bool
4219   value: false
4220   mirror: once
4222 # Whether to attempt to enable Direct2D regardless of automatic detection or
4223 # blacklisting.
4224 - name: gfx.direct2d.force-enabled
4225   type: bool
4226   value: false
4227   mirror: once
4229 # Whether to defer destruction of Direct2D DrawTargets to the paint thread
4230 # when using OMTP.
4231 - name: gfx.direct2d.destroy-dt-on-paintthread
4232   type: RelaxedAtomicBool
4233   value: true
4234   mirror: always
4236 - name: gfx.direct3d11.reuse-decoder-device
4237   type: RelaxedAtomicInt32
4238   value: -1
4239   mirror: always
4241 - name: gfx.direct3d11.allow-keyed-mutex
4242   type: RelaxedAtomicBool
4243   value: true
4244   mirror: always
4246 - name: gfx.direct3d11.use-double-buffering
4247   type: RelaxedAtomicBool
4248   value: false
4249   mirror: always
4251 - name: gfx.direct3d11.enable-debug-layer
4252   type: bool
4253   value: false
4254   mirror: once
4256 - name: gfx.direct3d11.break-on-error
4257   type: bool
4258   value: false
4259   mirror: once
4261 - name: gfx.direct3d11.sleep-on-create-device
4262   type: int32_t
4263   value: 0
4264   mirror: once
4266 # Whether to preserve color bitmap tables in fonts (bypassing OTS).
4267 # Currently these are supported only on platforms where we use Freetype
4268 # to render fonts (Linux/Gtk and Android).
4269 - name: gfx.downloadable_fonts.keep_color_bitmaps
4270   type: RelaxedAtomicBool
4271   value: false
4272   mirror: always
4274 # Whether font sanitization is performed on the main thread or not.
4275 - name: gfx.downloadable_fonts.sanitize_omt
4276   type: RelaxedAtomicBool
4277   value: true
4278   mirror: always
4280 # Whether to validate OpenType variation tables in fonts.
4281 - name: gfx.downloadable_fonts.validate_variation_tables
4282   type: RelaxedAtomicBool
4283   value: true
4284   mirror: always
4286 # Whether OTS validation should be applied to OpenType Layout (OTL) tables.
4287 - name: gfx.downloadable_fonts.otl_validation
4288   type: RelaxedAtomicBool
4289   value: @IS_NOT_RELEASE_OR_BETA@
4290   mirror: always
4292 - name: gfx.draw-color-bars
4293   type: RelaxedAtomicBool
4294   value: false
4295   mirror: always
4297 - name: gfx.e10s.hide-plugins-for-scroll
4298   type: bool
4299   value: true
4300   mirror: once
4302 - name: gfx.e10s.font-list.shared
4303   type: bool
4304   value: @IS_EARLY_BETA_OR_EARLIER@
4305   mirror: once
4307 # Whether to load fonts (e.g. Twemoji Mozilla) bundled with the application:
4308 #  -1 - Auto behavior based on OS version (currently, disables loading on Win8.1 or later,
4309 #       or on "low-memory" Android devices)
4310 #   0 - Skip loading any bundled fonts
4311 #   1 - Always load bundled fonts
4312 - name: gfx.bundled-fonts.activate
4313   type: int32_t
4314   value: -1
4315   mirror: once
4317 - name: gfx.font_loader.delay
4318   type: uint32_t
4319 #if defined(XP_WIN)
4320   value: 60000
4321 #else
4322   value: 8000
4323 #endif
4324   mirror: once
4326 # Disable antialiasing of Ahem, for use in tests.
4327 - name: gfx.font_rendering.ahem_antialias_none
4328   type: RelaxedAtomicBool
4329   value: false
4330   mirror: always
4332 #if defined(XP_MACOSX)
4333   # Set to true to revert from HarfBuzz AAT shaping to the old Core Text
4334   # backend.
4335 -   name: gfx.font_rendering.coretext.enabled
4336     type: RelaxedAtomicBool
4337     value: false
4338     mirror: always
4339 #endif
4341 - name: gfx.font_rendering.opentype_svg.enabled
4342   type: RelaxedAtomicBool
4343   value: true
4344   mirror: always
4345   rust: true
4347 - name: gfx.font_rendering.fallback.async
4348   type: RelaxedAtomicBool
4349   value: true
4350   mirror: always
4352 #  Whether to enable LayerScope tool and default listening port.
4353 - name: gfx.layerscope.enabled
4354   type: RelaxedAtomicBool
4355   value: false
4356   mirror: always
4358 - name: gfx.layerscope.port
4359   type: RelaxedAtomicInt32
4360   value: 23456
4361   mirror: always
4363 # The level of logging:
4364 # - 0: no logging;
4365 # - 1: adds errors;
4366 # - 2: adds warnings;
4367 # - 3 or 4: adds debug logging.
4368 # If you set the value to 4, you will also need to set the environment
4369 # variable MOZ_LOG to gfx:4. See mozilla/Logging.h for details.
4370 - name: gfx.logging.level
4371   type: RelaxedAtomicInt32
4372   value: mozilla::gfx::LOG_DEFAULT
4373   mirror: always
4374   include: mozilla/gfx/LoggingConstants.h
4376 - name: gfx.logging.crash.length
4377   type: uint32_t
4378   value: 16
4379   mirror: once
4381 - name: gfx.logging.painted-pixel-count.enabled
4382   type: RelaxedAtomicBool
4383   value: false
4384   mirror: always
4386 # The maximums here are quite conservative, we can tighten them if problems show up.
4387 - name: gfx.logging.texture-usage.enabled
4388   type: bool
4389   value: false
4390   mirror: once
4392 - name: gfx.logging.peak-texture-usage.enabled
4393   type: bool
4394   value: false
4395   mirror: once
4397 - name: gfx.logging.slow-frames.enabled
4398   type: bool
4399   value: false
4400   mirror: once
4402 # Use gfxPlatform::MaxAllocSize instead of the pref directly.
4403 - name: gfx.max-alloc-size
4404   type: int32_t
4405   value: (int32_t)500000000
4406   mirror: once
4407   do_not_use_directly: true
4409 # Use gfxPlatform::MaxTextureSize instead of the pref directly.
4410 - name: gfx.max-texture-size
4411   type: int32_t
4412   value: (int32_t)32767
4413   mirror: once
4414   do_not_use_directly: true
4416 - name: gfx.offscreencanvas.enabled
4417   type: RelaxedAtomicBool
4418   value: false
4419   mirror: always
4421 - name: gfx.omta.background-color
4422   type: bool
4423   value: true
4424   mirror: always
4426 - name: gfx.partialpresent.force
4427   type: RelaxedAtomicInt32
4428   value: 0
4429   mirror: always
4431 # Log severe performance warnings to the error console and profiles.
4432 # This should be use to quickly find which slow paths are used by test cases.
4433 - name: gfx.perf-warnings.enabled
4434   type: RelaxedAtomicBool
4435   value: false
4436   mirror: always
4438 # Prefer EGL over GLX if available.
4439 - name: gfx.prefer-x11-egl
4440   type: bool
4441   value: false
4442   mirror: once
4444 - name: gfx.testing.device-fail
4445   type: RelaxedAtomicBool
4446   value: false
4447   mirror: always
4449 - name: gfx.testing.device-reset
4450   type: RelaxedAtomicInt32
4451   value: 0
4452   mirror: always
4454 - name: gfx.text.disable-aa
4455   type: bool
4456   value: false
4457   mirror: once
4459 - name: gfx.text.subpixel-position.force-enabled
4460   type: bool
4461   value: false
4462   mirror: once
4464 - name: gfx.text.subpixel-position.force-disabled
4465   type: bool
4466   value: false
4467   mirror: once
4469 # Disable surface sharing due to issues with compatible FBConfigs on
4470 # NVIDIA drivers as described in bug 1193015.
4471 - name: gfx.use-glx-texture-from-pixmap
4472   type: RelaxedAtomicBool
4473   value: false
4474   mirror: always
4476 - name: gfx.use-iosurface-textures
4477   type: bool
4478   value: false
4479   mirror: once
4481 - name: gfx.use-mutex-on-present
4482   type: bool
4483   value: false
4484   mirror: once
4486 - name: gfx.use-ahardwarebuffer-content
4487   type: bool
4488   value: false
4489   mirror: once
4491 # Use SurfaceTextures as preferred backend for TextureClient/Host.
4492 - name: gfx.use-surfacetexture-textures
4493   type: bool
4494   value: false
4495   mirror: once
4497 - name: gfx.vsync.collect-scroll-transforms
4498   type: RelaxedAtomicBool
4499   value: false
4500   mirror: always
4502 - name: gfx.vsync.compositor.unobserve-count
4503   type: int32_t
4504   value: 10
4505   mirror: once
4507 - name: gfx.vsync.force-disable-waitforvblank
4508   type: RelaxedAtomicBool
4509   value: false
4510   mirror: always
4512 # We expose two prefs: gfx.webrender.all and gfx.webrender.enabled.
4513 # The first enables WR+additional features, and the second just enables WR.
4514 # For developer convenience, building with --enable-webrender=true or just
4515 # --enable-webrender will set gfx.webrender.enabled to true by default.
4517 # We also have a pref gfx.webrender.all.qualified which is not exposed via
4518 # about:config. That pref enables WR but only on qualified hardware. This is
4519 # the pref we'll eventually flip to deploy WebRender to the target population.
4520 - name: gfx.webrender.all
4521   type: bool
4522   value: false
4523   mirror: once
4525 - name: gfx.webrender.enabled
4526   type: bool
4527   value: false
4528   mirror: once
4529   do_not_use_directly: true
4531 #ifdef XP_WIN
4532 - name: gfx.webrender.force-angle
4533   type: bool
4534   value: true
4535   mirror: once
4536 #endif
4538 # WebRender is not enabled when there is no GPU process on window when
4539 # WebRender uses ANGLE. It is for avoiding that WebGL and WebRender use ANGLE
4540 # at once. But there is a case that we want to enable WebRender for testing.
4541 #ifdef XP_WIN
4542 - name: gfx.webrender.enabled-no-gpu-process-with-angle-win
4543   type: bool
4544   value: true
4545   mirror: once
4546 #endif
4548 - name: gfx.webrender.blob-images
4549   type: RelaxedAtomicBool
4550   value: true
4551   mirror: always
4553 - name: gfx.webrender.svg-images
4554   type: RelaxedAtomicBool
4555   value: false
4556   mirror: always
4558 - name: gfx.webrender.blob.paint-flashing
4559   type: RelaxedAtomicBool
4560   value: false
4561   mirror: always
4563 - name: gfx.webrender.enable-capture
4564   type: bool
4565 #ifdef NIGHTLY_BUILD
4566   value: true
4567 #else
4568   value: false
4569 #endif
4570   mirror: once
4572 - name: gfx.webrender.dl.dump-parent
4573   type: RelaxedAtomicBool
4574   value: false
4575   mirror: always
4577 - name: gfx.webrender.dl.dump-content
4578   type: RelaxedAtomicBool
4579   value: false
4580   mirror: always
4582 - name: gfx.webrender.dl.dump-content-serialized
4583   type: RelaxedAtomicBool
4584   value: false
4585   mirror: always
4587 # Also expose a pref to allow users to force-disable WR. This is exposed
4588 # on all channels because WR can be enabled on qualified hardware on all
4589 # channels.
4590 - name: gfx.webrender.force-disabled
4591   type: bool
4592   value: false
4593   mirror: once
4595 - name: gfx.webrender.highlight-painted-layers
4596   type: RelaxedAtomicBool
4597   value: false
4598   mirror: always
4600 - name: gfx.webrender.late-scenebuild-threshold
4601   type: RelaxedAtomicInt32
4602   value: 4
4603   mirror: always
4605 - name: gfx.webrender.max-filter-ops-per-chain
4606   type: RelaxedAtomicUint32
4607   value: 64
4608   mirror: always
4610 - name: gfx.webrender.enable-multithreading
4611   type: bool
4612   value: true
4613   mirror: always
4615 - name: gfx.webrender.batching.lookback
4616   type: uint32_t
4617   value: 10
4618   mirror: always
4620 - name: gfx.webrender.compositor
4621   type: bool
4622 #if defined(XP_WIN) || defined(XP_MACOSX)
4623   value: true
4624 #else
4625   value: false
4626 #endif
4627   mirror: once
4629 - name: gfx.webrender.compositor.force-enabled
4630   type: bool
4631   value: false
4632   mirror: once
4634 - name: gfx.webrender.compositor.max_update_rects
4635   type: uint32_t
4636 #if defined(XP_WIN) || defined(XP_MACOSX)
4637   value: 1
4638 #else
4639   value: 0
4640 #endif
4641   mirror: once
4643 - name: gfx.webrender.compositor.surface-pool-size
4644   type: uint32_t
4645   value: 25
4646   mirror: once
4648 # Number of damage rects we can give to the compositor for a new frame with
4649 # partial present. This controls whether partial present is used or not.
4650 - name: gfx.webrender.max-partial-present-rects
4651   type: uint32_t
4652 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WIDGET_GTK)
4653   value: 1
4654 #else
4655   value: 0
4656 #endif
4657   mirror: once
4659 # Whether or not we can reuse the buffer contents using the GL buffer age
4660 # extension, if supported by the platform. This requires partial present
4661 # to be used.
4662 - name: gfx.webrender.allow-partial-present-buffer-age
4663   type: bool
4664   value: true
4665   mirror: once
4667 - name: gfx.webrender.enable-gpu-markers
4668   type: bool
4669 #ifdef DEBUG
4670   value: true
4671 #else
4672   value: false
4673 #endif
4674   mirror: once
4676 - name: gfx.webrender.enable-item-cache
4677   type: bool
4678   value: true
4679   mirror: once
4681 # Whether or not to fallback from WebRender/WebRender Software to Basic.
4682 - name: gfx.webrender.fallback.basic
4683   type: bool
4684   value: true
4685   mirror: once
4687 # Whether or not to fallback from WebRender to Software WebRender.
4688 - name: gfx.webrender.fallback.software
4689   type: bool
4690   value: @IS_NIGHTLY_BUILD@
4691   mirror: once
4693 #ifdef XP_WIN
4694   # Whether or not to fallback from WebRender to Software WebRender + D3D11.
4695 -   name: gfx.webrender.fallback.software-d3d11
4696     type: bool
4697     value: @IS_NIGHTLY_BUILD@
4698     mirror: once
4699 #endif
4701 - name: gfx.webrender.use-optimized-shaders
4702   type: bool
4703   value: true
4704   mirror: once
4706 - name: gfx.webrender.precache-shaders
4707   type: bool
4708   value: false
4709   mirror: once
4711 # When gl debug message is a high severity message, forwward it to gfx critical
4712 # note.
4713 - name: gfx.webrender.gl-debug-message-critical-note
4714   type: bool
4715 #if defined(XP_WIN) && defined(NIGHTLY_BUILD)
4716   value: true
4717 #else
4718   value: false
4719 #endif
4720   mirror: once
4722 # Enable printing gl debug messages
4723 - name: gfx.webrender.gl-debug-message-print
4724   type: bool
4725   value: false
4726   mirror: once
4728 #ifdef NIGHTLY_BUILD
4729   # Keep this pref hidden on non-nightly builds to avoid people accidentally
4730   # turning it on.
4731 - name: gfx.webrender.panic-on-gl-error
4732   type: bool
4733   value: false
4734   mirror: once
4735 #endif
4737 #ifdef NIGHTLY_BUILD
4738   # Keep this pref hidden on non-nightly builds to avoid people accidentally
4739   # turning it on.
4740 -   name: gfx.webrender.start-debug-server
4741     type: RelaxedAtomicBool
4742     value: false
4743     mirror: always
4744 #endif
4746 #ifdef XP_WIN
4747   # Enables display of performance debugging counters when DirectComposition
4748   # is used.
4749   # Performance counters are displayed on the top-right corner of the screen.
4750 -   name: gfx.webrender.debug.dcomp-counter
4751     type: RelaxedAtomicBool
4752     value: false
4753     mirror: always
4754   # Enables highlighting redraw regions of DCompositionVisual
4755 -   name: gfx.webrender.debug.dcomp-redraw-regions
4756     type: RelaxedAtomicBool
4757     value: false
4758     mirror: always
4759 #endif
4761 - name: gfx.webrender.enable-low-priority-pool
4762   type: RelaxedAtomicBool
4763 #if defined(ANDROID)
4764   value: false
4765 #else
4766   value: true
4767 #endif
4768   mirror: always
4770   # Force subpixel anti-aliasing as much as possible, despite performance cost.
4771 - name: gfx.webrender.quality.force-subpixel-aa-where-possible
4772   type: bool
4773   value: false
4774   mirror: always
4776 #ifdef XP_MACOSX
4777 - name: gfx.webrender.enable-client-storage
4778   type: bool
4779   value: true
4780   mirror: once
4781 #endif
4783  # Width of WebRender tile size
4784 - name: gfx.webrender.picture-tile-width
4785   type: RelaxedAtomicInt32
4786   value: 1024
4787   mirror: always
4789  # Width of WebRender tile size
4790 - name: gfx.webrender.picture-tile-height
4791   type: RelaxedAtomicInt32
4792   value: 512
4793   mirror: always
4795 # Whether to use EGL robustness or not.
4796 - name: gfx.webrender.prefer-robustness
4797   type: bool
4798 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
4799   value: true
4800 #else
4801   value: false
4802 #endif
4803   mirror: once
4805 # Whether to use the WebRender software backend
4806 - name: gfx.webrender.software
4807   type: bool
4808   value: false
4809   mirror: once
4811 # Whether to use the D3D11 RenderCompositor when using WebRender software backend
4812 - name: gfx.webrender.software.d3d11
4813   type: bool
4814   value: true
4815   mirror: once
4817 - name: gfx.webrender.software.d3d11.upload-mode
4818   type: RelaxedAtomicInt32
4819   value: 2
4820   mirror: always
4822 # Use vsync events generated by hardware
4823 - name: gfx.work-around-driver-bugs
4824   type: bool
4825   value: true
4826   mirror: once
4828 - name: gfx.ycbcr.accurate-conversion
4829   type: RelaxedAtomicBool
4830   value: false
4831   mirror: always
4833 #---------------------------------------------------------------------------
4834 # Prefs starting with "gl." (OpenGL)
4835 #---------------------------------------------------------------------------
4837 - name: gl.allow-high-power
4838   type: RelaxedAtomicBool
4839   value: true
4840   mirror: always
4842 - name: gl.ignore-dx-interop2-blacklist
4843   type: RelaxedAtomicBool
4844   value: false
4845   mirror: always
4847 - name: gl.use-tls-is-current
4848   type: RelaxedAtomicInt32
4849   value: 0
4850   mirror: always
4852 #---------------------------------------------------------------------------
4853 # Prefs starting with "html5."
4854 #---------------------------------------------------------------------------
4856 # Turn HTML:inert on or off.
4857 - name: html5.inert.enabled
4858   type: bool
4859   value: false
4860   mirror: always
4862 # Toggle which thread the HTML5 parser uses for stream parsing.
4863 - name: html5.offmainthread
4864   type: bool
4865   value: true
4866   mirror: always
4868 # Time in milliseconds between the time a network buffer is seen and the timer
4869 # firing when the timer hasn't fired previously in this parse in the
4870 # off-the-main-thread HTML5 parser.
4871 - name: html5.flushtimer.initialdelay
4872   type: RelaxedAtomicInt32
4873   value: 16
4874   mirror: always
4876 # Time in milliseconds between the time a network buffer is seen and the timer
4877 # firing when the timer has already fired previously in this parse.
4878 - name: html5.flushtimer.subsequentdelay
4879   type: RelaxedAtomicInt32
4880   value: 16
4881   mirror: always
4883 #---------------------------------------------------------------------------
4884 # Prefs starting with "idle_period."
4885 #---------------------------------------------------------------------------
4887 - name: idle_period.min
4888   type: uint32_t
4889   value: 3
4890   mirror: always
4892 - name: idle_period.during_page_load.min
4893   type: uint32_t
4894   value: 12
4895   mirror: always
4897 - name: idle_period.cross_process_scheduling
4898   type: RelaxedAtomicBool
4899   value: true
4900   mirror: always
4902 #---------------------------------------------------------------------------
4903 # Prefs starting with "image."
4904 #---------------------------------------------------------------------------
4906 # The maximum size (in kB) that the aggregate frames of an animation can use
4907 # before it starts to discard already displayed frames and redecode them as
4908 # necessary.
4909 - name: image.animated.decode-on-demand.threshold-kb
4910   type: RelaxedAtomicUint32
4911   value: 20*1024
4912   mirror: always
4914 # The minimum number of frames we want to have buffered ahead of an
4915 # animation's currently displayed frame.
4916 - name: image.animated.decode-on-demand.batch-size
4917   type: RelaxedAtomicUint32
4918   value: 6
4919   mirror: always
4921 # Whether we should recycle already displayed frames instead of discarding
4922 # them. This saves on the allocation itself, and may be able to reuse the
4923 # contents as well. Only applies if generating full frames.
4924 - name: image.animated.decode-on-demand.recycle
4925   type: bool
4926   value: true
4927   mirror: once
4929 # Resume an animated image from the last displayed frame rather than
4930 # advancing when out of view.
4931 - name: image.animated.resume-from-last-displayed
4932   type: RelaxedAtomicBool
4933   value: true
4934   mirror: always
4936 # Maximum number of surfaces for an image before entering "factor of 2" mode.
4937 # This in addition to the number of "native" sizes of an image. A native size
4938 # is a size for which we can decode a frame without up or downscaling. Most
4939 # images only have 1, but some (i.e. ICOs) may have multiple frames for the
4940 # same data at different sizes.
4941 - name: image.cache.factor2.threshold-surfaces
4942   type: RelaxedAtomicInt32
4943   value: 4
4944   mirror: always
4946 # Maximum size of a surface in KB we are willing to produce when rasterizing
4947 # an SVG.
4948 - name: image.cache.max-rasterized-svg-threshold-kb
4949   type: RelaxedAtomicInt32
4950   value: 200*1024
4951   mirror: always
4953 # The maximum size, in bytes, of the decoded images we cache.
4954 - name: image.cache.size
4955   type: int32_t
4956   value: 5*1024*1024
4957   mirror: once
4959 # A weight, from 0-1000, to place on time when comparing to size.
4960 # Size is given a weight of 1000 - timeweight.
4961 - name: image.cache.timeweight
4962   type: int32_t
4963   value: 500
4964   mirror: once
4966 # Decode all images automatically on load, ignoring our normal heuristics.
4967 - name: image.decode-immediately.enabled
4968   type: RelaxedAtomicBool
4969   value: false
4970   mirror: always
4972 # Whether we attempt to downscale images during decoding.
4973 - name: image.downscale-during-decode.enabled
4974   type: RelaxedAtomicBool
4975   value: true
4976   mirror: always
4978 # Whether to honor orientation metadata (such as JPEG EXIF tags) by default.
4979 # When this pref is enabled, all images used by the platform will be correctly
4980 # re-oriented, except for content images (HTML <img> and CSS generated content
4981 # images) with image-orientation:none.
4982 - name: image.honor-orientation-metadata
4983   type: RelaxedAtomicBool
4984   value: true
4985   mirror: always
4987 # Honor image orientation metadata in the naturalWidth and naturalHeight
4988 # APIs on HTMLImageElement.
4989 - name: image.honor_orientation_metadata.natural_size
4990   type: bool
4991   value: true
4992   mirror: always
4994 # The threshold for inferring that changes to an <img> element's |src|
4995 # attribute by JavaScript represent an animation, in milliseconds. If the |src|
4996 # attribute is changing more frequently than this value, then we enter a
4997 # special "animation mode" which is designed to eliminate flicker. Set to 0 to
4998 # disable.
4999 - name: image.infer-src-animation.threshold-ms
5000   type: RelaxedAtomicUint32
5001   value: 2000
5002   mirror: always
5004 # Whether the network request priority should be adjusted according
5005 # the layout and view frame position of each particular image.
5006 - name: image.layout_network_priority
5007   type: RelaxedAtomicBool
5008   value: true
5009   mirror: always
5011 # Chunk size for calls to the image decoders.
5012 - name: image.mem.decode_bytes_at_a_time
5013   type: uint32_t
5014   value: 16384
5015   mirror: once
5017 # Discards inactive image frames and re-decodes them on demand from
5018 # compressed data.
5019 - name: image.mem.discardable
5020   type: RelaxedAtomicBool
5021   value: true
5022   mirror: always
5024 # Discards inactive image frames of _animated_ images and re-decodes them on
5025 # demand from compressed data. Has no effect if image.mem.discardable is false.
5026 - name: image.mem.animated.discardable
5027   type: bool
5028   value: true
5029   mirror: once
5031 # Whether the heap should be used for frames from animated images. On Android,
5032 # volatile memory keeps file handles open for each buffer.
5033 - name: image.mem.animated.use_heap
5034   type: RelaxedAtomicBool
5035   value: @IS_ANDROID@
5036   mirror: always
5038 # Enable extra information for debugging in the image memory reports.
5039 - name: image.mem.debug-reporting
5040   type: RelaxedAtomicBool
5041   value: false
5042   mirror: always
5044 # Decodes images into shared memory to allow direct use in separate
5045 # rendering processes. Only applicable with WebRender.
5046 - name: image.mem.shared
5047   type: RelaxedAtomicBool
5048   value: true
5049   mirror: always
5051 # How much of the data in the surface cache is discarded when we get a memory
5052 # pressure notification, as a fraction. The discard factor is interpreted as a
5053 # reciprocal, so a discard factor of 1 means to discard everything in the
5054 # surface cache on memory pressure, a discard factor of 2 means to discard half
5055 # of the data, and so forth. The default should be a good balance for desktop
5056 # and laptop systems, where we never discard visible images.
5057 - name: image.mem.surfacecache.discard_factor
5058   type: uint32_t
5059   value: 1
5060   mirror: once
5062 # Maximum size for the surface cache, in kilobytes.
5063 - name: image.mem.surfacecache.max_size_kb
5064   type: uint32_t
5065   value: 2024 * 1024
5066   mirror: once
5068 # Minimum timeout for expiring unused images from the surface cache, in
5069 # milliseconds. This controls how long we store cached temporary surfaces.
5070 - name: image.mem.surfacecache.min_expiration_ms
5071   type: uint32_t
5072   value: 60*1000
5073   mirror: once
5075 # The surface cache's size, within the constraints of the maximum size set
5076 # above, is determined as a fraction of main memory size. The size factor is
5077 # interpreted as a reciprocal, so a size factor of 4 means to use no more than
5078 # 1/4 of main memory.  The default should be a good balance for most systems.
5079 - name: image.mem.surfacecache.size_factor
5080   type: uint32_t
5081   value: 4
5082   mirror: once
5084 # Minimum buffer size in KB before using volatile memory over the heap.
5085 - name: image.mem.volatile.min_threshold_kb
5086   type: RelaxedAtomicInt32
5087 #if defined(ANDROID)
5088   # On Android, volatile memory keeps file handles open for each buffer.
5089   value: 100
5090 #else
5091   value: -1
5092 #endif
5093   mirror: always
5095 # How long in ms before we should start shutting down idle decoder threads.
5096 - name: image.multithreaded_decoding.idle_timeout
5097   type: int32_t
5098   value: 600000
5099   mirror: once
5101 # How many threads we'll use for multithreaded decoding. If < 0, will be
5102 # automatically determined based on the system's number of cores.
5103 - name: image.multithreaded_decoding.limit
5104   type: int32_t
5105   value: -1
5106   mirror: once
5108 # Whether we attempt to decode WebP images or not.
5109 - name: image.webp.enabled
5110   type: RelaxedAtomicBool
5111   value: true
5112   mirror: always
5114 # Whether we attempt to decode AVIF images or not.
5115 - name: image.avif.enabled
5116   type: RelaxedAtomicBool
5117   value: true
5118   mirror: always
5120 # Whether we use dav1d (true) or libaom (false) to decode AVIF image
5121 - name: image.avif.use-dav1d
5122   type: RelaxedAtomicBool
5123   value: true
5124   mirror: always
5126 #---------------------------------------------------------------------------
5127 # Prefs starting with "intl."
5128 #---------------------------------------------------------------------------
5130 # Whether the new encoding detector is enabled for the .jp TLD.
5131 - name: intl.charset.detector.ng.jp.enabled
5132   type: bool
5133   value: false
5134   mirror: always
5136 # Whether the new encoding detector is enabled for the .in TLD.
5137 - name: intl.charset.detector.ng.in.enabled
5138   type: bool
5139   value: false
5140   mirror: always
5142 # Whether the new encoding detector is enabled for the .lk TLD.
5143 - name: intl.charset.detector.ng.lk.enabled
5144   type: bool
5145   value: false
5146   mirror: always
5148 # If true, dispatch the keydown and keyup events on any web apps even during
5149 # composition.
5150 - name: intl.ime.hack.on_any_apps.fire_key_events_for_composition
5151   type: bool
5152   value: @IS_ANDROID@
5153   mirror: always
5155 # Android-specific pref to control if keydown and keyup events are fired even
5156 # during composition.  Note that those prefs are ignored if
5157 # dom.keyboardevent.dispatch_during_composition is false.
5158 - name: intl.ime.hack.on_ime_unaware_apps.fire_key_events_for_composition
5159   type: bool
5160 # If true and intl.ime.hack.on_any_apps.fire_key_events_for_composition is
5161 # false, dispatch the keydown and keyup events only on IME-unaware web apps.
5162 # So, this supports web apps which listen to only keydown or keyup events
5163 # to get a change to do something at every text input.
5164   value: @IS_ANDROID@
5165   mirror: always
5167 #ifdef XP_WIN
5168   # If true, automatically extend selection to cluster boundaries when
5169   # TSF/TIP requests to select from/by middle of a cluster.
5170 -   name: intl.tsf.hack.extend_setting_selection_range_to_cluster_boundaries
5171     type: bool
5172     value: @IS_NOT_EARLY_BETA_OR_EARLIER@
5173     mirror: always
5174 #endif
5176 # If you use legacy Chinese IME which puts an ideographic space to composition
5177 # string as placeholder, this pref might be useful.  If this is true and when
5178 # web contents forcibly commits composition (e.g., moving focus), the
5179 # ideographic space will be ignored (i.e., commits with empty string).
5180 - name: intl.ime.remove_placeholder_character_at_commit
5181   type: bool
5182   value: false
5183   mirror: always
5185 #---------------------------------------------------------------------------
5186 # Prefs starting with "javascript."
5187 #---------------------------------------------------------------------------
5189 - name: javascript.options.compact_on_user_inactive
5190   type: bool
5191   value: true
5192   mirror: always
5194 # The default amount of time to wait from the user being idle to starting a
5195 # shrinking GC. Measured in milliseconds.
5196 - name: javascript.options.compact_on_user_inactive_delay
5197   type: uint32_t
5198 #ifdef NIGHTLY_BUILD
5199   value: 15000
5200 #else
5201   value: 300000
5202 #endif
5203   mirror: always
5205 # Use better error message when accessing property of null or undefined.
5206 - name: javascript.options.property_error_message_fix
5207   type: RelaxedAtomicBool
5208   value: @IS_NIGHTLY_OR_DEV_EDITION@
5209   mirror: always
5211 # Support for weak references in JavaScript (WeakRef and FinalizationRegistry).
5212 - name: javascript.options.weakrefs
5213   type: RelaxedAtomicBool
5214   value: true
5215   mirror: always
5217 # Whether to expose the FinalizationRegistry.prototype.cleanupSome method.
5218 - name: javascript.options.experimental.weakrefs.expose_cleanupSome
5219   type: RelaxedAtomicBool
5220   value: false
5221   mirror: always
5223 #ifdef NIGHTLY_BUILD
5224   # Experimental support for Iterator Helpers in JavaScript.
5225 - name: javascript.options.experimental.iterator_helpers
5226   type: RelaxedAtomicBool
5227   value: false
5228   mirror: always
5230   # Experimental support for Private Fields in JavaScript.
5231 - name: javascript.options.experimental.private_fields
5232   type: RelaxedAtomicBool
5233   value: false
5234   mirror: always
5236   # Experimental support for Private Methods in JavaScript.
5237 - name: javascript.options.experimental.private_methods
5238   type: RelaxedAtomicBool
5239   value: false
5240   mirror: always
5242   # Experimental support for Top-level Await in JavaScript.
5243 - name: javascript.options.experimental.top_level_await
5244   type: RelaxedAtomicBool
5245   value: false
5246   mirror: always
5247 #endif
5249 # The amount of time we wait between a request to GC (due to leaving a page) and doing the actual GC, in ms.
5250 - name: javascript.options.gc_delay
5251   type: uint32_t
5252   value: 4000
5253   mirror: always
5255 # The amount of time we wait from the first request to GC to actually doing the first GC, in ms.
5256 - name: javascript.options.gc_delay.first
5257   type: uint32_t
5258   value: 10000
5259   mirror: always
5261 # After doing a zonal GC, wait this much time (in ms) and then do a full GC,
5262 # unless one is already pending.
5263 - name: javascript.options.gc_delay.full
5264   type: uint32_t
5265   value: 60000
5266   mirror: always
5268 # Maximum amount of time that should elapse between incremental GC slices, in ms.
5269 - name: javascript.options.gc_delay.interslice
5270   type: uint32_t
5271   value: 100
5272   mirror: always
5274 # nsJSEnvironmentObserver observes the memory-pressure notifications and
5275 # forces a garbage collection and cycle collection when it happens, if the
5276 # appropriate pref is set.
5277 - name: javascript.options.gc_on_memory_pressure
5278   type: bool
5279   # Disable the JS engine's GC on memory pressure, since we do one in the
5280   # mobile browser (bug 669346).
5281   # XXX: this value possibly should be changed, or the pref removed entirely.
5282   #      See bug 1450787.
5283   value: @IS_NOT_ANDROID@
5284   mirror: always
5286 - name: javascript.options.mem.log
5287   type: bool
5288   value: false
5289   mirror: always
5291 - name: javascript.options.mem.notify
5292   type: bool
5293   value: false
5294   mirror: always
5296 # Streams API.
5297 - name: javascript.options.streams
5298   type: RelaxedAtomicBool
5299   value: true
5300   mirror: always
5302 # Writable Streams API.  (The pref above must also be set to expose this.)
5304 # Writable streams are still EXTRAORDINARILY BETA and it is well-known that
5305 # things are likely pretty broken if you poke much at all, so if you flip this
5306 # preference, don't report bugs against it just yet.
5307 - name: javascript.options.writable_streams
5308   type: RelaxedAtomicBool
5309   value: false
5310   mirror: always
5312 - name: javascript.options.main_thread_stack_quota_cap
5313   type: uint32_t
5314 #if defined(MOZ_ASAN)
5315   value: 6 * 1024 * 1024
5316 #else
5317   value: 2 * 1024 * 1024
5318 #endif
5319   mirror: always
5321 - name: javascript.options.wasm_optimizingjit
5322   type: bool
5323 #if defined(MOZ_AARCH64) && !defined(ENABLE_WASM_CRANELIFT)
5324   value: false
5325 #else
5326   value: true
5327 #endif
5328   mirror: always
5330 #if defined(ENABLE_WASM_SIMD)
5331 - name: javascript.options.wasm_simd
5332   type: bool
5333   #if defined(NIGHTLY_BUILD)
5334   value: true
5335   #else
5336   value: false
5337   #endif
5338   mirror: always
5339 #endif
5341 #if defined(ENABLE_WASM_SIMD_WORMHOLE)
5342 # This is x64-only nightly-only and it would break unified macOS builds if
5343 # it were in all.js
5344 - name: javascript.options.wasm_simd_wormhole
5345   type: bool
5346   value: false
5347   mirror: always
5348 #endif
5350 - name: javascript.options.large_arraybuffers
5351   type: RelaxedAtomicBool
5352   value: false
5353   mirror: always
5355 #---------------------------------------------------------------------------
5356 # Prefs starting with "layers."
5357 #---------------------------------------------------------------------------
5359 # Whether to disable acceleration for all widgets.
5360 - name: layers.acceleration.disabled
5361   type: bool
5362   value: false
5363   mirror: once
5364   do_not_use_directly: true
5365 # Instead, use gfxConfig::IsEnabled(Feature::HW_COMPOSITING).
5367 - name: layers.acceleration.draw-fps
5368   type: RelaxedAtomicBool
5369   value: false
5370   mirror: always
5372 - name: layers.acceleration.draw-fps.print-histogram
5373   type: RelaxedAtomicBool
5374   value: false
5375   mirror: always
5377 - name: layers.acceleration.draw-fps.write-to-file
5378   type: RelaxedAtomicBool
5379   value: false
5380   mirror: always
5382 # Whether to force acceleration on, ignoring blacklists.
5384 # bug 838603 -- on Android, accidentally blacklisting OpenGL layers
5385 # means a startup crash for everyone.
5386 # Temporarily force-enable GL compositing.  This is default-disabled
5387 # deep within the bowels of the widgetry system.  Remove me when GL
5388 # compositing isn't default disabled in widget/android.
5389 - name: layers.acceleration.force-enabled
5390   type: bool
5391   value: @IS_ANDROID@
5392   mirror: once
5393   do_not_use_directly: true
5395 - name: layers.advanced.basic-layer.enabled
5396   type: RelaxedAtomicBool
5397   value: false
5398   mirror: always
5400 # Whether we allow advanced layers with fission
5401 - name: layers.advanced.fission.enabled
5402   type: bool
5403   value: false
5404   mirror: always
5406 # Whether we allow AMD switchable graphics.
5407 - name: layers.amd-switchable-gfx.enabled
5408   type: bool
5409   value: true
5410   mirror: once
5412 # Whether to use async panning and zooming.
5413 - name: layers.async-pan-zoom.enabled
5414   type: bool
5415   value: true
5416   mirror: once
5417   do_not_use_directly: true
5419 # Preference that when switched at runtime will run a series of benchmarks
5420 # and output the result to stderr.
5421 - name: layers.bench.enabled
5422   type: RelaxedAtomicBool
5423   value: false
5424   mirror: always
5426 - name: layers.bufferrotation.enabled
5427   type: bool
5428   value: true
5429   mirror: once
5431 - name: layers.child-process-shutdown
5432   type: RelaxedAtomicBool
5433   value: true
5434   mirror: always
5436 - name: layers.componentalpha.enabled
5437   type: bool
5438 #ifdef MOZ_GFX_OPTIMIZE_MOBILE
5439   # Nb: we ignore this pref if MOZ_GFX_OPTIMIZE_MOBILE is defined, as if this
5440   # pref was always false. But we go to the effort of setting it to false so
5441   # that telemetry's reporting of the pref value is more likely to reflect what
5442   # the code is doing.
5443   value: false
5444 #else
5445   value: true
5446 #endif
5447   mirror: once
5448   do_not_use_directly: true
5450 - name: layers.d3d11.force-warp
5451   type: bool
5452   value: false
5453   mirror: once
5455 - name: layers.d3d11.enable-blacklist
5456   type: bool
5457   value: true
5458   mirror: once
5460 # Enable DEAA antialiasing for transformed layers in the compositor.
5461 - name: layers.deaa.enabled
5462   type: RelaxedAtomicBool
5463 #if defined(MOZ_WIDGET_ANDROID)
5464   value: false
5465 #else
5466   value: true
5467 #endif
5468   mirror: always
5470 - name: layers.draw-bigimage-borders
5471   type: RelaxedAtomicBool
5472   value: false
5473   mirror: always
5475 - name: layers.draw-borders
5476   type: RelaxedAtomicBool
5477   value: false
5478   mirror: always
5480 - name: layers.draw-tile-borders
5481   type: RelaxedAtomicBool
5482   value: false
5483   mirror: always
5485 - name: layers.draw-layer-info
5486   type: RelaxedAtomicBool
5487   value: false
5488   mirror: always
5490 - name: layers.dump
5491   type: RelaxedAtomicBool
5492   value: false
5493   mirror: always
5495 # If we're dumping layers, also dump the texture data
5496 - name: layers.dump-texture
5497   type: RelaxedAtomicBool
5498   value: false
5499   mirror: always
5501 #ifdef MOZ_DUMP_PAINTING
5502 -   name: layers.dump-decision
5503     type: RelaxedAtomicBool
5504     value: false
5505     mirror: always
5506 #endif
5508 - name: layers.dump-client-layers
5509   type: RelaxedAtomicBool
5510   value: false
5511   mirror: always
5513 - name: layers.dump-host-layers
5514   type: RelaxedAtomicBool
5515   value: false
5516   mirror: always
5518 - name: layers.compositing-tiles.width
5519   type: RelaxedAtomicInt32
5520   value: 1024
5521   mirror: always
5523 - name: layers.compositing-tiles.height
5524   type: RelaxedAtomicInt32
5525   value: 1024
5526   mirror: always
5528 # 0 is "no change" for contrast, positive values increase it, negative values
5529 # decrease it until we hit mid gray at -1 contrast, after that it gets weird.
5530 - name: layers.effect.contrast
5531   type: AtomicFloat
5532   value: 0.0f
5533   mirror: always
5535 - name: layers.effect.grayscale
5536   type: RelaxedAtomicBool
5537   value: false
5538   mirror: always
5540 - name: layers.effect.invert
5541   type: RelaxedAtomicBool
5542   value: false
5543   mirror: always
5545 - name: layers.enable-tiles
5546   type: bool
5547 #if defined(XP_MACOSX) || defined (XP_OPENBSD)
5548   value: true
5549 #else
5550   value: false
5551 #endif
5552   mirror: once
5554 - name: layers.enable-tiles-if-skia-pomtp
5555   type: bool
5556 #if defined(XP_WIN)
5557   value: true
5558 #else
5559   value: false
5560 #endif
5561   mirror: once
5563 - name: layers.flash-borders
5564   type: RelaxedAtomicBool
5565   value: false
5566   mirror: always
5568 # Force all possible layers to be always active layers.
5569 - name: layers.force-active
5570   type: bool
5571   value: false
5572   mirror: always
5574 - name: layers.force-shmem-tiles
5575   type: bool
5576   value: false
5577   mirror: once
5579 - name: layers.draw-mask-debug
5580   type: RelaxedAtomicBool
5581   value: false
5582   mirror: always
5584 - name: layers.force-synchronous-resize
5585   type: RelaxedAtomicBool
5586   value: true
5587   mirror: always
5589 # Whether to enable arbitrary layer geometry for OpenGL compositor.
5590 - name: layers.geometry.opengl.enabled
5591   type: RelaxedAtomicBool
5592   value: true
5593   mirror: always
5595 # Whether to enable arbitrary layer geometry for Basic compositor.
5596 - name: layers.geometry.basic.enabled
5597   type: RelaxedAtomicBool
5598   value: true
5599   mirror: always
5601  # Whether to enable arbitrary layer geometry for DirectX compositor.
5602 - name: layers.geometry.d3d11.enabled
5603   type: RelaxedAtomicBool
5604   value: true
5605   mirror: always
5607 - name: layers.gpu-process.allow-software
5608   type: bool
5609 #if defined(XP_WIN)
5610   value: true
5611 #else
5612   value: false
5613 #endif
5614   mirror: once
5616 - name: layers.gpu-process.enabled
5617   type: bool
5618 #if defined(XP_WIN)
5619   value: true
5620 #else
5621   value: false
5622 #endif
5623   mirror: once
5625 - name: layers.gpu-process.force-enabled
5626   type: bool
5627   value: false
5628   mirror: once
5630 - name: layers.gpu-process.ipc_reply_timeout_ms
5631   type: int32_t
5632   value: 10000
5633   mirror: once
5635 - name: layers.gpu-process.max_restarts
5636   type: RelaxedAtomicInt32
5637 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
5638   #if defined(NIGHTLY_BUILD)
5639   value: 3
5640   #else
5641   value: 1
5642   #endif
5643 #else
5644   value: 1
5645 #endif
5646   mirror: always
5648 # Note: This pref will only be used if it is less than layers.gpu-process.max_restarts.
5649 - name: layers.gpu-process.max_restarts_with_decoder
5650   type: RelaxedAtomicInt32
5651   value: 0
5652   mirror: always
5654 - name: layers.gpu-process.startup_timeout_ms
5655   type: int32_t
5656   value: 5000
5657   mirror: once
5659 - name: layers.gpu-process.crash-also-crashes-browser
5660   type: bool
5661   value: false
5662   mirror: always
5664 - name: layers.low-precision-buffer
5665   type: RelaxedAtomicBool
5666   value: false
5667   mirror: always
5669 - name: layers.low-precision-opacity
5670   type: AtomicFloat
5671   value: 1.0f
5672   mirror: always
5674 - name: layers.low-precision-resolution
5675   type: AtomicFloat
5676   value: 0.25f
5677   mirror: always
5679 # Max number of layers per container. See Overwrite in mobile prefs.
5680 - name: layers.max-active
5681   type: RelaxedAtomicInt32
5682   value: -1
5683   mirror: always
5685 - name: layers.mlgpu.enabled
5686   type: bool
5687   value: false
5688   mirror: once
5689   do_not_use_directly: true
5691 - name: layers.mlgpu.enable-buffer-cache
5692   type: bool
5693   value: true
5694   mirror: once
5696 - name: layers.mlgpu.enable-buffer-sharing
5697   type: bool
5698   value: true
5699   mirror: once
5701 - name: layers.mlgpu.enable-clear-view
5702   type: bool
5703   value: true
5704   mirror: once
5706 - name: layers.mlgpu.enable-cpu-occlusion
5707   type: bool
5708   value: true
5709   mirror: once
5711 - name: layers.mlgpu.enable-depth-buffer
5712   type: bool
5713   value: false
5714   mirror: once
5716 - name: layers.mlgpu.enable-invalidation
5717   type: RelaxedAtomicBool
5718   value: true
5719   mirror: always
5721 # Both this and the master "enabled" pref must be on to use Advanced Layers
5722 # on Windows 7.
5723 - name: layers.mlgpu.enable-on-windows7
5724   type: bool
5725 #if defined(XP_WIN)
5726   value: true
5727 #else
5728   value: false
5729 #endif
5730   mirror: once
5732 # Whether to animate simple opacity and transforms on the compositor.
5733 - name: layers.offmainthreadcomposition.async-animations
5734   type: bool
5735   value: true
5736   mirror: always
5738 # Whether to log information about off main thread animations to stderr.
5739 - name: layers.offmainthreadcomposition.log-animations
5740   type: bool
5741   value: false
5742   mirror: always
5744 - name: layers.offmainthreadcomposition.force-disabled
5745   type: bool
5746   value: false
5747   mirror: once
5749 # Compositor target frame rate. NOTE: If vsync is enabled the compositor
5750 # frame rate will still be capped.
5751 # -1 -> default (match layout.frame_rate or 60 FPS)
5752 # 0  -> full-tilt mode: Recomposite even if not transaction occured.
5753 - name: layers.offmainthreadcomposition.frame-rate
5754   type: RelaxedAtomicInt32
5755   value: -1
5756   mirror: always
5758 - name: layers.omtp.capture-limit
5759   type: uint32_t
5760   value: 25 * 1024 * 1024
5761   mirror: once
5763 - name: layers.omtp.dump-capture
5764   type: RelaxedAtomicBool
5765   value: false
5766   mirror: always
5768 - name: layers.omtp.paint-workers
5769   type: int32_t
5770   value: -1
5771   mirror: once
5773 - name: layers.omtp.release-capture-on-main-thread
5774   type: RelaxedAtomicBool
5775   value: false
5776   mirror: always
5778 - name: layers.orientation.sync.timeout
5779   type: RelaxedAtomicUint32
5780   value: (uint32_t)0
5781   mirror: always
5783 #ifdef XP_WIN
5784 -   name: layers.prefer-opengl
5785     type: bool
5786     value: false
5787     mirror: once
5788 #endif
5790 - name: layers.progressive-paint
5791   type: RelaxedAtomicBool
5792   value: false
5793   mirror: always
5795 # Copy-on-write canvas.
5796 - name: layers.shared-buffer-provider.enabled
5797   type: RelaxedAtomicBool
5798   value: true
5799   mirror: always
5801 - name: layers.single-tile.enabled
5802   type: RelaxedAtomicBool
5803   value: true
5804   mirror: always
5806 # We allow for configurable and rectangular tile size to avoid wasting memory
5807 # on devices whose screen size does not align nicely to the default tile size.
5808 # Although layers can be any size, they are often the same size as the screen,
5809 # especially for width.
5810 - name: layers.tile-width
5811   type: int32_t
5812   value: 512
5813   mirror: once
5815 - name: layers.tile-height
5816   type: int32_t
5817   value: 512
5818   mirror: once
5820 - name: layers.tile-initial-pool-size
5821   type: uint32_t
5822   value: (uint32_t)50
5823   mirror: once
5825 - name: layers.tile-pool-unused-size
5826   type: uint32_t
5827   value: (uint32_t)10
5828   mirror: once
5830 - name: layers.tile-pool-shrink-timeout
5831   type: uint32_t
5832   value: (uint32_t)50
5833   mirror: once
5835 - name: layers.tile-pool-clear-timeout
5836   type: uint32_t
5837   value: (uint32_t)5000
5838   mirror: once
5840 # If this is set the tile size will only be treated as a suggestion.
5841 # On B2G we will round this to the stride of the underlying allocation.
5842 # On any platform we may later use the screen size and ignore
5843 # tile-width/tile-height entirely. Its recommended to turn this off
5844 # if you change the tile size.
5845 - name: layers.tiles.adjust
5846   type: bool
5847   value: true
5848   mirror: once
5850 - name: layers.tiles.edge-padding
5851   type: bool
5852   value: @IS_ANDROID@
5853   mirror: once
5855 - name: layers.tiles.fade-in.enabled
5856   type: RelaxedAtomicBool
5857   value: false
5858   mirror: always
5860 - name: layers.tiles.fade-in.duration-ms
5861   type: RelaxedAtomicUint32
5862   value: 250
5863   mirror: always
5865 - name: layers.tiles.retain-back-buffer
5866   type: RelaxedAtomicBool
5867   value: true
5868   mirror: always
5870 - name: layers.transaction.warning-ms
5871   type: RelaxedAtomicUint32
5872   value: 200
5873   mirror: always
5875 - name: layers.uniformity-info
5876   type: bool
5877   value: false
5878   mirror: once
5880 - name: layers.use-image-offscreen-surfaces
5881   type: bool
5882   value: true
5883   mirror: once
5885 - name: layers.recycle-allocator-rdd
5886   type: bool
5887   value: true
5888   mirror: once
5890 - name: layers.iosurfaceimage.recycle-limit
5891   type: RelaxedAtomicUint32
5892   value: 15
5893   mirror: always
5895 #---------------------------------------------------------------------------
5896 # Prefs starting with "layout."
5897 #---------------------------------------------------------------------------
5899 # Debug-only pref to force enable the AccessibleCaret. If you want to
5900 # control AccessibleCaret by mouse, you'll need to set
5901 # "layout.accessiblecaret.hide_carets_for_mouse_input" to false.
5902 - name: layout.accessiblecaret.enabled
5903   type: bool
5904   value: false
5905   mirror: always
5907 # Enable the accessible caret on platforms/devices
5908 # that we detect have touch support. Note that this pref is an
5909 # additional way to enable the accessible carets, rather than
5910 # overriding the layout.accessiblecaret.enabled pref.
5911 - name: layout.accessiblecaret.enabled_on_touch
5912   type: bool
5913   value: true
5914   mirror: always
5916 # By default, carets become tilt only when they are overlapping.
5917 - name: layout.accessiblecaret.always_tilt
5918   type: bool
5919   value: false
5920   mirror: always
5922 # Show caret in cursor mode when long tapping on an empty content. This
5923 # also changes the default update behavior in cursor mode, which is based
5924 # on the emptiness of the content, into something more heuristic. See
5925 # AccessibleCaretManager::UpdateCaretsForCursorMode() for the details.
5926 - name: layout.accessiblecaret.caret_shown_when_long_tapping_on_empty_content
5927   type: bool
5928   value: false
5929   mirror: always
5931 # 0 = by default, always hide carets for selection changes due to JS calls.
5932 # 1 = update any visible carets for selection changes due to JS calls,
5933 #     but don't show carets if carets are hidden.
5934 # 2 = always show carets for selection changes due to JS calls.
5935 - name: layout.accessiblecaret.script_change_update_mode
5936   type: int32_t
5937   value: 0
5938   mirror: always
5940 # Allow one caret to be dragged across the other caret without any limitation.
5941 # This matches the built-in convention for all desktop platforms.
5942 - name: layout.accessiblecaret.allow_dragging_across_other_caret
5943   type: bool
5944   value: true
5945   mirror: always
5947 # Optionally provide haptic feedback on long-press selection events.
5948 - name: layout.accessiblecaret.hapticfeedback
5949   type: bool
5950   value: false
5951   mirror: always
5953 # Smart phone-number selection on long-press is not enabled by default.
5954 - name: layout.accessiblecaret.extend_selection_for_phone_number
5955   type: bool
5956   value: false
5957   mirror: always
5959 # Keep the accessible carets hidden when the user is using mouse input (as
5960 # opposed to touch/pen/etc.).
5961 - name: layout.accessiblecaret.hide_carets_for_mouse_input
5962   type: bool
5963   value: true
5964   mirror: always
5966 # CSS attributes (width, height, margin-left) of the AccessibleCaret in CSS
5967 # pixels.
5968 - name: layout.accessiblecaret.width
5969   type: float
5970   value: 34.0f
5971   mirror: always
5973 - name: layout.accessiblecaret.height
5974   type: float
5975   value: 36.0f
5976   mirror: always
5978 - name: layout.accessiblecaret.margin-left
5979   type: float
5980   value: -18.5f
5981   mirror: always
5983 - name: layout.accessiblecaret.transition-duration
5984   type: float
5985   value: 250.0f
5986   mirror: always
5988 # Simulate long tap events to select words. Mainly used in manual testing
5989 # with mouse.
5990 - name: layout.accessiblecaret.use_long_tap_injector
5991   type: bool
5992   value: false
5993   mirror: always
5995 # Whether we should layerize all animated images (if otherwise possible).
5996 - name: layout.animated-image-layers.enabled
5997   type: bool
5998   value: false
5999   mirror: always
6001 # One of several prefs affecting the maximum area to pre-render when animating
6002 # a large element on the compositor.
6003 # This pref enables transform (and transform like properties) animations on a
6004 # large element run on the compositor with rendering partial area of the
6005 # element on the main thread instead of rendering the whole area.  Once the
6006 # animation tried to composite out of the partial rendered area, the animation
6007 # is rendered again with the latest visible partial area.
6008 - name: layout.animation.prerender.partial
6009   type: RelaxedAtomicBool
6010   value: @IS_NIGHTLY_BUILD@
6011   mirror: always
6013 # One of several prefs affecting the maximum area to pre-render when animating
6014 # a large element on the compositor.
6015 # This value is applied to both x and y axes and a perfect square contructed
6016 # by the greater axis value which will be capped by the absolute limits is used
6017 # for the partial pre-render area.
6018 - name: layout.animation.prerender.viewport-ratio-limit
6019   type: AtomicFloat
6020   value: 1.125f
6021   mirror: always
6023 # One of several prefs affecting the maximum area to pre-render when animating
6024 # a large element on the compositor.
6025 - name: layout.animation.prerender.absolute-limit-x
6026   type: RelaxedAtomicUint32
6027   value: 4096
6028   mirror: always
6030 # One of several prefs affecting the maximum area to pre-render when animating
6031 # a large element on the compositor.
6032 - name: layout.animation.prerender.absolute-limit-y
6033   type: RelaxedAtomicUint32
6034   value: 4096
6035   mirror: always
6037 # Test-only pref, if this is true, partial pre-rendered transform animations
6038 # get stuck when it reaches to the pre-rendered boundaries and the pre-render
6039 # region is never updated.
6040 - name: layout.animation.prerender.partial.jank
6041   type: RelaxedAtomicBool
6042   value: false
6043   mirror: always
6045 # Whether Constructable Stylesheets are enabled in script.
6046 - name: layout.css.constructable-stylesheets.enabled
6047   type: bool
6048   value: false
6049   mirror: always
6051 # Should we look for counter ancestor scopes first?
6052 - name: layout.css.counter-ancestor-scope.enabled
6053   type: bool
6054   value: true
6055   mirror: always
6057 # Whether we get notified of history queries for visited even if unvisited.
6058 - name: layout.css.notify-of-unvisited
6059   type: RelaxedAtomicBool
6060   value: true
6061   mirror: always
6063 # Whether we always restyle / repaint as a result of a visited query
6064 - name: layout.css.always-repaint-on-unvisited
6065   type: RelaxedAtomicBool
6066   value: true
6067   mirror: always
6069 # Make `zoom` a `transform` + `transform-origin` alias.
6070 - name: layout.css.zoom-transform-hack.enabled
6071   type: RelaxedAtomicBool
6072   value: false
6073   mirror: always
6074   rust: true
6076 # Whether the `no-preference` value for `prefers-color-scheme` is parsed.
6078 # It never matches regardless.
6079 - name: layout.css.prefers-color-scheme-no-preference.enabled
6080   type: RelaxedAtomicBool
6081   value: false
6082   mirror: always
6083   rust: true
6085 # Whether the `:focus-visible` pseudo-class is enabled.
6087 # NOTE: You probably want to change the default value of
6088 # browser.display.always_show_rings_after_key_focus whenever you change the
6089 # default value of this pref.
6090 - name: layout.css.focus-visible.enabled
6091   type: RelaxedAtomicBool
6092   value: true
6093   mirror: always
6094   rust: true
6096 # Whether the `:autofill` pseudo-class is exposed to content.
6097 - name: layout.css.autofill.enabled
6098   type: RelaxedAtomicBool
6099   value: true
6100   mirror: always
6101   rust: true
6103 # Whether the `aspect-ratio` in css-sizing-4 is enabled.
6104 - name: layout.css.aspect-ratio.enabled
6105   type: bool
6106   value: @IS_NIGHTLY_BUILD@
6107   mirror: always
6108   rust: true
6110 # Is the codepath for using cached scrollbar styles enabled?
6111 - name: layout.css.cached-scrollbar-styles.enabled
6112   type: bool
6113   value: true
6114   mirror: always
6116 # Is path() supported in clip-path?
6117 - name: layout.css.clip-path-path.enabled
6118   type: RelaxedAtomicBool
6119   value: true
6120   mirror: always
6121   rust: true
6123 # Is the image-set() function enabled?
6124 - name: layout.css.image-set.enabled
6125   type: RelaxedAtomicBool
6126   value: @IS_NIGHTLY_BUILD@
6127   mirror: always
6128   rust: true
6130 # Are implicit tracks in computed grid templates serialized?
6131 - name: layout.css.serialize-grid-implicit-tracks
6132   type: RelaxedAtomicBool
6133   value: true
6134   mirror: always
6136 # Set the number of device pixels per CSS pixel. A value <= 0 means choose
6137 # automatically based on user settings for the platform (e.g., "UI scale factor"
6138 # on Mac). A positive value is used as-is. This effectively controls the size
6139 # of a CSS "px". This is only used for windows on the screen, not for printing.
6140 - name: layout.css.devPixelsPerPx
6141   type: AtomicFloat
6142   value: -1.0f
6143   mirror: always
6145 # Is support for CSS backdrop-filter enabled?
6146 - name: layout.css.backdrop-filter.enabled
6147   type: bool
6148   value: false
6149   mirror: always
6151 # Should stray control characters be rendered visibly?
6152 - name: layout.css.control-characters.visible
6153   type: RelaxedAtomicBool
6154   value: @IS_NOT_RELEASE_OR_BETA@
6155   mirror: always
6156   rust: true
6158 # Is support for GeometryUtils.convert*FromNode enabled?
6159 - name: layout.css.convertFromNode.enabled
6160   type: bool
6161   value: @IS_NOT_RELEASE_OR_BETA@
6162   mirror: always
6164 - name: layout.css.cross-fade.enabled
6165   type: RelaxedAtomicBool
6166   value: false
6167   mirror: always
6168   rust: true
6170 # Is support for DOMMatrix enabled?
6171 - name: layout.css.DOMMatrix.enabled
6172   type: RelaxedAtomicBool
6173   value: true
6174   mirror: always
6176 # Is support for DOMQuad enabled?
6177 - name: layout.css.DOMQuad.enabled
6178   type: RelaxedAtomicBool
6179   value: true
6180   mirror: always
6182 # Is support for DOMPoint enabled?
6183 - name: layout.css.DOMPoint.enabled
6184   type: RelaxedAtomicBool
6185   value: true
6186   mirror: always
6188 # Are we emulating -moz-{inline}-box layout using CSS flexbox?
6189 - name: layout.css.emulate-moz-box-with-flex
6190   type: bool
6191   value: false
6192   mirror: always
6194 # Is support for the font-display @font-face descriptor enabled?
6195 - name: layout.css.font-display.enabled
6196   type: RelaxedAtomicBool
6197   value: true
6198   mirror: always
6199   rust: true
6201 # Is support for document.fonts enabled?
6202 - name: layout.css.font-loading-api.enabled
6203   type: bool
6204   value: true
6205   mirror: always
6207 # Is support for variation fonts enabled?
6208 - name: layout.css.font-variations.enabled
6209   type: RelaxedAtomicBool
6210   value: true
6211   mirror: always
6212   rust: true
6214 # Visibility level of font families available to CSS font-matching:
6215 #   1 - only base system fonts
6216 #   2 - also fonts from optional language packs
6217 #   3 - also user-installed fonts
6218 - name: layout.css.font-visibility.level
6219   type: RelaxedAtomicInt32
6220   value: 3
6221   mirror: always
6223 # Is support for GeometryUtils.getBoxQuads enabled?
6224 - name: layout.css.getBoxQuads.enabled
6225   type: bool
6226   value: @IS_NOT_RELEASE_OR_BETA@
6227   mirror: always
6229 # Is support for CSS "grid-template-{columns,rows}: subgrid X" enabled?
6230 - name: layout.css.grid-template-subgrid-value.enabled
6231   type: RelaxedAtomicBool
6232   value: true
6233   mirror: always
6234   rust: true
6236 # Is support for CSS masonry layout enabled?
6237 - name: layout.css.grid-template-masonry-value.enabled
6238   type: RelaxedAtomicBool
6239   value: @IS_NIGHTLY_BUILD@
6240   mirror: always
6241   rust: true
6243 # Is support for CSS individual transform enabled?
6244 - name: layout.css.individual-transform.enabled
6245   type: bool
6246   value: true
6247   mirror: always
6249 # Is the initial value for the image-orientation property 'from-image'?
6250 - name: layout.css.image-orientation.initial-from-image
6251   type: RelaxedAtomicBool
6252   value: true
6253   mirror: always
6254   rust: true
6256 # Is support for CSS initial-letter property enabled?
6257 - name: layout.css.initial-letter.enabled
6258   type: bool
6259   value: false
6260   mirror: always
6262 # Pref to control whether line-height: -moz-block-height is exposed to content.
6263 - name: layout.css.line-height-moz-block-height.content.enabled
6264   type: RelaxedAtomicBool
6265   value: false
6266   mirror: always
6267   rust: true
6269 # Is support for motion-path enabled?
6270 - name: layout.css.motion-path.enabled
6271   type: bool
6272   value: true
6273   mirror: always
6275 # Is support for motion-path ray() enabled?
6276 - name: layout.css.motion-path-ray.enabled
6277   type: RelaxedAtomicBool
6278   value: @IS_NIGHTLY_BUILD@
6279   mirror: always
6280   rust: true
6282 # Pref to control whether the ::marker property restrictions defined in [1]
6283 # apply.
6285 # [1]: https://drafts.csswg.org/css-pseudo-4/#selectordef-marker
6286 - name: layout.css.marker.restricted
6287   type: RelaxedAtomicBool
6288   value: true
6289   mirror: always
6290   rust: true
6292 # Is support for math-style enabled?
6293 - name: layout.css.math-style.enabled
6294   type: RelaxedAtomicBool
6295   value: @IS_NIGHTLY_BUILD@
6296   mirror: always
6297   rust: true
6299 # Is support for math-depth enabled?
6300 # This must not be enabled until implementation is complete (see bug 1667090).
6301 - name: layout.css.math-depth.enabled
6302   type: RelaxedAtomicBool
6303   value: false
6304   mirror: always
6305   rust: true
6307 # Pref to control whether @-moz-document rules are enabled in content pages.
6308 - name: layout.css.moz-document.content.enabled
6309   type: RelaxedAtomicBool
6310   value: false
6311   mirror: always
6312   rust: true
6314 # Is -moz-osx-font-smoothing enabled? (Only supported in OSX builds)
6315 - name: layout.css.osx-font-smoothing.enabled
6316   type: bool
6317 #if defined(XP_MACOSX)
6318   value: true
6319 #else
6320   value: false
6321 #endif
6322   mirror: always
6324 # Is support for CSS overflow-clip-box enabled for non-UA sheets?
6325 - name: layout.css.overflow-clip-box.enabled
6326   type: bool
6327   value: false
6328   mirror: always
6330 # Is support for overscroll-behavior enabled?
6331 - name: layout.css.overscroll-behavior.enabled
6332   type: bool
6333   value: true
6334   mirror: always
6336 - name: layout.css.overflow-logical.enabled
6337   type: bool
6338   value: true
6339   mirror: always
6341 # Dictates whether or not the prefers contrast media query will be
6342 # usable.
6343 #   true: prefers-contrast will toggle based on OS and browser settings.
6344 #   false: prefers-contrast will only parse and toggle in the browser
6345 #   chrome and ua.
6346 - name: layout.css.prefers-contrast.enabled
6347   type: RelaxedAtomicBool
6348   value: false
6349   mirror: always
6350   rust: true
6352 # Dictates whether or not the forced-colors media query is enabled.
6353 - name: layout.css.forced-colors.enabled
6354   type: RelaxedAtomicBool
6355   value: false
6356   mirror: always
6357   rust: true
6359 # Is support for -moz-prefixed animation properties enabled?
6360 - name: layout.css.prefixes.animations
6361   type: bool
6362   value: true
6363   mirror: always
6365 # Is support for -moz-border-image enabled?
6366 - name: layout.css.prefixes.border-image
6367   type: bool
6368   value: true
6369   mirror: always
6371 # Is support for -moz-box-sizing enabled?
6372 - name: layout.css.prefixes.box-sizing
6373   type: bool
6374   value: true
6375   mirror: always
6377 # Is support for -moz-prefixed multi-column properties (including column-gap) enabled?
6378 - name: layout.css.prefixes.columns
6379   type: bool
6380   value: false
6381   mirror: always
6383 # Is support for -moz-prefixed font feature properties enabled?
6384 - name: layout.css.prefixes.font-features
6385   type: bool
6386   value: true
6387   mirror: always
6389 # Is support for -moz-prefixed transform properties enabled?
6390 - name: layout.css.prefixes.transforms
6391   type: bool
6392   value: true
6393   mirror: always
6395 # Is support for -moz-prefixed transition properties enabled?
6396 - name: layout.css.prefixes.transitions
6397   type: bool
6398   value: true
6399   mirror: always
6401 # Is CSS error reporting enabled?
6402 - name: layout.css.report_errors
6403   type: bool
6404   value: true
6405   mirror: always
6407 - name: layout.css.resizeobserver.enabled
6408   type: bool
6409   value: true
6410   mirror: always
6412 # Are inter-character ruby annotations enabled?
6413 - name: layout.css.ruby.intercharacter.enabled
6414   type: bool
6415   value: false
6416   mirror: always
6418 - name: layout.css.scroll-behavior.damping-ratio
6419   type: AtomicFloat
6420   value: 1.0f
6421   mirror: always
6423 - name: layout.css.supports-selector.enabled
6424   type: RelaxedAtomicBool
6425   value: true
6426   mirror: always
6427   rust: true
6429 # Is CSSOM-View scroll-behavior and its MSD smooth scrolling enabled?
6430 - name: layout.css.scroll-behavior.enabled
6431   type: RelaxedAtomicBool
6432   value: true
6433   mirror: always
6435 # Tuning of the smooth scroll motion used by CSSOM-View scroll-behavior.
6436 # Spring-constant controls the strength of the simulated MSD
6437 # (Mass-Spring-Damper).
6438 - name: layout.css.scroll-behavior.spring-constant
6439   type: AtomicFloat
6440   value: 250.0f
6441   mirror: always
6443 # When selecting the snap point for CSS scroll snapping, the velocity of the
6444 # scroll frame is clamped to this speed, in CSS pixels / s.
6445 - name: layout.css.scroll-snap.prediction-max-velocity
6446   type: RelaxedAtomicInt32
6447   value: 2000
6448   mirror: always
6450 #  When selecting the snap point for CSS scroll snapping, the velocity of the
6451 # scroll frame is integrated over this duration, in seconds.  The snap point
6452 # best suited for this position is selected, enabling the user to perform fling
6453 # gestures.
6454 - name: layout.css.scroll-snap.prediction-sensitivity
6455   type: AtomicFloat
6456   value: 0.750f
6457   mirror: always
6459 # Set the threshold distance in CSS pixels below which scrolling will snap to
6460 # an edge, when scroll snapping is set to "proximity".
6461 - name: layout.css.scroll-snap.proximity-threshold
6462   type: RelaxedAtomicInt32
6463   value: 200
6464   mirror: always
6466 # Is steps(jump-*) supported in easing functions?
6467 - name: layout.css.step-position-jump.enabled
6468   type: RelaxedAtomicBool
6469   value: true
6470   mirror: always
6471   rust: true
6473 # W3C touch-action css property (related to touch and pointer events)
6474 # Note that we turn this on even on platforms/configurations where touch
6475 # events are not supported (e.g. OS X, or Windows with e10s disabled). For
6476 # those platforms we don't handle touch events anyway so it's conceptually
6477 # a no-op.
6478 - name: layout.css.touch_action.enabled
6479   type: RelaxedAtomicBool
6480   value: true
6481   mirror: always
6483 # Are counters for implemented CSS properties enabled?
6484 - name: layout.css.use-counters.enabled
6485   type: bool
6486   value: true
6487   mirror: always
6489 # Are counters for unimplemented CSS properties enabled?
6490 - name: layout.css.use-counters-unimplemented.enabled
6491   type: RelaxedAtomicBool
6492   value: true
6493   mirror: always
6494   rust: true
6496 # Should the :visited selector ever match (otherwise :link matches instead)?
6497 - name: layout.css.visited_links_enabled
6498   type: bool
6499   value: true
6500   mirror: always
6502 - name: layout.css.xul-display-values.content.enabled
6503   type: RelaxedAtomicBool
6504   value: false
6505   mirror: always
6506   rust: true
6508 # Pref to control whether display: -moz-box and display: -moz-inline-box are
6509 # parsed in content pages.
6510 - name: layout.css.xul-box-display-values.content.enabled
6511   type: RelaxedAtomicBool
6512   value: false
6513   mirror: always
6514   rust: true
6516 # Whether to block large cursors intersecting UI.
6517 - name: layout.cursor.block.enabled
6518   type: bool
6519   value: true
6520   mirror: always
6522 # The maximum width or height of the cursor we should allow when intersecting
6523 # the UI, in CSS pixels.
6524 - name: layout.cursor.block.max-size
6525   type: uint32_t
6526   value: 32
6527   mirror: always
6529 - name: layout.display-list.build-twice
6530   type: RelaxedAtomicBool
6531   value: false
6532   mirror: always
6534 # Toggle retaining display lists between paints.
6535 - name: layout.display-list.retain
6536   type: RelaxedAtomicBool
6537   value: true
6538   mirror: always
6540 # Toggle retaining display lists between paints.
6541 - name: layout.display-list.retain.chrome
6542   type: RelaxedAtomicBool
6543   value: true
6544   mirror: always
6546 # Set the maximum number of modified frames allowed before doing a full
6547 # display list rebuild.
6548 - name: layout.display-list.rebuild-frame-limit
6549   type: RelaxedAtomicUint32
6550   value: 500
6551   mirror: always
6553 # Pref to dump the display list to the log. Useful for debugging drawing.
6554 - name: layout.display-list.dump
6555   type: RelaxedAtomicBool
6556   value: false
6557   mirror: always
6559 # Pref to dump the display list to the log. Useful for debugging drawing.
6560 - name: layout.display-list.dump-content
6561   type: RelaxedAtomicBool
6562   value: false
6563   mirror: always
6565 # Pref to dump the display list to the log. Useful for debugging drawing.
6566 - name: layout.display-list.dump-parent
6567   type: RelaxedAtomicBool
6568   value: false
6569   mirror: always
6571 - name: layout.display-list.show-rebuild-area
6572   type: RelaxedAtomicBool
6573   value: false
6574   mirror: always
6576 - name: layout.display-list.flatten-transform
6577   type: RelaxedAtomicBool
6578   value: true
6579   mirror: always
6581 - name: layout.display-list.improve-fragmentation
6582   type: RelaxedAtomicBool
6583   value: true
6584   mirror: always
6586 # Are dynamic reflow roots enabled?
6587 - name: layout.dynamic-reflow-roots.enabled
6588   type: bool
6589   value: @IS_EARLY_BETA_OR_EARLIER@
6590   mirror: always
6592 # Enables the <input type=search> custom layout frame with a clear icon.
6593 # Still needs tests and a web-exposed way to remove that icon, see bug 1654288.
6594 - name: layout.forms.input-type-search.enabled
6595   type: bool
6596   value: false
6597   mirror: always
6599 # Pref to control browser frame rate, in Hz. A value <= 0 means choose
6600 # automatically based on knowledge of the platform (or 60Hz if no platform-
6601 # specific information is available).
6602 - name: layout.frame_rate
6603   type: RelaxedAtomicInt32
6604   value: -1
6605   mirror: always
6607 # The time in number of frames that we estimate for a refresh driver
6608 # to be quiescent.
6609 - name: layout.idle_period.required_quiescent_frames
6610   type: uint32_t
6611   value: 2
6612   mirror: always
6614 # The amount of time (milliseconds) needed between an idle period's
6615 # end and the start of the next tick to avoid jank.
6616 - name: layout.idle_period.time_limit
6617   type: uint32_t
6618   value: 1
6619   mirror: always
6621 # Enable/disable interruptible reflow, which allows reflows to stop
6622 # before completion (and display the partial results) when user events
6623 # are pending.
6624 - name: layout.interruptible-reflow.enabled
6625   type: bool
6626   value: true
6627   mirror: always
6629 - name: layout.min-active-layer-size
6630   type: int32_t
6631   value: 64
6632   mirror: always
6634 - name: layout.paint_rects_separately
6635   type: bool
6636   value: true
6637   mirror: once
6639 # On Android, don't synth mouse move events after scrolling, as they cause
6640 # unexpected user-visible behaviour. Can remove this after bug 1633450 is
6641 # satisfactorily resolved.
6642 - name: layout.reflow.synthMouseMove
6643   type: bool
6644   value: @IS_NOT_ANDROID@
6645   mirror: always
6647 # This pref is to be set by test code only.
6648 - name: layout.scrollbars.always-layerize-track
6649   type: RelaxedAtomicBool
6650   value: false
6651   mirror: always
6653 # Controls caret style and word-delete during text selection.
6654 # 0: Use platform default
6655 # 1: Caret moves and blinks as when there is no selection; word
6656 #    delete deselects the selection and then deletes word.
6657 # 2: Caret moves to selection edge and is not visible during selection;
6658 #    word delete deletes the selection (Mac and Linux default).
6659 # 3: Caret moves and blinks as when there is no selection; word delete
6660 #    deletes the selection.
6661 # Windows default is 1 for word delete behavior, the rest as for 2.
6662 - name: layout.selection.caret_style
6663   type: int32_t
6664   value: 0
6665   mirror: always
6667 # If layout.show_previous_page is true then during loading of a new page we
6668 # will draw the previous page if the new page has painting suppressed.
6669 - name: layout.show_previous_page
6670   type: bool
6671   value: true
6672   mirror: always
6674 - name: layout.smaller-painted-layers
6675   type: RelaxedAtomicBool
6676   value: false
6677   mirror: always
6679 # Pref to stop overlay scrollbars from fading out, for testing purposes.
6680 - name: layout.testing.overlay-scrollbars.always-visible
6681   type: bool
6682   value: false
6683   mirror: always
6685 - name: layout.lower_priority_refresh_driver_during_load
6686   type: bool
6687   value: true
6688   mirror: always
6690 # Is layout of CSS outline-style:auto enabled?
6691 - name: layout.css.outline-style-auto.enabled
6692   type: bool
6693   value: true
6694   mirror: always
6696 # Pref to control enabling scroll anchoring.
6697 - name: layout.css.scroll-anchoring.enabled
6698   type: bool
6699   value: true
6700   mirror: always
6702 # Pref to control how many consecutive scroll-anchoring adjustments (since the
6703 # most recent user scroll) we'll average, before we consider whether to
6704 # automatically turn off scroll anchoring. When we hit this threshold, the
6705 # actual decision to disable also depends on the
6706 # min-average-adjustment-threshold pref, see below for more details.
6708 # Zero disables the heuristic.
6709 - name: layout.css.scroll-anchoring.max-consecutive-adjustments
6710   type: uint32_t
6711   value: 10
6712   mirror: always
6714 # Pref to control whether we should disable scroll anchoring on a scroller
6715 # where at least max-consecutive-adjustments have happened, and which the
6716 # average adjustment ends up being less than this number, in CSS pixels.
6718 # So, for example, given max-consecutive-adjustments=10 and
6719 # min-average-adjustment-treshold=3, we'll block scroll anchoring if there have
6720 # been 10 consecutive adjustments without a user scroll or more, and the
6721 # average offset difference between them amount to less than 3 CSS pixels.
6722 - name: layout.css.scroll-anchoring.min-average-adjustment-threshold
6723   type: uint32_t
6724   value: 3
6725   mirror: always
6727 # Pref to control disabling scroll anchoring suppression triggers, see
6729 # https://drafts.csswg.org/css-scroll-anchoring/#suppression-triggers
6731 # Those triggers should be unnecessary after bug 1561450.
6732 - name: layout.css.scroll-anchoring.suppressions.enabled
6733   type: bool
6734   value: true
6735   mirror: always
6737 - name: layout.css.scroll-anchoring.highlight
6738   type: bool
6739   value: false
6740   mirror: always
6742 # Are shared memory User Agent style sheets enabled?
6743 - name: layout.css.shared-memory-ua-sheets.enabled
6744   type: bool
6745   value: true
6746   mirror: always
6748 # Is support for -webkit-line-clamp enabled?
6749 - name: layout.css.webkit-line-clamp.enabled
6750   type: bool
6751   value: true
6752   mirror: always
6754 # Whether the computed value of line-height: normal returns the `normal`
6755 # keyword rather than a pixel value based on the first available font.
6757 # Only enabled on Nightly and early beta, at least for now.
6759 # It'd be nice to make numbers compute also to themselves, but it looks like
6760 # everybody agrees on turning them into pixels, see the discussion starting
6761 # from [1].
6763 # [1]: https://github.com/w3c/csswg-drafts/issues/3749#issuecomment-477287453
6764 - name: layout.css.line-height.normal-as-resolved-value.enabled
6765   type: bool
6766   value: true
6767   mirror: always
6769 # Are the width and height attributes on image-like elements mapped to the
6770 # internal-for-now aspect-ratio property?
6771 - name: layout.css.width-and-height-map-to-aspect-ratio.enabled
6772   type: bool
6773   value: true
6774   mirror: always
6776 # Whether :is() and :where() ignore errors inside their selector lists
6777 # internally, rather than failing to parse altogether.
6779 # See https://github.com/w3c/csswg-drafts/issues/3264
6780 - name: layout.css.is-and-where-better-error-recovery.enabled
6781   type: RelaxedAtomicBool
6782   value: true
6783   mirror: always
6784   rust: true
6786 # Whether frame visibility tracking is enabled globally.
6787 - name: layout.framevisibility.enabled
6788   type: bool
6789   value: true
6790   mirror: always
6792 # The fraction of the scrollport we allow to horizontally scroll by before we
6793 # schedule an update of frame visibility.
6794 - name: layout.framevisibility.amountscrollbeforeupdatehorizontal
6795   type: int32_t
6796   value: 2
6797   mirror: always
6799 # The fraction of the scrollport we allow to vertically scroll by before we
6800 # schedule an update of frame visibility.
6801 - name: layout.framevisibility.amountscrollbeforeupdatevertical
6802   type: int32_t
6803   value: 2
6804   mirror: always
6806 # The number of scrollports wide to expand when tracking frame visibility.
6807 - name: layout.framevisibility.numscrollportwidths
6808   type: uint32_t
6809 #ifdef ANDROID
6810   value: 1
6811 #else
6812   value: 0
6813 #endif
6814   mirror: always
6816 # The number of scrollports high to expand when tracking frame visibility.
6817 - name: layout.framevisibility.numscrollportheights
6818   type: uint32_t
6819   value: 1
6820   mirror: always
6822 # Test only.
6823 - name: layout.dynamic-toolbar-max-height
6824   type: RelaxedAtomicInt32
6825   value: 0
6826   mirror: always
6828 # Controls double click and Alt+Arrow word selection behavior.
6829 - name: layout.word_select.eat_space_to_next_word
6830   type: bool
6831 #ifdef XP_WIN
6832   value: true
6833 #else
6834   value: false
6835 #endif
6836   mirror: always
6838 - name: layout.word_select.stop_at_punctuation
6839   type: bool
6840   value: true
6841   mirror: always
6843 # Whether underscore should be treated as a word-breaking character for
6844 # word selection/arrow-key movement purposes.
6845 - name: layout.word_select.stop_at_underscore
6846   type: bool
6847   value: false
6848   mirror: always
6850 #---------------------------------------------------------------------------
6851 # Prefs starting with "mathml."
6852 #---------------------------------------------------------------------------
6854 # Whether to disable deprecated style attributes background, color, fontfamily,
6855 # fontsize, fontstyle and fontweight.
6856 - name: mathml.deprecated_style_attributes.disabled
6857   type: bool
6858   value: true
6859   mirror: always
6861 # Whether to disable deprecated "radical" notation for the menclose element.
6862 - name: mathml.deprecated_menclose_notation_radical.disabled
6863   type: bool
6864   value: true
6865   mirror: always
6867 # Whether to disable legacy names "small", "normal" and "big" for the
6868 # mathsize attribute.
6869 - name: mathml.mathsize_names.disabled
6870   type: bool
6871   value: true
6872   mirror: always
6874 # Whether to disable legacy names "thickmathspace", "mediummathspace",
6875 # "thickmathspace" etc for length attributes.
6876 - name: mathml.mathspace_names.disabled
6877   type: bool
6878   value: @IS_NIGHTLY_BUILD@
6879   mirror: always
6881 # Whether to disable the mfrac bevelled  attribute.
6882 - name: mathml.mfrac_bevelled_attribute.disabled
6883   type: bool
6884   value: true
6885   mirror: always
6887 # Whether to disable legacy names "thin", "thick" and "medium" for the
6888 # linethickness attribute of the mfrac element.
6889 - name: mathml.mfrac_linethickness_names.disabled
6890   type: bool
6891   value: true
6892   mirror: always
6894 # Whether to disable deprecated numalign/denomalign/align attributes
6895 - name: mathml.deprecated_alignment_attributes.disabled
6896   type: bool
6897   value: true
6898   mirror: always
6900 # Whether to disable subscriptshift and superscriptshift attributes.
6901 - name: mathml.script_shift_attributes.disabled
6902   type: bool
6903   value: true
6904   mirror: always
6906 # Whether to disable the scriptminsize attribute.
6907 # Note that this only disables parsing, not the default effect when no attribute
6908 # is unspecified.
6909 - name: mathml.scriptminsize_attribute.disabled
6910   type: bool
6911   value: @IS_NIGHTLY_BUILD@
6912   mirror: always
6914 # Whether to disable the scriptsizemultiplier attribute.
6915 - name: mathml.scriptsizemultiplier_attribute.disabled
6916   type: bool
6917   value: @IS_NIGHTLY_BUILD@
6918   mirror: always
6920 # Whether to disable support for XLink on MathML elements.
6921 - name: mathml.xlink.disabled
6922   type: bool
6923   value: true
6924   mirror: always
6926 # Whether to disable support for stretching operators with STIXGeneral fonts.
6927 # macos still has the deprecated STIXGeneral font pre-installed.
6928 - name: mathml.stixgeneral_operator_stretching.disabled
6929   type: bool
6930 #if defined(XP_MACOSX)
6931   value: @IS_NIGHTLY_BUILD@
6932 #else
6933   value: true
6934 #endif
6935   mirror: always
6937 #---------------------------------------------------------------------------
6938 # Prefs starting with "media."
6939 #---------------------------------------------------------------------------
6942 # This pref defines what the blocking policy would be used in blocking autoplay.
6943 # 0 : use sticky activation (default)
6944 # https://html.spec.whatwg.org/multipage/interaction.html#sticky-activation
6945 # 1 : use transient activation (the transient activation duration can be
6946 #     adjusted by the pref `dom.user_activation.transient.timeout`)
6947 # https://html.spec.whatwg.org/multipage/interaction.html#transient-activation
6948 # 2 : user input depth (allow autoplay when the play is trigged by user input
6949 #     which is determined by the user input depth)
6950 - name: media.autoplay.blocking_policy
6951   type: uint32_t
6952   value: 0
6953   mirror: always
6955 # File-backed MediaCache size.
6956 - name: media.cache_size
6957   type: RelaxedAtomicUint32
6958   value: 512000   # Measured in KiB
6959   mirror: always
6961 # Size of file backed MediaCache while on a connection which is cellular (3G,
6962 # etc), and thus assumed to be "expensive".
6963 - name: media.cache_size.cellular
6964   type: RelaxedAtomicUint32
6965   value: 32768   # Measured in KiB
6966   mirror: always
6968 # Whether cubeb is sandboxed
6969 - name: media.cubeb.sandbox
6970   type: bool
6971   mirror: always
6972 #if defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID)
6973   value: true
6974 #elif defined(XP_WIN) && !defined(_ARM64_)
6975   value: true
6976 #else
6977   value: false
6978 #endif
6980 # Whether or not to pass AUDCLNT_STREAMOPTIONS_RAW when initializing audio
6981 # streams when using WASAPI.
6982 # 0 - don't use RAW streams
6983 # 1 - use RAW streams for input streams only
6984 # 2 - use RAW streams for output streams only
6985 # 3 - use RAW streams for input and output streams
6986 #if defined (XP_WIN)
6987 - name: media.cubeb.wasapi-raw
6988   type: RelaxedAtomicUint32
6989   mirror: always
6990   value: 1
6991 #endif // XP_WIN
6993 # ClockDrift desired buffering in milliseconds
6994 - name: media.clockdrift.buffering
6995   type: int32_t
6996   mirror: always
6997   value: 50
6999 # If a resource is known to be smaller than this size (in kilobytes), a
7000 # memory-backed MediaCache may be used; otherwise the (single shared global)
7001 # file-backed MediaCache is used.
7002 - name: media.memory_cache_max_size
7003   type: uint32_t
7004   value: 8192        # Measured in KiB
7005   mirror: always
7007 # Don't create more memory-backed MediaCaches if their combined size would go
7008 # above this absolute size limit.
7009 - name: media.memory_caches_combined_limit_kb
7010   type: uint32_t
7011   value: 524288
7012   mirror: always
7014 # Don't create more memory-backed MediaCaches if their combined size would go
7015 # above this relative size limit (a percentage of physical memory).
7016 - name: media.memory_caches_combined_limit_pc_sysmem
7017   type: uint32_t
7018   value: 5           # A percentage
7019   mirror: always
7021 # When a network connection is suspended, don't resume it until the amount of
7022 # buffered data falls below this threshold (in seconds).
7023 - name: media.cache_resume_threshold
7024   type: RelaxedAtomicUint32
7025   value: 30
7026   mirror: always
7027 - name: media.cache_resume_threshold.cellular
7028   type: RelaxedAtomicUint32
7029   value: 10
7030   mirror: always
7032 # Stop reading ahead when our buffered data is this many seconds ahead of the
7033 # current playback position. This limit can stop us from using arbitrary
7034 # amounts of network bandwidth prefetching huge videos.
7035 - name: media.cache_readahead_limit
7036   type: RelaxedAtomicUint32
7037   value: 60
7038   mirror: always
7039 - name: media.cache_readahead_limit.cellular
7040   type: RelaxedAtomicUint32
7041   value: 30
7042   mirror: always
7044 # MediaCapabilities
7045 - name: media.mediacapabilities.drop-threshold
7046   type: RelaxedAtomicInt32
7047   value: 95
7048   mirror: always
7050 - name: media.mediacapabilities.from-database
7051   type: RelaxedAtomicBool
7052   value: @IS_NIGHTLY_BUILD@
7053   mirror: always
7055 # AudioSink
7056 - name: media.resampling.enabled
7057   type: RelaxedAtomicBool
7058   value: false
7059   mirror: always
7061 # libcubeb backend implements .get_preferred_channel_layout
7062 - name: media.forcestereo.enabled
7063   type: RelaxedAtomicBool
7064 #if defined(XP_WIN) || defined(XP_DARWIN) || defined(MOZ_PULSEAUDIO)
7065   value: false
7066 #else
7067   value: true
7068 #endif
7069   mirror: always
7071 # MediaSource
7073 # Whether to enable MediaSource support.
7074 - name: media.mediasource.enabled
7075   type: RelaxedAtomicBool
7076   value: true
7077   mirror: always
7079 - name: media.mediasource.mp4.enabled
7080   type: RelaxedAtomicBool
7081   value: true
7082   mirror: always
7084 - name: media.mediasource.webm.enabled
7085   type: RelaxedAtomicBool
7086   value: true
7087   mirror: always
7089 # Check if vp9 is enabled by default in mediasource. False on Android.
7090 # If disabled, vp9 will only be enabled under some conditions:
7091 # - h264 HW decoding is not supported
7092 # - mp4 is not enabled
7093 # - Device was deemed fast enough to decode VP9 via the VP9Benchmark utility
7094 # - A VP9 HW decoder is present.
7095 - name: media.mediasource.vp9.enabled
7096   type: RelaxedAtomicBool
7097   value: @IS_NOT_ANDROID@
7098   mirror: always
7100 - name: media.mediasource.webm.audio.enabled
7101   type: RelaxedAtomicBool
7102   value: true
7103   mirror: always
7105 # Whether to enable MediaSource v2 support.
7106 - name: media.mediasource.experimental.enabled
7107   type: RelaxedAtomicBool
7108   value: false
7109   mirror: always
7111 # VideoSink
7112 - name: media.ruin-av-sync.enabled
7113   type: RelaxedAtomicBool
7114   value: false
7115   mirror: always
7117 # Encrypted Media Extensions
7118 - name: media.eme.enabled
7119   type: bool
7120 #if defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID)
7121   # On Linux EME is visible but disabled by default. This is so that the "Play
7122   # DRM content" checkbox in the Firefox UI is unchecked by default. DRM
7123   # requires downloading and installing proprietary binaries, which users on an
7124   # open source operating systems didn't opt into. The first time a site using
7125   # EME is encountered, the user will be prompted to enable DRM, whereupon the
7126   # EME plugin binaries will be downloaded if permission is granted.
7127   value: false
7128 #else
7129   value: true
7130 #endif
7131   mirror: always
7133 # Whether we expose the functionality proposed in
7134 # https://github.com/WICG/encrypted-media-encryption-scheme/blob/master/explainer.md
7135 # I.e. if true, apps calling navigator.requestMediaKeySystemAccess() can pass
7136 # an optional encryption scheme as part of MediaKeySystemMediaCapability
7137 # objects. If a scheme is present when we check for support, we must ensure we
7138 # support that scheme in order to provide key system access.
7139 - name: media.eme.encrypted-media-encryption-scheme.enabled
7140   type: bool
7141   value: false
7142   mirror: always
7144 # Do we need explicit approval from the application to allow access to EME?
7145 # If true, Gecko will ask for permission before allowing MediaKeySystemAccess.
7146 # At time of writing this is aimed at GeckoView, and setting this to true
7147 # outside of GeckoView or test environments will likely break EME.
7148 - name: media.eme.require-app-approval
7149   type: bool
7150   value: false
7151   mirror: always
7153 - name: media.eme.audio.blank
7154   type: RelaxedAtomicBool
7155   value: false
7156   mirror: always
7158 - name: media.eme.video.blank
7159   type: RelaxedAtomicBool
7160   value: false
7161   mirror: always
7163 - name: media.eme.chromium-api.video-shmems
7164   type: RelaxedAtomicUint32
7165   value: 6
7166   mirror: always
7168 # Is support for MediaKeys.getStatusForPolicy enabled?
7169 - name: media.eme.hdcp-policy-check.enabled
7170   type: bool
7171   value: false
7172   mirror: always
7174 - name: media.clearkey.persistent-license.enabled
7175   type: bool
7176   value: false
7177   mirror: always
7179 - name: media.cloneElementVisually.testing
7180   type: bool
7181   value: false
7182   mirror: always
7184 #if defined(XP_LINUX) && defined(MOZ_SANDBOX)
7185   # Whether to allow, on a Linux system that doesn't support the necessary
7186   # sandboxing features, loading Gecko Media Plugins unsandboxed.  However, EME
7187   # CDMs will not be loaded without sandboxing even if this pref is changed.
7188 -   name: media.gmp.insecure.allow
7189     type: RelaxedAtomicBool
7190     value: false
7191     mirror: always
7192 #endif
7194 #ifdef XP_MACOSX
7195   # These prefs control whether or not a universal build running on
7196   # an Apple Silicon machine will attempt to use an x64 Widevine or
7197   # OpenH264 plugin. This requires launching the GMP child process
7198   # executable in x64 mode. We expect to allow this for Widevine until
7199   # an arm64 version of Widevine is made available. We don't expect
7200   # to need to allow this for OpenH264.
7201   #
7202   # Allow a Widevine GMP x64 process to be executed on ARM builds.
7203 - name: media.gmp-widevinecdm.allow-x64-plugin-on-arm64
7204   type: RelaxedAtomicBool
7205   value: true
7206   mirror: always
7208   # Don't allow an OpenH264 GMP x64 process to be executed on ARM builds.
7209 - name: media.gmp-gmpopenh264.allow-x64-plugin-on-arm64
7210   type: RelaxedAtomicBool
7211   value: false
7212   mirror: always
7213 #endif
7215 # Specifies whether the PDMFactory can create a test decoder that just outputs
7216 # blank frames/audio instead of actually decoding. The blank decoder works on
7217 # all platforms.
7218 - name: media.use-blank-decoder
7219   type: RelaxedAtomicBool
7220   value: false
7221   mirror: always
7223 - name: media.gpu-process-decoder
7224   type: RelaxedAtomicBool
7225 #if defined(XP_WIN)
7226   value: true
7227 #else
7228   value: false
7229 #endif
7230   mirror: always
7232 - name: media.rdd-process.enabled
7233   type: RelaxedAtomicBool
7234 #if defined(XP_WIN)
7235   value: true
7236 #elif defined(XP_MACOSX)
7237   value: true
7238 #elif defined(XP_LINUX) && !defined(ANDROID)
7239   value: true
7240 #else
7241   value: false
7242 #endif
7243   mirror: always
7245 - name: media.rdd-retryonfailure.enabled
7246   type: RelaxedAtomicBool
7247   value: true
7248   mirror: always
7250 - name: media.rdd-process.startup_timeout_ms
7251   type: RelaxedAtomicInt32
7252   value: 5000
7253   mirror: always
7255 #ifdef MOZ_FFMPEG
7256 - name: media.rdd-ffmpeg.enabled
7257   type: RelaxedAtomicBool
7258   value: false
7259   mirror: always
7260 #endif
7262 #ifdef MOZ_FFVPX
7263 - name: media.rdd-ffvpx.enabled
7264   type: RelaxedAtomicBool
7265 #if defined(XP_WIN)
7266   value: true
7267 #elif defined(XP_MACOSX)
7268   value: true
7269 #elif defined(XP_LINUX) && !defined(ANDROID)
7270   value: true
7271 #else
7272   value: false
7273 #endif
7274   mirror: always
7275 #endif
7277 #ifdef MOZ_WMF
7278 - name: media.rdd-wmf.enabled
7279   type: RelaxedAtomicBool
7280   value: true
7281   mirror: always
7282 #endif
7284 #ifdef MOZ_APPLEMEDIA
7285 - name: media.rdd-applemedia.enabled
7286   type: RelaxedAtomicBool
7287   value: true
7288   mirror: always
7289 #endif
7291 - name: media.rdd-theora.enabled
7292   type: RelaxedAtomicBool
7293 #if defined(XP_WIN)
7294   value: true
7295 #elif defined(XP_MACOSX)
7296   value: true
7297 #elif defined(XP_LINUX) && !defined(ANDROID)
7298   value: true
7299 #else
7300   value: false
7301 #endif
7302   mirror: always
7304 - name: media.rdd-vorbis.enabled
7305   type: RelaxedAtomicBool
7306 #if defined(XP_WIN)
7307   value: true
7308 #elif defined(XP_MACOSX)
7309   value: true
7310 #elif defined(XP_LINUX) && !defined(ANDROID)
7311   value: true
7312 #else
7313   value: false
7314 #endif
7315   mirror: always
7317 - name: media.rdd-vpx.enabled
7318   type: RelaxedAtomicBool
7319 #if defined(XP_WIN)
7320   value: true
7321 #elif defined(XP_MACOSX)
7322   value: true
7323 #elif defined(XP_LINUX) && !defined(ANDROID)
7324   value: true
7325 #else
7326   value: false
7327 #endif
7328   mirror: always
7330 - name: media.rdd-wav.enabled
7331   type: RelaxedAtomicBool
7332 #if defined(XP_WIN)
7333   value: true
7334 #elif defined(XP_MACOSX)
7335   value: true
7336 #elif defined(XP_LINUX) && !defined(ANDROID)
7337   value: true
7338 #else
7339   value: false
7340 #endif
7341   mirror: always
7343 - name: media.rdd-opus.enabled
7344   type: RelaxedAtomicBool
7345 #if defined(XP_WIN)
7346   value: true
7347 #elif defined(XP_MACOSX)
7348   value: true
7349 #elif defined(XP_LINUX) && !defined(ANDROID)
7350   value: true
7351 #else
7352   value: false
7353 #endif
7354   mirror: always
7356 - name: media.rdd-webaudio.batch.size
7357   type: RelaxedAtomicInt32
7358   value: 100
7359   mirror: always
7361 #ifdef ANDROID
7362   # Enable the MediaCodec PlatformDecoderModule by default.
7363 -   name: media.android-media-codec.enabled
7364     type: RelaxedAtomicBool
7365     value: true
7366     mirror: always
7368 -   name: media.android-media-codec.preferred
7369     type: RelaxedAtomicBool
7370     value: true
7371     mirror: always
7372 #endif  # ANDROID
7374 #ifdef MOZ_OMX
7375 -   name: media.omx.enabled
7376     type: bool
7377     value: false
7378     mirror: always
7379 #endif
7381 #ifdef MOZ_FFMPEG
7382 -   name: media.ffmpeg.enabled
7383     type: RelaxedAtomicBool
7384   #if defined(XP_MACOSX)
7385     value: false
7386   #else
7387     value: true
7388   #endif
7389     mirror: always
7391 -   name: media.libavcodec.allow-obsolete
7392     type: bool
7393     value: false
7394     mirror: always
7396 #ifdef MOZ_WAYLAND
7397 # Disable DMABuf for ffmpeg video textures on Linux
7398 - name: media.ffmpeg.dmabuf-textures.disabled
7399   type: RelaxedAtomicBool
7400   value: false
7401   mirror: always
7403 # Use VA-API for ffmpeg video playback on Linux
7404 - name: media.ffmpeg.vaapi.enabled
7405   type: RelaxedAtomicBool
7406   value: false
7407   mirror: always
7409 # Use DRM display for VA-API ffmpeg video decoding on Linux
7410 - name: media.ffmpeg.vaapi-drm-display.enabled
7411   type: RelaxedAtomicBool
7412   value: true
7413   mirror: always
7414 #endif # MOZ_WAYLAND
7415 #endif  # MOZ_FFMPEG
7417 -   name: media.ffvpx.enabled
7418     type: RelaxedAtomicBool
7419 #ifdef MOZ_FFVPX
7420     value: true
7421 #else
7422     value: false
7423 #endif
7424     mirror: always
7426 -   name: media.ffvpx.mp3.enabled
7427     type: RelaxedAtomicBool
7428 #ifdef MOZ_FFVPX
7429     value: true
7430 #else
7431     value: false
7432 #endif
7433     mirror: always
7435 # Set to true in marionette tests to disable the sanity test
7436 # which would lead to unnecessary start of the RDD process.
7437 -   name: media.sanity-test.disabled
7438     type: RelaxedAtomicBool
7439     value: false
7440     mirror: always
7442 #ifdef MOZ_WMF
7444 -   name: media.wmf.enabled
7445     type: RelaxedAtomicBool
7446     value: true
7447     mirror: always
7449   # Whether DD should consider WMF-disabled a WMF failure, useful for testing.
7450 -   name: media.decoder-doctor.wmf-disabled-is-failure
7451     type: bool
7452     value: false
7453     mirror: always
7455 -   name: media.wmf.dxva.d3d11.enabled
7456     type: RelaxedAtomicBool
7457     value: true
7458     mirror: always
7460 -   name: media.wmf.dxva.max-videos
7461     type: RelaxedAtomicUint32
7462     value: 8
7463     mirror: always
7465 -   name: media.wmf.use-nv12-format
7466     type: RelaxedAtomicBool
7467     value: true
7468     mirror: always
7470 -   name: media.wmf.force.allow-p010-format
7471     type: RelaxedAtomicBool
7472     value: false
7473     mirror: always
7475 -   name: media.wmf.use-sync-texture
7476     type: bool
7477     value: true
7478     mirror: once
7480 -   name: media.wmf.low-latency.enabled
7481     type: RelaxedAtomicBool
7482     value: false
7483     mirror: always
7485 -   name: media.wmf.low-latency.force-disabled
7486     type: RelaxedAtomicBool
7487     value: false
7488     mirror: always
7490 -   name: media.wmf.skip-blacklist
7491     type: RelaxedAtomicBool
7492     value: false
7493     mirror: always
7495 -   name: media.wmf.amd.highres.enabled
7496     type: RelaxedAtomicBool
7497     value: true
7498     mirror: always
7500 -   name: media.wmf.allow-unsupported-resolutions
7501     type: RelaxedAtomicBool
7502     value: false
7503     mirror: always
7505 -   name: media.wmf.vp9.enabled
7506     type: bool
7507     value: true
7508     mirror: once
7510 #endif  # MOZ_WMF
7512 - name: media.hardware-video-decoding.force-enabled
7513   type: bool
7514   value: false
7515   mirror: once
7517 # Whether to check the decoder supports recycling.
7518 - name: media.decoder.recycle.enabled
7519   type: RelaxedAtomicBool
7520   value: @IS_ANDROID@
7521   mirror: always
7523 # Should MFR try to skip to the next key frame?
7524 - name: media.decoder.skip-to-next-key-frame.enabled
7525   type: RelaxedAtomicBool
7526   value: true
7527   mirror: always
7529 - name: media.gmp.decoder.enabled
7530   type: RelaxedAtomicBool
7531   value: false
7532   mirror: always
7534 # Whether to suspend decoding of videos in background tabs.
7535 - name: media.suspend-bkgnd-video.enabled
7536   type: RelaxedAtomicBool
7537   value: true
7538   mirror: always
7540 # Delay, in ms, from time window goes to background to suspending
7541 # video decoders. Defaults to 10 seconds.
7542 - name: media.suspend-bkgnd-video.delay-ms
7543   type: RelaxedAtomicUint32
7544   value: 10000
7545   mirror: always
7547 - name: media.dormant-on-pause-timeout-ms
7548   type: RelaxedAtomicInt32
7549   value: 5000
7550   mirror: always
7552 # AudioTrack and VideoTrack support
7553 - name: media.track.enabled
7554   type: bool
7555   value: false
7556   mirror: always
7558 # This pref disables the reception of RTCP. It is used for testing.
7559 - name: media.webrtc.net.force_disable_rtcp_reception
7560   type: ReleaseAcquireAtomicBool
7561   value: false
7562   mirror: always
7564 # TextTrack WebVTT Region extension support.
7565 - name: media.webvtt.regions.enabled
7566   type: bool
7567   value: true
7568   mirror: always
7570 # This pref controls whether dispatch testing-only events.
7571 - name: media.webvtt.testing.events
7572   type: bool
7573   value: true
7574   mirror: always
7576 - name: media.webspeech.synth.force_global_queue
7577   type: bool
7578   value: false
7579   mirror: always
7581 - name: media.webspeech.test.enable
7582   type: bool
7583   value: false
7584   mirror: always
7586 - name: media.webspeech.test.fake_fsm_events
7587   type: bool
7588   value: false
7589   mirror: always
7591 - name: media.webspeech.test.fake_recognition_service
7592   type: bool
7593   value: false
7594   mirror: always
7596 #ifdef MOZ_WEBSPEECH
7597 -   name: media.webspeech.recognition.enable
7598     type: bool
7599     value: false
7600     mirror: always
7601 #endif
7603 - name: media.webspeech.recognition.force_enable
7604   type: bool
7605   value: false
7606   mirror: always
7608 #ifdef MOZ_WEBSPEECH
7609 -   name: media.webspeech.synth.enabled
7610     type: bool
7611     value: false
7612     mirror: always
7613 #endif  # MOZ_WEBSPEECH
7615 - name: media.encoder.webm.enabled
7616   type: RelaxedAtomicBool
7617 #if defined(MOZ_WEBM_ENCODER)
7618   value: true
7619 #else
7620   value: false
7621 #endif
7622   mirror: always
7624 - name: media.audio-max-decode-error
7625   type: uint32_t
7626 #if defined(RELEASE_OR_BETA)
7627   value: 3
7628 #else
7629   # Zero tolerance in pre-release builds to detect any decoder regression.
7630   value: 0
7631 #endif
7632   mirror: always
7634 - name: media.video-max-decode-error
7635   type: uint32_t
7636 #if defined(RELEASE_OR_BETA)
7637   value: 2
7638 #else
7639   # Zero tolerance in pre-release builds to detect any decoder regression.
7640   value: 0
7641 #endif
7642   mirror: always
7644 # Are video stats enabled? (Disabling can help prevent fingerprinting.)
7645 - name: media.video_stats.enabled
7646   type: bool
7647   value: true
7648   mirror: always
7650 # Opus
7651 - name: media.opus.enabled
7652   type: RelaxedAtomicBool
7653   value: true
7654   mirror: always
7656 # Wave
7657 - name: media.wave.enabled
7658   type: RelaxedAtomicBool
7659   value: true
7660   mirror: always
7662 # Ogg
7663 - name: media.ogg.enabled
7664   type: RelaxedAtomicBool
7665   value: true
7666   mirror: always
7668 # WebM
7669 - name: media.webm.enabled
7670   type: RelaxedAtomicBool
7671   value: true
7672   mirror: always
7674 # AV1
7675 - name: media.av1.enabled
7676   type: RelaxedAtomicBool
7677 #if defined(XP_WIN) && !defined(_ARM64_)
7678   value: true
7679 #elif defined(XP_MACOSX)
7680   value: true
7681 #elif defined(MOZ_WIDGET_ANDROID)
7682   value: @IS_EARLY_BETA_OR_EARLIER@
7683 #elif defined(XP_UNIX)
7684   value: true
7685 #else
7686   value: false
7687 #endif
7688   mirror: always
7690 - name: media.av1.use-dav1d
7691   type: RelaxedAtomicBool
7692 #if defined(XP_WIN) && !defined(_ARM64_)
7693   value: true
7694 #elif defined(XP_MACOSX)
7695   value: true
7696 #elif defined(XP_UNIX)
7697   value: true
7698 #else
7699   value: false
7700 #endif
7701   mirror: always
7703 - name: media.flac.enabled
7704   type: bool
7705   value: true
7706   mirror: always
7708 # Hls
7709 - name: media.hls.enabled
7710   type: RelaxedAtomicBool
7711   value: @IS_ANDROID@
7712   mirror: always
7714 # Max number of HLS players that can be created concurrently. Used only on
7715 # Android and when "media.hls.enabled" is true.
7716 #ifdef ANDROID
7717 -   name: media.hls.max-allocations
7718     type: uint32_t
7719     value: 20
7720     mirror: always
7721 #endif
7723 - name: media.mp4.enabled
7724   type: RelaxedAtomicBool
7725 #ifdef MOZ_FMP4
7726   value: true
7727 #else
7728   value: false
7729 #endif
7730   mirror: always
7732 # Error/warning handling, Decoder Doctor.
7734 # Set to true to force demux/decode warnings to be treated as errors.
7735 - name: media.playback.warnings-as-errors
7736   type: RelaxedAtomicBool
7737   value: false
7738   mirror: always
7740 # Resume video decoding when the cursor is hovering on a background tab to
7741 # reduce the resume latency and improve the user experience.
7742 - name: media.resume-bkgnd-video-on-tabhover
7743   type: bool
7744   value: true
7745   mirror: always
7747 - name: media.videocontrols.lock-video-orientation
7748   type: bool
7749   value: @IS_ANDROID@
7750   mirror: always
7752 # Media Seamless Looping
7753 - name: media.seamless-looping
7754   type: RelaxedAtomicBool
7755   value: true
7756   mirror: always
7758 - name: media.autoplay.block-event.enabled
7759   type: bool
7760   value: false
7761   mirror: always
7763 - name: media.media-capabilities.enabled
7764   type: RelaxedAtomicBool
7765   value: true
7766   mirror: always
7768 - name: media.media-capabilities.screen.enabled
7769   type: RelaxedAtomicBool
7770   value: false
7771   mirror: always
7773 - name: media.benchmark.vp9.fps
7774   type: RelaxedAtomicUint32
7775   value: 0
7776   mirror: always
7778 - name: media.benchmark.vp9.threshold
7779   type: RelaxedAtomicUint32
7780   value: 150
7781   mirror: always
7783 - name: media.benchmark.vp9.versioncheck
7784   type: RelaxedAtomicUint32
7785   value: 0
7786   mirror: always
7788 - name: media.benchmark.frames
7789   type: RelaxedAtomicUint32
7790   value: 300
7791   mirror: always
7793 - name: media.benchmark.timeout
7794   type: RelaxedAtomicUint32
7795   value: 1000
7796   mirror: always
7798 - name: media.test.video-suspend
7799   type: RelaxedAtomicBool
7800   value: false
7801   mirror: always
7803 # MediaCapture prefs follow
7805 # Enables navigator.mediaDevices and getUserMedia() support. See also
7806 # media.peerconnection.enabled
7807 - name: media.navigator.enabled
7808   type: bool
7809   value: true
7810   mirror: always
7812 # This pref turns off [SecureContext] on the navigator.mediaDevices object, for
7813 # more compatible legacy behavior.
7814 - name: media.devices.insecure.enabled
7815   type: bool
7816   value: false
7817   mirror: always
7819 # If the above pref is also enabled, this pref enabled getUserMedia() support
7820 # in http, bypassing the instant NotAllowedError you get otherwise.
7821 - name: media.getusermedia.insecure.enabled
7822   type: bool
7823   value: false
7824   mirror: always
7826 # Enable tab sharing
7827 - name: media.getusermedia.browser.enabled
7828   type: RelaxedAtomicBool
7829   value: false
7830   mirror: always
7832 # The getDisplayMedia method is always SecureContext regardless of the above two
7833 # prefs. But it is not implemented on android, and can be turned off elsewhere.
7834 - name: media.getdisplaymedia.enabled
7835   type: bool
7836   value: @IS_NOT_ANDROID@
7837   mirror: always
7839 # Turn off any cameras (but not mics) while in the background. This is desirable
7840 # on mobile.
7841 - name: media.getusermedia.camera.background.mute.enabled
7842   type: bool
7843   value: @IS_ANDROID@
7844   mirror: always
7846 # WebRTC prefs follow
7848 # Enables RTCPeerConnection support. Note that, when true, this pref enables
7849 # navigator.mediaDevices and getUserMedia() support as well.
7850 # See also media.navigator.enabled
7851 - name: media.peerconnection.enabled
7852   type: bool
7853   value: true
7854   mirror: always
7856 - name: media.peerconnection.dtmf.enabled
7857   type: bool
7858   value: true
7859   mirror: always
7861 - name: media.peerconnection.identity.enabled
7862   type: bool
7863   value: true
7864   mirror: always
7866 - name: media.peerconnection.rtpsourcesapi.enabled
7867   type: bool
7868   value: true
7869   mirror: always
7871 #ifdef MOZ_WEBRTC
7872   #ifdef ANDROID
7873 -     name: media.navigator.hardware.vp8_encode.acceleration_remote_enabled
7874       type: bool
7875       value: true
7876       mirror: always
7878 -     name: media.navigator.hardware.vp8_encode.acceleration_enabled
7879       type: bool
7880       value: true
7881       mirror: never
7883 -     name: media.navigator.hardware.vp8_decode.acceleration_enabled
7884       type: bool
7885       value: false
7886       mirror: never
7887   #endif  # ANDROID
7889   # Use MediaDataDecoder API for VP8/VP9 in WebRTC. This includes hardware
7890   # acceleration for decoding.
7891 -   name: media.navigator.mediadatadecoder_vpx_enabled
7892     type: RelaxedAtomicBool
7893 #if defined(NIGHTLY_BUILD)
7894     value: true
7895 #else
7896     value: false
7897 #endif
7898     mirror: always
7900   # Use MediaDataDecoder API for H264 in WebRTC. This includes hardware
7901   # acceleration for decoding.
7902 -   name: media.navigator.mediadatadecoder_h264_enabled
7903     type: RelaxedAtomicBool
7904   #if defined(_ARM64_) && defined(XP_WIN)
7905     value: false
7906   #else
7907     value: true
7908   #endif
7909     mirror: always
7911 #endif  # MOZ_WEBRTC
7913 # HTMLMediaElement.allowedToPlay should be exposed to web content when
7914 # block autoplay rides the trains to release. Until then, Nightly only.
7915 - name: media.allowed-to-play.enabled
7916   type: bool
7917   value: @IS_NIGHTLY_BUILD@
7918   mirror: always
7920 # Is support for MediaDevices.ondevicechange enabled?
7921 - name: media.ondevicechange.enabled
7922   type: bool
7923   value: true
7924   mirror: always
7926 # Is support for HTMLMediaElement.seekToNextFrame enabled?
7927 - name: media.seekToNextFrame.enabled
7928   type: bool
7929   value: true
7930   mirror: always
7932 # setSinkId will be enabled in bug 1498512. Till then the
7933 # implementation will remain hidden behind this pref (Bug 1152401, Bug 934425).
7934 - name: media.setsinkid.enabled
7935   type: bool
7936   value: false
7937   mirror: always
7939 # Turn on this pref can enable test-only events for media element.
7940 - name: media.testing-only-events
7941   type: bool
7942   value: false
7943   mirror: always
7945 - name: media.useAudioChannelService.testing
7946   type: bool
7947   value: false
7948   mirror: always
7950 - name: media.audioFocus.management
7951   type: bool
7952 #if defined(MOZ_WIDGET_ANDROID)
7953   value: true
7954 #else
7955   value: false
7956 #endif
7957   mirror: always
7959 - name: media.hardwaremediakeys.enabled
7960   type: bool
7961   value: true
7962   mirror: always
7964 # If this pref is on, then `media.mediacontrol.stopcontrol.timer.ms` would take
7965 # effect and determine the timing to stop controlling media.
7966 - name: media.mediacontrol.stopcontrol.timer
7967   type: bool
7968   value: false
7969   mirror: always
7971 # If media is being paused after a certain period, then we would think that
7972 # media doesn't need to be controlled anymore. Therefore, that media would stop
7973 # listening to the media control key events. The value of this pref is how long
7974 # media would stop listening to the event after it's paused.
7975 - name: media.mediacontrol.stopcontrol.timer.ms
7976   type: RelaxedAtomicUint32
7977   value: 60000
7978   mirror: always
7980 # If this pref is on, we would stop controlling media after it reaches to the
7981 # end.
7982 - name: media.mediacontrol.stopcontrol.aftermediaends
7983   type: bool
7984   value: true
7985   mirror: always
7987 # We would only use media control to control media which duration is longer
7988 # than this value.
7989 - name: media.mediacontrol.eligible.media.duration.s
7990   type: AtomicFloat
7991   value: 3.0f
7992   mirror: always
7994 - name: media.webrtc.platformencoder
7995   type: bool
7996 #if defined(MOZ_WIDGET_ANDROID)
7997   value: true
7998 #else
7999   value: false
8000 #endif
8001   mirror: always
8003 - name: media.block-autoplay-until-in-foreground
8004   type: bool
8005 #if !defined(MOZ_WIDGET_ANDROID)
8006   value: true
8007 #else
8008   value: false
8009 #endif
8010   mirror: always
8012 - name: media.webrtc.hw.h264.enabled
8013   type: bool
8014 #if defined(MOZ_WIDGET_ANDROID)
8015   value: true
8016 #else
8017   value: false
8018 #endif
8019   mirror: always
8021  # If true, then we require explicit approval from the embedding app (ex. Fenix)
8022  # on GeckoView to know if we can allow audible, inaudible media or both kinds
8023  # of media to autoplay.
8024 - name: media.geckoview.autoplay.request
8025   type: bool
8026   value: false
8027   mirror: always
8029  # This is used in testing only, in order to skip the prompting process. This
8030  # pref works only when enabling the pref `media.geckoview.autoplay.request`.
8031  # 0=prompt as normal, 1=allow all, 2=deny all, 3=allow audible request,
8032  # 4=deny audible request, 5=allow inaudible request, 6=deny inaudible request.
8033  # 7=leave all requests pending.
8034 - name: media.geckoview.autoplay.request.testing
8035   type: uint32_t
8036   value: 0
8037   mirror: always
8039 - name: media.mediacontrol.testingevents.enabled
8040   type: bool
8041   value: false
8042   mirror: always
8044 #if defined(XP_MACOSX)
8045 - name: media.macos.screenrecording.oscheck.enabled
8046   type: bool
8047   value: true
8048   mirror: always
8049 #endif
8051 #---------------------------------------------------------------------------
8052 # Prefs starting with "mousewheel."
8053 #---------------------------------------------------------------------------
8055 # This affects how line scrolls from wheel events will be accelerated.
8056 # Factor to be multiplied for constant acceleration.
8057 - name: mousewheel.acceleration.factor
8058   type: RelaxedAtomicInt32
8059   value: 10
8060   mirror: always
8062 # This affects how line scrolls from wheel events will be accelerated.
8063 # Number of mousewheel clicks when acceleration starts.
8064 # Acceleration can be turned off if pref is set to -1.
8065 - name: mousewheel.acceleration.start
8066   type: RelaxedAtomicInt32
8067   value: -1
8068   mirror: always
8070 # Auto-dir is a feature which treats any single-wheel scroll as a scroll in the
8071 # only one scrollable direction if the target has only one scrollable
8072 # direction. For example, if the user scrolls a vertical wheel inside a target
8073 # which is horizontally scrollable but vertical unscrollable, then the vertical
8074 # scroll is converted to a horizontal scroll for that target.
8075 # Note that auto-dir only takes effect for |mousewheel.*.action|s and
8076 # |mousewheel.*.action.override_x|s whose values are 1.
8077 - name: mousewheel.autodir.enabled
8078   type: bool
8079   value: false
8080   mirror: always
8082 # When a wheel scroll is converted due to auto-dir, which side the converted
8083 # scroll goes towards is decided by one thing called "honoured target". If the
8084 # content of the honoured target horizontally starts from right to left, then
8085 # an upward scroll maps to a rightward scroll and a downward scroll maps to a
8086 # leftward scroll; otherwise, an upward scroll maps to a leftward scroll and a
8087 # downward scroll maps to a rightward scroll.
8088 # If this pref is set to false, then consider the scrolling target as the
8089 # honoured target.
8090 # If set to true, then consider the root element in the document where the
8091 # scrolling target is as the honoured target. But note that there's one
8092 # exception: for targets in an HTML document, the real root element(I.e. the
8093 # <html> element) is typically not considered as a root element, but the <body>
8094 # element is typically considered as a root element. If there is no <body>
8095 # element, then consider the <html> element instead.
8096 - name: mousewheel.autodir.honourroot
8097   type: bool
8098   value: false
8099   mirror: always
8101 - name: mousewheel.system_scroll_override_on_root_content.enabled
8102   type: RelaxedAtomicBool
8103 #ifdef XP_WIN
8104   value: true
8105 #else
8106   value: false
8107 #endif
8108   mirror: always
8110 # Prefs for overriding the system mouse wheel scrolling speed on
8111 # content of the web pages.  When
8112 # "mousewheel.system_scroll_override_on_root_content.enabled" is true and the
8113 # system scrolling speed isn't customized by the user, the content scrolling
8114 # speed is multiplied by the following factors.  The value will be used as
8115 # 1/100.  E.g., 200 means 2.00.
8116 # NOTE: Even if "mousewheel.system_scroll_override_on_root_content.enabled" is
8117 # true, when Gecko detects the user customized the system scrolling speed
8118 # settings, the override isn't executed.
8119 - name: mousewheel.system_scroll_override_on_root_content.horizontal.factor
8120   type: RelaxedAtomicInt32
8121   value: 200
8122   mirror: always
8123 - name: mousewheel.system_scroll_override_on_root_content.vertical.factor
8124   type: RelaxedAtomicInt32
8125   value: 200
8126   mirror: always
8128 # Mouse wheel scroll transaction is held even if the mouse cursor is moved.
8129 - name: mousewheel.transaction.ignoremovedelay
8130   type: RelaxedAtomicInt32
8131   value: 100
8132   mirror: always
8134 # Mouse wheel scroll transaction period of time (in milliseconds).
8135 - name: mousewheel.transaction.timeout
8136   type: RelaxedAtomicInt32
8137   value: 1500
8138   mirror: always
8140 # Mouse wheel scroll position is determined by GetMessagePos rather than
8141 # LPARAM msg value
8142 - name: mousewheel.ignore_cursor_position_in_lparam
8143   type: RelaxedAtomicBool
8144   value: false
8145   mirror: always
8147 # If line-height is lower than this value (in device pixels), 1 line scroll
8148 # scrolls this height.
8149 - name: mousewheel.min_line_scroll_amount
8150   type: int32_t
8151   value: 5
8152   mirror: always
8154 #---------------------------------------------------------------------------
8155 # Prefs starting with "network."
8156 #---------------------------------------------------------------------------
8158 # Force less-secure NTLMv1 when needed (NTLMv2 is the default).
8159 - name: network.auth.force-generic-ntlm-v1
8160   type: RelaxedAtomicBool
8161   value: false
8162   mirror: always
8164 # Sub-resources HTTP-authentication:
8165 #   0 - don't allow sub-resources to open HTTP authentication credentials
8166 #       dialogs
8167 #   1 - allow sub-resources to open HTTP authentication credentials dialogs,
8168 #       but don't allow it for cross-origin sub-resources
8169 #   2 - allow the cross-origin authentication as well.
8170 - name: network.auth.subresource-http-auth-allow
8171   type: uint32_t
8172   value: 2
8173   mirror: always
8175 # Sub-resources HTTP-authentication for cross-origin images:
8176 # - true: It is allowed to present http auth. dialog for cross-origin images.
8177 # - false: It is not allowed.
8178 # If network.auth.subresource-http-auth-allow has values 0 or 1 this pref does
8179 # not have any effect.
8180 - name: network.auth.subresource-img-cross-origin-http-auth-allow
8181   type: bool
8182   value: false
8183   mirror: always
8185 # Resources that are triggered by some non-web-content:
8186 # - true: They are allow to present http auth. dialog
8187 # - false: They are not allow to present http auth. dialog.
8188 - name: network.auth.non-web-content-triggered-resources-http-auth-allow
8189   type: bool
8190   value: false
8191   mirror: always
8193 # Whether to show anti-spoof confirmation prompts when navigating to a url
8194 # with userinfo
8195 - name: network.auth.confirmAuth.enabled
8196   type: bool
8197   value: true
8198   mirror: always
8200 # See the full list of values in nsICookieService.idl.
8201 - name: network.cookie.cookieBehavior
8202   type: RelaxedAtomicInt32
8203   value: 0 # accept all cookies
8204   mirror: always
8206 # See the full list of values in nsICookieService.idl.
8207 - name: network.cookie.rejectForeignWithExceptions.enabled
8208   type: bool
8209   value: false
8210   mirror: always
8212 # Stale threshold for cookies in seconds.
8213 - name: network.cookie.staleThreshold
8214   type: uint32_t
8215   value: 60
8216   mirror: always
8218 # Cookie lifetime policy. Possible values:
8219 # 0 - accept all cookies
8220 # 1 - deprecated. don't use it.
8221 # 2 - accept as session cookies
8222 # 3 - deprecated. don't use it.
8223 - name: network.cookie.lifetimePolicy
8224   type: RelaxedAtomicInt32
8225   value: 0
8226   mirror: always
8228 - name: network.cookie.sameSite.laxByDefault
8229   type: bool
8230   value: @IS_NIGHTLY_BUILD@
8231   mirror: always
8233 # lax-by-default 2 minutes tollerance for unsafe methods. The value is in seconds.
8234 - name: network.cookie.sameSite.laxPlusPOST.timeout
8235   type: uint32_t
8236   value: 120
8237   mirror: always
8239 - name: network.cookie.sameSite.noneRequiresSecure
8240   type: bool
8241   value: @IS_NIGHTLY_BUILD@
8242   mirror: always
8244 - name: network.cookie.sameSite.schemeful
8245   type: bool
8246   value: @IS_NIGHTLY_BUILD@
8247   mirror: always
8249 - name: network.cookie.thirdparty.sessionOnly
8250   type: bool
8251   value: false
8252   mirror: always
8254 - name: network.cookie.thirdparty.nonsecureSessionOnly
8255   type: bool
8256   value: false
8257   mirror: always
8259 - name: network.data.max-uri-length-mobile
8260   type: RelaxedAtomicUint32
8261   value: 2 * 1024 * 1024
8262   mirror: always
8264 # If we should attempt to race the cache and network.
8265 - name: network.http.rcwn.enabled
8266   type: bool
8267   value: true
8268   mirror: always
8270 - name: network.http.rcwn.cache_queue_normal_threshold
8271   type: uint32_t
8272   value: 8
8273   mirror: always
8275 - name: network.http.rcwn.cache_queue_priority_threshold
8276   type: uint32_t
8277   value: 2
8278   mirror: always
8280 # We might attempt to race the cache with the network only if a resource
8281 # is smaller than this size.
8282 - name: network.http.rcwn.small_resource_size_kb
8283   type: uint32_t
8284   value: 256
8285   mirror: always
8287 - name: network.http.rcwn.min_wait_before_racing_ms
8288   type: uint32_t
8289   value: 0
8290   mirror: always
8292 - name: network.http.rcwn.max_wait_before_racing_ms
8293   type: uint32_t
8294   value: 500
8295   mirror: always
8297 # false=real referer, true=spoof referer (use target URI as referer).
8298 - name: network.http.referer.spoofSource
8299   type: bool
8300   value: false
8301   mirror: always
8303 # Check whether we need to hide referrer when leaving a .onion domain.
8304 # false=allow onion referer, true=hide onion referer (use empty referer).
8305 - name: network.http.referer.hideOnionSource
8306   type: bool
8307   value: false
8308   mirror: always
8310 # Include an origin header on non-GET and non-HEAD requests regardless of CORS.
8311 # 0=never send, 1=send when same-origin only, 2=always send.
8312 - name: network.http.sendOriginHeader
8313   type: uint32_t
8314   value: 2
8315   mirror: always
8317 # Prefs allowing granular control of referers.
8318 # 0=don't send any, 1=send only on clicks, 2=send on image requests as well
8319 - name: network.http.sendRefererHeader
8320   type: uint32_t
8321   value: 2
8322   mirror: always
8323   do_not_use_directly: true
8325 # The maximum allowed length for a referrer header - 4096 default.
8326 # 0 means no limit.
8327 - name: network.http.referer.referrerLengthLimit
8328   type: uint32_t
8329   value: 4096
8330   mirror: always
8332 #  0=always send, 1=send iff base domains match, 2=send iff hosts match.
8333 - name: network.http.referer.XOriginPolicy
8334   type: uint32_t
8335   value: 0
8336   mirror: always
8337   do_not_use_directly: true
8339 # 0=full URI, 1=scheme+host+port+path, 2=scheme+host+port.
8340 - name: network.http.referer.trimmingPolicy
8341   type: uint32_t
8342   value: 0
8343   mirror: always
8344   do_not_use_directly: true
8346 # 0=full URI, 1=scheme+host+port+path, 2=scheme+host+port.
8347 - name: network.http.referer.XOriginTrimmingPolicy
8348   type: uint32_t
8349   value: 0
8350   mirror: always
8351   do_not_use_directly: true
8353 # Set the default Referrer Policy; to be used unless overriden by the site.
8354 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
8355 # 3=no-referrer-when-downgrade.
8356 - name: network.http.referer.defaultPolicy
8357   type: uint32_t
8358   value: 2
8359   mirror: always
8361 # Set the default Referrer Policy applied to third-party trackers when the
8362 # default cookie policy is set to reject third-party trackers, to be used
8363 # unless overriden by the site.
8364 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
8365 # 3=no-referrer-when-downgrade.
8366 # Trim referrers from trackers to origins by default.
8367 - name: network.http.referer.defaultPolicy.trackers
8368   type: uint32_t
8369   value: 2
8370   mirror: always
8372 # Set the Private Browsing Default Referrer Policy, to be used
8373 # unless overriden by the site.
8374 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
8375 # 3=no-referrer-when-downgrade.
8376 - name: network.http.referer.defaultPolicy.pbmode
8377   type: uint32_t
8378   value: 2
8379   mirror: always
8381 # Set the Private Browsing Default Referrer Policy applied to third-party
8382 # trackers when the default cookie policy is set to reject third-party
8383 # trackers, to be used unless overriden by the site.
8384 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
8385 # 3=no-referrer-when-downgrade.
8386 # No need to change this pref for trimming referrers from trackers since in
8387 # private windows we already trim all referrers to origin only.
8388 - name: network.http.referer.defaultPolicy.trackers.pbmode
8389   type: uint32_t
8390   value: 2
8391   mirror: always
8393 # Whether certain http header values should be censored out in logs.
8394 # Specifically filters out "authorization" and "proxy-authorization".
8395 - name: network.http.sanitize-headers-in-logs
8396   type: RelaxedAtomicBool
8397   value: true
8398   mirror: always
8400 # If set to true, IOService.offline depends on IOService.connectivity.
8401 - name: network.offline-mirrors-connectivity
8402   type: RelaxedAtomicBool
8403   value: false
8404   mirror: always
8406 # Enables the predictive service.
8407 - name: network.predictor.enabled
8408   type: bool
8409   value: true
8410   mirror: always
8412 # Set true to allow resolving proxy for localhost
8413 - name: network.proxy.allow_hijacking_localhost
8414   type: RelaxedAtomicBool
8415   value: false
8416   mirror: always
8418 # Allow CookieJarSettings to be unblocked for channels without a document.
8419 # This is for testing only.
8420 - name: network.cookieJarSettings.unblocked_for_testing
8421   type: bool
8422   value: false
8423   mirror: always
8425 - name: network.predictor.enable-hover-on-ssl
8426   type: bool
8427   value: false
8428   mirror: always
8430 - name: network.predictor.enable-prefetch
8431   type: bool
8432   value: false
8433   mirror: always
8435 - name: network.predictor.page-degradation.day
8436   type: int32_t
8437   value: 0
8438   mirror: always
8439 - name: network.predictor.page-degradation.week
8440   type: int32_t
8441   value: 5
8442   mirror: always
8443 - name: network.predictor.page-degradation.month
8444   type: int32_t
8445   value: 10
8446   mirror: always
8447 - name: network.predictor.page-degradation.year
8448   type: int32_t
8449   value: 25
8450   mirror: always
8451 - name: network.predictor.page-degradation.max
8452   type: int32_t
8453   value: 50
8454   mirror: always
8456 - name: network.predictor.subresource-degradation.day
8457   type: int32_t
8458   value: 1
8459   mirror: always
8460 - name: network.predictor.subresource-degradation.week
8461   type: int32_t
8462   value: 10
8463   mirror: always
8464 - name: network.predictor.subresource-degradation.month
8465   type: int32_t
8466   value: 25
8467   mirror: always
8468 - name: network.predictor.subresource-degradation.year
8469   type: int32_t
8470   value: 50
8471   mirror: always
8472 - name: network.predictor.subresource-degradation.max
8473   type: int32_t
8474   value: 100
8475   mirror: always
8477 - name: network.predictor.prefetch-rolling-load-count
8478   type: int32_t
8479   value: 10
8480   mirror: always
8482 - name: network.predictor.prefetch-min-confidence
8483   type: int32_t
8484   value: 100
8485   mirror: always
8486 - name: network.predictor.preconnect-min-confidence
8487   type: int32_t
8488   value: 90
8489   mirror: always
8490 - name: network.predictor.preresolve-min-confidence
8491   type: int32_t
8492   value: 60
8493   mirror: always
8495 - name: network.predictor.prefetch-force-valid-for
8496   type: int32_t
8497   value: 10
8498   mirror: always
8500 - name: network.predictor.max-resources-per-entry
8501   type: int32_t
8502   value: 100
8503   mirror: always
8505 # This is selected in concert with max-resources-per-entry to keep memory
8506 # usage low-ish. The default of the combo of the two is ~50k.
8507 - name: network.predictor.max-uri-length
8508   type: uint32_t
8509   value: 500
8510   mirror: always
8512 # A testing flag.
8513 - name: network.predictor.doing-tests
8514   type: bool
8515   value: false
8516   mirror: always
8518 # Enables `<link rel="preload">` tag and `Link: rel=preload` response header handling.
8519 - name: network.preload
8520   type: RelaxedAtomicBool
8521   value: true
8522   mirror: always
8524 # Whether to use the network process or not
8525 # Start a separate socket process. Performing networking on the socket process
8526 # is control by a sepparate pref
8527 # ("network.http.network_access_on_socket_process.enabled").
8528 # Changing these prefs requires a restart.
8529 - name: network.process.enabled
8530   type: RelaxedAtomicBool
8531   mirror: always
8532 #if defined(ANDROID) || defined(MOZ_THUNDERBIRD)
8533   value: false # see bug 1641427
8534 #else
8535   value: @IS_EARLY_BETA_OR_EARLIER@
8536 #endif
8538 # Whether we can send OnDataAvailable to content process directly.
8539 - name: network.send_ODA_to_content_directly
8540   type: RelaxedAtomicBool
8541   value: false
8542   mirror: always
8544 # Perform all network access on the socket process.
8545 # The pref requires "network.process.enabled" to be true.
8546 # Changing these prefs requires a restart.
8547 - name: network.http.network_access_on_socket_process.enabled
8548   type: RelaxedAtomicBool
8549   mirror: always
8550   value: false
8552 # Telemetry of traffic categories. Whether or not to enable HttpTrafficAnalyzer.
8553 - name: network.traffic_analyzer.enabled
8554   type: RelaxedAtomicBool
8555   value: true
8556   mirror: always
8558 # Whether DNS resolution is limited to literals and cached entries.
8559 - name: network.dns.disabled
8560   type: RelaxedAtomicBool
8561   value: false
8562   mirror: always
8564 # Whether DNS resolution is limited to literals and cached entries.
8565 - name: network.dns.skipTRR-when-parental-control-enabled
8566   type: RelaxedAtomicBool
8567   value: true
8568   mirror: always
8570 - name: network.dns.disablePrefetchFromHTTPS
8571   type: bool
8572   value: true
8573   mirror: always
8575 # Max time to shutdown the resolver threads
8576 - name: network.dns.resolver_shutdown_timeout_ms
8577   type: uint32_t
8578   value: 2000
8579   mirror: always
8581 # When true on Windows DNS resolutions for single label domains
8582 # (domains that don't contain a dot) will be resolved using the DnsQuery
8583 # API instead of PR_GetAddrInfoByName
8584 - name: network.dns.dns_query_single_label
8585   type: RelaxedAtomicBool
8586   value: false
8587   mirror: always
8589 # The proxy type. See nsIProtocolProxyService.idl
8590 #     PROXYCONFIG_DIRECT   = 0
8591 #     PROXYCONFIG_MANUAL   = 1
8592 #     PROXYCONFIG_PAC      = 2
8593 #     PROXYCONFIG_WPAD     = 4
8594 #     PROXYCONFIG_SYSTEM   = 5
8595 - name: network.proxy.type
8596   type: RelaxedAtomicUint32
8597   value: 5
8598   mirror: always
8600 # Whether the SOCKS proxy should be in charge of DNS resolution.
8601 - name: network.proxy.socks_remote_dns
8602   type: RelaxedAtomicBool
8603   value: false
8604   mirror: always
8606 # Some requests during a page load are marked as "tail", mainly trackers, but not only.
8607 # This pref controls whether such requests are put to the tail, behind other requests
8608 # emerging during page loading process.
8609 - name: network.http.tailing.enabled
8610   type: bool
8611   value: true
8612   mirror: always
8614 # Whether to run proxy checks when processing Alt-Svc headers.
8615 - name: network.http.altsvc.proxy_checks
8616   type: bool
8617   value: true
8618   mirror: always
8620 - name: network.http.stale_while_revalidate.enabled
8621   type: RelaxedAtomicBool
8622   value: true
8623   mirror: always
8625 # Whether to cache SSL resumption tokens in necko.
8626 - name: network.ssl_tokens_cache_enabled
8627   type: RelaxedAtomicBool
8628   value: @IS_NIGHTLY_BUILD@
8629   mirror: always
8631 # Capacity of the above cache, in kilobytes.
8632 - name: network.ssl_tokens_cache_capacity
8633   type: RelaxedAtomicUint32
8634   value: 2048
8635   mirror: always
8637 # The maximum allowed length for a URL - 1MB default.
8638 - name: network.standard-url.max-length
8639   type: RelaxedAtomicUint32
8640   value: 1048576
8641   mirror: always
8643 # Single TRR request timeout, in milliseconds
8644 - name: network.trr.request_timeout_ms
8645   type: RelaxedAtomicUint32
8646   value: 1500
8647   mirror: always
8649 # Single TRR request timeout, in milliseconds for mode 3
8650 - name: network.trr.request_timeout_mode_trronly_ms
8651   type: RelaxedAtomicUint32
8652   value: 30000
8653   mirror: always
8655 # Whether to send the Accept-Language header for TRR requests
8656 - name: network.trr.send_accept-language_headers
8657   type: RelaxedAtomicBool
8658   value: false
8659   mirror: always
8661 # Whether to send an empty Accept-Encoding header for TRR requests
8662 - name: network.trr.send_empty_accept-encoding_headers
8663   type: RelaxedAtomicBool
8664   value: true
8665   mirror: always
8667 # Whether to send the User-Agent header for TRR requests
8668 - name: network.trr.send_user-agent_headers
8669   type: RelaxedAtomicBool
8670   value: false
8671   mirror: always
8673 # This pref controls whether to use TRRServiceChannel off main thread.
8674 - name: network.trr.fetch_off_main_thread
8675   type: RelaxedAtomicBool
8676   value: true
8677   mirror: always
8679 # If this pref is false, a task will be dispatched to remove the file from the
8680 # disk and the pref will be set to true.
8681 # It can probably be removed after a few releases.
8682 - name: network.trr.blocklist_cleanup_done
8683   type: RelaxedAtomicBool
8684   value: false
8685   mirror: always
8687 # If we should wait for captive portal confirmation before enabling TRR
8688 - name: network.trr.wait-for-portal
8689   type: RelaxedAtomicBool
8690   value: false
8691   mirror: always
8693 # Use GET (rather than POST)
8694 - name: network.trr.useGET
8695   type: RelaxedAtomicBool
8696   value: false
8697   mirror: always
8699 # Allow RFC1918 address in responses?
8700 - name: network.trr.allow-rfc1918
8701   type: RelaxedAtomicBool
8702   value: false
8703   mirror: always
8705 # Allow AAAA entries to be used "early", before the A results are in
8706 - name: network.trr.early-AAAA
8707   type: RelaxedAtomicBool
8708   value: false
8709   mirror: always
8711 # When true, it only sends AAAA when the system has IPv6 connectivity
8712 - name: network.trr.skip-AAAA-when-not-supported
8713   type: RelaxedAtomicBool
8714   value: true
8715   mirror: always
8717 # Whether to apply split horizon mitigations when using TRR.
8718 # These include adding the DNS suffix to the excluded domains
8719 - name: network.trr.split_horizon_mitigations
8720   type: RelaxedAtomicBool
8721   value: true
8722   mirror: always
8724 # When true, the DNS request will wait for both A and AAAA responses
8725 # (if both have been requested) before notifying the listeners.
8726 # When true, it effectively cancels `network.trr.early-AAAA`
8727 - name: network.trr.wait-for-A-and-AAAA
8728   type: RelaxedAtomicBool
8729   value: true
8730   mirror: always
8732 # Explicitly disable ECS (EDNS Client Subnet, RFC 7871)
8733 - name: network.trr.disable-ECS
8734   type: RelaxedAtomicBool
8735   value: true
8736   mirror: always
8738 # When true, the DNS+TRR cache will be cleared when a relevant TRR pref
8739 # changes. (uri, bootstrapAddress, excluded-domains)
8740 - name: network.trr.clear-cache-on-pref-change
8741   type: RelaxedAtomicBool
8742   value: true
8743   mirror: always
8745 # After this many failed TRR requests in a row, consider TRR borked
8746 - name: network.trr.max-fails
8747   type: RelaxedAtomicUint32
8748   value: 15
8749   mirror: always
8751 # When the TRR confirmation is set to CONFIRM_FAILED due to many failures in
8752 # a row, we set a timer to retry. This has an exponential backoff up to
8753 # 64 seconds.
8754 - name: network.trr.retry-timeout-ms
8755   type: RelaxedAtomicUint32
8756   value: 125
8757   mirror: always
8759 # Retry with no TRR when the response contained only 0.0.0.0 or ::
8760 - name: network.trr.fallback-on-zero-response
8761   type: RelaxedAtomicBool
8762   value: false
8763   mirror: always
8765 # If true we parse the /etc/hosts file and exclude any host names from TRR.
8766 # Reading the file is only done once, when TRR is first enabled - this could be
8767 # soon after startup or when the pref is flipped.
8768 - name: network.trr.exclude-etc-hosts
8769   type: RelaxedAtomicBool
8770   value: true
8771   mirror: always
8773 # Whether to enable odoh.
8774 - name: network.trr.odoh.enabled
8775   type: RelaxedAtomicBool
8776   value: false
8777   mirror: always
8779 # The uri of Oblivious Proxy.
8780 - name: network.trr.odoh.proxy_uri
8781   type: String
8782   value: ""
8783   mirror: never
8785 # The host name of Oblivious Target.
8786 - name: network.trr.odoh.target_host
8787   type: String
8788   value: ""
8789   mirror: never
8791 # The uri path of the odoh uri.
8792 - name: network.trr.odoh.target_path
8793   type: String
8794   value: ""
8795   mirror: never
8797 # Allow the network changed event to get sent when a network topology or setup
8798 # change is noticed while running.
8799 - name: network.notify.changed
8800   type: RelaxedAtomicBool
8801   value: true
8802   mirror: always
8804 # Allow network detection of IPv6 related changes (bug 1245059)
8805 - name: network.notify.IPv6
8806   type: RelaxedAtomicBool
8807 # ifdef XP_WIN
8808   value: false
8809 # else
8810   value: true
8811 # endif
8812   mirror: always
8814 # Whether to check the dnsSuffix on network changes
8815 - name: network.notify.dnsSuffixList
8816   type: RelaxedAtomicBool
8817   value: true
8818   mirror: always
8820 # Whether to check the registry for proxies on network changes that indicate
8821 # that TRR should not be used.
8822 - name: network.notify.checkForProxies
8823   type: RelaxedAtomicBool
8824   value: true
8825   mirror: always
8827 # Whether to check the registry for NRPT rules on network changes that
8828 # indicate that TRR should not be used.
8829 - name: network.notify.checkForNRPT
8830   type: RelaxedAtomicBool
8831   value: true
8832   mirror: always
8834 # Whether NotifyIpInterfaceChange should be called immediately after
8835 # registration in order to record the initial state of the network adapters.
8836 - name: network.notify.initial_call
8837   type: RelaxedAtomicBool
8838   value: true
8839   mirror: always
8841 # Whether to use the rust implemented DefaultURI for unknown scheme types
8842 - name: network.url.useDefaultURI
8843   type: RelaxedAtomicBool
8844   value: false
8845   mirror: always
8847 # Force remapping of remote port numbers to allow reaching local testing
8848 # servers or port forwarders listening on non-standard ports.  Note that
8849 # this is not changing the origin URL in the addressbar, only internally
8850 # the port number used.  This is intended to be used along with the
8851 # `network.dns.forceResolve` preference.
8853 # The form is:
8854 #   "80,443,808-888=8080; 563=8081"
8855 # this will remap ports for HTTP, HTTPS and the range of 808-888 included
8856 # to use port 8080, and port 563 to go to 8081.
8857 - name: network.socket.forcePort
8858   type: String
8859   value: ""
8860   mirror: never
8862 # Receive buffer size of QUIC socket
8863 - name: network.http.http3.recvBufferSize
8864   type: RelaxedAtomicInt32
8865   value: 1048576
8866   mirror: always
8868 - name: network.http.http3.enable_qlog
8869   type: RelaxedAtomicBool
8870   value: false
8871   mirror: always
8873 # When a h3 transaction is inserted in the pending queue, the time (ms) we wait
8874 # to create a TCP backup connection.
8875 - name: network.http.http3.backup_timer_delay
8876   type: RelaxedAtomicUint32
8877   value: 100
8878   mirror: always
8880 # When true, a http request will be upgraded to https when HTTPS RR is
8881 # available.
8882 - name: network.dns.upgrade_with_https_rr
8883   type: RelaxedAtomicBool
8884   value: false
8885   mirror: always
8887 # Whether to use HTTPS RR as AltSvc
8888 - name: network.dns.use_https_rr_as_altsvc
8889   type: RelaxedAtomicBool
8890   value: false
8891   mirror: always
8893 # Whether to check for NAT64 using the system resolver
8894 - name: network.connectivity-service.nat64-check
8895   type: bool
8896   value: true
8897   mirror: always
8899 # Manually enter the NAT64 prefix that will be used if IPv4 is unavailable.
8900 # The value is formatted as IPv6 with the least significant bits to be dropped.
8901 # For example, 64:ff9b:: is a common prefix. This will not disable
8902 # the NAT64 check, although the value of this pref will be prioritized.
8903 - name: network.connectivity-service.nat64-prefix
8904   type: String
8905   value: ""
8906   mirror: never
8908 # Whether to enable echconfig.
8909 - name: network.dns.echconfig.enabled
8910   type: RelaxedAtomicBool
8911   value: false
8912   mirror: always
8914 # This pref needs to be worked together with network.dns.echconfig.enabled
8915 # being true and there is no record without ECHConfig.
8916 # When we try all records with ECHConfig in HTTPS RRs and still can't connect,
8917 # this pref indicate whether we can fallback to the origin server.
8918 - name: network.dns.echconfig.fallback_to_origin_when_all_failed
8919   type: RelaxedAtomicBool
8920   value: true
8921   mirror: always
8923 # When true, reset the exclusion list when all records are excluded.
8924 - name: network.dns.httpssvc.reset_exclustion_list
8925   type: RelaxedAtomicBool
8926   value: true
8927   mirror: always
8929 # If the http3 connection cannot be ready after the timeout value here, the
8930 # transaction will start another non-http3 conneciton.
8931 # Setting this value to 0 indicates this feature is disabled.
8932 - name: network.dns.httpssvc.http3_fast_fallback_timeout
8933   type: RelaxedAtomicUint32
8934   value: 50
8935   mirror: always
8937 # Whether to use https rr for speculative connections.
8938 - name: network.dns.use_https_rr_for_speculative_connection
8939   type: RelaxedAtomicBool
8940   value: false
8941   mirror: always
8943 - name: network.cache.frecency_array_check_enabled
8944   type: RelaxedAtomicBool
8945   value: @IS_EARLY_BETA_OR_EARLIER@
8946   mirror: always
8948 #---------------------------------------------------------------------------
8949 # Prefs starting with "nglayout."
8950 #---------------------------------------------------------------------------
8952 # Enable/disable display list invalidation logging --- useful for debugging.
8953 - name: nglayout.debug.invalidation
8954   type: bool
8955   value: false
8956   mirror: always
8958 # Enable/disable widget update area flashing --- only supported with
8959 # BasicLayers (other layer managers always update the entire widget area).
8960 - name: nglayout.debug.widget_update_flashing
8961   type: RelaxedAtomicBool
8962   value: false
8963   mirror: always
8965 #---------------------------------------------------------------------------
8966 # Prefs starting with "page_load."
8967 #---------------------------------------------------------------------------
8969 # Time in milliseconds during which certain tasks are deprioritized during
8970 # page load.
8971 - name: page_load.deprioritization_period
8972   type: RelaxedAtomicUint32
8973   value: 5000
8974   mirror: always
8976 #---------------------------------------------------------------------------
8977 # Prefs starting with "permissions."
8978 #---------------------------------------------------------------------------
8980 # 1-Accept, 2-Deny, Any other value: Accept
8981 - name: permissions.default.image
8982   type: RelaxedAtomicUint32
8983   value: 1
8984   mirror: always
8986 - name: permissions.delegation.enabled
8987   type: bool
8988   value: true
8989   mirror: always
8991 - name: permissions.isolateBy.userContext
8992   type: RelaxedAtomicBool
8993   value: false
8994   mirror: always
8996 - name: permissions.isolateBy.privateBrowsing
8997   type: RelaxedAtomicBool
8998   value: @IS_EARLY_BETA_OR_EARLIER@
8999   mirror: always
9001 #---------------------------------------------------------------------------
9002 # Prefs starting with "plain_text."
9003 #---------------------------------------------------------------------------
9005 # When false, text in plaintext documents does not wrap long lines.
9006 - name: plain_text.wrap_long_lines
9007   type: bool
9008   value: true
9009   mirror: always
9011 #---------------------------------------------------------------------------
9012 # Prefs starting with "plugin."
9013 #---------------------------------------------------------------------------
9015 # Whether sending WM_MOUSEWHEEL and WM_MOUSEHWHEEL to plugins on Windows.
9016 - name: plugin.mousewheel.enabled
9017   type: bool
9018   value: true
9019   mirror: always
9021 - name: plugin.state.flash
9022   type: uint32_t
9023   # Flash is Click-to-Activate by default on all channels. Disabled for ARM builds.
9024 #if defined(_ARM64_) && defined(XP_WIN)
9025   value: 0
9026 #else
9027   value: 1
9028 #endif
9029   mirror: always
9031 #---------------------------------------------------------------------------
9032 # Prefs starting with "plugins."
9033 #---------------------------------------------------------------------------
9035 - name: plugins.flashBlock.enabled
9036   type: bool
9037   value: false
9038   mirror: always
9040 - name: plugins.http_https_only
9041   type: bool
9042   value: true
9043   mirror: always
9045 #---------------------------------------------------------------------------
9046 # Prefs starting with "preferences."
9047 #---------------------------------------------------------------------------
9049 - name: preferences.allow.omt-write
9050   type: bool
9051   value: true
9052   mirror: never
9054 #ifdef DEBUG
9055   # If set to true, setting a Preference matched to a `Once` StaticPref will
9056   # assert that the value matches. Such assertion being broken is a clear flag
9057   # that the Once policy shouldn't be used.
9058 -   name: preferences.check.once.policy
9059     type: bool
9060     value: false
9061     mirror: always
9063   # If set to true, StaticPrefs Once policy check will be skipped during
9064   # automation regression test. Use with care. This pref must be set back to
9065   # false as soon as specific test has completed.
9066 -   name: preferences.force-disable.check.once.policy
9067     type: bool
9068     value: false
9069     mirror: always
9070 #endif
9072 #---------------------------------------------------------------------------
9073 # Prefs starting with "print."
9074 #---------------------------------------------------------------------------
9076 # Variation fonts can't always be embedded in certain output formats
9077 # such as PDF. To work around this, draw the variation fonts using
9078 # paths instead of using font embedding.
9079 - name: print.font-variations-as-paths
9080   type: RelaxedAtomicBool
9081   value: true
9082   mirror: always
9084 # Whether we always print silently (without a print dialog).
9085 - name: print.always_print_silent
9086   type: RelaxedAtomicBool
9087   value: false
9088   mirror: always
9090 # Whether tab_modal print UI is enabled.
9092 # The tab modal print dialog is currently only for early beta or nightly.
9093 - name: print.tab_modal.enabled
9094   type: RelaxedAtomicBool
9095   value: @IS_EARLY_BETA_OR_EARLIER@
9096   mirror: always
9098 # Whether the pages per sheet print setting is enabled.
9099 - name: print.pages_per_sheet.enabled
9100   type: RelaxedAtomicBool
9101   value: true
9102   mirror: always
9104 # Whether we allow the print progress dialog to show up.
9105 - name: print.show_print_progress
9106   type: RelaxedAtomicBool
9107   value: true
9108   mirror: always
9110 # The default DPI for printing.
9112 # For PDF-based output, DPI should ideally be irrelevant, but in fact it is not
9113 # for multiple reasons:
9115 #  * Layout code that tries to respect device pixels (e.g. for snapping glyph
9116 #    positions and baselines, and especially for the "GDI Classic"
9117 #    rendering-mode threshold for certain fonts).
9119 #  * The limitations of the PDF format mean that we can't natively represent
9120 #    certain effects, such as filters, in PDF output, so we need to rasterize
9121 #    the parts of the document with these applied.
9123 #  * Other rasterized things like images and such are also affected by DPI
9124 #    (both in the output, and the images we select via srcset, for example).
9126 # Therefore, using a high DPI is preferable. For now, we use 144dpi to match
9127 # physical printer output on Windows, but higher (e.g. 300dpi) might be better
9128 # if it does not lead to issues such as excessive memory use.
9129 - name: print.default_dpi
9130   type: float
9131   value: 144.0f
9132   mirror: always
9134 # Whether support for monochrome printing is enabled for CUPS.
9135 - name: print.cups.monochrome.enabled
9136   type: RelaxedAtomicBool
9137   value: true
9138   mirror: always
9140 #---------------------------------------------------------------------------
9141 # Prefs starting with "privacy."
9142 #---------------------------------------------------------------------------
9144 - name: privacy.file_unique_origin
9145   type: bool
9146   value: true
9147   mirror: always
9149 - name: privacy.fuzzyfox.clockgrainus
9150   type: RelaxedAtomicUint32
9151   value: 100
9152   mirror: always
9154 # Annotate trackers using the strict list. If set to false, the basic list will
9155 # be used instead.
9156 - name: privacy.annotate_channels.strict_list.enabled
9157   type: bool
9158   value: @IS_EARLY_BETA_OR_EARLIER@
9159   mirror: always
9161 # First Party Isolation (double keying), disabled by default.
9162 - name: privacy.firstparty.isolate
9163   type: RelaxedAtomicBool
9164   value: false
9165   mirror: always
9167 # If false, two windows in the same domain with different first party domains
9168 # (top level URLs) can access resources through window.opener. This pref is
9169 # effective only when "privacy.firstparty.isolate" is true.
9170 - name: privacy.firstparty.isolate.restrict_opener_access
9171   type: RelaxedAtomicBool
9172   value: true
9173   mirror: always
9175 - name: privacy.firstparty.isolate.block_post_message
9176   type: RelaxedAtomicBool
9177   value: false
9178   mirror: always
9180 - name: privacy.firstparty.isolate.use_site
9181   type: RelaxedAtomicBool
9182   value: false
9183   mirror: always
9185 # Enforce tracking protection in all modes.
9186 - name: privacy.trackingprotection.enabled
9187   type: bool
9188   value: false
9189   mirror: always
9191 # Enforce tracking protection in Private Browsing mode.
9192 - name: privacy.trackingprotection.pbmode.enabled
9193   type: bool
9194   value: true
9195   mirror: always
9197 # Annotate channels based on the tracking protection list in all modes
9198 - name: privacy.trackingprotection.annotate_channels
9199   type: bool
9200   value: true
9201   mirror: always
9203 # Block 3rd party fingerprinting resources.
9204 - name: privacy.trackingprotection.fingerprinting.enabled
9205   type: bool
9206   value: false
9207   mirror: always
9209 # Block 3rd party cryptomining resources.
9210 - name: privacy.trackingprotection.cryptomining.enabled
9211   type: bool
9212   value: false
9213   mirror: always
9215 # Block 3rd party socialtracking resources.
9216 - name: privacy.trackingprotection.socialtracking.enabled
9217   type: bool
9218   value: false
9219   mirror: always
9221 # Consider socialtracking annotation as trackers (see ETP).
9222 - name: privacy.socialtracking.block_cookies.enabled
9223   type: bool
9224   value: true
9225   mirror: always
9227 # Whether Origin Telemetry should be enabled.
9228 # NOTE: if telemetry.origin_telemetry_test_mode.enabled is enabled, this pref
9229 #       won't have any effect.
9230 - name: privacy.trackingprotection.origin_telemetry.enabled
9231   type: RelaxedAtomicBool
9232   value: @IS_NIGHTLY_BUILD@
9233   mirror: always
9235 - name: privacy.trackingprotection.testing.report_blocked_node
9236   type: RelaxedAtomicBool
9237   value: false
9238   mirror: always
9240 # Whether to spoof user locale to English (used as part of Resist
9241 # Fingerprinting).
9242 # 0 - will prompt
9243 # 1 - don't spoof
9244 # 2 - spoof
9245 - name: privacy.spoof_english
9246   type: RelaxedAtomicUint32
9247   value: 0
9248   mirror: always
9250 # Send "do not track" HTTP header, disabled by default.
9251 - name: privacy.donottrackheader.enabled
9252   type: bool
9253   value: false
9254   mirror: always
9256 # Lower the priority of network loads for resources on the tracking protection
9257 # list.  Note that this requires the
9258 # privacy.trackingprotection.annotate_channels pref to be on in order to have
9259 # any effect.
9260 - name: privacy.trackingprotection.lower_network_priority
9261   type: bool
9262   value: @IS_NIGHTLY_BUILD@
9263   mirror: always
9265 # A subset of Resist Fingerprinting protections focused specifically on timers.
9266 # This affects the Animation API, the performance APIs, Date.getTime,
9267 # Event.timestamp, File.lastModified, audioContext.currentTime,
9268 # canvas.captureStream.currentTime.
9269 - name: privacy.reduceTimerPrecision
9270   type: RelaxedAtomicBool
9271   value: true
9272   mirror: always
9274 # If privacy.reduceTimerPrecision is false, this pref controls whether or not
9275 # to clamp all timers at a fixed 20 microsconds. It should always be enabled,
9276 # and is only specified as a pref to enable an emergency disabling in the event
9277 # of catastrophic failure.
9278 - name: privacy.reduceTimerPrecision.unconditional
9279   type: RelaxedAtomicBool
9280   value: true
9281   mirror: always
9283 # The resistFingerprinting variables are marked with 'Relaxed' memory ordering.
9284 # We don't particurally care that threads have a percently consistent view of
9285 # the values of these prefs. They are not expected to change often, and having
9286 # an outdated view is not particurally harmful. They will eventually become
9287 # consistent.
9289 # The variables will, however, be read often (specifically .microseconds on
9290 # each timer rounding) so performance is important.
9292 - name: privacy.resistFingerprinting
9293   type: RelaxedAtomicBool
9294   value: false
9295   mirror: always
9297 # We automatically decline canvas permission requests if they are not initiated
9298 # from user input. Just in case that breaks something, we allow the user to
9299 # revert this behavior with this obscure pref. We do not intend to support this
9300 # long term. If you do set it, to work around some broken website, please file
9301 # a bug with information so we can understand why it is needed.
9302 - name: privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts
9303   type: bool
9304   value: true
9305   mirror: always
9307 # Whether canvas extraction should result in random data. If false, canvas
9308 # extraction results in all-white, opaque pixel data.
9309 - name: privacy.resistFingerprinting.randomDataOnCanvasExtract
9310   type: RelaxedAtomicBool
9311   value: true
9312   mirror: always
9314 # The log level for browser console messages logged in RFPHelper.jsm. Change to
9315 # 'All' and restart to see the messages.
9316 - name: privacy.resistFingerprinting.jsmloglevel
9317   type: String
9318   value: "Warn"
9319   mirror: never
9321 # Enable jittering the clock one precision value forward.
9322 - name: privacy.resistFingerprinting.reduceTimerPrecision.jitter
9323   type: RelaxedAtomicBool
9324   value: true
9325   mirror: always
9327 # Dynamically tune the resolution of the timer reduction for
9328 # `privacy.reduceTimerPrecision` and `privacy.resistFingerprinting`.
9329 - name: privacy.resistFingerprinting.reduceTimerPrecision.microseconds
9330   type: RelaxedAtomicUint32
9331   value: 1000
9332   mirror: always
9334 - name: privacy.resistFingerprinting.target_video_res
9335   type: uint32_t
9336   value: 480
9337   mirror: always
9339 # Anti-tracking permission expiration.
9340 - name: privacy.restrict3rdpartystorage.expiration
9341   type: uint32_t
9342   value: 2592000   # 30 days (in seconds)
9343   mirror: always
9345 # Report Anti-tracking warnings to console lazily
9346 - name: privacy.restrict3rdpartystorage.console.lazy
9347   type: bool
9348   value: true
9349   mirror: always
9351 # Enable the heuristic to allow storage access for windows opened using window.open() after user interaction
9352 - name: privacy.restrict3rdpartystorage.heuristic.opened_window_after_interaction
9353   type: bool
9354   value: true
9355   mirror: always
9357 # Enable the heuristic to allow storage access for windows opened using window.open()
9358 - name: privacy.restrict3rdpartystorage.heuristic.window_open
9359   type: bool
9360   value: true
9361   mirror: always
9363 # Enable the heuristic to allow storage access for windows opened using window.open()
9364 - name: privacy.restrict3rdpartystorage.heuristic.redirect
9365   type: bool
9366   value: true
9367   mirror: always
9369 # Anti-tracking permission expiration.
9370 - name: privacy.restrict3rdpartystorage.expiration_redirect
9371   type: uint32_t
9372   value: 900    # 15 minutes
9373   mirror: always
9375 # Anti-tracking user-interaction expiration.
9376 - name: privacy.userInteraction.expiration
9377   type: uint32_t
9378   value: 3888000   # 45 days (in seconds)
9379   mirror: always
9381 # Anti-tracking user-interaction document interval.
9382 - name: privacy.userInteraction.document.interval
9383   type: uint32_t
9384   value: 1800   # 30 minutes (in seconds)
9385   mirror: always
9387 # Enable Anti-tracking testing. When it enables, it will notify the observers
9388 # when user-interaction permission or storage access permission is added. This
9389 # is for testing only.
9390 - name: privacy.antitracking.testing
9391   type: bool
9392   value: false
9393   mirror: always
9395 # Enable the heuristic to allow storage access for recent visited pages
9396 - name: privacy.restrict3rdpartystorage.heuristic.recently_visited
9397   type: bool
9398   value: true
9399   mirror: always
9401 # Valid time gap since last visit
9402 - name: privacy.restrict3rdpartystorage.heuristic.recently_visited_time
9403   type: uint32_t
9404   value: 600    # 10 minutes
9405   mirror: always
9407 # Recent visited pages redirection permission expiration.
9408 - name: privacy.restrict3rdpartystorage.expiration_visited
9409   type: uint32_t
9410   value: 2592000   # 30 days (in seconds)
9411   mirror: always
9413 # Maximum client-side cookie life-time cap. Measured in seconds, set to 0 to
9414 # disable.
9415 - name: privacy.documentCookies.maxage
9416   type: uint32_t
9417   value: 0
9418   mirror: always
9420 - name: privacy.storagePrincipal.enabledForTrackers
9421   type: RelaxedAtomicBool
9422   value: false
9423   mirror: always
9425 - name: privacy.window.maxInnerWidth
9426   type: int32_t
9427   value: 1000
9428   mirror: always
9430 - name: privacy.window.maxInnerHeight
9431   type: int32_t
9432   value: 1000
9433   mirror: always
9435 - name: privacy.sanitize.sanitizeOnShutdown
9436   type: RelaxedAtomicBool
9437   value: false
9438   mirror: always
9440 - name: privacy.clearOnShutdown.cache
9441   type: RelaxedAtomicBool
9442   value: false
9443   mirror: always
9445 - name: privacy.dynamic_firstparty.limitForeign
9446   type: RelaxedAtomicBool
9447   value: false
9448   mirror: always
9450 - name: privacy.dynamic_firstparty.use_site
9451   type: RelaxedAtomicBool
9452   value: true
9453   mirror: always
9455 - name: privacy.partition.network_state
9456   type: RelaxedAtomicBool
9457   value: true
9458   mirror: always
9460 - name: privacy.partition.bloburl_per_agent_cluster
9461   type: RelaxedAtomicBool
9462   value: @IS_NIGHTLY_BUILD@
9463   mirror: always
9465 - name: privacy.window.name.update.enabled
9466   type: bool
9467   value: true
9468   mirror: always
9470 # By default, the network state isolation is not active when there is a proxy
9471 # setting. This pref forces the network isolation even in these scenarios.
9472 - name: privacy.partition.network_state.connection_with_proxy
9473   type: bool
9474   value: false
9475   mirror: always
9477 #---------------------------------------------------------------------------
9478 # Prefs starting with "prompts."
9479 #---------------------------------------------------------------------------
9481 # Prompt modal type prefs
9482 # See nsIPromptService::MODAL_TYPE fields for possible values.
9484 # Insecure form submit warning.
9485 - name: prompts.modalType.insecureFormSubmit
9486   type: int32_t
9487   value: 2
9488   mirror: always
9490 # nsHttpChannelAuthProvider#ConfirmAuth anti-phishing prompts.
9491 - name: prompts.modalType.confirmAuth
9492   type: int32_t
9493   value: 2
9494   mirror: always
9496 #---------------------------------------------------------------------------
9497 # Prefs starting with "security."
9498 #---------------------------------------------------------------------------
9500 # Mochitests that need to load resource:// URIs not declared content-accessible
9501 # in manifests should set this pref.
9502 - name: security.all_resource_uri_content_accessible
9503   type: bool
9504   value: false
9505   mirror: always
9507 - name: security.bad_cert_domain_error.url_fix_enabled
9508   type: bool
9509   value: true
9510   mirror: always
9512 - name: security.csp.enable
9513   type: bool
9514   value: true
9515   mirror: always
9517 - name: security.csp.reporting.script-sample.max-length
9518   type: int32_t
9519   value: 40
9520   mirror: always
9522 # Allows loading ui resources in CheckLoadURIFlags
9523 # TODO Bug 1654488: Remove pref in CheckLoadURIFlags
9524 #      which allows all UI resources to load
9525 - name: security.caps.allow_uri_is_ui_resource_in_checkloaduriflags
9526   type: bool
9527   value: false
9528   mirror: always
9530 # If true, all toplevel data: URI navigations will be blocked.
9531 # Please note that manually entering a data: URI in the
9532 # URL-Bar will not be blocked when flipping this pref.
9533 - name: security.data_uri.block_toplevel_data_uri_navigations
9534   type: bool
9535   value: true
9536   mirror: always
9538 # Whether window A is allowed to navigate cross-origin window B (that is not
9539 # a descendant frame of A) to a URI that loads externally.
9540 - name: security.allow_disjointed_external_uri_loads
9541   type: bool
9542   value: false
9543   mirror: always
9545 # Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
9546 # not allowed for Firefox Desktop in firefox.js
9547 - name: security.allow_parent_unrestricted_js_loads
9548   type: RelaxedAtomicBool
9549   value: true
9550   mirror: always
9552 # Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
9553 # not allowed for Firefox Desktop in firefox.js
9554 - name: security.allow_eval_with_system_principal
9555   type: RelaxedAtomicBool
9556   value: true
9557   mirror: always
9559 # Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
9560 # not allowed for Firefox Desktop in firefox.js
9561 - name: security.allow_eval_in_parent_process
9562   type: RelaxedAtomicBool
9563   value: true
9564   mirror: always
9566 # Disallowed by default, ensure not disallowed content is loaded in the parent
9567 # process.
9568 - name: security.allow_unsafe_parent_loads
9569   type: bool
9570   value: false
9571   mirror: always
9573 # Pref to block mixed scripts (fonts, plugin content, scripts, stylesheets,
9574 # iframes, websockets, XHR).
9575 - name: security.mixed_content.block_active_content
9576   type: bool
9577   value: @IS_ANDROID@
9578   mirror: always
9580 # Pref to block sub requests that happen within an object.
9581 - name: security.mixed_content.block_object_subrequest
9582   type: bool
9583   value: false
9584   mirror: always
9586 # Pref for mixed display content blocking (images, audio, video).
9587 - name: security.mixed_content.block_display_content
9588   type: bool
9589   value: false
9590   mirror: always
9592 # Pref for mixed display content upgrading (images, audio, video).
9593 - name: security.mixed_content.upgrade_display_content
9594   type: bool
9595   value: @IS_NIGHTLY_BUILD@
9596   mirror: always
9598 # Whether strict file origin policy is in effect. "False" is traditional.
9599 - name: security.fileuri.strict_origin_policy
9600   type: RelaxedAtomicBool
9601   value: true
9602   mirror: always
9605 # The level to which we sandbox the content process. firefox.js sets the
9606 # default to different values on a per-OS basis, and has documentation
9607 # on what the defaults are and what the numbers mean.
9608 - name: security.sandbox.content.level
9609   type: int32_t
9610   value: 0
9611   mirror: always
9612   do_not_use_directly: true # Consumers should use SandboxSettings to ask.
9614 - name: security.sandbox.socket.process.level
9615   type: int32_t
9616   value: 0
9617   mirror: always
9618   do_not_use_directly: true # Consumers should use SandboxSettings to ask.
9620 #if defined(XP_WIN) && defined(MOZ_SANDBOX)
9621   # Whether win32k is disabled for content processes.
9622   # true means win32k system calls are not permitted.
9623 -   name: security.sandbox.content.win32k-disable
9624     type: RelaxedAtomicBool
9625     value: false
9626     mirror: always
9628   # Note: win32k is currently _not_ disabled for GMP due to intermittent test
9629   # failures, where the GMP process fails very early. See bug 1449348.
9630 -   name: security.sandbox.gmp.win32k-disable
9631     type: RelaxedAtomicBool
9632     value: false
9633     mirror: always
9635   # Whether win32k is disabled for socket processes.
9636   # true means win32k system calls are not permitted.
9637 -   name: security.sandbox.socket.win32k-disable
9638     type: RelaxedAtomicBool
9639     value: true
9640     mirror: always
9642   # Whether CET Shadow Stacks Strict mode is enabled for the content processes.
9643 -   name: security.sandbox.content.shadow-stacks-strict
9644     type: RelaxedAtomicBool
9645     value: false
9646     mirror: always
9648   # Whether CET Shadow Stacks Strict mode is enabled for the RDD processes.
9649 -   name: security.sandbox.rdd.shadow-stacks-strict
9650     type: RelaxedAtomicBool
9651     value: false
9652     mirror: always
9654   # Whether CET Shadow Stacks Strict mode is enabled for the socket processes.
9655 -   name: security.sandbox.socket.shadow-stacks-strict
9656     type: RelaxedAtomicBool
9657     value: false
9658     mirror: always
9660   # Whether CET Shadow Stacks Strict mode is enabled for the GPU processes.
9661 -   name: security.sandbox.gpu.shadow-stacks-strict
9662     type: RelaxedAtomicBool
9663     value: false
9664     mirror: always
9666   # Whether CET Shadow Stacks Strict mode is enabled for the GMP processes.
9667 -   name: security.sandbox.gmp.shadow-stacks-strict
9668     type: RelaxedAtomicBool
9669     value: false
9670     mirror: always
9672   # This controls the depth of stack trace that is logged when Windows sandbox
9673   # logging is turned on. This is only currently available for the content
9674   # process because the only other sandbox (for GMP) has too strict a policy to
9675   # allow stack tracing. This does not require a restart to take effect.
9676 -   name: security.sandbox.windows.log.stackTraceDepth
9677     type: RelaxedAtomicUint32
9678     value: 0
9679     mirror: always
9680 #endif
9682 #if defined(XP_LINUX) && defined(MOZ_SANDBOX)
9683   # Run content processes in headless mode and disallow connections to
9684   # the X server.  Experimental; breaks WebGL and Flash, and requires
9685   # `widget.disable-native-theme-for-content` and `widget.remote-look-and-feel`.
9686   # Changing it requires a restart because sandbox policy information dependent
9687   # on it is cached.  See bug 1640345 for details.
9688 - name: security.sandbox.content.headless
9689   type: bool
9690   value: false
9691   mirror: once
9692 #endif
9694 # Pref to show warning when submitting from secure to insecure.
9695 - name: security.warn_submit_secure_to_insecure
9696   type: bool
9697   value: true
9698   mirror: always
9700 # Hardware Origin-bound Second Factor Support
9701 - name: security.webauth.webauthn
9702   type: bool
9703   value: true
9704   mirror: always
9706 # Navigate-to CSP 3 directive
9707 - name: security.csp.enableNavigateTo
9708   type: bool
9709   value: false
9710   mirror: always
9712 # No way to enable on Android, Bug 1552602
9713 - name: security.webauth.u2f
9714   type: bool
9715   value: @IS_NOT_ANDROID@
9716   mirror: always
9718 # Block Worker/SharedWorker scripts with wrong MIME type.
9719 - name: security.block_Worker_with_wrong_mime
9720   type: bool
9721   value: true
9722   mirror: always
9724 # Cancel outgoing requests from SystemPrincipal
9725 - name: security.cancel_non_local_loads_triggered_by_systemprincipal
9726   type: bool
9727   value: false
9728   mirror: always
9730 #---------------------------------------------------------------------------
9731 # Prefs starting with "slider."
9732 #---------------------------------------------------------------------------
9734 # Scrollbar snapping region.
9735 # - 0: off
9736 # - 1 and higher: slider thickness multiple
9737 - name: slider.snapMultiplier
9738   type: int32_t
9739 #ifdef XP_WIN
9740   value: 6
9741 #else
9742   value: 0
9743 #endif
9744   mirror: once
9746 #---------------------------------------------------------------------------
9747 # Prefs starting with "storage."
9748 #---------------------------------------------------------------------------
9750 # Whether to use a non-exclusive VFS.
9751 # By default we use the unix-excl VFS, for the following reasons:
9752 # 1. It improves compatibility with NFS shares, whose implementation
9753 #    is incompatible with SQLite's locking requirements (reliable fcntl), and
9754 #    in particular with WAL journaling.
9755 #    Bug 433129 attempted to automatically identify such file-systems,
9756 #    but a reliable way was not found and the fallback locking is slower than
9757 #    POSIX locking, so we do not want to do it by default.
9758 # 2. It allows wal mode to avoid the memory mapped -shm file, reducing the
9759 #    likelihood of SIGBUS failures when disk space is exhausted.
9760 # 3. It provides some protection from third party database tampering while a
9761 #    connection is open.
9762 # Note there's no win32-excl VFS, so this has no effect on Windows.
9763 - name: storage.sqlite.exclusiveLock.enabled
9764   type: RelaxedAtomicBool
9765   value: @IS_NOT_ANDROID@
9766   mirror: always
9768 #---------------------------------------------------------------------------
9769 # Prefs starting with "svg."
9770 #---------------------------------------------------------------------------
9772 # This pref controls whether the 'context-fill' and 'context-stroke' keywords
9773 # can be used in SVG-as-an-image in the content processes to use the fill/
9774 # stroke specified on the element that embeds the image. (These keywords are
9775 # always enabled in the chrome process, regardless of this pref.) Also, these
9776 # keywords are currently not part of any spec, which is partly why we disable
9777 # them for web content.
9778 - name: svg.context-properties.content.enabled
9779   type: bool
9780   value: false
9781   mirror: always
9783 # Enable the use of display-lists for SVG hit-testing.
9784 - name: svg.display-lists.hit-testing.enabled
9785   type: bool
9786   value: true
9787   mirror: always
9789 # Enable the use of display-lists for SVG painting.
9790 - name: svg.display-lists.painting.enabled
9791   type: bool
9792   value: true
9793   mirror: always
9795 # Is support for the new getBBox method from SVG 2 enabled?
9796 # See https://svgwg.org/svg2-draft/single-page.html#types-SVGBoundingBoxOptions
9797 - name: svg.new-getBBox.enabled
9798   type: bool
9799   value: false
9800   mirror: always
9802 # Is support for letter-spacing and word-spacing in SVG text enabled?
9803 - name: svg.text-spacing.enabled
9804   type: bool
9805   value: true
9806   mirror: always
9808 #---------------------------------------------------------------------------
9809 # Prefs starting with "telemetry."
9810 #---------------------------------------------------------------------------
9812 # Enable origin telemetry test mode or not
9813 # NOTE: turning this on will override the
9814 #       privacy.trackingprotection.origin_telemetry.enabled pref.
9815 - name: telemetry.origin_telemetry_test_mode.enabled
9816   type: RelaxedAtomicBool
9817   value: false
9818   mirror: always
9820 - name: telemetry.number_of_site_origin.min_interval
9821   type: uint32_t
9822   value: 300000
9823   mirror: always
9825 - name: telemetry.fog.test.localhost_port
9826   type: RelaxedAtomicInt32
9827   value: 0
9828   mirror: always
9829   rust: true
9831 #---------------------------------------------------------------------------
9832 # Prefs starting with "test."
9833 #---------------------------------------------------------------------------
9835 - name: test.events.async.enabled
9836   type: RelaxedAtomicBool
9837   value: false
9838   mirror: always
9840 - name: test.mousescroll
9841   type: RelaxedAtomicBool
9842   value: false
9843   mirror: always
9845 #---------------------------------------------------------------------------
9846 # Prefs starting with "thread."
9847 #---------------------------------------------------------------------------
9849 - name: threads.medium_high_event_queue.enabled
9850   type: RelaxedAtomicBool
9851   value: true
9852   mirror: always
9854 #---------------------------------------------------------------------------
9855 # Prefs starting with "toolkit."
9856 #---------------------------------------------------------------------------
9858 # Returns true if BHR is disabled.
9859 - name: toolkit.content-background-hang-monitor.disabled
9860   type: bool
9861   value: false
9862   mirror: always
9864 - name: toolkit.scrollbox.horizontalScrollDistance
9865   type: RelaxedAtomicInt32
9866   value: 5
9867   mirror: always
9869 - name: toolkit.scrollbox.verticalScrollDistance
9870   type: RelaxedAtomicInt32
9871   value: 3
9872   mirror: always
9874 # The lateWriteChecksStage and fastShutdownStage below represent the stage
9875 # of shutdown after which we (for lateWriteChecksStage) crash / gather
9876 # telemetry data on file writes, or (for fastShutdownStage) we call _exit(0).
9877 # Higher values are earlier during shutdown, and the full enumeration can
9878 # be found in AppShutdown.h in the AppShutdownPhase enum.
9879 - name: toolkit.shutdown.lateWriteChecksStage
9880   type: int32_t
9881 #ifdef MOZ_CODE_COVERAGE
9882   value: 0
9883 #else
9884   value: 3
9885 #endif
9886   mirror: always
9888 # See the comment above toolkit.shutdown.lateWriteChecksStage. A higher value
9889 # for this pref means we call _exit(0) earlier during shutdown.
9890 - name: toolkit.shutdown.fastShutdownStage
9891   type: int32_t
9892 #if !defined(DEBUG) && !defined(MOZ_ASAN) && !defined(MOZ_TSAN) && !defined(MOZ_CODE_COVERAGE) && !defined(MOZ_VALGRIND) && !defined(MOZ_PROFILE_GENERATE) && !defined(JS_STRUCTURED_SPEW)
9893   #ifdef NIGHTLY_BUILD
9894   value: 3
9895   #else
9896   value: 1
9897   #endif
9898 #else
9899   value: 0
9900 #endif
9901   mirror: always
9903 # Sending each remote accumulation immediately places undue strain on the IPC
9904 # subsystem. Batch the remote accumulations for a period of time before sending
9905 # them all at once. This value was chosen as a balance between data timeliness
9906 # and performance (see bug 1218576).
9907 - name: toolkit.telemetry.ipcBatchTimeout
9908   type: uint32_t
9909   value: 2000
9910   mirror: always
9912 - name: toolkit.telemetry.geckoview.batchDurationMS
9913   type: RelaxedAtomicUint32
9914   value: 5000
9915   mirror: always
9917 - name: toolkit.telemetry.geckoview.maxBatchStalenessMS
9918   type: RelaxedAtomicUint32
9919   value: 60000
9920   mirror: always
9922 - name: toolkit.telemetry.geckoview.streaming
9923   type: RelaxedAtomicBool
9924   value: false
9925   mirror: always
9927 - name: toolkit.telemetry.testing.overrideProductsCheck
9928   type: RelaxedAtomicBool
9929   value: false
9930   mirror: always
9932 #---------------------------------------------------------------------------
9933 # Prefs starting with "ui."
9934 #---------------------------------------------------------------------------
9936 - name: ui.key.generalAccessKey
9937   type: int32_t
9938   value: -1
9939   mirror: always
9941 # Only used if generalAccessKey is -1.
9942 - name: ui.key.chromeAccess
9943   type: int32_t
9944 #ifdef XP_MACOSX
9945   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 3 =  ctrl+shift, 8 = Meta
9946   value: 2
9947 #else
9948   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 5 =  Alt+Shift,
9949   # 8 = Meta, 16 = Win
9950   value: 4
9951 #endif
9952   mirror: always
9954 # Only used if generalAccessKey is -1.
9955 - name: ui.key.contentAccess
9956   type: int32_t
9957 #ifdef XP_MACOSX
9958   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 3 = ctrl+shift, 8 = Meta
9959   value: 6
9960 #else
9961   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 5 =  Alt+Shift,
9962   # 8 = Meta, 16 = Win
9963   value: 5
9964 #endif
9965   mirror: always
9967 # Does the access key by itself focus the menu bar?
9968 - name: ui.key.menuAccessKeyFocuses
9969   type: bool
9970 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
9971   # On Windows and Linux, we now default to showing the menu bar only when alt
9972   # is pressed.
9973   value: true
9974 #else
9975   value: false
9976 #endif
9977   mirror: always
9979 # Duration of timeout of incremental search in menus (ms).  0 means infinite.
9980 - name: ui.menu.incremental_search.timeout
9981   type: uint32_t
9982   value: 1000
9983   mirror: always
9985 # If true, all popups won't hide automatically on blur
9986 - name: ui.popup.disable_autohide
9987   type: RelaxedAtomicBool
9988   value: false
9989   mirror: always
9991 # Negate scroll, true will make the mouse scroll wheel move the screen the
9992 # same direction as with most desktops or laptops.
9993 - name: ui.scrolling.negate_wheel_scroll
9994   type: RelaxedAtomicBool
9995   value: @IS_ANDROID@
9996   mirror: always
9998 # If the user puts a finger down on an element and we think the user might be
9999 # executing a pan gesture, how long do we wait before tentatively deciding the
10000 # gesture is actually a tap and activating the target element?
10001 - name: ui.touch_activation.delay_ms
10002   type: int32_t
10003   value: 100
10004   mirror: always
10006 # If the user has clicked an element, how long do we keep the :active state
10007 # before it is cleared by the mouse sequences fired after a
10008 # touchstart/touchend.
10009 - name: ui.touch_activation.duration_ms
10010   type: int32_t
10011   value: 10
10012   mirror: always
10014 - name: ui.use_native_colors
10015   type: RelaxedAtomicBool
10016   value: true
10017   mirror: always
10019 # Prevent system colors from being exposed to CSS or canvas.
10020 - name: ui.use_standins_for_native_colors
10021   type: RelaxedAtomicBool
10022   value: false
10023   mirror: always
10025 # Disable page loading activity cursor by default.
10026 - name: ui.use_activity_cursor
10027   type: bool
10028   value: false
10029   mirror: always
10031 # Whether context menus should only appear on mouseup instead of mousedown,
10032 # on OSes where they normally appear on mousedown (macOS, *nix).
10033 # Note: ignored on Windows (context menus always use mouseup).
10034 - name: ui.context_menus.after_mouseup
10035   type: bool
10036   value: false
10037   mirror: always
10039 # Whether click-hold context menus are enabled.
10040 - name: ui.click_hold_context_menus
10041   type: RelaxedAtomicBool
10042   value: false
10043   mirror: always
10045 # How long to wait for a drag gesture before displaying click-hold context menu,
10046 # in milliseconds.
10047 - name: ui.click_hold_context_menus.delay
10048   type: RelaxedAtomicInt32
10049   value: 500
10050   mirror: always
10052 # When enabled, the touch.radius and mouse.radius prefs allow events to be
10053 # dispatched to nearby elements that are sensitive to the event. See
10054 # PositionedEventTargeting.cpp. The 'mm' prefs define a rectangle around the
10055 # nominal event target point within which we will search for suitable elements.
10056 # 'visitedWeight' is a percentage weight; a value > 100 makes a visited link be
10057 # treated as further away from the event target than it really is, while a
10058 # value < 100 makes a visited link be treated as closer to the event target
10059 # than it really is.
10061 - name: ui.touch.radius.enabled
10062   type: bool
10063   value: @IS_ANDROID@
10064   mirror: always
10066 - name: ui.touch.radius.topmm
10067   type: uint32_t
10068 #ifdef ANDROID
10069   value: 5
10070 #else
10071   value: 12
10072 #endif
10073   mirror: always
10075 - name: ui.touch.radius.rightmm
10076   type: uint32_t
10077 #ifdef ANDROID
10078   value: 3
10079 #else
10080   value: 8
10081 #endif
10082   mirror: always
10084 - name: ui.touch.radius.bottommm
10085   type: uint32_t
10086 #ifdef ANDROID
10087   value: 2
10088 #else
10089   value: 4
10090 #endif
10091   mirror: always
10093 - name: ui.touch.radius.leftmm
10094   type: uint32_t
10095 #ifdef ANDROID
10096   value: 3
10097 #else
10098   value: 8
10099 #endif
10100   mirror: always
10102 - name: ui.touch.radius.visitedWeight
10103   type: uint32_t
10104   value: 120
10105   mirror: always
10107 - name: ui.mouse.radius.enabled
10108   type: bool
10109   value: @IS_ANDROID@
10110   mirror: always
10112 - name: ui.mouse.radius.topmm
10113   type: uint32_t
10114 #ifdef ANDROID
10115   value: 5
10116 #else
10117   value: 12
10118 #endif
10119   mirror: always
10121 - name: ui.mouse.radius.rightmm
10122   type: uint32_t
10123 #ifdef ANDROID
10124   value: 3
10125 #else
10126   value: 8
10127 #endif
10128   mirror: always
10130 - name: ui.mouse.radius.bottommm
10131   type: uint32_t
10132 #ifdef ANDROID
10133   value: 2
10134 #else
10135   value: 4
10136 #endif
10137   mirror: always
10139 - name: ui.mouse.radius.leftmm
10140   type: uint32_t
10141 #ifdef ANDROID
10142   value: 3
10143 #else
10144   value: 8
10145 #endif
10146   mirror: always
10148 - name: ui.mouse.radius.visitedWeight
10149   type: uint32_t
10150   value: 120
10151   mirror: always
10153 - name: ui.mouse.radius.reposition
10154   type: bool
10155   value: @IS_ANDROID@
10156   mirror: always
10158 # When true, the ui.mouse.radius.* prefs will only affect simulated mouse
10159 # events generated by touch input. When false, the prefs will be used for all
10160 # mouse events.
10161 - name: ui.mouse.radius.inputSource.touchOnly
10162   type: bool
10163   value: true
10164   mirror: always
10166 #---------------------------------------------------------------------------
10167 # Prefs starting with "urlclassifier."
10168 #---------------------------------------------------------------------------
10170 # Update server response timeout for Safe Browsing.
10171 - name: urlclassifier.update.response_timeout_ms
10172   type: uint32_t
10173   value: 30000
10174   mirror: always
10176 # Download update timeout for Safe Browsing.
10177 - name: urlclassifier.update.timeout_ms
10178   type: uint32_t
10179   value: 90000
10180   mirror: always
10182 #---------------------------------------------------------------------------
10183 # Prefs starting with "view_source."
10184 #---------------------------------------------------------------------------
10186 - name: view_source.editor.external
10187   type: bool
10188   value: false
10189   mirror: always
10191 - name: view_source.wrap_long_lines
10192   type: bool
10193   value: @IS_ANDROID@
10194   mirror: always
10196 - name: view_source.syntax_highlight
10197   type: bool
10198   value: true
10199   mirror: always
10201 - name: view_source.tab_size
10202   type: int32_t
10203   value: 4
10204   mirror: always
10206 #---------------------------------------------------------------------------
10207 # Prefs starting with "webgl." (for pref access from Worker threads)
10208 #---------------------------------------------------------------------------
10210 - name: webgl.1.allow-core-profiles
10211   type: RelaxedAtomicBool
10212 #ifdef XP_MACOSX
10213   value: true
10214 #else
10215   value: false
10216 #endif
10217   mirror: always
10219 - name: webgl.all-angle-options
10220   type: RelaxedAtomicBool
10221   value: false
10222   mirror: always
10224 - name: webgl.angle.force-d3d11
10225   type: RelaxedAtomicBool
10226   value: false
10227   mirror: always
10229 - name: webgl.angle.try-d3d11
10230   type: RelaxedAtomicBool
10231 #ifdef XP_WIN
10232   value: true
10233 #else
10234   value: false
10235 #endif
10236   mirror: always
10238 - name: webgl.angle.force-warp
10239   type: RelaxedAtomicBool
10240   value: false
10241   mirror: always
10243 - name: webgl.can-lose-context-in-foreground
10244   type: RelaxedAtomicBool
10245   value: true
10246   mirror: always
10248 - name: webgl.cgl.multithreaded
10249   type: RelaxedAtomicBool
10250   value: true
10251   mirror: always
10253 - name: webgl.debug.incomplete-tex-color
10254   type: RelaxedAtomicUint32
10255   value: 0
10256   mirror: always
10258 - name: webgl.default-antialias
10259   type: RelaxedAtomicBool
10260   value: @IS_NOT_ANDROID@
10261   mirror: always
10263 - name: webgl.default-no-alpha
10264   type: RelaxedAtomicBool
10265   value: false
10266   mirror: always
10268 - name: webgl.disable-angle
10269   type: RelaxedAtomicBool
10270   value: false
10271   mirror: always
10273 - name: webgl.disable-wgl
10274   type: RelaxedAtomicBool
10275   value: false
10276   mirror: always
10278 - name: webgl.dxgl.enabled
10279   type: RelaxedAtomicBool
10280 #ifdef XP_WIN
10281   value: true
10282 #else
10283   value: false
10284 #endif
10285   mirror: always
10287 - name: webgl.dxgl.needs-finish
10288   type: RelaxedAtomicBool
10289   value: false
10290   mirror: always
10292 - name: webgl.disable-fail-if-major-performance-caveat
10293   type: RelaxedAtomicBool
10294   value: true
10295   mirror: always
10297 - name: webgl.disable-DOM-blit-uploads
10298   type: RelaxedAtomicBool
10299   value: false
10300   mirror: always
10302 - name: webgl.disabled
10303   type: RelaxedAtomicBool
10304   value: false
10305   mirror: always
10307 - name: webgl.enable-debug-renderer-info
10308   type: RelaxedAtomicBool
10309   value: true
10310   mirror: always
10312 - name: webgl.enable-draft-extensions
10313   type: RelaxedAtomicBool
10314   value: false
10315   mirror: always
10317 - name: webgl.enable-privileged-extensions
10318   type: RelaxedAtomicBool
10319   value: false
10320   mirror: always
10322 - name: webgl.enable-surface-texture
10323   type: RelaxedAtomicBool
10324   value: true
10325   mirror: always
10327 - name: webgl.enable-ahardwarebuffer
10328   type: RelaxedAtomicBool
10329   value: false
10330   mirror: always
10332 - name: webgl.enable-webgl2
10333   type: RelaxedAtomicBool
10334   value: true
10335   mirror: always
10337 - name: webgl.force-enabled
10338   type: RelaxedAtomicBool
10339   value: false
10340   mirror: always
10342 - name: webgl.force-layers-readback
10343   type: RelaxedAtomicBool
10344   value: false
10345   mirror: always
10347 - name: webgl.force-index-validation
10348   type: RelaxedAtomicInt32
10349   value: 0
10350   mirror: always
10352 - name: webgl.lose-context-on-memory-pressure
10353   type: RelaxedAtomicBool
10354   value: false
10355   mirror: always
10357 - name: webgl.max-contexts
10358   type: RelaxedAtomicUint32
10359   value: 1000
10360   mirror: always
10362 - name: webgl.max-contexts-per-principal
10363   type: RelaxedAtomicUint32
10364   value: 300
10365   mirror: always
10367 - name: webgl.max-warnings-per-context
10368   type: RelaxedAtomicUint32
10369   value: 32
10370   mirror: always
10372 - name: webgl.min_capability_mode
10373   type: RelaxedAtomicBool
10374   value: false
10375   mirror: always
10377 - name: webgl.msaa-force
10378   type: RelaxedAtomicBool
10379   value: false
10380   mirror: always
10382 - name: webgl.msaa-samples
10383   type: RelaxedAtomicUint32
10384   value: 4
10385   mirror: always
10387 - name: webgl.out-of-process
10388   type: RelaxedAtomicBool
10389 #if defined(XP_MACOSX) || defined(XP_WIN)
10390   value: true
10391 #else
10392   value: false
10393 #endif
10394   mirror: always
10396 - name: webgl.out-of-process.force
10397   type: RelaxedAtomicBool
10398   value: false
10399   mirror: always
10401 - name: webgl.out-of-process.shmem-size
10402   type: RelaxedAtomicUint32
10403   value: 100000 # 100KB
10404   mirror: always
10406 - name: webgl.power-preference-override
10407   type: RelaxedAtomicInt32
10408   value: 0
10409   mirror: always
10411 - name: webgl.prefer-16bpp
10412   type: RelaxedAtomicBool
10413   value: false
10414   mirror: always
10416 - name: webgl.allow-immediate-queries
10417   type: RelaxedAtomicBool
10418   value: false
10419   mirror: always
10421 - name: webgl.allow-fb-invalidation
10422   type: RelaxedAtomicBool
10423   value: false
10424   mirror: always
10427 - name: webgl.perf.max-warnings
10428   type: RelaxedAtomicInt32
10429   value: 0
10430   mirror: always
10432 - name: webgl.perf.max-acceptable-fb-status-invals
10433   type: RelaxedAtomicInt32
10434   value: 0
10435   mirror: always
10437 - name: webgl.perf.spew-frame-allocs
10438   type: RelaxedAtomicBool
10439   value: true
10440   mirror: always
10442 - name: webgl.oop.via-pcq
10443   type: RelaxedAtomicBool
10444   value: false
10445   mirror: always
10447 #---------------------------------------------------------------------------
10448 # Prefs starting with "widget."
10449 #---------------------------------------------------------------------------
10451 # Global user preference for disabling native theme in content processes.
10452 - name: widget.disable-native-theme-for-content
10453   type: RelaxedAtomicBool
10454 #if defined(XP_LINUX) && defined(NIGHTLY_BUILD) && !defined(ANDROID)
10455   value: true
10456 #else
10457   value: false
10458 #endif
10459   mirror: always
10461 # Preference to disable dark scrollbar implementation.
10462 # This is mainly for testing because dark scrollbars have to be semi-
10463 # transparent, but many reftests expect scrollbars to look identical
10464 # among different backgrounds.
10465 # However, some users may want to disable this as well.
10466 - name: widget.disable-dark-scrollbar
10467   type: bool
10468   value: false
10469   mirror: always
10471 - name: widget.window-transforms.disabled
10472   type: RelaxedAtomicBool
10473   value: false
10474   mirror: always
10476 # Whether to allow gtk dark themes in content.
10477 - name: widget.content.allow-gtk-dark-theme
10478   type: bool
10479   value: false
10480   mirror: always
10482 # Whether to use gtk high contrast themes to disable content styling like on
10483 # windows high contrast mode.
10484 - name: widget.content.gtk-high-contrast.enabled
10485   type: bool
10486   value: true
10487   mirror: always
10489 # Whether to pause the compositor when a native window is minimized.
10490 - name: widget.pause-compositor-when-minimized
10491   type: bool
10492   value: true
10493   mirror: always
10495 #ifdef MOZ_WAYLAND
10496 #ifdef NIGHTLY_BUILD
10497 # Keep those pref hidden on non-nightly builds to avoid people accidentally
10498 # turning it on.
10500 # Use DMABuf for content textures.
10501 # For testing purposes only.
10502 - name: widget.dmabuf-textures.enabled
10503   type: RelaxedAtomicBool
10504   value: false
10505   mirror: always
10506 #endif
10508 # Use smooth rendering for Wayland basic compositor.
10509 - name: widget.wayland-smooth-rendering
10510   type: RelaxedAtomicBool
10511   value: false
10512   mirror: always
10514 # Use DMABuf backend for WebGL.
10515 - name: widget.dmabuf-webgl.enabled
10516   type: RelaxedAtomicBool
10517   value: true
10518   mirror: always
10519 #endif
10521 # Enable the RemoteLookAndFeel in content processes, which will cause all
10522 # LookAndFeel values to be queried in the parent process and sent to content
10523 # processes using IPC.  This is required for widgets to paint and behave
10524 # correctly when `security.sandbox.content.headless` is enabled.
10525 - name: widget.remote-look-and-feel
10526   type: bool
10527 #ifdef MOZ_WIDGET_GTK
10528   value: true
10529 #else
10530   value: false
10531 #endif
10532   mirror: once
10534 #---------------------------------------------------------------------------
10535 # Prefs starting with "xul."
10536 #---------------------------------------------------------------------------
10538 # Pref to control whether arrow-panel animations are enabled or not.
10539 # Transitions are currently disabled on Linux due to rendering issues on
10540 # certain configurations.
10541 - name: xul.panel-animations.enabled
10542   type: bool
10543 #ifdef MOZ_WIDGET_GTK
10544   value: false
10545 #else
10546   value: true
10547 #endif
10548   mirror: always
10550 #---------------------------------------------------------------------------
10551 # Prefs starting with "zoom."
10552 #---------------------------------------------------------------------------
10554 - name: zoom.maxPercent
10555   type: uint32_t
10556 #ifdef ANDROID
10557   value: 400
10558 #else
10559   value: 500
10560 #endif
10561   mirror: always
10563 - name: zoom.minPercent
10564   type: uint32_t
10565 #ifdef ANDROID
10566   value: 20
10567 #else
10568   value: 30
10569 #endif
10570   mirror: always
10572 #---------------------------------------------------------------------------
10573 # End of prefs
10574 #---------------------------------------------------------------------------