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/. */
4
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.
7#
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.
12#
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.
17#
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.)
22#
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.)
27#
28# Definitions
29# -----------
30# A pref definition looks like this:
31#
32#   - name: <pref-name>                    # mandatory
33#     type: <cpp-type>                     # mandatory
34#     value: <default-value>               # mandatory
35#     mirror: <never | once | always>      # mandatory
36#     do_not_use_directly: <true | false>  # optional
37#     include: <header-file>               # optional
38#     rust: <true | false>                 # optional
39#
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).
43#
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>`.
49#
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.
55#
56# - `mirror` indicates how the pref value is mirrored into a C++ variable.
57#
58#   * `never`: There is no C++ mirror variable. The pref value can only be
59#     accessed via the standard libpref API functions.
60#
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.
68#
69#   * `always`: The mirror variable is always kept in sync with the pref value.
70#     This is the most common choice.
71#
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.
75#
76#   * A direct variable access is faster than a hash table lookup.
77#
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.
81#
82#   Note that Rust code must access the mirror variable directly, rather than
83#   via the getter function.
84#
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.
91#
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>`.
95#
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")`.
99#
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:
105#
106# - If the `mirror` value is `once`, `_AtStartup` is appended, to indicate the
107#   value was obtained at startup.
108#
109# - If the `do_not_use_directly` value is true, `_DoNotUseDirectly` is
110#   appended.
111#
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.
116#
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`.
120#
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.
123#
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.
126#
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.
131
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
137
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
145
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
151
152#ifdef MOZILLA_OFFICIAL
153#define IS_NOT_MOZILLA_OFFICIAL false
154#else
155#define IS_NOT_MOZILLA_OFFICIAL true
156#endif
157
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
165
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
173
174#---------------------------------------------------------------------------
175# Prefs starting with "accessibility."
176#---------------------------------------------------------------------------
177
178- name: accessibility.accesskeycausesactivation
179  type: bool
180  value: true
181  mirror: always
182
183- name: accessibility.monoaudio.enable
184  type: RelaxedAtomicBool
185  value: false
186  mirror: always
187
188- name: accessibility.browsewithcaret
189  type: RelaxedAtomicBool
190  value: false
191  mirror: always
192
193- name: accessibility.AOM.enabled
194  type: bool
195  value: false
196  mirror: always
197
198- name: accessibility.ARIAReflection.enabled
199  type: bool
200  value: false
201  mirror: always
202
203# Whether form controls and images should be focusable with mouse, in content
204# documents.
205#
206# This matches historical macOS / Safari behavior.
207#
208#  * 0: never
209#  * 1: always
210#  * 2: on content documents
211- name: accessibility.mouse_focuses_formcontrol
212  type: int32_t
213#ifdef XP_MACOSX
214  value: 2
215#else
216  value: 1
217#endif
218  mirror: always
219
220# Whether to cache the entire accessibility trees of all content processes in
221# the parent process.
222- name: accessibility.cache.enabled
223  type: bool
224  value: false
225  mirror: once
226
227#---------------------------------------------------------------------------
228# Prefs starting with "alerts."
229#---------------------------------------------------------------------------
230
231# Whether to use platform-specific backends for showing desktop notifications.
232# If no such backend is available, or if the pref is false, then XUL
233# notifications are used.
234- name: alerts.useSystemBackend
235  type: bool
236#ifdef XP_WIN
237  # Linux and macOS turn on system level notification as default, but Windows is
238  # disabled due to instability (dependencies of bug 1497425).
239  value: false
240#else
241  value: true
242#endif
243  mirror: always
244
245
246#ifdef ANDROID
247  #---------------------------------------------------------------------------
248  # Prefs starting with "android."
249  #---------------------------------------------------------------------------
250
251  # On Android, we want an opaque background to be visible under the page,
252  # so layout should not force a default background.
253-   name: android.widget_paints_background
254    type: RelaxedAtomicBool
255    value: true
256    mirror: always
257
258-   name: android.touch_resampling.enabled
259    type: RelaxedAtomicBool
260    value: true
261    mirror: always
262
263#endif
264
265#---------------------------------------------------------------------------
266# Prefs starting with "apz."
267# The apz prefs are explained in AsyncPanZoomController.cpp
268#---------------------------------------------------------------------------
269
270# amount we zoom in for a double tap gesture if we couldn't find any content
271# based rect to zoom to
272- name: apz.doubletapzoom.defaultzoomin
273  type: AtomicFloat
274  value: 1.2f
275  mirror: always
276
277- name: apz.scrollbarbuttonrepeat.enabled
278  type: RelaxedAtomicBool
279  value: true
280  mirror: always
281
282- name: apz.wr.activate_all_scroll_frames
283  type: RelaxedAtomicBool
284  value: false
285  mirror: always
286
287- name: apz.wr.activate_all_scroll_frames_when_fission
288  type: RelaxedAtomicBool
289  value: true
290  mirror: always
291
292- name: apz.nonwr.activate_all_scroll_frames
293  type: RelaxedAtomicBool
294  value: false
295  mirror: always
296
297- name: apz.nonwr.activate_all_scroll_frames_when_fission
298  type: RelaxedAtomicBool
299  value: false
300  mirror: always
301
302- name: apz.prefer_jank_minimal_displayports
303  type: RelaxedAtomicBool
304  value: true
305  mirror: always
306
307- name: apz.allow_double_tap_zooming
308  type: RelaxedAtomicBool
309  value: true
310  mirror: always
311
312- name: apz.mac.enable_double_tap_zoom_touchpad_gesture
313  type: RelaxedAtomicBool
314  value: true
315  mirror: always
316
317- name: apz.allow_immediate_handoff
318  type: RelaxedAtomicBool
319  value: false
320  mirror: always
321
322- name: apz.allow_zooming
323  type: RelaxedAtomicBool
324  value: true
325  mirror: always
326
327- name: apz.allow_zooming_out
328  type: RelaxedAtomicBool
329  value: false
330  mirror: always
331
332- name: apz.android.chrome_fling_physics.friction
333  type: AtomicFloat
334  value: 0.015f
335  mirror: always
336
337- name: apz.android.chrome_fling_physics.inflexion
338  type: AtomicFloat
339  value: 0.35f
340  mirror: always
341
342- name: apz.android.chrome_fling_physics.stop_threshold
343  type: AtomicFloat
344  value: 0.1f
345  mirror: always
346
347- name: apz.autoscroll.enabled
348  type: RelaxedAtomicBool
349  value: true
350  mirror: always
351
352- name: apz.axis_lock.breakout_angle
353  type: AtomicFloat
354  value: float(M_PI / 8.0)    # 22.5 degrees
355  mirror: always
356  include: <cmath>
357
358- name: apz.axis_lock.breakout_threshold
359  type: AtomicFloat
360  value: 1.0f / 32.0f
361  mirror: always
362
363- name: apz.axis_lock.direct_pan_angle
364  type: AtomicFloat
365  value: float(M_PI / 3.0)    # 60 degrees
366  mirror: always
367  include: <cmath>
368
369- name: apz.axis_lock.lock_angle
370  type: AtomicFloat
371  value: float(M_PI / 6.0)    # 30 degrees
372  mirror: always
373  include: <cmath>
374
375# Whether to lock touch scrolling to one axis at a time.
376# 0 = FREE (No locking at all)
377# 1 = STANDARD (Once locked, remain locked until scrolling ends)
378# 2 = STICKY (Allow lock to be broken, with hysteresis)
379- name: apz.axis_lock.mode
380  type: RelaxedAtomicInt32
381  value: 2
382  mirror: always
383
384- name: apz.content_response_timeout
385  type: RelaxedAtomicInt32
386  value: 400
387  mirror: always
388
389- name: apz.danger_zone_x
390  type: RelaxedAtomicInt32
391  value: 50
392  mirror: always
393
394- name: apz.danger_zone_y
395  type: RelaxedAtomicInt32
396  value: 100
397  mirror: always
398
399- name: apz.disable_for_scroll_linked_effects
400  type: RelaxedAtomicBool
401  value: false
402  mirror: always
403
404- name: apz.displayport_expiry_ms
405  type: RelaxedAtomicUint32
406  value: 15000
407  mirror: always
408
409- name: apz.drag.enabled
410  type: RelaxedAtomicBool
411  value: true
412  mirror: always
413
414- name: apz.drag.initial.enabled
415  type: RelaxedAtomicBool
416  value: true
417  mirror: always
418
419- name: apz.drag.touch.enabled
420  type: RelaxedAtomicBool
421  value: true
422  mirror: always
423
424- name: apz.enlarge_displayport_when_clipped
425  type: RelaxedAtomicBool
426  value: @IS_ANDROID@
427  mirror: always
428
429# Test only.
430- name: apz.fixed-margin-override.enabled
431  type: RelaxedAtomicBool
432  value: false
433  mirror: always
434
435# Test only.
436- name: apz.fixed-margin-override.bottom
437  type: RelaxedAtomicInt32
438  value: 0
439  mirror: always
440
441# Test only.
442- name: apz.fixed-margin-override.top
443  type: RelaxedAtomicInt32
444  value: 0
445  mirror: always
446
447- name: apz.fling_accel_base_mult
448  type: AtomicFloat
449  value: 1.0f
450  mirror: always
451
452- name: apz.fling_accel_supplemental_mult
453  type: AtomicFloat
454  value: 1.0f
455  mirror: always
456
457- name: apz.fling_accel_min_fling_velocity
458  type: AtomicFloat
459  value: 1.5f
460  mirror: always
461
462- name: apz.fling_accel_min_pan_velocity
463  type: AtomicFloat
464  value: 0.8f
465  mirror: always
466
467- name: apz.fling_accel_max_pause_interval_ms
468  type: RelaxedAtomicInt32
469  value: 50
470  mirror: always
471
472- name: apz.fling_curve_function_x1
473  type: float
474  value: 0.0f
475  mirror: once
476
477- name: apz.fling_curve_function_x2
478  type: float
479  value: 1.0f
480  mirror: once
481
482- name: apz.fling_curve_function_y1
483  type: float
484  value: 0.0f
485  mirror: once
486
487- name: apz.fling_curve_function_y2
488  type: float
489  value: 1.0f
490  mirror: once
491
492- name: apz.fling_curve_threshold_inches_per_ms
493  type: AtomicFloat
494  value: -1.0f
495  mirror: always
496
497- name: apz.fling_friction
498  type: AtomicFloat
499  value: 0.002f
500  mirror: always
501
502- name: apz.fling_min_velocity_threshold
503  type: AtomicFloat
504  value: 0.5f
505  mirror: always
506
507- name: apz.fling_stop_on_tap_threshold
508  type: AtomicFloat
509  value: 0.05f
510  mirror: always
511
512- name: apz.fling_stopped_threshold
513  type: AtomicFloat
514  value: 0.01f
515  mirror: always
516
517- name: apz.touch_acceleration_factor_x
518  type: float
519  value: 1.0f
520  mirror: always
521
522- name: apz.touch_acceleration_factor_y
523  type: float
524  value: 1.0f
525  mirror: always
526
527# new scrollbar code for desktop zooming
528- name: apz.force_disable_desktop_zooming_scrollbars
529  type: RelaxedAtomicBool
530  value: false
531  mirror: always
532
533#ifdef MOZ_WIDGET_GTK
534-   name: apz.gtk.kinetic_scroll.enabled
535    type: RelaxedAtomicBool
536    value: true
537    mirror: always
538
539-   name: apz.gtk.touchpad_pinch.enabled
540    type: RelaxedAtomicBool
541    value: true
542    mirror: always
543
544-   name: apz.gtk.touchpad_pinch.three_fingers.enabled
545    type: RelaxedAtomicBool
546    value: false
547    mirror: always
548#endif
549
550- name: apz.keyboard.enabled
551  type: bool
552  value: @IS_NOT_ANDROID@
553  mirror: once
554
555- name: apz.keyboard.passive-listeners
556  type: RelaxedAtomicBool
557  value: @IS_NOT_ANDROID@
558  mirror: always
559
560- name: apz.max_tap_time
561  type: RelaxedAtomicInt32
562  value: 300
563  mirror: always
564
565- name: apz.max_velocity_inches_per_ms
566  type: AtomicFloat
567  value: -1.0f
568  mirror: always
569
570- name: apz.max_velocity_queue_size
571  type: uint32_t
572  value: 5
573  mirror: once
574
575- name: apz.min_skate_speed
576  type: AtomicFloat
577  value: 1.0f
578  mirror: always
579
580- name: apz.minimap.enabled
581  type: RelaxedAtomicBool
582  value: false
583  mirror: always
584
585- name: apz.mvm.force-enabled
586  type: RelaxedAtomicBool
587  value: true
588  mirror: always
589
590- name: apz.one_touch_pinch.enabled
591  type: RelaxedAtomicBool
592  value: @IS_ANDROID@
593  mirror: always
594
595- name: apz.overscroll.enabled
596  type: RelaxedAtomicBool
597#if defined(XP_MACOSX)
598  value: true
599#else
600  value: false
601#endif
602  mirror: always
603
604# The "test async scroll offset" (used via reftest-async-scroll
605# or nsIDOMWindowUtils.setAsyncScrollOffset()) can be used to
606# trigger overscroll. Used for tests only.
607- name: apz.overscroll.test_async_scroll_offset.enabled
608  type: RelaxedAtomicBool
609  value: false
610  mirror: always
611
612- name: apz.overscroll.min_pan_distance_ratio
613  type: AtomicFloat
614  value: 1.0f
615  mirror: always
616
617- name: apz.overscroll.stop_distance_threshold
618  type: AtomicFloat
619  value: 5.0f
620  mirror: always
621
622- name: apz.overscroll.spring_stiffness
623  type: AtomicFloat
624  value: 200
625  mirror: always
626
627- name: apz.overscroll.damping
628  type: AtomicFloat
629  value: 1.1
630  mirror: always
631
632- name: apz.overscroll.max_velocity
633  type: AtomicFloat
634  value: 10
635  mirror: always
636
637- name: apz.paint_skipping.enabled
638  type: RelaxedAtomicBool
639  value: true
640  mirror: always
641
642- name: apz.peek_messages.enabled
643  type: RelaxedAtomicBool
644  value: true
645  mirror: always
646
647# Fetch displayport updates early from the message queue.
648- name: apz.pinch_lock.mode
649  type: RelaxedAtomicInt32
650  value: 1
651  mirror: always
652
653- name: apz.pinch_lock.scroll_lock_threshold
654  type: AtomicFloat
655  value: 1.0f / 32.0f   # 1/32 inches
656  mirror: always
657
658- name: apz.pinch_lock.span_breakout_threshold
659  type: AtomicFloat
660  value: 1.0f / 32.0f   # 1/32 inches
661  mirror: always
662
663- name: apz.pinch_lock.span_lock_threshold
664  type: AtomicFloat
665  value: 1.0f / 32.0f   # 1/32 inches
666  mirror: always
667
668- name: apz.pinch_lock.buffer_max_age
669  type: int32_t
670  value: 50   # milliseconds
671  mirror: once
672
673- name: apz.popups.enabled
674  type: RelaxedAtomicBool
675  value: true
676  mirror: always
677
678# Whether to print the APZC tree for debugging.
679- name: apz.printtree
680  type: RelaxedAtomicBool
681  value: false
682  mirror: always
683
684- name: apz.record_checkerboarding
685  type: RelaxedAtomicBool
686  value: @IS_NIGHTLY_BUILD@
687  mirror: always
688
689- name: apz.second_tap_tolerance
690  type: AtomicFloat
691  value: 0.5f
692  mirror: always
693
694- name: apz.test.fails_with_native_injection
695  type: RelaxedAtomicBool
696  value: false
697  mirror: always
698
699- name: apz.test.logging_enabled
700  type: RelaxedAtomicBool
701  value: false
702  mirror: always
703
704- name: apz.touch_move_tolerance
705  type: AtomicFloat
706  value: 0.1f
707  mirror: always
708
709- name: apz.touch_start_tolerance
710  type: AtomicFloat
711  value: 0.1f
712  mirror: always
713
714- name: apz.velocity_bias
715  type: AtomicFloat
716  value: 0.0f
717  mirror: always
718
719- name: apz.velocity_relevance_time_ms
720  type: RelaxedAtomicUint32
721  value: 100
722  mirror: always
723
724- name: apz.windows.force_disable_direct_manipulation
725  type: RelaxedAtomicBool
726  value: false
727  mirror: always
728
729- name: apz.windows.use_direct_manipulation
730  type: RelaxedAtomicBool
731  value: true
732  mirror: always
733
734- name: apz.windows.check_for_pan_gesture_conversion
735  type: RelaxedAtomicBool
736  value: true
737  mirror: always
738
739- name: apz.x_skate_highmem_adjust
740  type: AtomicFloat
741  value: 0.0f
742  mirror: always
743
744- name: apz.x_skate_size_multiplier
745  type: AtomicFloat
746  value: 1.25f
747  mirror: always
748
749- name: apz.x_stationary_size_multiplier
750  type: AtomicFloat
751  value: 1.5f
752  mirror: always
753
754- name: apz.y_skate_highmem_adjust
755  type: AtomicFloat
756  value: 0.0f
757  mirror: always
758
759- name: apz.y_skate_size_multiplier
760  type: AtomicFloat
761#if defined(MOZ_WIDGET_ANDROID)
762  value: 1.5f
763#else
764  value: 3.5f
765#endif
766  mirror: always
767
768- name: apz.y_stationary_size_multiplier
769  type: AtomicFloat
770#if defined(MOZ_WIDGET_ANDROID)
771  value: 1.5f
772#else
773  value: 3.5f
774#endif
775  mirror: always
776
777- name: apz.zoom_animation_duration_ms
778  type: RelaxedAtomicInt32
779#if defined(MOZ_WIDGET_ANDROID)
780  value: 250
781#else
782  value: 350
783#endif
784  mirror: always
785
786- name: apz.scale_repaint_delay_ms
787  type: RelaxedAtomicInt32
788  value: 500
789  mirror: always
790
791#---------------------------------------------------------------------------
792# Prefs starting with "beacon."
793#---------------------------------------------------------------------------
794
795# Is support for Navigator.sendBeacon enabled?
796- name: beacon.enabled
797  type: bool
798  value: true
799  mirror: always
800
801#---------------------------------------------------------------------------
802# Prefs starting with "bidi."
803#---------------------------------------------------------------------------
804
805# Whether delete and backspace should immediately delete characters not
806# visually adjacent to the caret, or adjust the visual position of the caret
807# on the first keypress and delete the character on a second keypress
808- name: bidi.edit.delete_immediately
809  type: bool
810  value: true
811  mirror: always
812
813# Bidi caret movement style:
814# 0 = logical
815# 1 = visual
816# 2 = visual, but logical during selection
817- name: bidi.edit.caret_movement_style
818  type: int32_t
819#if !defined(XP_LINUX) && defined(NIGHTLY_BUILD)
820  value: 1
821#else
822  value: 2 # See Bug 1638240
823#endif
824  mirror: always
825
826#---------------------------------------------------------------------------
827# Prefs starting with "browser."
828#---------------------------------------------------------------------------
829
830- name: browser.active_color
831  type: String
832  value: "#EE0000"
833  mirror: never
834
835- name: browser.anchor_color
836  type: String
837  value: "#0000EE"
838  mirror: never
839
840# See http://dev.w3.org/html5/spec/forms.html#attr-fe-autofocus
841- name: browser.autofocus
842  type: bool
843  value: true
844  mirror: always
845
846- name: browser.cache.offline.enable
847  type: bool
848  value: @IS_NOT_EARLY_BETA_OR_EARLIER@
849  mirror: always
850
851- name: browser.cache.disk.enable
852  type: RelaxedAtomicBool
853  value: true
854  mirror: always
855
856- name: browser.cache.memory.enable
857  type: RelaxedAtomicBool
858  value: true
859  mirror: always
860
861# Limit of recent metadata we keep in memory for faster access, in KB.
862- name: browser.cache.disk.metadata_memory_limit
863  type: RelaxedAtomicUint32
864  value: 250   # 0.25 MB
865  mirror: always
866
867# Does the user want smart-sizing?
868- name: browser.cache.disk.smart_size.enabled
869  type: RelaxedAtomicBool
870  value: true
871  mirror: always
872
873# Disk cache capacity in kilobytes. It's used only when
874# browser.cache.disk.smart_size.enabled == false
875- name: browser.cache.disk.capacity
876  type: RelaxedAtomicUint32
877  value: 256000
878  mirror: always
879
880# -1 = determine dynamically, 0 = none, n = memory capacity in kilobytes.
881- name: browser.cache.memory.capacity
882  type: RelaxedAtomicInt32
883  value: -1
884  mirror: always
885
886# When smartsizing is disabled we could potentially fill all disk space by
887# cache data when the disk capacity is not set correctly. To avoid that we
888# check the free space every time we write some data to the cache. The free
889# space is checked against two limits. Once the soft limit is reached we start
890# evicting the least useful entries, when we reach the hard limit writing to
891# the entry fails.
892- name: browser.cache.disk.free_space_soft_limit
893  type: RelaxedAtomicUint32
894  value: 5 * 1024   # 5MB
895  mirror: always
896
897- name: browser.cache.disk.free_space_hard_limit
898  type: RelaxedAtomicUint32
899  value: 1024    # 1MB
900  mirror: always
901
902# The number of chunks we preload ahead of read. One chunk currently has
903# 256kB.
904- name: browser.cache.disk.preload_chunk_count
905  type: RelaxedAtomicUint32
906  value: 4    # 1 MB of read ahead
907  mirror: always
908
909# Max-size (in KB) for entries in disk cache. Set to -1 for no limit.
910# (Note: entries bigger than 1/8 of disk-cache are never cached)
911- name: browser.cache.disk.max_entry_size
912  type: RelaxedAtomicUint32
913  value: 50 * 1024    # 50 MB
914  mirror: always
915
916# Max-size (in KB) for entries in memory cache. Set to -1 for no limit.
917# (Note: entries bigger than than 90% of the mem-cache are never cached.)
918- name: browser.cache.memory.max_entry_size
919  type: RelaxedAtomicInt32
920  value: 5 * 1024
921  mirror: always
922
923# Memory limit (in kB) for new cache data not yet written to disk. Writes to
924# the cache are buffered and written to disk on background with low priority.
925# With a slow persistent storage these buffers may grow when data is coming
926# fast from the network. When the amount of unwritten data is exceeded, new
927# writes will simply fail. We have two buckets, one for important data
928# (priority) like html, css, fonts and js, and one for other data like images,
929# video, etc.
930# Note: 0 means no limit.
931- name: browser.cache.disk.max_chunks_memory_usage
932  type: RelaxedAtomicUint32
933  value: 40 * 1024
934  mirror: always
935- name: browser.cache.disk.max_priority_chunks_memory_usage
936  type: RelaxedAtomicUint32
937  value: 40 * 1024
938  mirror: always
939
940# Number of seconds the cache spends writing pending data and closing files
941# after shutdown has been signalled. Past that time data is not written and
942# files are left open for the OS to clean up.
943- name: browser.cache.max_shutdown_io_lag
944  type: RelaxedAtomicUint32
945  value: 2
946  mirror: always
947
948# A percentage limit for media content type in the disk cache. When some entries
949# need to be evicted and media is over the limit, it's evicted first.
950- name: browser.cache.disk.content_type_media_limit
951  type: RelaxedAtomicInt32
952  value: 50
953  mirror: always
954
955# How often to validate document in cache
956#   0 = once-per-session,
957#   1 = each-time,
958#   2 = never,
959#   3 = when-appropriate/automatically
960- name: browser.cache.check_doc_frequency
961  type: RelaxedAtomicUint32
962  value: 3
963  mirror: always
964
965- name: browser.contentblocking.database.enabled
966  type: bool
967  value: false
968  mirror: always
969
970# How many recent block/unblock actions per origins we remember in the
971# Content Blocking log for each top-level window.
972- name: browser.contentblocking.originlog.length
973  type: uint32_t
974  value: 32
975  mirror: always
976
977- name: browser.display.background_color
978  type: String
979  value: "#FFFFFF"
980  mirror: never
981
982# This preference is a bit confusing because we use the opposite
983# string value in the colors dialog to indicate to users how FF HCM
984# will behave.
985# With resect to document colors, these values mean:
986# 0 = "default" = always, except in high contrast mode
987# 1 = "always"
988# 2 = "never"
989#
990# On windows, we set this to 0, which means FF HCM will mirror OS HCM.
991# Everywhere else, we set this to 1, disabling FF HCM.
992- name: browser.display.document_color_use
993  type: RelaxedAtomicUint32
994#if defined(XP_WIN)
995  value: 0
996#else
997  value: 1
998#endif
999  mirror: always
1000  rust: true
1001
1002# 0 = always native
1003# 1 = never native
1004# other = default
1005- name: browser.display.windows.non_native_menus
1006  type: RelaxedAtomicUint32
1007  value: 2
1008  mirror: always
1009  rust: true
1010
1011# This pref dictates whether or not backplates and background images
1012# are to be drawn, when in high-contrast mode:
1013#   false: do not draw backplates or render background images
1014#   true: render background images and draw backplates
1015# This condition is only considered when high-contrast mode is enabled
1016# in Firefox, ie. when the user has:
1017#   (1) mUseAccessibilityMode set to true (Widows high-contrast mode is on)
1018#       AND browser.display.document_color_use set to 0
1019#       (only with high-contrast themes) OR
1020#   (2) browser.display.document_color_use set to 2 (always)
1021- name: browser.display.permit_backplate
1022  type: RelaxedAtomicBool
1023  value: true
1024  mirror: always
1025  rust: true
1026
1027# Whether we should suppress the background-image of the canvas (the root
1028# frame) if we're in forced colors mode.
1029#
1030# This is important because some sites use background-image with a plain color
1031# and it causes undesirable results in high-contrast mode.
1032#
1033# See bug 1614921 for example.
1034- name: browser.display.suppress_canvas_background_image_on_forced_colors
1035  type: bool
1036  value: true
1037  mirror: always
1038
1039- name: browser.display.focus_ring_on_anything
1040  type: bool
1041  value: false
1042  mirror: always
1043
1044- name: browser.display.focus_ring_width
1045  type: uint32_t
1046  value: 1
1047  mirror: always
1048
1049- name: browser.display.focus_background_color
1050  type: String
1051  value: "#117722"
1052  mirror: never
1053
1054# Focus ring border style.
1055# 0 = solid border, 1 = dotted border
1056- name: browser.display.focus_ring_style
1057  type: uint32_t
1058  value: 1
1059  mirror: always
1060
1061- name: browser.display.focus_text_color
1062  type: String
1063  value: "#ffffff"
1064  mirror: never
1065- name: browser.display.foreground_color
1066  type: String
1067  value: "#000000"
1068  mirror: never
1069
1070# Whether focus rings are always shown by default.
1071#
1072# This is the initial value of nsWindowRoot::mShowFocusRings, but it can be
1073# overridden by system preferences.
1074- name: browser.display.show_focus_rings
1075  type: bool
1076  value: false
1077  mirror: always
1078
1079# Whether we should always enable focus rings after focus was moved by keyboard.
1080#
1081# This behavior matches both historical and GTK / Windows focus behavior.
1082#
1083# :focus-visible is intended to provide better heuristics than this.
1084- name: browser.display.always_show_rings_after_key_focus
1085  type: bool
1086  value: false
1087  mirror: always
1088
1089# In theory: 0 = never, 1 = quick, 2 = always, though we always just use it as
1090# a bool!
1091- name: browser.display.use_document_fonts
1092  type: RelaxedAtomicInt32
1093  value: 1
1094  mirror: always
1095  rust: true
1096
1097- name: browser.display.use_focus_colors
1098  type: bool
1099  value: false
1100  mirror: always
1101
1102- name: browser.display.use_system_colors
1103  type: bool
1104  value: false
1105  mirror: always
1106
1107- name: browser.dom.window.dump.enabled
1108  type: RelaxedAtomicBool
1109  value: @IS_NOT_MOZILLA_OFFICIAL@
1110  mirror: always
1111
1112# See bug 1710926
1113- name: browser.download.improvements_to_download_panel
1114  type: bool
1115  value: false
1116  mirror: always
1117
1118- name: browser.download.sanitize_non_media_extensions
1119  type: bool
1120  value: true
1121  mirror: always
1122
1123# Image document's automatic image sizing.
1124- name: browser.enable_automatic_image_resizing
1125  type: bool
1126  value: true
1127  mirror: always
1128
1129# Image document's click-to-resize.
1130- name: browser.enable_click_image_resizing
1131  type: bool
1132  value: @IS_NOT_ANDROID@
1133  mirror: always
1134
1135# The max url length we'll store in history.
1136#
1137# The default value is mostly a guess based on various facts:
1138#
1139# * IE didn't support urls longer than 2083 chars
1140# * Sitemaps protocol used to support a maximum of 2048 chars
1141# * Various SEO guides suggest to not go over 2000 chars
1142# * Various apps/services are known to have issues over 2000 chars
1143# * RFC 2616 - HTTP/1.1 suggests being cautious about depending
1144#   on URI lengths above 255 bytes
1145#
1146- name: browser.history.maxUrlLength
1147  type: uint32_t
1148  value: 2000
1149  mirror: always
1150
1151#ifdef XP_WIN
1152  # Notify TabUnloader or send the memory pressure if the memory resource
1153  # notification is signaled AND the available commit space is lower than
1154  # this value.
1155-   name: browser.low_commit_space_threshold_mb
1156    type: RelaxedAtomicUint32
1157    value: 200
1158    mirror: always
1159#endif
1160
1161# Render animations and videos as a solid color
1162- name: browser.measurement.render_anims_and_video_solid
1163  type: RelaxedAtomicBool
1164  value: false
1165  mirror: always
1166
1167- name: browser.navigation.requireUserInteraction
1168  type: bool
1169  value: false
1170  mirror: always
1171
1172# Indicates if about:newtab shows content (enabled) or just blank.
1173- name: browser.newtabpage.enabled
1174  type: bool
1175  value: true
1176  mirror: always
1177
1178# Open PDFs in Edge with the --app flag if it is the default.
1179- name: browser.pdf.launchDefaultEdgeAsApp
1180  type: bool
1181  value: true
1182  mirror: always
1183
1184# Maximium delay between keystrokes that will be considered typing (milliseconds).
1185- name: browser.places.interactions.typing_timeout_ms
1186  type: RelaxedAtomicUint32
1187  value: 3000
1188  mirror: always
1189
1190# Force usage of in-memory (rather than file on disk) media cache for video streaming when private browsing
1191- name: browser.privatebrowsing.forceMediaMemoryCache
1192  type: bool
1193  value: false
1194  mirror: always
1195
1196# Controls @media -moz-toolbar-prefers-color-scheme.
1197#
1198# Returns whether the toolbar is dark (0), light (1), or system (2).
1199#
1200# Default to "system", the theming code sets it appropriately.
1201- name: browser.theme.toolbar-theme
1202  type: RelaxedAtomicUint32
1203  value: 2
1204  mirror: always
1205  rust: true
1206
1207# Enable Proton restyle. Requires restart.
1208- name: browser.proton.enabled
1209  type: RelaxedAtomicBool
1210  value: true
1211  mirror: always
1212  rust: true
1213
1214- name: browser.proton.places-tooltip.enabled
1215  type: RelaxedAtomicBool
1216  value: false
1217  mirror: always
1218  rust: true
1219
1220# Blocked plugin content
1221- name: browser.safebrowsing.blockedURIs.enabled
1222  type: bool
1223  value: true
1224  mirror: always
1225
1226# Malware protection
1227- name: browser.safebrowsing.malware.enabled
1228  type: bool
1229  value: true
1230  mirror: always
1231
1232# Password protection
1233- name: browser.safebrowsing.passwords.enabled
1234  type: bool
1235  value: false
1236  mirror: always
1237
1238# Phishing protection
1239- name: browser.safebrowsing.phishing.enabled
1240  type: bool
1241  value: true
1242  mirror: always
1243
1244# Maximum size for an array to store the safebrowsing prefixset.
1245- name: browser.safebrowsing.prefixset_max_array_size
1246  type: RelaxedAtomicUint32
1247  value: 512*1024
1248  mirror: always
1249
1250# SessionStore prefs
1251# Maximum number of bytes of DOMSessionStorage data we collect per origin.
1252- name: browser.sessionstore.dom_storage_limit
1253  type: uint32_t
1254  value: 2048
1255  mirror: always
1256
1257# Minimal interval between two save operations in milliseconds (while the user is active).
1258- name: browser.sessionstore.interval
1259  type: RelaxedAtomicUint32
1260  value: 15000
1261  mirror: always
1262
1263# Causes SessionStore to ignore non-final update messages from
1264# browser tabs that were not caused by a flush from the parent.
1265# This is a testing flag and should not be used by end-users.
1266- name: browser.sessionstore.debug.no_auto_updates
1267  type: RelaxedAtomicBool
1268  value: false
1269  mirror: always
1270
1271# If set, use DocumentChannel to directly initiate loads entirely
1272# from parent-process BrowsingContexts
1273- name: browser.tabs.documentchannel.parent-controlled
1274  type: bool
1275  value: false
1276  mirror: always
1277
1278- name: browser.tabs.remote.desktopbehavior
1279  type: bool
1280  value: false
1281  mirror: always
1282
1283- name: browser.tabs.remote.force-paint
1284  type: bool
1285  value: true
1286  mirror: always
1287
1288# When this pref is enabled document loads with a mismatched
1289# Cross-Origin-Embedder-Policy header will fail to load
1290- name: browser.tabs.remote.useCrossOriginEmbedderPolicy
1291  type: RelaxedAtomicBool
1292#if !defined(ANDROID)
1293  value: true
1294#else
1295  value: @IS_NIGHTLY_BUILD@
1296#endif
1297  mirror: always
1298
1299# When this pref is enabled top level loads with a mismatched
1300# Cross-Origin-Opener-Policy header will be loaded in a separate process.
1301- name: browser.tabs.remote.useCrossOriginOpenerPolicy
1302  type: RelaxedAtomicBool
1303#if !defined(ANDROID)
1304  value: true
1305#else
1306  value: @IS_NIGHTLY_BUILD@
1307#endif
1308  mirror: always
1309
1310# When this pref is enabled then we use a separate content process for
1311# top-level load of file:// URIs
1312- name: browser.tabs.remote.separateFileUriProcess
1313  type: RelaxedAtomicBool
1314#if !defined(ANDROID)
1315  value: true
1316#else
1317  value: false
1318#endif
1319  mirror: always
1320
1321# When this pref is enabled, opaque response is only allowed to enter the
1322# content process if it's a response for media (audio, image, video), CSS, or
1323# JavaScript.
1324- name: browser.opaqueResponseBlocking
1325  type: RelaxedAtomicBool
1326  value: @IS_NIGHTLY_BUILD@
1327  mirror: always
1328
1329# When true, zooming will be enabled on all sites, even ones that declare
1330# user-scalable=no.
1331- name: browser.ui.zoom.force-user-scalable
1332  type: RelaxedAtomicBool
1333  value: false
1334  mirror: always
1335
1336- name: browser.underline_anchors
1337  type: bool
1338  value: true
1339  mirror: always
1340
1341- name: browser.viewport.desktopWidth
1342  type: RelaxedAtomicInt32
1343  value: 980
1344  mirror: always
1345
1346- name: browser.visited_color
1347  type: String
1348  value: "#551A8B"
1349  mirror: never
1350
1351#---------------------------------------------------------------------------
1352# Prefs starting with "canvas."
1353#---------------------------------------------------------------------------
1354
1355# Limit for the canvas image cache. 0 means unlimited.
1356- name: canvas.image.cache.limit
1357  type: int32_t
1358  value: 0
1359  mirror: always
1360
1361# Add support for canvas path objects
1362- name: canvas.path.enabled
1363  type: bool
1364  value: true
1365  mirror: always
1366
1367- name: canvas.capturestream.enabled
1368  type: bool
1369  value: true
1370  mirror: always
1371
1372# Is support for CanvasRenderingContext2D.filter enabled?
1373- name: canvas.filters.enabled
1374  type: bool
1375  value: true
1376  mirror: always
1377
1378# Provide ability to turn on support for canvas focus rings.
1379- name: canvas.focusring.enabled
1380  type: bool
1381  value: true
1382  mirror: always
1383
1384# Is support for CanvasRenderingContext2D's hitRegion APIs enabled?
1385- name: canvas.hitregions.enabled
1386  type: bool
1387  value: false
1388  mirror: always
1389
1390# Is support for CanvasRenderingContext2D's createConicGradient API enabled?
1391- name: canvas.createConicGradient.enabled
1392  type: RelaxedAtomicBool
1393  value: true
1394  mirror: always
1395
1396# Provide ability to turn on support for canvas mozGetAsFile API.
1397- name: canvas.mozgetasfile.enabled
1398  type: bool
1399  value: false
1400  mirror: always
1401
1402#---------------------------------------------------------------------------
1403# Prefs starting with "channelclassifier."
1404#---------------------------------------------------------------------------
1405
1406- name: channelclassifier.allowlist_example
1407  type: bool
1408  value: false
1409  mirror: always
1410
1411#---------------------------------------------------------------------------
1412# Prefs starting with "clipboard."
1413#---------------------------------------------------------------------------
1414
1415# Clipboard behavior.
1416- name: clipboard.autocopy
1417  type: bool
1418#if !defined(ANDROID) && !defined(XP_MACOSX) && defined(XP_UNIX)
1419  value: true
1420#else
1421  value: false
1422#endif
1423  mirror: always
1424
1425#ifdef XP_WIN
1426  # allow to copy clipboard data to Clipboard History/Cloud
1427  # (used on sensitive data in about:logins and Private Browsing)
1428-   name: clipboard.copyPrivateDataToClipboardCloudOrHistory
1429    type: bool
1430    value: false
1431    mirror: always
1432#endif
1433
1434#---------------------------------------------------------------------------
1435# Prefs starting with "consoleservice."
1436#---------------------------------------------------------------------------
1437
1438#if defined(ANDROID)
1439  # Disable sending console to logcat on release builds.
1440-   name: consoleservice.logcat
1441    type: RelaxedAtomicBool
1442    value: @IS_NOT_RELEASE_OR_BETA@
1443    mirror: always
1444#endif
1445
1446#---------------------------------------------------------------------------
1447# Prefs starting with "content."
1448#---------------------------------------------------------------------------
1449
1450- name: content.cors.disable
1451  type: bool
1452  value: false
1453  mirror: always
1454
1455# Back off timer notification after count.
1456# -1 means never.
1457- name: content.notify.backoffcount
1458  type: int32_t
1459  value: -1
1460  mirror: always
1461
1462# Notification interval in microseconds.
1463# The notification interval has a dramatic effect on how long it takes to
1464# initially display content for slow connections. The current value
1465# provides good incremental display of content without causing an increase
1466# in page load time. If this value is set below 1/10 of a second it starts
1467# to impact page load performance.
1468# See bugzilla bug 72138 for more info.
1469- name: content.notify.interval
1470  type: int32_t
1471  value: 120000
1472  mirror: always
1473
1474# Do we notify based on time?
1475- name: content.notify.ontimer
1476  type: bool
1477  value: true
1478  mirror: always
1479
1480# How many times to deflect in interactive mode.
1481- name: content.sink.interactive_deflect_count
1482  type: int32_t
1483  value: 0
1484  mirror: always
1485
1486# How many times to deflect in perf mode.
1487- name: content.sink.perf_deflect_count
1488  type: int32_t
1489  value: 200
1490  mirror: always
1491
1492# Parse mode for handling pending events.
1493# 0 = don't check for pending events
1494# 1 = don't deflect if there are pending events
1495# 2 = bail if there are pending events
1496- name: content.sink.pending_event_mode
1497  type: int32_t
1498#ifdef XP_WIN
1499  value: 1
1500#else
1501  value: 0
1502#endif
1503  mirror: always
1504
1505# How often to probe for pending events. 1 = every token.
1506- name: content.sink.event_probe_rate
1507  type: int32_t
1508  value: 1
1509  mirror: always
1510
1511# How long to stay off the event loop in interactive mode.
1512- name: content.sink.interactive_parse_time
1513  type: int32_t
1514  value: 3000
1515  mirror: always
1516
1517# How long to stay off the event loop in perf mode.
1518- name: content.sink.perf_parse_time
1519  type: int32_t
1520  value: 360000
1521  mirror: always
1522
1523#  How long to be in interactive mode after an event.
1524- name: content.sink.interactive_time
1525  type: uint32_t
1526  value: 750000
1527  mirror: always
1528
1529# How long to stay in perf mode after initial loading.
1530- name: content.sink.initial_perf_time
1531  type: uint32_t
1532  value: 2000000
1533  mirror: always
1534
1535# Should we switch between perf-mode and interactive-mode?
1536# 0 = Switch
1537# 1 = Interactive mode
1538# 2 = Perf mode
1539- name: content.sink.enable_perf_mode
1540  type: int32_t
1541  value: 0
1542  mirror: always
1543
1544#---------------------------------------------------------------------------
1545# Prefs starting with "converter."
1546#---------------------------------------------------------------------------
1547
1548# Whether we include ruby annotation in the text despite whether it
1549# is requested. This was true because we didn't explicitly strip out
1550# annotations. Set false by default to provide a better behavior, but
1551# we want to be able to pref-off it if user doesn't like it.
1552- name: converter.html2txt.always_include_ruby
1553  type: bool
1554  value: false
1555  mirror: always
1556
1557#---------------------------------------------------------------------------
1558# Prefs starting with "datareporting."
1559#---------------------------------------------------------------------------
1560
1561- name: datareporting.healthreport.uploadEnabled
1562  type: RelaxedAtomicBool
1563  value: false
1564  mirror: always
1565  rust: true
1566
1567#---------------------------------------------------------------------------
1568# Prefs starting with "device."
1569#---------------------------------------------------------------------------
1570
1571# Is support for the device sensors API enabled?
1572- name: device.sensors.enabled
1573  type: bool
1574  value: true
1575  mirror: always
1576
1577# KaiOS-only, see https://bugzilla.mozilla.org/show_bug.cgi?id=1699707#c10
1578- name: device.sensors.ambientLight.enabled
1579  type: bool
1580  value: false
1581  mirror: always
1582
1583- name: device.sensors.motion.enabled
1584  type: bool
1585  value: true
1586  mirror: always
1587
1588- name: device.sensors.orientation.enabled
1589  type: bool
1590  value: true
1591  mirror: always
1592
1593# KaiOS-only, see https://bugzilla.mozilla.org/show_bug.cgi?id=1699707#c10
1594- name: device.sensors.proximity.enabled
1595  type: bool
1596  value: false
1597  mirror: always
1598
1599- name: device.sensors.test.events
1600  type: bool
1601  value: false
1602  mirror: always
1603
1604#---------------------------------------------------------------------------
1605# Prefs starting with "devtools."
1606#---------------------------------------------------------------------------
1607
1608# Tells if DevTools have been explicitely enabled by the user. This pref
1609# allows to disable all features related to DevTools for users that never use
1610# them. Until bug 1361080 lands, we always consider them enabled.
1611- name: devtools.enabled
1612  type: RelaxedAtomicBool
1613  value: true
1614  mirror: always
1615
1616- name: devtools.console.stdout.chrome
1617  type: RelaxedAtomicBool
1618  value: @IS_NOT_MOZILLA_OFFICIAL@
1619  mirror: always
1620
1621- name: devtools.console.stdout.content
1622  type: RelaxedAtomicBool
1623  value: false
1624  mirror: always
1625
1626- name: devtools.toolbox.force-chrome-prefs
1627  type: RelaxedAtomicBool
1628  value: true
1629  mirror: always
1630
1631#---------------------------------------------------------------------------
1632# Prefs starting with "docshell."
1633#---------------------------------------------------------------------------
1634
1635# Used to indicate whether session history listeners should be notified
1636# about content viewer eviction. Used only for testing.
1637- name: docshell.shistory.testing.bfevict
1638  type: bool
1639  value: false
1640  mirror: always
1641
1642# If true, pages with an opener won't be bfcached.
1643- name: docshell.shistory.bfcache.require_no_opener
1644  type: bool
1645  value: @IS_ANDROID@
1646  mirror: always
1647
1648# If true, page with beforeunload or unload event listeners can be bfcached.
1649- name: docshell.shistory.bfcache.allow_unload_listeners
1650  type: bool
1651  value: @IS_ANDROID@
1652  mirror: always
1653
1654#---------------------------------------------------------------------------
1655# Prefs starting with "dom."
1656#---------------------------------------------------------------------------
1657
1658# Whether window.mozPaintCount is exposed to the web.
1659- name: dom.mozPaintCount.enabled
1660  type: bool
1661  value: false
1662  mirror: always
1663
1664# Allow cut/copy
1665- name: dom.allow_cut_copy
1666  type: bool
1667  value: true
1668  mirror: always
1669
1670- name: dom.allow_XUL_XBL_for_file
1671  type: bool
1672  value: false
1673  mirror: always
1674
1675# Checks if offscreen animation throttling is enabled.
1676- name: dom.animations.offscreen-throttling
1677  type: bool
1678  value: true
1679  mirror: always
1680
1681# Is support for automatically removing replaced filling animations enabled?
1682- name: dom.animations-api.autoremove.enabled
1683  type: bool
1684  value: true
1685  mirror: always
1686
1687# Is support for composite operations from the Web Animations API enabled?
1688- name: dom.animations-api.compositing.enabled
1689  type: bool
1690  value: true
1691  mirror: always
1692
1693# Is support for the core interfaces of Web Animations API enabled?
1694- name: dom.animations-api.core.enabled
1695  type: bool
1696  value: true
1697  mirror: always
1698
1699# Is support for Document.getAnimations() and Element.getAnimations()
1700# supported?
1701- name: dom.animations-api.getAnimations.enabled
1702  type: bool
1703  value: true
1704  mirror: always
1705
1706# Is support for animations from the Web Animations API without 0%/100%
1707# keyframes enabled?
1708- name: dom.animations-api.implicit-keyframes.enabled
1709  type: bool
1710  value: true
1711  mirror: always
1712
1713# Is support for timelines from the Web Animations API enabled?
1714- name: dom.animations-api.timelines.enabled
1715  type: bool
1716  value: true
1717  mirror: always
1718
1719# Synchronize transform animations with geometric animations on the
1720# main thread.
1721- name: dom.animations.mainthread-synchronization-with-geometric-animations
1722  type: bool
1723  value: @IS_NOT_NIGHTLY_BUILD@
1724  mirror: always
1725
1726# Is support for AudioWorklet enabled?
1727- name: dom.audioworklet.enabled
1728  type: bool
1729  value: true
1730  mirror: always
1731
1732# Is support for Navigator.getBattery enabled?
1733- name: dom.battery.enabled
1734  type: bool
1735  value: true
1736  mirror: always
1737
1738# Block multiple external protocol URLs in iframes per single event.
1739- name: dom.block_external_protocol_in_iframes
1740  type: bool
1741  value: true
1742  mirror: always
1743
1744# Block Insecure downloads from Secure Origins
1745- name: dom.block_download_insecure
1746  type: bool
1747  value: @IS_NIGHTLY_BUILD@
1748  mirror: always
1749
1750# Block all downloads in iframes with the sandboxed attribute
1751- name: dom.block_download_in_sandboxed_iframes
1752  type: bool
1753  value: true
1754  mirror: always
1755
1756# Block multiple window.open() per single event.
1757- name: dom.block_multiple_popups
1758  type: bool
1759  value: true
1760  mirror: always
1761
1762# The maximum number of popup that is allowed to be opened. Set to -1 for no
1763# limit.
1764- name: dom.popup_maximum
1765  type: int32_t
1766  value: 20
1767  mirror: always
1768
1769# Whether window.location.reload() and window.history.go(0) should be blocked
1770# if called directly from a window resize event handler.
1771#
1772# This used to be necessary long ago to prevent terrible UX when using stuff
1773# like TypeAheadFind (bug 258917), but it also causes compat issues on mobile
1774# (bug 1570566).
1775#
1776# So for now disable it on Android and Desktop Nightly, to see if we have any
1777# desktop regression before removing it completely. Note that this means that
1778# non-nightly RDM behaves different than Android in this case.
1779- name: dom.block_reload_from_resize_event_handler
1780  type: bool
1781#if defined(MOZ_WIDGET_ANDROID) || defined(NIGHTLY_BUILD)
1782  value: false
1783#else
1784  value: true
1785#endif
1786  mirror: always
1787
1788# SW Cache API
1789- name: dom.caches.enabled
1790  type: RelaxedAtomicBool
1791  value: true
1792  mirror: always
1793
1794- name: dom.caches.testing.enabled
1795  type: RelaxedAtomicBool
1796  value: false
1797  mirror: always
1798
1799# Disable capture attribute for input elements; only supported on GeckoView.
1800- name: dom.capture.enabled
1801  type: bool
1802  value: false
1803  mirror: always
1804
1805# Allow control characters appear in composition string.
1806# When this is false, control characters except
1807# CHARACTER TABULATION (horizontal tab) are removed from
1808# both composition string and data attribute of compositionupdate
1809# and compositionend events.
1810- name: dom.compositionevent.allow_control_characters
1811  type: bool
1812  value: false
1813  mirror: always
1814
1815# Is support for CSSPseudoElement enabled?
1816- name: dom.css_pseudo_element.enabled
1817  type: bool
1818  value: false
1819  mirror: always
1820
1821# After how many seconds we allow external protocol URLs in iframe when not in
1822# single events
1823- name: dom.delay.block_external_protocol_in_iframes
1824  type: uint32_t
1825  value: 10   # in seconds
1826  mirror: always
1827
1828# Whether the above pref has any effect at all.
1829- name: dom.delay.block_external_protocol_in_iframes.enabled
1830  type: bool
1831  value: @IS_NOT_NIGHTLY_BUILD@
1832  mirror: always
1833
1834# HTML <dialog> element
1835- name: dom.dialog_element.enabled
1836  type: bool
1837  value: @IS_NIGHTLY_BUILD@
1838  mirror: always
1839
1840# Only propagate the open window click permission if the setTimeout() is equal
1841# to or less than this value.
1842- name: dom.disable_open_click_delay
1843  type: int32_t
1844  value: 1000
1845  mirror: always
1846
1847- name: dom.disable_open_during_load
1848  type: bool
1849  value: false
1850  mirror: always
1851
1852- name: dom.disable_beforeunload
1853  type: bool
1854  value: false
1855  mirror: always
1856
1857- name: dom.require_user_interaction_for_beforeunload
1858  type: bool
1859  value: true
1860  mirror: always
1861
1862# If set this to true, `Document.execCommand` may be performed nestedly.
1863# Otherwise, nested calls just return false.
1864- name: dom.document.exec_command.nested_calls_allowed
1865  type: bool
1866  value: false
1867  mirror: always
1868
1869- name: dom.enable_window_print
1870  type: bool
1871  value: @IS_NOT_ANDROID@
1872  mirror: always
1873
1874# Only intended for fuzzing purposes, this will break mozPrintCallback, etc.
1875- name: dom.window_print.fuzzing.block_while_printing
1876  type: bool
1877  value: false
1878  mirror: always
1879
1880- name: dom.element.transform-getters.enabled
1881  type: bool
1882  value: false
1883  mirror: always
1884
1885- name: dom.mouse_capture.enabled
1886  type: bool
1887  value: true
1888  mirror: always
1889
1890# Is support for Performance.mozMemory enabled?
1891- name: dom.enable_memory_stats
1892  type: bool
1893  value: false
1894  mirror: always
1895
1896# Enable Performance API
1897# Whether nonzero values can be returned from performance.timing.*
1898- name: dom.enable_performance
1899  type: RelaxedAtomicBool
1900  value: true
1901  mirror: always
1902
1903# Enable Performance Observer API
1904- name: dom.enable_performance_observer
1905  type: RelaxedAtomicBool
1906  value: true
1907  mirror: always
1908
1909# Whether resource timing will be gathered and returned by performance.GetEntries*
1910- name: dom.enable_resource_timing
1911  type: bool
1912  value: true
1913  mirror: always
1914
1915# Whether event timing will be gathered and returned by performance observer*
1916- name: dom.enable_event_timing
1917  type: RelaxedAtomicBool
1918  value: true
1919  mirror: always
1920
1921# Whether performance.GetEntries* will contain an entry for the active document
1922- name: dom.enable_performance_navigation_timing
1923  type: bool
1924  value: true
1925  mirror: always
1926
1927# If this is true, it's allowed to fire "cut", "copy" and "paste" events.
1928# Additionally, "input" events may expose clipboard content when inputType
1929# is "insertFromPaste" or something.
1930- name: dom.event.clipboardevents.enabled
1931  type: bool
1932  value: true
1933  mirror: always
1934
1935# Whether touch event listeners are passive by default.
1936- name: dom.event.default_to_passive_touch_listeners
1937  type: bool
1938  value: true
1939  mirror: always
1940
1941# Whether wheel listeners are passive by default.
1942- name: dom.event.default_to_passive_wheel_listeners
1943  type: bool
1944  value: true
1945  mirror: always
1946
1947# Whether WheelEvent should return pixels instead of lines for
1948# WheelEvent.deltaX/Y/Z, when deltaMode hasn't been checked.
1949#
1950# Other browsers don't use line deltas and websites forget to check for it, see
1951# bug 1392460.
1952- name: dom.event.wheel-deltaMode-lines.disabled
1953  type: bool
1954  value: true
1955  mirror: always
1956
1957# Mostly for debugging. Whether we should do the same as
1958# dom.event.wheel-deltaMode-lines.disabled, but unconditionally rather than
1959# only when deltaMode hasn't been checked.
1960- name: dom.event.wheel-deltaMode-lines.always-disabled
1961  type: bool
1962  value: false
1963  mirror: always
1964
1965# A blocklist (list of domains) for the
1966# dom.event.wheel-deltaMode-lines.disabled behavior, in case potential
1967# unforeseen problems with it arrive.
1968- name: dom.event.wheel-deltaMode-lines.always-enabled
1969  type: String
1970  value: ""
1971  mirror: never
1972
1973# Whether WheelEvent should expose wheelDelta / wheelDeltaX / wheelDeltaY
1974- name: dom.event.wheelDelta.enabled
1975  type: bool
1976  value: true
1977  mirror: always
1978
1979#if defined(XP_MACOSX)
1980# Whether to disable treating ctrl click as right click
1981- name: dom.event.treat_ctrl_click_as_right_click.disabled
1982  type: bool
1983  value: @IS_NIGHTLY_BUILD@
1984  mirror: always
1985#endif
1986
1987# Whether .offset{X,Y} for events targeted at SVG nodes returns bounds relative
1988# to the outer SVG.
1989- name: dom.events.offset-in-svg-relative-to-svg-root
1990  type: bool
1991  value: true
1992  mirror: always
1993
1994# Enable clipboard readText() and writeText() by default
1995- name: dom.events.asyncClipboard
1996  type: bool
1997  value: true
1998  mirror: always
1999
2000# Disable clipboard.read() by default
2001- name: dom.events.asyncClipboard.read
2002  type: bool
2003  value: false
2004  mirror: always
2005
2006# Disable ClipboardItem and clipboard.write by default
2007- name: dom.events.asyncClipboard.clipboardItem
2008  type: bool
2009  value: false
2010  mirror: always
2011
2012# Should only be enabled in tests.
2013# Access with Clipboard::IsTestingPrefEnabled().
2014- name: dom.events.testing.asyncClipboard
2015  type: bool
2016  value: false
2017  mirror: always
2018  do_not_use_directly: true
2019
2020# This pref controls whether or not the `protected` dataTransfer state is
2021# enabled. If the `protected` dataTransfer stae is disabled, then the
2022# DataTransfer will be read-only whenever it should be protected, and will not
2023# be disconnected after a drag event is completed.
2024- name: dom.events.dataTransfer.protected.enabled
2025  type: bool
2026  value: false
2027  mirror: always
2028
2029# User interaction timer interval, in ms
2030- name: dom.events.user_interaction_interval
2031  type: uint32_t
2032  value: 5000
2033  mirror: always
2034
2035# Whether to try to compress touchmove events on IPC layer.
2036- name: dom.events.compress.touchmove
2037  type: bool
2038  value: true
2039  mirror: always
2040
2041# In addition to the above IPC layer compresison, allow touchmove
2042# events to be further coalesced in the child side after they
2043# are sent.
2044- name: dom.events.coalesce.touchmove
2045  type: bool
2046  value: @IS_NIGHTLY_BUILD@
2047  mirror: always
2048
2049# Whether to expose test interfaces of various sorts
2050- name: dom.expose_test_interfaces
2051  type: bool
2052  value: false
2053  mirror: always
2054
2055- name: dom.fetchObserver.enabled
2056  type: RelaxedAtomicBool
2057  value: false
2058  mirror: always
2059
2060# Allow the content process to create a File from a path. This is allowed just
2061# on parent process, on 'file' Content process, or for testing.
2062- name: dom.file.createInChild
2063  type: RelaxedAtomicBool
2064  value: false
2065  mirror: always
2066
2067# Support @autocomplete values for form autofill feature.
2068- name: dom.forms.autocomplete.formautofill
2069  type: bool
2070  value: false
2071  mirror: always
2072
2073# Only trusted submit event could trigger form submission.
2074- name: dom.forms.submit.trusted_event_only
2075  type: bool
2076  value: false
2077  mirror: always
2078
2079# This pref just controls whether we format the number with grouping separator
2080# characters when the internal value is set or updated. It does not stop the
2081# user from typing in a number and using grouping separators.
2082- name: dom.forms.number.grouping
2083  type: bool
2084  value: false
2085  mirror: always
2086
2087# Whether the Gamepad API is enabled
2088- name: dom.gamepad.enabled
2089  type: bool
2090  value: true
2091  mirror: always
2092
2093# Is Gamepad Extension API enabled?
2094- name: dom.gamepad.extensions.enabled
2095  type: bool
2096  value: true
2097  mirror: always
2098
2099# Is LightIndicator API enabled in Gamepad Extension API?
2100- name: dom.gamepad.extensions.lightindicator
2101  type: bool
2102  value: false
2103  mirror: always
2104
2105# Is MultiTouch API enabled in Gamepad Extension API?
2106- name: dom.gamepad.extensions.multitouch
2107  type: bool
2108  value: false
2109  mirror: always
2110
2111# Is Gamepad vibrate haptic feedback function enabled?
2112- name: dom.gamepad.haptic_feedback.enabled
2113  type: bool
2114  value: true
2115  mirror: always
2116
2117- name: dom.gamepad.non_standard_events.enabled
2118  type: bool
2119  value: @IS_NOT_RELEASE_OR_BETA@
2120  mirror: always
2121
2122- name: dom.gamepad.test.enabled
2123  type: bool
2124  value: false
2125  mirror: always
2126
2127# W3C draft ImageCapture API
2128- name: dom.imagecapture.enabled
2129  type: bool
2130  value: false
2131  mirror: always
2132
2133# <img loading="lazy">
2134#
2135# See https://github.com/whatwg/html/pull/3752
2136- name: dom.image-lazy-loading.enabled
2137  type: RelaxedAtomicBool
2138  value: true
2139  mirror: always
2140
2141# The root margin for image lazy loading, defined as four (value, percentage)
2142# pairs.
2143- name: dom.image-lazy-loading.root-margin.top
2144  type: float
2145#if defined(EARLY_BETA_OR_EARLIER)
2146  value: 1000
2147#else
2148  value: 300
2149#endif
2150  mirror: always
2151
2152- name: dom.image-lazy-loading.root-margin.top.percentage
2153  type: bool
2154  value: false
2155  mirror: always
2156
2157- name: dom.image-lazy-loading.root-margin.bottom
2158  type: float
2159#if defined(EARLY_BETA_OR_EARLIER)
2160  value: 1000
2161#else
2162  value: 300
2163#endif
2164  mirror: always
2165
2166- name: dom.image-lazy-loading.root-margin.bottom.percentage
2167  type: bool
2168  value: false
2169  mirror: always
2170
2171- name: dom.image-lazy-loading.root-margin.left
2172  type: float
2173#if defined(EARLY_BETA_OR_EARLIER)
2174  value: 1000
2175#else
2176  value: 300
2177#endif
2178  mirror: always
2179
2180- name: dom.image-lazy-loading.root-margin.left.percentage
2181  type: bool
2182  value: false
2183  mirror: always
2184
2185- name: dom.image-lazy-loading.root-margin.right
2186  type: float
2187#if defined(EARLY_BETA_OR_EARLIER)
2188  value: 1000
2189#else
2190  value: 300
2191#endif
2192  mirror: always
2193
2194- name: dom.image-lazy-loading.root-margin.right.percentage
2195  type: bool
2196  value: false
2197  mirror: always
2198
2199# Enable passing the "storage" option to indexedDB.open.
2200- name: dom.indexedDB.storageOption.enabled
2201  type: RelaxedAtomicBool
2202  value: false
2203  mirror: always
2204
2205# Enable indexedDB in private browsing mode.
2206- name: dom.indexedDB.privateBrowsing.enabled
2207  type: RelaxedAtomicBool
2208  value: false
2209  mirror: always
2210
2211- name: dom.input_events.beforeinput.enabled
2212  type: bool
2213  value: true
2214  mirror: always
2215
2216# Whether innerWidth / innerHeight return rounded or fractional sizes.
2217#
2218# NOTE(emilio): Fractional sizes are not web-compatible, see the regressions
2219# from bug 1676843, but we want to expose the fractional sizes (probably in
2220# another API) one way or another, see [1], so we're keeping the code for the
2221# time being.
2222#
2223# [1]: https://github.com/w3c/csswg-drafts/issues/5260
2224- name: dom.innerSize.rounded
2225  type: bool
2226  value: true
2227  mirror: always
2228
2229# Whether we conform to Input Events Level 1 or Input Events Level 2.
2230# true:  conforming to Level 1
2231# false: conforming to Level 2
2232- name: dom.input_events.conform_to_level_1
2233  type: bool
2234  value: true
2235  mirror: always
2236
2237# Whether we allow BrowsingContextGroup to suspend input events
2238- name: dom.input_events.canSuspendInBCG.enabled
2239  type: bool
2240  value: false
2241  mirror: always
2242
2243# Whether we perform a more strict alignment with vsync for input events
2244- name: dom.input_events.strict_input_vsync_alignment
2245  type: bool
2246  value: true
2247  mirror: always
2248
2249# Enable not moving the cursor to end when a text input or textarea has .value
2250# set to the value it already has.  By default, enabled.
2251- name: dom.input.skip_cursor_move_for_same_value_set
2252  type: bool
2253  value: true
2254  mirror: always
2255
2256- name: dom.IntersectionObserver.enabled
2257  type: bool
2258  value: true
2259  mirror: always
2260
2261- name: dom.IntersectionObserverExplicitDocumentRoot.enabled
2262  type: bool
2263  value: true
2264  mirror: always
2265
2266- name: dom.ipc.cancel_content_js_when_navigating
2267  type: bool
2268  value: true
2269  mirror: always
2270
2271# How often to check for CPOW timeouts (ms). CPOWs are only timed
2272# out by the hang monitor.
2273- name: dom.ipc.cpow.timeout
2274  type: uint32_t
2275  value: 500
2276  mirror: always
2277
2278#ifdef MOZ_ENABLE_FORKSERVER
2279- name: dom.ipc.forkserver.enable
2280  type: bool
2281  value: false
2282  mirror: once
2283#endif
2284
2285#ifdef MOZ_WIDGET_GTK
2286#
2287# Avoid the use of GTK in content processes if possible, by running
2288# them in headless mode, to conserve resources (e.g., connections to
2289# the X server).  See the usage in `ContentParent.cpp` for the full
2290# definition of "if possible".
2291#
2292# This does not affect sandbox policies; content processes may still
2293# dynamically connect to the display server for, e.g., WebGL.
2294- name: dom.ipc.avoid-gtk
2295  type: bool
2296  value: true
2297  mirror: always
2298#endif
2299
2300# Whether or not to collect a paired minidump when force-killing a
2301# content process.
2302- name: dom.ipc.tabs.createKillHardCrashReports
2303  type: bool
2304  value: @IS_NOT_RELEASE_OR_BETA@
2305  mirror: once
2306
2307# Allow Flash async drawing mode in 64-bit release builds.
2308- name: dom.ipc.plugins.asyncdrawing.enabled
2309  type: RelaxedAtomicBool
2310  value: true
2311  mirror: always
2312
2313# How long we wait before unloading an idle plugin process.
2314- name: dom.ipc.plugins.unloadTimeoutSecs
2315  type: RelaxedAtomicUint32
2316  value: 30
2317  mirror: always
2318
2319- name: dom.ipc.plugins.allow_dxgi_surface
2320  type: bool
2321  value: true
2322  mirror: always
2323
2324# Enable e10s hang monitoring (slow script checking and plugin hang detection).
2325- name: dom.ipc.processHangMonitor
2326  type: bool
2327  value: true
2328  mirror: once
2329
2330# Whether we report such process hangs
2331- name: dom.ipc.reportProcessHangs
2332  type: RelaxedAtomicBool
2333# Don't report hangs in DEBUG builds. They're too slow and often a
2334# debugger is attached.
2335#ifdef DEBUG
2336  value: false
2337#else
2338  value: true
2339#endif
2340  mirror: always
2341
2342- name: dom.ipc.tabs.disabled
2343  type: bool
2344  value: false
2345  mirror: always
2346
2347# Process launch delay (in milliseconds).
2348- name: dom.ipc.processPrelaunch.delayMs
2349  type: uint32_t
2350# This number is fairly arbitrary ... the intention is to put off
2351# launching another app process until the last one has finished
2352# loading its content, to reduce CPU/memory/IO contention.
2353  value: 1000
2354  mirror: always
2355
2356- name: dom.ipc.processPrelaunch.startupDelayMs
2357  type: uint32_t
2358# delay starting content processes for a short time after browser start
2359# to provide time for the UI to come up
2360  value: 1000
2361  mirror: always
2362
2363# Process preallocation cache
2364# Only used in fission; in e10s we use 1 always
2365- name: dom.ipc.processPrelaunch.fission.number
2366  type: uint32_t
2367  value: 3
2368  mirror: always
2369
2370# Limit preallocated processes below this memory size (in MB)
2371- name: dom.ipc.processPrelaunch.lowmem_mb
2372  type: uint32_t
2373  value: 4096
2374  mirror: always
2375
2376- name: dom.ipc.processPriorityManager.enabled
2377  type: bool
2378  value: false
2379  mirror: always
2380
2381- name: dom.ipc.processPriorityManager.testMode
2382  type: bool
2383  value: false
2384  mirror: always
2385
2386- name: dom.ipc.processPriorityManager.backgroundPerceivableGracePeriodMS
2387  type: uint32_t
2388#if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD)
2389  value: 3000
2390#else
2391  value: 0
2392#endif
2393  mirror: always
2394
2395- name: dom.ipc.processPriorityManager.backgroundGracePeriodMS
2396  type: uint32_t
2397#if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD)
2398  value: 3000
2399#else
2400  value: 0
2401#endif
2402  mirror: always
2403
2404# Is support for HTMLElement.autocapitalize enabled?
2405- name: dom.forms.autocapitalize
2406  type: bool
2407  value: @IS_NIGHTLY_BUILD@
2408  mirror: always
2409
2410# Support for input type=datetime-local.
2411- name: dom.forms.datetime-local
2412  type: bool
2413  value: @IS_ANDROID@
2414  mirror: always
2415
2416# Support for input type=datetime-local widget. Disabled for now.
2417- name: dom.forms.datetime-local.widget
2418  type: bool
2419  value: false
2420  mirror: always
2421
2422# Support for input type=month, type=week. By default, disabled.
2423- name: dom.forms.datetime.others
2424  type: bool
2425  value: @IS_ANDROID@
2426  mirror: always
2427
2428# Is support for HTMLElement.enterKeyHint enabled?
2429- name: dom.forms.enterkeyhint
2430  type: bool
2431  value: @IS_NIGHTLY_BUILD@
2432  mirror: always
2433
2434# Is support for HTMLElement.inputMode enabled?
2435- name: dom.forms.inputmode
2436  type: bool
2437#if defined(ANDROID)
2438  value: true
2439#else
2440  value: @IS_NOT_RELEASE_OR_BETA@
2441#endif
2442  mirror: always
2443
2444# Enable Directory API. By default, disabled.
2445- name: dom.input.dirpicker
2446  type: bool
2447  value: false
2448  mirror: always
2449
2450# Whether to allow or disallow web apps to cancel `beforeinput` events caused
2451# by MozEditableElement#setUserInput() which is used by autocomplete, autofill
2452# and password manager.
2453- name: dom.input_event.allow_to_cancel_set_user_input
2454  type: bool
2455  value: false
2456  mirror: always
2457
2458# How long a content process can take before closing its IPC channel
2459# after shutdown is initiated.  If the process exceeds the timeout,
2460# we fear the worst and kill it.
2461- name: dom.ipc.tabs.shutdownTimeoutSecs
2462  type: RelaxedAtomicUint32
2463#if !defined(DEBUG) && !defined(MOZ_ASAN) && !defined(MOZ_VALGRIND) && !defined(MOZ_TSAN)
2464  value: 20
2465#else
2466  value: 0
2467#endif
2468  mirror: always
2469
2470# Whether a native event loop should be used in the content process.
2471- name: dom.ipc.useNativeEventProcessing.content
2472  type: RelaxedAtomicBool
2473#if defined(XP_WIN) || defined(XP_MACOSX)
2474  value: false
2475#else
2476  value: true
2477#endif
2478  mirror: always
2479
2480# If this is true, TextEventDispatcher dispatches keydown and keyup events
2481# even during composition (keypress events are never fired during composition
2482# even if this is true).
2483- name: dom.keyboardevent.dispatch_during_composition
2484  type: bool
2485  value: true
2486  mirror: always
2487
2488# If this is true, keypress events for non-printable keys are dispatched only
2489# for event listeners of the system event group in web content.
2490- name: dom.keyboardevent.keypress.dispatch_non_printable_keys_only_system_group_in_content
2491  type: bool
2492  value: true
2493  mirror: always
2494
2495# If this is true, "keypress" event's keyCode value and charCode value always
2496# become same if the event is not created/initialized by JS.
2497- name: dom.keyboardevent.keypress.set_keycode_and_charcode_to_same_value
2498  type: bool
2499  value: true
2500  mirror: always
2501
2502# Whether the Large-Allocation header is enabled.
2503- name: dom.largeAllocationHeader.enabled
2504  type: bool
2505  value: true
2506  mirror: always
2507
2508- name: dom.largeAllocation.forceEnable
2509  type: bool
2510  value: false
2511  mirror: always
2512
2513# Whether "W3C Web Manifest" processing is enabled
2514- name: dom.manifest.enabled
2515  type: bool
2516  value: true
2517  mirror: always
2518
2519# Enable mapped array buffer by default.
2520- name: dom.mapped_arraybuffer.enabled
2521  type: bool
2522  value: true
2523  mirror: always
2524
2525# This pref is used to enable/disable the `document.autoplayPolicy` API which
2526# returns a enum string which presents current autoplay policy and can change
2527# overtime based on user session activity.
2528- name: dom.media.autoplay.autoplay-policy-api
2529  type: bool
2530  value: false
2531  mirror: always
2532
2533# Media Session API
2534- name: dom.media.mediasession.enabled
2535  type: bool
2536  value: true
2537  mirror: always
2538
2539# Number of seconds of very quiet or silent audio before considering the audio
2540# inaudible.
2541- name: dom.media.silence_duration_for_audibility
2542  type: AtomicFloat
2543  value: 2.0f
2544  mirror: always
2545
2546- name: dom.menuitem.enabled
2547  type: bool
2548  value: false
2549  mirror: always
2550
2551# Enable meta-viewport support in remote APZ-enabled frames.
2552- name: dom.meta-viewport.enabled
2553  type: RelaxedAtomicBool
2554  value: false
2555  mirror: always
2556
2557# Timeout clamp in ms for timeouts we clamp.
2558- name: dom.min_timeout_value
2559  type: RelaxedAtomicInt32
2560  value: 4
2561  mirror: always
2562
2563# Timeout clamp in ms for background windows.
2564- name: dom.min_background_timeout_value
2565  type: int32_t
2566  value: 1000
2567  mirror: always
2568
2569# Timeout clamp in ms for background windows when throttling isn't enabled.
2570- name: dom.min_background_timeout_value_without_budget_throttling
2571  type: int32_t
2572  value: 1000
2573  mirror: always
2574
2575# Are missing-property use counters for certain DOM attributes enabled?
2576- name: dom.missing_prop_counters.enabled
2577  type: bool
2578  value: true
2579  mirror: always
2580
2581# Is support for module scripts (<script type="module">) enabled for content?
2582- name: dom.moduleScripts.enabled
2583  type: bool
2584  value: true
2585  mirror: always
2586
2587# Whether we disable triggering mutation events for changes to style
2588# attribute via CSSOM.
2589# NOTE: This preference is used in unit tests. If it is removed or its default
2590# value changes, please update test_sharedMap_static_prefs.js accordingly.
2591- name: dom.mutation-events.cssom.disabled
2592  type: bool
2593  value: true
2594  mirror: always
2595
2596# Limit of location change caused by content scripts in a time span per
2597# BrowsingContext. This includes calls to History and Location APIs.
2598- name: dom.navigation.locationChangeRateLimit.count
2599  type: uint32_t
2600  value: 200
2601  mirror: always
2602
2603# Time span in seconds for location change rate limit.
2604- name: dom.navigation.locationChangeRateLimit.timespan
2605  type: uint32_t
2606  value: 10
2607  mirror: always
2608
2609# Network Information API
2610- name: dom.netinfo.enabled
2611  type: RelaxedAtomicBool
2612  value: @IS_ANDROID@
2613  mirror: always
2614
2615# Whether we should open noopener links in a new process.
2616- name: dom.noopener.newprocess.enabled
2617  type: bool
2618  value: true
2619  mirror: always
2620
2621# Whether we shouldn't show an error page for unknown protocols (and should
2622# show a console warning instead).
2623- name: dom.no_unknown_protocol_error.enabled
2624  type: bool
2625  value: true
2626  mirror: always
2627
2628# Is support for Window.paintWorklet enabled?
2629- name: dom.paintWorklet.enabled
2630  type: bool
2631  value: false
2632  mirror: always
2633
2634# Enable/disable the PaymentRequest API
2635- name: dom.payments.request.enabled
2636  type: bool
2637  value: false
2638  mirror: always
2639
2640# Whether a user gesture is required to call PaymentRequest.prototype.show().
2641- name: dom.payments.request.user_interaction_required
2642  type: bool
2643  value: true
2644  mirror: always
2645
2646# Time in milliseconds for PaymentResponse to wait for
2647# the Web page to call complete().
2648- name: dom.payments.response.timeout
2649  type: uint32_t
2650  value: 5000
2651  mirror: always
2652
2653# Enable printing performance marks/measures to log
2654- name: dom.performance.enable_user_timing_logging
2655  type: RelaxedAtomicBool
2656  value: false
2657  mirror: always
2658
2659- name: dom.performance.children_results_ipc_timeout
2660  type: uint32_t
2661  value: 1000
2662  mirror: always
2663
2664# Enable notification of performance timing
2665- name: dom.performance.enable_notify_performance_timing
2666  type: bool
2667  value: false
2668  mirror: always
2669
2670# Is support for PerformanceTiming.timeToContentfulPaint enabled?
2671- name: dom.performance.time_to_contentful_paint.enabled
2672  type: bool
2673  value: false
2674  mirror: always
2675
2676# Is support for PerformanceTiming.timeToDOMContentFlushed enabled?
2677- name: dom.performance.time_to_dom_content_flushed.enabled
2678  type: bool
2679  value: false
2680  mirror: always
2681
2682# Is support for PerformanceTiming.timeToFirstInteractive enabled?
2683- name: dom.performance.time_to_first_interactive.enabled
2684  type: bool
2685  value: false
2686  mirror: always
2687
2688# Is support for PerformanceTiming.timeToNonBlankPaint enabled?
2689- name: dom.performance.time_to_non_blank_paint.enabled
2690  type: bool
2691  value: false
2692  mirror: always
2693
2694# Is support for Permissions.revoke enabled?
2695- name: dom.permissions.revoke.enable
2696  type: bool
2697  value: false
2698  mirror: always
2699
2700# Is support for Element.requestPointerLock enabled?
2701# This is added for accessibility purpose. When user has no way to exit
2702# pointer lock (e.g. no keyboard available), they can use this pref to
2703# disable the Pointer Lock API altogether.
2704- name: dom.pointer-lock.enabled
2705  type: bool
2706  value: true
2707  mirror: always
2708
2709# re-SAB: Whether to allow postMessage of a SharedArrayBuffer if various
2710# preconditions related to COOP and COEP are met
2711- name: dom.postMessage.sharedArrayBuffer.withCOOP_COEP
2712  type: bool
2713#if !defined(ANDROID)
2714  value: true
2715#else
2716  value: @IS_NIGHTLY_BUILD@
2717#endif
2718  mirror: once
2719
2720# Overridden in all.js on RELEASE_OR_BETA in order to add the locked attribute.
2721- name: dom.postMessage.sharedArrayBuffer.bypassCOOP_COEP.insecure.enabled
2722  type: RelaxedAtomicBool
2723  value: false
2724  mirror: always
2725
2726# This currently only affects XHTML. For XUL the cache is always allowed.
2727- name: dom.prototype_document_cache.enabled
2728  type: bool
2729  value: true
2730  mirror: always
2731
2732# Push
2733- name: dom.push.enabled
2734  type: RelaxedAtomicBool
2735  value: false
2736  mirror: always
2737
2738# Preference that is primarily used for testing of problematic file paths.
2739# It can also be used for switching between different storage directories, but
2740# such feature is not officially supported.
2741- name: dom.quotaManager.storageName
2742  type: String
2743  value: "storage"
2744  mirror: never
2745
2746# Should we try to load origin information from the cache?
2747# See bug 1563023 for more details.
2748- name: dom.quotaManager.loadQuotaFromCache
2749  type: RelaxedAtomicBool
2750  value: true
2751  mirror: always
2752
2753# Should we check build ID as part of the cache validation?
2754# When enabled, the cache is invalidated on any upgrade (or downgrade),
2755# ensuring that changes in how quota usage is calculated can't cause
2756# inconsistencies at the cost of a slower initialization. Currently, this
2757# should only be set to false in tests using a packaged profile that inherently
2758# includes a build id different from the building running the tests. In the
2759# future this may be set to false if we are confident that we have sufficiently
2760# thorough schema versioning.
2761- name: dom.quotaManager.caching.checkBuildId
2762  type: RelaxedAtomicBool
2763  value: true
2764  mirror: always
2765
2766# Preference that users can set to override temporary storage smart limit
2767# calculation.
2768- name: dom.quotaManager.temporaryStorage.fixedLimit
2769  type: RelaxedAtomicInt32
2770  value: -1
2771  mirror: always
2772
2773# Preference that users can set to override temporary storage smart limit
2774# calculation.
2775- name: dom.quotaManager.temporaryStorage.chunkSize
2776  type: RelaxedAtomicUint32
2777  value: 10 * 1024
2778  mirror: always
2779
2780# A pref that is used to enable testing features.
2781- name: dom.quotaManager.testing
2782  type: SequentiallyConsistentAtomicBool
2783  value: false
2784  mirror: always
2785
2786#ifdef XP_WIN
2787  # Preference that is used to set nsILocalFileWin::useDOSDevicePathSyntax
2788  # attribute for all local file instances created by QuotaManager and its
2789  # clients. The value of this preference is cached so changing the preference
2790  # during runtime has no effect.
2791  # See bug 1626846 for setting this to false by default.
2792-   name: dom.quotaManager.useDOSDevicePathSyntax
2793    type: RelaxedAtomicBool
2794    value: true
2795    mirror: always
2796    do_not_use_directly: true
2797
2798  # Preference that is used to enable the hack for overrriding xFullPathname in
2799  # TelemetryVFS.
2800-   name: dom.quotaManager.overrideXFullPathname
2801    type: RelaxedAtomicBool
2802    value: true
2803    mirror: always
2804#endif
2805
2806# How many times we should retry directory removal or renaming if access was
2807# denied?
2808- name: dom.quotaManager.directoryRemovalOrRenaming.maxRetries
2809  type: RelaxedAtomicUint32
2810#ifdef XP_WIN
2811  value: 10
2812#else
2813  value: 0
2814#endif
2815  mirror: always
2816
2817# How long we should wait between retries (in milliseconds)?
2818- name: dom.quotaManager.directoryRemovalOrRenaming.delayMs
2819  type: RelaxedAtomicUint32
2820  value: 200
2821  mirror: always
2822
2823# Reporting API.
2824- name: dom.reporting.enabled
2825  type: RelaxedAtomicBool
2826  value: @IS_NIGHTLY_BUILD@
2827  mirror: always
2828
2829- name: dom.reporting.testing.enabled
2830  type: RelaxedAtomicBool
2831  value: false
2832  mirror: always
2833
2834- name: dom.reporting.featurePolicy.enabled
2835  type: RelaxedAtomicBool
2836  value: @IS_NIGHTLY_BUILD@
2837  mirror: always
2838
2839- name: dom.reporting.crash.enabled
2840  type: RelaxedAtomicBool
2841  value: false
2842  mirror: always
2843
2844- name: dom.reporting.header.enabled
2845  type: RelaxedAtomicBool
2846  value: false
2847  mirror: always
2848
2849# In seconds. The timeout to remove not-active report-to endpoints.
2850- name: dom.reporting.cleanup.timeout
2851  type: uint32_t
2852  value: 3600
2853  mirror: always
2854
2855# Any X seconds the reports are dispatched to endpoints.
2856- name: dom.reporting.delivering.timeout
2857  type: uint32_t
2858  value: 5
2859  mirror: always
2860
2861# How many times the delivering of a report should be tried.
2862- name: dom.reporting.delivering.maxFailures
2863  type: uint32_t
2864  value: 3
2865  mirror: always
2866
2867# How many reports should be stored in the report queue before being delivered.
2868- name: dom.reporting.delivering.maxReports
2869  type: uint32_t
2870  value: 100
2871  mirror: always
2872
2873# Enable requestIdleCallback API
2874- name: dom.requestIdleCallback.enabled
2875  type: bool
2876  value: true
2877  mirror: always
2878
2879# Whether to enable the JavaScript start-up cache. This causes one of the first
2880# execution to record the bytecode of the JavaScript function used, and save it
2881# in the existing cache entry. On the following loads of the same script, the
2882# bytecode would be loaded from the cache instead of being generated once more.
2883- name: dom.script_loader.bytecode_cache.enabled
2884  type: bool
2885  value: true
2886  mirror: always
2887
2888# Ignore the heuristics of the bytecode cache, and always record on the first
2889# visit. (used for testing purposes).
2890
2891# Choose one strategy to use to decide when the bytecode should be encoded and
2892# saved. The following strategies are available right now:
2893#   * -2 : (reader mode) The bytecode cache would be read, but it would never
2894#          be saved.
2895#   * -1 : (eager mode) The bytecode would be saved as soon as the script is
2896#          seen for the first time, independently of the size or last access
2897#          time.
2898#   *  0 : (default) The bytecode would be saved in order to minimize the
2899#          page-load time.
2900#
2901# Other values might lead to experimental strategies. For more details, have a
2902# look at: ScriptLoader::ShouldCacheBytecode function.
2903- name: dom.script_loader.bytecode_cache.strategy
2904  type: int32_t
2905  value: 0
2906  mirror: always
2907
2908# Force full parse on any external JS scripts that is being compiled off thread.
2909- name: dom.script_loader.full_parse
2910  type: bool
2911  value: false
2912  mirror: always
2913
2914# Is support for decoding external (non-inline) classic or module DOM scripts
2915# (i.e. anything but workers) as UTF-8, then directly compiling without
2916# inflating to UTF-16, enabled?
2917- name: dom.script_loader.external_scripts.utf8_parsing.enabled
2918  type: bool
2919  value: true
2920  mirror: always
2921
2922# Enable  speculative off main thread parsing of external scripts as
2923# soon as they are fetched.
2924- name: dom.script_loader.external_scripts.speculative_omt_parse.enabled
2925  type: bool
2926  value: true
2927  mirror: always
2928
2929# Speculatively compile non parser inserted scripts
2930- name: dom.script_loader.external_scripts.speculate_non_parser_inserted.enabled
2931  type: bool
2932  value: false
2933  mirror: always
2934
2935# Speculatively compile async scripts
2936- name: dom.script_loader.external_scripts.speculate_async.enabled
2937  type: bool
2938  value: false
2939  mirror: always
2940
2941# Speculatively compile link preload scripts
2942- name: dom.script_loader.external_scripts.speculate_link_preload.enabled
2943  type: bool
2944  value: false
2945  mirror: always
2946
2947- name: dom.securecontext.whitelist_onions
2948  type: bool
2949  value: false
2950  mirror: always
2951
2952# This pref enables Sec-Fetch-* logic and causes corresponding
2953# request headers to be set.
2954- name: dom.security.secFetch.enabled
2955  type: RelaxedAtomicBool
2956  value: true
2957  mirror: always
2958
2959# This pref enables the featurePolicy header support.
2960- name: dom.security.featurePolicy.header.enabled
2961  type: bool
2962  value: false
2963  mirror: always
2964
2965- name: dom.security.featurePolicy.experimental.enabled
2966  type: bool
2967  value: false
2968  mirror: always
2969
2970# Expose the 'featurePolicy' attribute in document and HTMLIFrameElement
2971- name: dom.security.featurePolicy.webidl.enabled
2972  type: bool
2973  value: false
2974  mirror: always
2975
2976# Perform IPC based Principal vetting in ContentParent
2977- name: dom.security.enforceIPCBasedPrincipalVetting
2978  type: RelaxedAtomicBool
2979  value: true
2980  mirror: always
2981
2982# For testing purposes only: Flipping this pref to true allows
2983# to skip the allowlist for about: pages and do not ship with a
2984# CSP and NS_ASSERT right away.
2985- name: dom.security.skip_about_page_csp_allowlist_and_assert
2986  type: RelaxedAtomicBool
2987  value: false
2988  mirror: always
2989
2990# For testing purposes only: Flipping this pref to true allows
2991# to skip the assertion that every about page ships with a CSP.
2992- name: dom.security.skip_about_page_has_csp_assert
2993  type: RelaxedAtomicBool
2994  value: false
2995  mirror: always
2996
2997# For testing purposes only: Flipping this pref to true allows
2998# to skip the assertion that HTML fragments (e.g. innerHTML) can
2999# not be used within chrome code or about: pages.
3000- name: dom.security.skip_html_fragment_assertion
3001  type: RelaxedAtomicBool
3002  value: false
3003  mirror: always
3004
3005# For testing purposes only; Flipping this pref to true allows
3006# to skip the assertion that remote scripts can not be loaded
3007# in system privileged contexts.
3008- name: dom.security.skip_remote_script_assertion_in_system_priv_context
3009  type: RelaxedAtomicBool
3010  value: false
3011  mirror: always
3012
3013# If true, all content requests will get upgraded to HTTPS://
3014# (some Firefox functionality requests, like OCSP will not be affected)
3015- name: dom.security.https_only_mode
3016  type: RelaxedAtomicBool
3017  value: false
3018  mirror: always
3019
3020# If true, all content requests in Private Browsing Mode will get
3021# upgraded to HTTPS://. (If dom.security.https_only_mode is set
3022# to true then this pref has no effect)
3023- name: dom.security.https_only_mode_pbm
3024  type: RelaxedAtomicBool
3025  value: false
3026  mirror: always
3027
3028# If true, sends http background request for top-level sites to
3029# counter long timeouts.
3030- name: dom.security.https_only_mode_send_http_background_request
3031  type: RelaxedAtomicBool
3032  value: true
3033  mirror: always
3034
3035# Time limit, in milliseconds, before sending the http background
3036# request for HTTPS-Only and HTTPS-First
3037- name: dom.security.https_only_fire_http_request_background_timer_ms
3038  type: RelaxedAtomicUint32
3039  value: 3000
3040  mirror: always
3041
3042# If true, tries to break upgrade downgrade cycles where https-only tries
3043# to upgrad ethe connection, but the website tries to downgrade again.
3044- name: dom.security.https_only_mode_break_upgrade_downgrade_endless_loop
3045  type: RelaxedAtomicBool
3046  value: true
3047  mirror: always
3048
3049# If true and HTTPS-only mode is enabled, requests
3050# to local IP addresses are also upgraded
3051- name: dom.security.https_only_mode.upgrade_local
3052  type: RelaxedAtomicBool
3053  value: false
3054  mirror: always
3055
3056# If true and HTTPS-only mode is enabled, requests
3057# to .onion hosts are also upgraded
3058- name: dom.security.https_only_mode.upgrade_onion
3059  type: RelaxedAtomicBool
3060  value: false
3061  mirror: always
3062
3063# WARNING: Don't ever update that pref manually! It is only used
3064# for telemetry purposes and allows to reason about retention of
3065# the pref dom.security.https_only_mode from above.
3066- name: dom.security.https_only_mode_ever_enabled
3067  type: RelaxedAtomicBool
3068  value: false
3069  mirror: always
3070
3071# WARNING: Don't ever update that pref manually! It is only used
3072# for telemetry purposes and allows to reason about retention of
3073# the pref dom.security.https_only_mode_pbm from above.
3074- name: dom.security.https_only_mode_ever_enabled_pbm
3075  type: RelaxedAtomicBool
3076  value: false
3077  mirror: always
3078
3079# If true checks for secure www connections when https fails
3080# and gives the user suggestions on the error page
3081- name: dom.security.https_only_mode_error_page_user_suggestions
3082  type: RelaxedAtomicBool
3083  value: false
3084  mirror: always
3085
3086# If true, top-level request will get upgraded to HTTPS and
3087# downgraded again if the request failed.
3088- name: dom.security.https_first
3089  type: RelaxedAtomicBool
3090  value: false
3091  mirror: always
3092
3093# If true, top-level requests in Private Browsing Mode will get
3094# upgraded to HTTPS. (If dom.security.https_first
3095# is set to true then this pref has no effect)
3096- name: dom.security.https_first_pbm
3097  type: RelaxedAtomicBool
3098  value: true
3099  mirror: always
3100
3101- name: dom.security.unexpected_system_load_telemetry_enabled
3102  type: bool
3103  value: true
3104  mirror: always
3105
3106# pref controls `Sanitizer` API being exposed
3107- name: dom.security.sanitizer.enabled
3108  type: bool
3109  value: false
3110  mirror: always
3111
3112# Whether or not selection events on text controls are enabled.
3113- name: dom.select_events.textcontrols.enabled
3114  type: bool
3115  value: @IS_NIGHTLY_BUILD@
3116  mirror: always
3117
3118- name: dom.separate_event_queue_for_post_message.enabled
3119  type: bool
3120  value: true
3121  mirror: always
3122
3123- name: dom.arena_allocator.enabled
3124  type: bool
3125  value: true
3126  mirror: once
3127
3128- name: dom.serviceWorkers.enabled
3129  type: RelaxedAtomicBool
3130  value: false
3131  mirror: always
3132
3133- name: dom.serviceWorkers.navigationPreload.enabled
3134  type: RelaxedAtomicBool
3135  value: false
3136  mirror: always
3137
3138# Mitigates ServiceWorker navigation faults by bypassing the ServiceWorker on
3139# navigation faults.  This is more extensive than just resetting interception
3140# because we also mark the page as uncontrolled so that subresources will not
3141# go to the ServiceWorker either.
3142- name: dom.serviceWorkers.mitigations.bypass_on_fault
3143  type: bool
3144  value: true
3145  mirror: always
3146
3147# Additional ServiceWorker navigation mitigation control to unregister the
3148# ServiceWorker after multiple faults are encountered. The mitigation is
3149# disabled when this is set to zero, otherwise this is the number of faults that
3150# need to occur for a specific ServiceWorker before it will be unregistered.
3151- name: dom.serviceWorkers.mitigations.navigation_fault_threshold
3152  type: uint32_t
3153  value: 3
3154  mirror: always
3155
3156- name: dom.serviceWorkers.testing.enabled
3157  type: RelaxedAtomicBool
3158  value: false
3159  mirror: always
3160
3161- name: dom.workers.serialized-sab-access
3162  type: RelaxedAtomicBool
3163  value: false
3164  mirror: always
3165
3166# Whether automatic storage access granting heuristics should be turned on.
3167- name: dom.storage_access.auto_grants
3168  type: bool
3169  value: true
3170  mirror: always
3171
3172- name: dom.storage_access.auto_grants.delayed
3173  type: bool
3174  value: true
3175  mirror: always
3176
3177# Storage-access API.
3178- name: dom.storage_access.enabled
3179  type: bool
3180  value: false
3181  mirror: always
3182
3183# The maximum number of origins that a given third-party tracker is allowed
3184# to have concurrent access to before the user is presented with a storage
3185# access prompt.  Only effective when the auto_grants pref is turned on.
3186- name: dom.storage_access.max_concurrent_auto_grants
3187  type: int32_t
3188  value: 5
3189  mirror: always
3190
3191# Enable Storage API for all platforms except Android.
3192- name: dom.storageManager.enabled
3193  type: RelaxedAtomicBool
3194  value: @IS_NOT_ANDROID@
3195  mirror: always
3196
3197# Should we abort LocalStorage requests when a sync message from parent is
3198# detected?
3199#
3200# LocalStorage is a synchronous API involving sync IPC from the child to the
3201# parent. Accessibility interfaces currently also involve different forms of
3202# synchronous parent-to-child communication. (See bug 1516136 comment 11 and
3203# comment 15.) Although LocalStorage NextGen no longer needs to consult the
3204# main thread, thereby eliminating the possibility of deadlock, the browser is
3205# very complex and so we have retained a fail-safe mechanism that will cause
3206# blocking LocalStorage operations to abort on synchronous IPC from the parent
3207# to the child.
3208#
3209# We are disabling this fail-safe mechanism because it is fundamentally visible
3210# to content when activated. When we abort the synchronous LocalStorage
3211# operation we throw an error which has the potential to break web content.
3212# This is not a hypothetical. In bug 1574569 content broke due to accessibility
3213# path aborting the LS call, but the LS call didn't need to abort because it
3214# was not at risk of deadlock.
3215#
3216# But we are retaining the preference in the event that regressions occur
3217# anywhere in the code-base that could cause a cascade that would result in
3218# deadlock. (There have been logic bugs in components that resulted in
3219# PBackground synchronously blocking in a way that could result in deadlock.)
3220# This allows us to re-enable the fail-safe with only a pref flip.
3221- name: dom.storage.abort_on_sync_parent_to_child_messages
3222  type: bool
3223  value: false
3224  mirror: always
3225
3226# LocalStorage data limit as determined by summing up the lengths of all string
3227# keys and values. This is consistent with the legacy implementation and other
3228# browser engines. This value should really only ever change in unit testing
3229# where being able to lower it makes it easier for us to test certain edge
3230# cases. Measured in KiBs.
3231- name: dom.storage.default_quota
3232  type: RelaxedAtomicUint32
3233  # Only allow relatively small amounts of data since performance of the
3234  # synchronous IO is very bad. We are enforcing simple per-origin quota only.
3235  value: 5 * 1024
3236  mirror: always
3237
3238# Per-site quota for legacy LocalStorage implementation.
3239- name: dom.storage.default_site_quota
3240  type: RelaxedAtomicUint32
3241  value: 25 * 1024
3242  mirror: always
3243
3244# Whether or not LSNG (Next Generation Local Storage) is enabled.
3245# See bug 1517090 for enabling this on Nightly.
3246# See bug 1534736 for changing it to EARLY_BETA_OR_EARLIER.
3247# See bug 1539835 for enabling this unconditionally.
3248# See bug 1619948 for changing it back to EARLY_BETA_OR_EARLIER.
3249- name: dom.storage.next_gen
3250  type: RelaxedAtomicBool
3251  value: @IS_EARLY_BETA_OR_EARLIER@
3252  mirror: always
3253  do_not_use_directly: true
3254
3255# Is support for Storage test APIs enabled?
3256- name: dom.storage.testing
3257  type: bool
3258  value: false
3259  mirror: always
3260
3261# For area and anchor elements with target=_blank and no rel set to
3262# opener/noopener.
3263- name: dom.targetBlankNoOpener.enabled
3264  type: bool
3265  value: true
3266  mirror: always
3267
3268# Is support for Selection.GetRangesForInterval enabled?
3269- name: dom.testing.selection.GetRangesForInterval
3270  type: bool
3271  value: false
3272  mirror: always
3273
3274- name: dom.testing.structuredclonetester.enabled
3275  type: RelaxedAtomicBool
3276  value: false
3277  mirror: always
3278
3279- name: dom.testing.sync-content-blocking-notifications
3280  type: bool
3281  value: false
3282  mirror: always
3283
3284- name: dom.textMetrics.actualBoundingBox.enabled
3285  type: bool
3286  value: true
3287  mirror: always
3288
3289- name: dom.textMetrics.baselines.enabled
3290  type: bool
3291  value: false
3292  mirror: always
3293
3294- name: dom.textMetrics.emHeight.enabled
3295  type: bool
3296  value: false
3297  mirror: always
3298
3299- name: dom.textMetrics.fontBoundingBox.enabled
3300  type: bool
3301  value: false
3302  mirror: always
3303
3304# Time (in ms) that it takes to regenerate 1ms.
3305- name: dom.timeout.background_budget_regeneration_rate
3306  type: int32_t
3307  value: 100
3308  mirror: always
3309
3310# Time (in ms) that it takes to regenerate 1ms.
3311- name: dom.timeout.foreground_budget_regeneration_rate
3312  type: int32_t
3313  value: 1
3314  mirror: always
3315
3316# Maximum value (in ms) for the background budget. Only valid for
3317# values greater than 0.
3318- name: dom.timeout.background_throttling_max_budget
3319  type: int32_t
3320  value: 50
3321  mirror: always
3322
3323# Maximum value (in ms) for the foreground budget. Only valid for
3324# values greater than 0.
3325- name: dom.timeout.foreground_throttling_max_budget
3326  type: int32_t
3327  value: -1
3328  mirror: always
3329
3330# The maximum amount a timeout can be delayed by budget throttling.
3331- name: dom.timeout.budget_throttling_max_delay
3332  type: int32_t
3333  value: 15000
3334  mirror: always
3335
3336# Turn on budget throttling by default.
3337- name: dom.timeout.enable_budget_timer_throttling
3338  type: bool
3339  value: true
3340  mirror: always
3341
3342# Should we defer timeouts and intervals while loading a page.  Released
3343# on Idle or when the page is loaded.
3344- name: dom.timeout.defer_during_load
3345  type: bool
3346  value: true
3347  mirror: always
3348
3349# Maximum amount of time in milliseconds consecutive setTimeout()/setInterval()
3350# callback are allowed to run before yielding the event loop.
3351- name: dom.timeout.max_consecutive_callbacks_ms
3352  type: uint32_t
3353  value: 4
3354  mirror: always
3355
3356# Maximum deferral time for setTimeout/Interval in milliseconds
3357- name: dom.timeout.max_idle_defer_ms
3358  type: uint32_t
3359  value: 10*1000
3360  mirror: always
3361
3362# Delay in ms from document load until we start throttling background timeouts.
3363- name: dom.timeout.throttling_delay
3364  type: int32_t
3365  value: 30000
3366  mirror: always
3367
3368# UDPSocket API
3369- name: dom.udpsocket.enabled
3370  type: bool
3371  value: false
3372  mirror: always
3373
3374# Time limit, in milliseconds, for user gesture transient activation.
3375- name: dom.user_activation.transient.timeout
3376  type: uint32_t
3377  value: 5000
3378  mirror: always
3379
3380# Whether to shim a Components object on untrusted windows.
3381- name: dom.use_components_shim
3382  type: bool
3383  value: @IS_NOT_NIGHTLY_BUILD@
3384  mirror: always
3385
3386- name: dom.vibrator.enabled
3387  type: bool
3388  value: true
3389  mirror: always
3390
3391- name: dom.vibrator.max_vibrate_ms
3392  type: RelaxedAtomicUint32
3393  value: 10000
3394  mirror: always
3395
3396- name: dom.vibrator.max_vibrate_list_len
3397  type: RelaxedAtomicUint32
3398  value: 128
3399  mirror: always
3400
3401# Is support for Window.visualViewport enabled?
3402- name: dom.visualviewport.enabled
3403  type: bool
3404  value: true
3405  mirror: always
3406
3407# Is support for WebVR APIs enabled?
3408# Disabled everywhere, but not removed.
3409- name: dom.vr.enabled
3410  type: RelaxedAtomicBool
3411  value: false
3412  mirror: always
3413
3414# Should VR sessions always be reported as supported, without first
3415# checking for VR runtimes?  This will prevent permission prompts
3416# from being suppressed on machines without VR runtimes and cause
3417# navigatior.xr.isSessionSupported to always report that immersive-vr
3418# is supported.
3419- name: dom.vr.always_support_vr
3420  type: RelaxedAtomicBool
3421  value: false
3422  mirror: always
3423
3424# Should AR sessions always be reported as supported, without first
3425# checking for AR runtimes?  This will prevent permission prompts
3426# from being suppressed on machines without AR runtimes and cause
3427# navigatior.xr.isSessionSupported to always report that immersive-ar
3428# is supported.
3429- name: dom.vr.always_support_ar
3430  type: RelaxedAtomicBool
3431  value: false
3432  mirror: always
3433
3434# It is often desirable to automatically start vr presentation when
3435# a user puts on the VR headset.  This is done by emitting the
3436# Window.vrdisplayactivate event when the headset's sensors detect it
3437# being worn.  This can result in WebVR content taking over the headset
3438# when the user is using it outside the browser or inadvertent start of
3439# presentation due to the high sensitivity of the proximity sensor in some
3440# headsets, so it is off by default.
3441- name: dom.vr.autoactivate.enabled
3442  type: RelaxedAtomicBool
3443  value: false
3444  mirror: always
3445
3446# Minimum number of milliseconds that the browser will wait before
3447# attempting to poll again for connected VR controllers.  The browser
3448# will not attempt to poll for VR controllers until it needs to use them.
3449- name: dom.vr.controller.enumerate.interval
3450  type: RelaxedAtomicInt32
3451  value: 1000
3452  mirror: always
3453
3454# The threshold value of trigger inputs for VR controllers.
3455- name: dom.vr.controller_trigger_threshold
3456  type: AtomicFloat
3457  value: 0.1f
3458  mirror: always
3459
3460# Minimum number of milliseconds that the browser will wait before
3461# attempting to poll again for connected VR displays.  The browser
3462# will not attempt to poll for VR displays until it needs to use
3463# them, such as when detecting a WebVR site.
3464- name: dom.vr.display.enumerate.interval
3465  type: RelaxedAtomicInt32
3466  value: 5000
3467  mirror: always
3468
3469# The number of milliseconds since last frame start before triggering a new
3470# frame. When content is failing to submit frames on time or the lower level
3471# VR platform APIs are rejecting frames, it determines the rate at which RAF
3472# callbacks will be called.
3473- name: dom.vr.display.rafMaxDuration
3474  type: RelaxedAtomicUint32
3475  value: 50
3476  mirror: always
3477
3478# Minimum number of milliseconds the browser will wait before attempting
3479# to re-start the VR service after an enumeration returned no devices.
3480- name: dom.vr.external.notdetected.timeout
3481  type: RelaxedAtomicInt32
3482  value: 60000
3483  mirror: always
3484
3485# Minimum number of milliseconds the browser will wait before attempting
3486# to re-start the VR service after a VR API (eg, OpenVR or Oculus)
3487# requests that we shutdown and unload its libraries.
3488# To ensure that we don't interfere with VR runtime software auto-updates,
3489# we will not attempt to re-load the service until this timeout has elapsed.
3490- name: dom.vr.external.quit.timeout
3491  type: RelaxedAtomicInt32
3492  value: 10000
3493  mirror: always
3494
3495# Minimum number of milliseconds that the VR session will be kept
3496# alive after the browser and content no longer are using the
3497# hardware.  If a VR multitasking environment, this should be set
3498# very low or set to 0.
3499- name: dom.vr.inactive.timeout
3500  type: RelaxedAtomicInt32
3501  value: 5000
3502  mirror: always
3503
3504# Maximum number of milliseconds the browser will wait for content to call
3505# VRDisplay.requestPresent after emitting vrdisplayactivate during VR
3506# link traversal.  This prevents a long running event handler for
3507# vrdisplayactivate from later calling VRDisplay.requestPresent, which would
3508# result in a non-responsive browser in the VR headset.
3509- name: dom.vr.navigation.timeout
3510  type: RelaxedAtomicInt32
3511  value: 5000
3512  mirror: always
3513
3514# Oculus device
3515- name: dom.vr.oculus.enabled
3516  type: RelaxedAtomicBool
3517#if defined(HAVE_64BIT_BUILD) && !defined(ANDROID)
3518  # We are only enabling WebVR by default on 64-bit builds (Bug 1384459).
3519  value: true
3520#else
3521  # On Android, this pref is irrelevant.
3522  value: false
3523#endif
3524  mirror: always
3525
3526# When enabled, Oculus sessions may be created with the ovrInit_Invisible
3527# flag if a page is using tracking but not presenting.  When a page
3528# begins presenting VR frames, the session will be re-initialized without
3529# the flag.  This eliminates the "Firefox not responding" warnings in
3530# the headset, but might not be compatible with all versions of the Oculus
3531# runtime.
3532- name: dom.vr.oculus.invisible.enabled
3533  type: RelaxedAtomicBool
3534  value: true
3535  mirror: always
3536
3537# Minimum number of milliseconds after content has stopped VR presentation
3538# before the Oculus session is re-initialized to an invisible / tracking
3539# only mode.  If this value is too high, users will need to wait longer
3540# after stopping WebVR presentation before automatically returning to the
3541# Oculus home interface.  (They can immediately return to the Oculus Home
3542# interface through the Oculus HUD without waiting this duration)
3543# If this value is too low, the Oculus Home interface may be visible
3544# momentarily during VR link navigation.
3545- name: dom.vr.oculus.present.timeout
3546  type: RelaxedAtomicInt32
3547  value: 500
3548  mirror: always
3549
3550# OpenVR device
3551- name: dom.vr.openvr.enabled
3552  type: RelaxedAtomicBool
3553#if !defined(HAVE_64BIT_BUILD) && !defined(ANDROID)
3554  # We are only enabling WebVR by default on 64-bit builds (Bug 1384459).
3555  value: false
3556#elif defined(XP_WIN) || defined(XP_MACOSX)
3557  # We enable OpenVR by default for Windows and macOS.
3558  value: true
3559#else
3560  # See Bug 1310663 (Linux).  On Android, this pref is irrelevant.
3561  value: false
3562#endif
3563  mirror: always
3564
3565# OSVR device
3566- name: dom.vr.osvr.enabled
3567  type: RelaxedAtomicBool
3568  value: false
3569  mirror: always
3570
3571# Pose prediction reduces latency effects by returning future predicted HMD
3572# poses to callers of the WebVR API.  This currently only has an effect for
3573# Oculus Rift on SDK 0.8 or greater.
3574- name: dom.vr.poseprediction.enabled
3575  type: RelaxedAtomicBool
3576  value: true
3577  mirror: always
3578
3579# Enable a separate process for VR module.
3580- name: dom.vr.process.enabled
3581  type: bool
3582#if defined(XP_WIN)
3583  value: true
3584#else
3585  value: false
3586#endif
3587  mirror: once
3588
3589- name: dom.vr.process.startup_timeout_ms
3590  type: int32_t
3591  value: 5000
3592  mirror: once
3593
3594# Puppet device, used for simulating VR hardware within tests and dev tools.
3595- name: dom.vr.puppet.enabled
3596  type: RelaxedAtomicBool
3597  value: false
3598  mirror: always
3599
3600# Starting VR presentation is only allowed within a user gesture or event such
3601# as VRDisplayActivate triggered by the system. dom.vr.require-gesture allows
3602# this requirement to be disabled for special cases such as during automated
3603# tests or in a headless kiosk system.
3604- name: dom.vr.require-gesture
3605  type: RelaxedAtomicBool
3606  value: true
3607  mirror: always
3608
3609# Is support for WebXR APIs enabled?
3610- name: dom.vr.webxr.enabled
3611  type: RelaxedAtomicBool
3612  value: false
3613  mirror: always
3614
3615#ifdef XP_WIN
3616  # Control firing WidgetMouseEvent by handling Windows pointer messages or
3617  # mouse messages.
3618-   name: dom.w3c_pointer_events.dispatch_by_pointer_messages
3619    type: bool
3620    value: @IS_NIGHTLY_BUILD@
3621    mirror: always
3622
3623-   name: dom.w3c_pointer_events.scroll_by_pen.enabled
3624    type: bool
3625    value: true
3626    mirror: always
3627#endif
3628
3629# If the value is >= 0, it will be used for max touch points in child processes.
3630- name: dom.maxtouchpoints.testing.value
3631  type: int32_t
3632  value: -1
3633  mirror: always
3634
3635# W3C pointer events draft.
3636- name: dom.w3c_pointer_events.implicit_capture
3637  type: bool
3638  value: true
3639  mirror: always
3640
3641# In case Touch API is enabled, this pref controls whether to support
3642# ontouch* event handlers, document.createTouch, document.createTouchList and
3643# document.createEvent("TouchEvent").
3644- name: dom.w3c_touch_events.legacy_apis.enabled
3645  type: bool
3646  value: @IS_ANDROID@
3647  mirror: always
3648
3649# W3C touch events
3650# 0 - disabled, 1 - enabled, 2 - autodetect
3651# Autodetection is currently only supported on Windows and GTK3 (and assumed on
3652# Android).
3653- name: dom.w3c_touch_events.enabled
3654  type: int32_t
3655#if defined(XP_MACOSX)
3656  value: 0
3657#else
3658  value: 2
3659#endif
3660  mirror: always
3661
3662# Is support for the Web Audio API enabled?
3663- name: dom.webaudio.enabled
3664  type: bool
3665  value: true
3666  mirror: always
3667
3668- name: dom.webkitBlink.dirPicker.enabled
3669  type: RelaxedAtomicBool
3670  value: @IS_NOT_ANDROID@
3671  mirror: always
3672
3673# NOTE: This preference is used in unit tests. If it is removed or its default
3674# value changes, please update test_sharedMap_static_prefs.js accordingly.
3675- name: dom.webcomponents.shadowdom.report_usage
3676  type: bool
3677  value: false
3678  mirror: always
3679
3680# Is support for form-associated custom element enabled?
3681- name: dom.webcomponents.formAssociatedCustomElement.enabled
3682  type: bool
3683  value: @IS_NIGHTLY_BUILD@
3684  mirror: always
3685
3686# Is support for the Web GPU API enabled?
3687- name: dom.webgpu.enabled
3688  type: RelaxedAtomicBool
3689  value: false
3690  mirror: always
3691
3692# Is support for HTMLInputElement.webkitEntries enabled?
3693- name: dom.webkitBlink.filesystem.enabled
3694  type: bool
3695  value: @IS_NOT_ANDROID@
3696  mirror: always
3697
3698# Whether the WebMIDI API is enabled
3699- name: dom.webmidi.enabled
3700  type: bool
3701  value: false
3702  mirror: always
3703
3704- name: dom.webnotifications.allowinsecure
3705  type: RelaxedAtomicBool
3706  value: false
3707  mirror: always
3708
3709- name: dom.webnotifications.allowcrossoriginiframe
3710  type: RelaxedAtomicBool
3711  value: false
3712  mirror: always
3713
3714- name: dom.webnotifications.enabled
3715  type: RelaxedAtomicBool
3716  value: true
3717  mirror: always
3718
3719- name: dom.webnotifications.requireuserinteraction
3720  type: RelaxedAtomicBool
3721  value: true
3722  mirror: always
3723
3724- name: dom.webnotifications.requireinteraction.enabled
3725  type: RelaxedAtomicBool
3726  value: @IS_NIGHTLY_BUILD@
3727  mirror: always
3728
3729- name: dom.webnotifications.silent.enabled
3730  type: RelaxedAtomicBool
3731#if defined(MOZ_WIDGET_ANDROID)
3732  value: @IS_NIGHTLY_BUILD@
3733#else
3734  value: false
3735#endif
3736  mirror: always
3737
3738- name: dom.webnotifications.vibrate.enabled
3739  type: RelaxedAtomicBool
3740#if defined(MOZ_WIDGET_ANDROID)
3741  value: @IS_NIGHTLY_BUILD@
3742#else
3743  value: false
3744#endif
3745  mirror: always
3746
3747- name: dom.webnotifications.serviceworker.enabled
3748  type: RelaxedAtomicBool
3749  value: true
3750  mirror: always
3751
3752# Is support for Window.event enabled?
3753- name: dom.window.event.enabled
3754  type: bool
3755  value: true
3756  mirror: always
3757
3758- name: dom.window.history.async
3759  type: bool
3760  value: true
3761  mirror: always
3762
3763# Enable the "noreferrer" feature argument for window.open()
3764- name: dom.window.open.noreferrer.enabled
3765  type: bool
3766  value: true
3767  mirror: always
3768
3769- name: dom.window.content.untrusted.enabled
3770  type: bool
3771  value: @IS_NOT_EARLY_BETA_OR_EARLIER@
3772  mirror: always
3773
3774- name: dom.window.clientinformation.enabled
3775  type: bool
3776  value: true
3777  mirror: always
3778
3779- name: dom.window.sidebar.enabled
3780  type: bool
3781  value: @IS_NOT_EARLY_BETA_OR_EARLIER@
3782  mirror: always
3783
3784- name: dom.worker.canceling.timeoutMilliseconds
3785  type: RelaxedAtomicUint32
3786  value: 30000    # 30 seconds
3787  mirror: always
3788
3789# Is support for compiling DOM worker scripts directly from UTF-8 (without ever
3790# inflating to UTF-16) enabled?
3791- name: dom.worker.script_loader.utf8_parsing.enabled
3792  type: RelaxedAtomicBool
3793  value: true
3794  mirror: always
3795
3796- name: dom.worker.use_medium_high_event_queue
3797  type: RelaxedAtomicBool
3798  value: true
3799  mirror: always
3800
3801# Enables the dispatching of console log events from worker threads to the
3802# main-thread.
3803- name: dom.worker.console.dispatch_events_to_main_thread
3804  type: RelaxedAtomicBool
3805  value: true
3806  mirror: always
3807
3808- name: dom.workers.testing.enabled
3809  type: RelaxedAtomicBool
3810  value: false
3811  mirror: always
3812
3813- name: dom.worklet.enabled
3814  type: bool
3815  value: true
3816  mirror: always
3817
3818# Enable content type normalization of XHR uploads via MIME Sniffing standard
3819- name: dom.xhr.standard_content_type_normalization
3820  type: RelaxedAtomicBool
3821  value: true
3822  mirror: always
3823
3824# When this pref is set, parent documents may consider child iframes have
3825# loaded while they are still loading.
3826- name: dom.cross_origin_iframes_loaded_in_background
3827  type: bool
3828  value: false
3829  mirror: always
3830
3831# WebIDL test prefs.
3832- name: dom.webidl.test1
3833  type: bool
3834  value: true
3835  mirror: always
3836- name: dom.webidl.test2
3837  type: bool
3838  value: true
3839  mirror: always
3840
3841- name: dom.webidl.crosscontext_hasinstance.enabled
3842  type: RelaxedAtomicBool
3843  value: @IS_NOT_NIGHTLY_BUILD@
3844  mirror: always
3845
3846# WebShare API - exposes navigator.share()
3847- name: dom.webshare.enabled
3848  type: bool
3849  value: false
3850  mirror: always
3851
3852# WebShare API - allows WebShare without user interaction (for tests only).
3853- name: dom.webshare.requireinteraction
3854  type: bool
3855  value: true
3856  mirror: always
3857
3858# about:home and about:newtab include remote snippets that contain arbitrarily
3859# placed anchor tags in their content; we want sanitization to be turned off
3860# in order to render them correctly
3861- name: dom.about_newtab_sanitization.enabled
3862  type: bool
3863  value: false
3864  mirror: always
3865
3866# Hide the confirm dialog when a POST request is reloaded.
3867- name: dom.confirm_repost.testing.always_accept
3868  type: bool
3869  value: false
3870  mirror: always
3871
3872# Whether we should suspend inactive tabs or not
3873- name: dom.suspend_inactive.enabled
3874  type: bool
3875  value: @IS_ANDROID@
3876  mirror: always
3877
3878# The following three prefs control the maximum script run time before slow
3879# script warning.
3880
3881# Controls the time that a content script can run before showing a
3882# notification.
3883- name: dom.max_script_run_time
3884  type: int32_t
3885  value: 10
3886  mirror: always
3887
3888# Controls whether we want to wait for user input before surfacing notifying
3889# the parent process about a long-running script.
3890- name: dom.max_script_run_time.require_critical_input
3891  type: bool
3892# On desktop, we don't want to annoy the user with a notification if they're
3893# not interacting with the browser. On Android however, we automatically
3894# terminate long-running scripts, so we want to make sure we don't get in the
3895# way of that by waiting for input.
3896#if defined(MOZ_WIDGET_ANDROID)
3897  value: false
3898#else
3899  value: true
3900#endif
3901  mirror: always
3902
3903- name: dom.max_chrome_script_run_time
3904  type: int32_t
3905  value: 0
3906  mirror: always
3907
3908- name: dom.max_ext_content_script_run_time
3909  type: int32_t
3910  value: 5
3911  mirror: always
3912
3913#---------------------------------------------------------------------------
3914# Prefs starting with "editor"
3915#---------------------------------------------------------------------------
3916
3917# Allow or disallow to delete `<hr>` element when caret is at start of
3918# following line of the element.  If false, Backspace from start of following
3919# line of an `<hr>` element causes moving caret to immediatly after the `<hr>`
3920# element, and then, another Backspace can delete it.
3921- name: editor.hr_element.allow_to_delete_from_following_line
3922  type: bool
3923  value: false
3924  mirror: always
3925
3926# Delay to mask last input character in password fields.
3927# If negative value, to use platform's default behavior.
3928# If 0, no delay to mask password.
3929# Otherwise, password fields unmask last input character(s) during specified
3930# time (in milliseconds).
3931- name: editor.password.mask_delay
3932  type: int32_t
3933  value: -1
3934  mirror: always
3935
3936# Set to true when you test mask_delay of password editor.  If this is set
3937# to true, "MozLastInputMasked" is fired when last input characters are
3938# masked by timeout.
3939- name: editor.password.testing.mask_delay
3940  type: bool
3941  value: false
3942  mirror: always
3943
3944# General prefs for editor, indicating whether Gecko-specific editing UI is
3945# enabled by default. Those UIs are not implemented by any other browsers.  So,
3946# only Firefox users can change some styles with them. This means that Firefox
3947# users may get unexpected result of some web apps if they assume that users
3948# cannot change such styles.
3949- name: editor.resizing.enabled_by_default
3950  type: bool
3951  value: false
3952  mirror: always
3953- name: editor.inline_table_editing.enabled_by_default
3954  type: bool
3955  value: false
3956  mirror: always
3957- name: editor.positioning.enabled_by_default
3958  type: bool
3959  value: false
3960  mirror: always
3961
3962# Whether user pastes should be truncated.
3963- name: editor.truncate_user_pastes
3964  type: bool
3965  value: true
3966  mirror: always
3967
3968# How line breakers are treated in single line editor:
3969# * 0: Only remove the leading and trailing newlines.
3970# * 1: Remove the first newline and all characters following it.
3971# * 2: Replace newlines with spaces (default of Firefox).
3972# * 3: Remove newlines from the string.
3973# * 4: Replace newlines with commas (default of Thunderbird).
3974# * 5: Collapse newlines and surrounding white space characters and
3975#      remove them from the string.
3976# Other values are treated as 1.
3977- name: editor.singleLine.pasteNewlines
3978  type: int32_t
3979  value: 2
3980  mirror: always
3981
3982# Whether enabling blink compatible white-space normalizer or keep using
3983# Gecko's traditional white-space normalizer.
3984- name: editor.white_space_normalization.blink_compatible
3985  type: bool
3986  value: false
3987  mirror: always
3988
3989#---------------------------------------------------------------------------
3990# Prefs starting with "extensions."
3991#---------------------------------------------------------------------------
3992
3993# Whether the background.service_worker in the extension manifest.json file
3994# is enabled.
3995- name: extensions.backgroundServiceWorker.enabled
3996  type: bool
3997  value: false
3998  mirror: once
3999
4000# Whether the extensions can register a service worker on its own.
4001# NOTE: WebExtensions Framework ability to register a background service worker
4002# is not controlled by this pref, only the extension code ability to use
4003# navigator.serviceWorker.register is locked behind this pref.
4004- name: extensions.serviceWorkerRegister.allowed
4005  type: bool
4006  value: false
4007  mirror: always
4008
4009# This pref governs whether we run webextensions in a separate process (true)
4010# or the parent/main process (false)
4011- name: extensions.webextensions.remote
4012  type: RelaxedAtomicBool
4013  value: false
4014  mirror: always
4015
4016# Whether to expose the MockExtensionAPI test interface in tests.
4017# The interface MockExtensionAPI doesn't represent a real extension API,
4018# it is only available in test and does include a series of cases useful
4019# to test the API request handling without tying the unit test to a
4020# specific WebExtensions API.
4021- name: extensions.webidl-api.expose_mock_interface
4022  type: RelaxedAtomicBool
4023  value: false
4024  mirror: always
4025
4026#---------------------------------------------------------------------------
4027# Prefs starting with "findbar."
4028#---------------------------------------------------------------------------
4029
4030- name: findbar.modalHighlight
4031  type: bool
4032  value: false
4033  mirror: always
4034
4035#---------------------------------------------------------------------------
4036# Prefs starting with "fission."
4037#---------------------------------------------------------------------------
4038
4039# Whether to enable Fission in new windows by default.
4040# IMPORTANT: This preference should *never* be checked directly, since any
4041# session can contain a mix of Fission and non-Fission windows. Instead,
4042# callers should check whether the relevant nsILoadContext has the
4043# `useRemoteSubframes` flag set.
4044# Callers which cannot use `useRemoteSubframes` must use
4045# `Services.appinfo.fissionAutostart` or `mozilla::FissionAutostart()` to check
4046# if fission is enabled by default.
4047- name: fission.autostart
4048  type: bool
4049  value: false
4050  mirror: never
4051
4052# Prefs used by normandy to orchestrate the fission experiment. For more
4053# details, see the comments in nsAppRunner.cpp.
4054- name: fission.experiment.enrollmentStatus
4055  type: uint32_t
4056  value: 0
4057  mirror: never
4058
4059- name: fission.experiment.startupEnrollmentStatus
4060  type: uint32_t
4061  value: 0
4062  mirror: never
4063
4064# This pref has no effect within fission windows, it only controls the
4065# behaviour within non-fission windows. If true, preserve browsing contexts
4066# between process swaps.
4067- name: fission.preserve_browsing_contexts
4068  type: bool
4069  value: true
4070  mirror: always
4071
4072# Store the session history in the parent process, and access it over IPC
4073# from the child processes.
4074- name: fission.sessionHistoryInParent
4075  type: bool
4076  value: false
4077  mirror: once
4078  do_not_use_directly: true
4079
4080# If session history is stored in the parent process, enable bfcache for it.
4081- name: fission.bfcacheInParent
4082  type: bool
4083  value: true
4084  mirror: always
4085  do_not_use_directly: true
4086
4087# Allow renaming of process names to the origin on nightly
4088# Setting this pref creates a privacy leak, but helps greatly with
4089# debugging
4090- name: fission.processOriginNames
4091  type: bool
4092  value: false
4093  mirror: always
4094
4095# If true, allow process-switching documents loaded by <object> and <embed>
4096# elements into a remote process.
4097# NOTE: This pref has no impact outside of windows with the
4098# `useRemoteSubframes` flag set.
4099- name: fission.remoteObjectEmbed
4100  type: bool
4101  value: true
4102  mirror: always
4103
4104# If true, show option for opening a non-Fission window in a menu, when Fission
4105# is enabled.
4106- name: fission.openNonFissionWindowOption
4107  type: bool
4108  value: false
4109  mirror: always
4110
4111#---------------------------------------------------------------------------
4112# Prefs starting with "font."
4113#---------------------------------------------------------------------------
4114
4115# A value greater than zero enables font size inflation for
4116# pan-and-zoom UIs, so that the fonts in a block are at least the size
4117# that, if a block's width is scaled to match the device's width, the
4118# fonts in the block are big enough that at most the pref value ems of
4119# text fit in *the width of the device*.
4120#
4121# When both this pref and the next are set, the larger inflation is used.
4122- name: font.size.inflation.emPerLine
4123  type: uint32_t
4124  value: 0
4125  mirror: always
4126
4127# A value greater than zero enables font size inflation for
4128# pan-and-zoom UIs, so that if a block's width is scaled to match the
4129# device's width, the fonts in a block are at least the given font size.
4130# The value given is in twips, i.e., 1/20 of a point, or 1/1440 of an inch.
4131#
4132# When both this pref and the previous are set, the larger inflation is used.
4133- name: font.size.inflation.minTwips
4134  type: uint32_t
4135  value: 0
4136  mirror: always
4137
4138# In products with multi-mode pan-and-zoom and non-pan-and-zoom UIs,
4139# this pref forces font inflation to always be enabled in all modes.
4140# That is, any heuristics used to detect pan-and-zoom
4141# vs. non-pan-and-zoom modes are disabled and all content is treated
4142# as pan-and-zoom mode wrt font inflation.
4143#
4144# This pref has no effect if font inflation is not enabled through
4145# either of the prefs above.  It has no meaning in single-mode UIs.
4146- name: font.size.inflation.forceEnabled
4147  type: bool
4148  value: false
4149  mirror: always
4150
4151# In products with multi-mode pan-and-zoom and non-pan-and-zoom UIs,
4152# this pref disables font inflation in master-process contexts where
4153# existing heuristics can't be used determine enabled-ness.
4154#
4155# This pref has no effect if font inflation is not enabled through
4156# either of the prefs above.  The "forceEnabled" pref above overrides
4157# this pref.
4158- name: font.size.inflation.disabledInMasterProcess
4159  type: bool
4160  value: false
4161  mirror: always
4162
4163# Defines the font size inflation mapping intercept parameter.
4164#
4165# Font size inflation computes a minimum font size, m, based on
4166# other preferences (see font.size.inflation.minTwips and
4167# font.size.inflation.emPerLine, above) and the width of the
4168# frame in which the text resides. Using this minimum, a specified
4169# font size, s, is mapped to an inflated font size, i, using an
4170# equation that varies depending on the value of the font size
4171# inflation mapping intercept parameter, P.
4172#
4173# If the intercept parameter is negative, then the following mapping
4174# function is used:
4175#
4176# i = m + s
4177#
4178# If the intercept parameter is non-negative, then the mapping function
4179# is a function such that its graph meets the graph of i = s at the
4180# point where both i and s are (1 + P/2) * m for values of s that are
4181# large enough. This means that when s=0, i is always equal to m.
4182- name: font.size.inflation.mappingIntercept
4183  type: int32_t
4184  value: 1
4185  mirror: always
4186
4187# Since the goal of font size inflation is to avoid having to
4188# repeatedly scroll side to side to read a block of text, and there are
4189# a number of page layouts where a relatively small chunk of text is
4190# better off not being inflated according to the same algorithm we use
4191# for larger chunks of text, we want a threshold for an amount of text
4192# that triggers font size inflation.  This preference controls that
4193# threshold.
4194#
4195# It controls the threshold used within an *approximation* of the
4196# number of lines of text we use.  In particular, if we assume that
4197# each character (collapsing collapsible whitespace) has a width the
4198# same as the em-size of the font (when, normally, it's actually quite
4199# a bit smaller on average), this preference gives the percentage of a
4200# number of lines of text we'd need to trigger inflation.  This means
4201# that a percentage of 100 means that we'd need a number of characters
4202# (we know the font size and the width) equivalent to one line of
4203# square text (which is actually a lot less than a real line of text).
4204#
4205# A value of 0 means there's no character length threshold.
4206- name: font.size.inflation.lineThreshold
4207  type: uint32_t
4208  value: 400
4209  mirror: always
4210
4211# This controls the percentage that fonts will be inflated, if font
4212# size inflation is enabled. Essentially, if we have a specified font
4213# size, s, and an inflated font size, i, this specifies that the ratio
4214# i/s * 100 should never exceed the value of this preference. In order
4215# for this preference to have any effect, its value must be greater
4216# than 100, since font inflation can never decrease the ratio i/s.
4217- name: font.size.inflation.maxRatio
4218  type: uint32_t
4219  value: 0
4220  mirror: always
4221
4222# This setting corresponds to a global text zoom setting affecting
4223# all content that is not already subject to font size inflation.
4224# It is interpreted as a percentage value that is applied on top
4225# of the document's current text zoom setting.
4226#
4227# The resulting total zoom factor (text zoom * system font scale)
4228# will be limited by zoom.minPercent and maxPercent.
4229- name: font.size.systemFontScale
4230  type: uint32_t
4231  value: 100
4232  mirror: always
4233
4234#---------------------------------------------------------------------------
4235# Prefs starting with "full-screen-api."
4236#---------------------------------------------------------------------------
4237
4238- name: full-screen-api.enabled
4239  type: bool
4240  value: false
4241  mirror: always
4242
4243- name: full-screen-api.allow-trusted-requests-only
4244  type: bool
4245  value: true
4246  mirror: always
4247
4248- name: full-screen-api.mouse-event-allow-left-button-only
4249  type: bool
4250  value: true
4251  mirror: always
4252
4253- name: full-screen-api.exit-on.windowOpen
4254  type: bool
4255  value: true
4256  mirror: always
4257
4258- name: full-screen-api.exit-on.windowRaise
4259  type: bool
4260  value: true
4261  mirror: always
4262
4263- name: full-screen-api.pointer-lock.enabled
4264  type: bool
4265  value: true
4266  mirror: always
4267
4268#---------------------------------------------------------------------------
4269# Prefs starting with "fuzzing.". It's important that these can only be
4270# checked in fuzzing builds (when FUZZING is defined), otherwise you could
4271# enable the fuzzing stuff on your regular build which would be bad :)
4272#---------------------------------------------------------------------------
4273
4274#ifdef FUZZING
4275-   name: fuzzing.enabled
4276    type: bool
4277    value: false
4278    mirror: always
4279
4280-   name: fuzzing.necko.enabled
4281    type: RelaxedAtomicBool
4282    value: false
4283    mirror: always
4284#endif
4285
4286#---------------------------------------------------------------------------
4287# Prefs starting with "general."
4288#---------------------------------------------------------------------------
4289
4290- name: general.aboutConfig.enable
4291  type: bool
4292  value: true
4293  mirror: always
4294
4295# Limits the depth of recursive conversion of data when opening
4296# a content to view.  This is mostly intended to prevent infinite
4297# loops with faulty converters involved.
4298- name: general.document_open_conversion_depth_limit
4299  type: uint32_t
4300  value: 20
4301  mirror: always
4302
4303- name: general.smoothScroll
4304  type: RelaxedAtomicBool
4305  value: true
4306  mirror: always
4307
4308# This pref and general.smoothScroll.stopDecelerationWeighting determine
4309# the timing function.
4310- name: general.smoothScroll.currentVelocityWeighting
4311  type: AtomicFloat
4312  value: 0.25
4313  mirror: always
4314
4315# To connect consecutive scroll events into a continuous flow, the animation's
4316# duration should be longer than scroll events intervals (or else the scroll
4317# will stop before the next event arrives - we're guessing the next interval
4318# by averaging recent intervals).
4319# This defines how much longer the duration is compared to the events
4320# interval (percentage).
4321- name: general.smoothScroll.durationToIntervalRatio
4322  type: RelaxedAtomicInt32
4323  value: 200
4324  mirror: always
4325
4326- name: general.smoothScroll.lines
4327  type: RelaxedAtomicBool
4328  value: true
4329  mirror: always
4330
4331- name: general.smoothScroll.lines.durationMaxMS
4332  type: RelaxedAtomicInt32
4333  value: 150
4334  mirror: always
4335
4336- name: general.smoothScroll.lines.durationMinMS
4337  type: RelaxedAtomicInt32
4338  value: 150
4339  mirror: always
4340
4341- name: general.smoothScroll.mouseWheel
4342  type: RelaxedAtomicBool
4343  value: true
4344  mirror: always
4345
4346- name: general.smoothScroll.mouseWheel.durationMaxMS
4347  type: RelaxedAtomicInt32
4348  value: 200
4349  mirror: always
4350
4351- name: general.smoothScroll.mouseWheel.durationMinMS
4352  type: RelaxedAtomicInt32
4353  value: 50
4354  mirror: always
4355
4356- name: general.smoothScroll.other
4357  type: RelaxedAtomicBool
4358  value: true
4359  mirror: always
4360
4361- name: general.smoothScroll.other.durationMaxMS
4362  type: RelaxedAtomicInt32
4363  value: 150
4364  mirror: always
4365
4366- name: general.smoothScroll.other.durationMinMS
4367  type: RelaxedAtomicInt32
4368  value: 150
4369  mirror: always
4370
4371- name: general.smoothScroll.pages
4372  type: RelaxedAtomicBool
4373  value: true
4374  mirror: always
4375
4376- name: general.smoothScroll.pages.durationMaxMS
4377  type: RelaxedAtomicInt32
4378  value: 150
4379  mirror: always
4380
4381- name: general.smoothScroll.pages.durationMinMS
4382  type: RelaxedAtomicInt32
4383  value: 150
4384  mirror: always
4385
4386- name: general.smoothScroll.scrollbars
4387  type: RelaxedAtomicBool
4388  value: true
4389  mirror: always
4390
4391- name: general.smoothScroll.scrollbars.durationMaxMS
4392  type: RelaxedAtomicInt32
4393  value: 150
4394  mirror: always
4395
4396- name: general.smoothScroll.scrollbars.durationMinMS
4397  type: RelaxedAtomicInt32
4398  value: 150
4399  mirror: always
4400
4401- name: general.smoothScroll.pixels
4402  type: RelaxedAtomicBool
4403  value: true
4404  mirror: always
4405
4406- name: general.smoothScroll.pixels.durationMaxMS
4407  type: RelaxedAtomicInt32
4408  value: 150
4409  mirror: always
4410
4411- name: general.smoothScroll.pixels.durationMinMS
4412  type: RelaxedAtomicInt32
4413  value: 150
4414  mirror: always
4415
4416# This pref and general.smoothScroll.currentVelocityWeighting determine
4417# the timing function.
4418- name: general.smoothScroll.stopDecelerationWeighting
4419  type: AtomicFloat
4420  value: 0.4f
4421  mirror: always
4422
4423# Alternative smooth scroll physics. ("MSD" = Mass-Spring-Damper)
4424- name: general.smoothScroll.msdPhysics.enabled
4425  type: RelaxedAtomicBool
4426  value: false
4427  mirror: always
4428
4429- name: general.smoothScroll.msdPhysics.continuousMotionMaxDeltaMS
4430  type: RelaxedAtomicInt32
4431  value: 120
4432  mirror: always
4433
4434- name: general.smoothScroll.msdPhysics.motionBeginSpringConstant
4435  type: RelaxedAtomicInt32
4436  value: 1250
4437  mirror: always
4438
4439- name: general.smoothScroll.msdPhysics.slowdownMinDeltaMS
4440  type: RelaxedAtomicInt32
4441  value: 12
4442  mirror: always
4443
4444- name: general.smoothScroll.msdPhysics.slowdownMinDeltaRatio
4445  type: AtomicFloat
4446  value: 1.3f
4447  mirror: always
4448
4449- name: general.smoothScroll.msdPhysics.slowdownSpringConstant
4450  type: RelaxedAtomicInt32
4451  value: 2000
4452  mirror: always
4453
4454- name: general.smoothScroll.msdPhysics.regularSpringConstant
4455  type: RelaxedAtomicInt32
4456  value: 1000
4457  mirror: always
4458
4459#---------------------------------------------------------------------------
4460# Prefs starting with "geo."
4461#---------------------------------------------------------------------------
4462
4463# Is support for Navigator.geolocation enabled?
4464- name: geo.enabled
4465  type: bool
4466  value: true
4467  mirror: always
4468
4469# Time, in milliseconds, to wait for the location provider to spin up.
4470- name: geo.timeout
4471  type: int32_t
4472  value: 6000
4473  mirror: always
4474
4475#---------------------------------------------------------------------------
4476# Prefs starting with "gfx."
4477#---------------------------------------------------------------------------
4478
4479- name: gfx.allow-texture-direct-mapping
4480  type: bool
4481  value: true
4482  mirror: once
4483
4484# Allow 24-bit colour when the hardware supports it.
4485- name: gfx.android.rgb16.force
4486  type: bool
4487  value: false
4488  mirror: once
4489
4490- name: gfx.apitrace.enabled
4491  type: bool
4492  value: false
4493  mirror: once
4494
4495# Nb: we ignore this pref on release and beta.
4496- name: gfx.blocklist.all
4497  type: int32_t
4498  value: 0
4499  mirror: once
4500
4501# 0x7fff is the maximum supported xlib surface size and is more than enough for canvases.
4502- name: gfx.canvas.max-size
4503  type: RelaxedAtomicInt32
4504  value: 0x7fff
4505  mirror: always
4506
4507- name: gfx.canvas.remote
4508  type: RelaxedAtomicBool
4509#if defined(XP_WIN)
4510  value: true
4511#else
4512  value: false
4513#endif
4514  mirror: always
4515
4516- name: gfx.color_management.force_srgb
4517  type: RelaxedAtomicBool
4518  value: false
4519  mirror: always
4520
4521- name: gfx.color_management.native_srgb
4522  type: RelaxedAtomicBool
4523#if defined(XP_MACOSX)
4524  value: true
4525#else
4526  value: false
4527#endif
4528  mirror: always
4529
4530- name: gfx.color_management.enablev4
4531  type: RelaxedAtomicBool
4532#if defined(XP_MACOSX) && defined(NIGHTLY_BUILD)
4533  value: true
4534#else
4535  value: false
4536#endif
4537  mirror: always
4538
4539# 0 = Off, 1 = Full, 2 = Tagged Images Only.
4540# See CMSMode in gfx/thebes/gfxPlatform.h.
4541- name: gfx.color_management.mode
4542  type: RelaxedAtomicInt32
4543  value: 2
4544  mirror: always
4545
4546# The zero default here should match QCMS_INTENT_DEFAULT from qcms.h
4547- name: gfx.color_management.rendering_intent
4548  type: RelaxedAtomicInt32
4549  value: 0
4550  mirror: always
4551
4552- name: gfx.compositor.clearstate
4553  type: RelaxedAtomicBool
4554  value: false
4555  mirror: always
4556
4557# Whether GL contexts can be migrated to a different GPU (to match the one the
4558# OS is using for composition).
4559#
4560# 0 = force disable migration
4561# 1 = use migration where in safe configurations (the default)
4562# 2 = force enable migration (for testing)
4563- name: gfx.compositor.gpu-migration
4564  type: RelaxedAtomicInt32
4565  value: 1
4566  mirror: always
4567
4568- name: gfx.core-animation.tint-opaque
4569  type: RelaxedAtomicBool
4570  value: false
4571  mirror: always
4572
4573#if defined(MOZ_WIDGET_ANDROID)
4574  # Overrides the glClear color used when the surface origin is not (0, 0)
4575  # Used for drawing a border around the content.
4576-   name: gfx.compositor.override.clear-color.r
4577    type: AtomicFloat
4578    value: 0.0f
4579    mirror: always
4580
4581-   name: gfx.compositor.override.clear-color.g
4582    type: AtomicFloat
4583    value: 0.0f
4584    mirror: always
4585
4586-   name: gfx.compositor.override.clear-color.b
4587    type: AtomicFloat
4588    value: 0.0f
4589    mirror: always
4590
4591-   name: gfx.compositor.override.clear-color.a
4592    type: AtomicFloat
4593    value: 0.0f
4594    mirror: always
4595#endif  # defined(MOZ_WIDGET_ANDROID)
4596
4597- name: gfx.content.always-paint
4598  type: RelaxedAtomicBool
4599  value: false
4600  mirror: always
4601
4602# Size in megabytes
4603- name: gfx.content.skia-font-cache-size
4604  type: int32_t
4605  value: 5
4606  mirror: once
4607
4608- name: gfx.device-reset.limit
4609  type: int32_t
4610  value: 10
4611  mirror: once
4612
4613- name: gfx.device-reset.threshold-ms
4614  type: int32_t
4615  value: -1
4616  mirror: once
4617
4618
4619# Whether to disable the automatic detection and use of direct2d.
4620- name: gfx.direct2d.disabled
4621  type: bool
4622  value: false
4623  mirror: once
4624
4625# Whether to attempt to enable Direct2D regardless of automatic detection or
4626# blacklisting.
4627- name: gfx.direct2d.force-enabled
4628  type: bool
4629  value: false
4630  mirror: once
4631
4632# Whether to defer destruction of Direct2D DrawTargets to the paint thread
4633# when using OMTP.
4634- name: gfx.direct2d.destroy-dt-on-paintthread
4635  type: RelaxedAtomicBool
4636  value: true
4637  mirror: always
4638
4639- name: gfx.direct3d11.reuse-decoder-device
4640  type: RelaxedAtomicInt32
4641  value: -1
4642  mirror: always
4643
4644- name: gfx.direct3d11.allow-keyed-mutex
4645  type: RelaxedAtomicBool
4646  value: true
4647  mirror: always
4648
4649- name: gfx.direct3d11.use-double-buffering
4650  type: RelaxedAtomicBool
4651  value: false
4652  mirror: always
4653
4654- name: gfx.direct3d11.enable-debug-layer
4655  type: bool
4656  value: false
4657  mirror: once
4658
4659- name: gfx.direct3d11.break-on-error
4660  type: bool
4661  value: false
4662  mirror: once
4663
4664- name: gfx.direct3d11.sleep-on-create-device
4665  type: int32_t
4666  value: 0
4667  mirror: once
4668
4669# Whether to preserve color bitmap tables in fonts (bypassing OTS).
4670# Currently these are supported only on platforms where we use Freetype
4671# to render fonts (Linux/Gtk and Android).
4672- name: gfx.downloadable_fonts.keep_color_bitmaps
4673  type: RelaxedAtomicBool
4674  value: false
4675  mirror: always
4676
4677# Whether font sanitization is performed on the main thread or not.
4678- name: gfx.downloadable_fonts.sanitize_omt
4679  type: RelaxedAtomicBool
4680  value: true
4681  mirror: always
4682
4683# Whether to validate OpenType variation tables in fonts.
4684- name: gfx.downloadable_fonts.validate_variation_tables
4685  type: RelaxedAtomicBool
4686  value: true
4687  mirror: always
4688
4689# Whether OTS validation should be applied to OpenType Layout (OTL) tables.
4690- name: gfx.downloadable_fonts.otl_validation
4691  type: RelaxedAtomicBool
4692  value: @IS_NOT_RELEASE_OR_BETA@
4693  mirror: always
4694
4695- name: gfx.draw-color-bars
4696  type: RelaxedAtomicBool
4697  value: false
4698  mirror: always
4699
4700- name: gfx.e10s.hide-plugins-for-scroll
4701  type: bool
4702  value: true
4703  mirror: once
4704
4705- name: gfx.e10s.font-list.shared
4706  type: bool
4707  value: false
4708  mirror: once
4709
4710# [Windows] Whether registry FontSubstitutes entries are used unconditionally,
4711# or only if the original font is not available.
4712#if defined(XP_WIN)
4713- name: gfx.windows-font-substitutes.always
4714  type: bool
4715  value: false
4716  mirror: once
4717#endif
4718
4719- name: gfx.font-list-omt.enabled
4720  type: bool
4721  value: false
4722  mirror: once
4723
4724# Whether to load fonts (e.g. Twemoji Mozilla) bundled with the application:
4725#  -1 - Auto behavior based on OS version (currently, disables loading on
4726#       "low-memory" Android devices)
4727#   0 - Skip loading any bundled fonts
4728#   1 - Always load bundled fonts
4729- name: gfx.bundled-fonts.activate
4730  type: int32_t
4731  value: -1
4732  mirror: once
4733
4734- name: gfx.font_loader.delay
4735  type: uint32_t
4736#if defined(XP_WIN)
4737  value: 60000
4738#else
4739  value: 8000
4740#endif
4741  mirror: once
4742
4743# Disable antialiasing of Ahem, for use in tests.
4744- name: gfx.font_rendering.ahem_antialias_none
4745  type: RelaxedAtomicBool
4746  value: false
4747  mirror: always
4748
4749#if defined(XP_MACOSX)
4750  # Set to true to revert from HarfBuzz AAT shaping to the old Core Text
4751  # backend.
4752-   name: gfx.font_rendering.coretext.enabled
4753    type: RelaxedAtomicBool
4754    value: false
4755    mirror: always
4756#endif
4757
4758- name: gfx.font_rendering.opentype_svg.enabled
4759  type: RelaxedAtomicBool
4760  value: true
4761  mirror: always
4762  rust: true
4763
4764- name: gfx.font_rendering.fallback.async
4765  type: RelaxedAtomicBool
4766  value: true
4767  mirror: always
4768
4769#  Whether to enable LayerScope tool and default listening port.
4770- name: gfx.layerscope.enabled
4771  type: RelaxedAtomicBool
4772  value: false
4773  mirror: always
4774
4775- name: gfx.layerscope.port
4776  type: RelaxedAtomicInt32
4777  value: 23456
4778  mirror: always
4779
4780# The level of logging:
4781# - 0: no logging;
4782# - 1: adds errors;
4783# - 2: adds warnings;
4784# - 3 or 4: adds debug logging.
4785# If you set the value to 4, you will also need to set the environment
4786# variable MOZ_LOG to gfx:4. See mozilla/Logging.h for details.
4787- name: gfx.logging.level
4788  type: RelaxedAtomicInt32
4789  value: mozilla::gfx::LOG_DEFAULT
4790  mirror: always
4791  include: mozilla/gfx/LoggingConstants.h
4792
4793- name: gfx.logging.crash.length
4794  type: uint32_t
4795  value: 16
4796  mirror: once
4797
4798- name: gfx.logging.painted-pixel-count.enabled
4799  type: RelaxedAtomicBool
4800  value: false
4801  mirror: always
4802
4803# The maximums here are quite conservative, we can tighten them if problems show up.
4804- name: gfx.logging.texture-usage.enabled
4805  type: bool
4806  value: false
4807  mirror: once
4808
4809- name: gfx.logging.peak-texture-usage.enabled
4810  type: bool
4811  value: false
4812  mirror: once
4813
4814- name: gfx.logging.slow-frames.enabled
4815  type: bool
4816  value: false
4817  mirror: once
4818
4819# Use gfxPlatform::MaxAllocSize instead of the pref directly.
4820- name: gfx.max-alloc-size
4821  type: int32_t
4822  value: (int32_t)500000000
4823  mirror: once
4824  do_not_use_directly: true
4825
4826# Use gfxPlatform::MaxTextureSize instead of the pref directly.
4827- name: gfx.max-texture-size
4828  type: int32_t
4829  value: (int32_t)32767
4830  mirror: once
4831  do_not_use_directly: true
4832
4833- name: gfx.offscreencanvas.enabled
4834  type: RelaxedAtomicBool
4835  value: false
4836  mirror: always
4837
4838- name: gfx.omta.background-color
4839  type: bool
4840  value: true
4841  mirror: always
4842
4843- name: gfx.partialpresent.force
4844  type: RelaxedAtomicInt32
4845  value: 0
4846  mirror: always
4847
4848# Log severe performance warnings to the error console and profiles.
4849# This should be use to quickly find which slow paths are used by test cases.
4850- name: gfx.perf-warnings.enabled
4851  type: RelaxedAtomicBool
4852  value: false
4853  mirror: always
4854
4855#ifdef MOZ_X11
4856# Whether to force using GLX over EGL.
4857- name: gfx.x11-egl.force-disabled
4858  type: bool
4859  value: false
4860  mirror: once
4861
4862# Whether to force using EGL over GLX.
4863- name: gfx.x11-egl.force-enabled
4864  type: bool
4865  value: false
4866  mirror: once
4867#endif
4868
4869- name: gfx.testing.device-fail
4870  type: RelaxedAtomicBool
4871  value: false
4872  mirror: always
4873
4874- name: gfx.testing.device-reset
4875  type: RelaxedAtomicInt32
4876  value: 0
4877  mirror: always
4878
4879- name: gfx.text.disable-aa
4880  type: bool
4881  value: false
4882  mirror: once
4883
4884- name: gfx.text.subpixel-position.force-enabled
4885  type: bool
4886  value: false
4887  mirror: once
4888
4889- name: gfx.text.subpixel-position.force-disabled
4890  type: bool
4891  value: false
4892  mirror: once
4893
4894# Disable surface sharing due to issues with compatible FBConfigs on
4895# NVIDIA drivers as described in bug 1193015.
4896- name: gfx.use-glx-texture-from-pixmap
4897  type: RelaxedAtomicBool
4898  value: false
4899  mirror: always
4900
4901- name: gfx.use-iosurface-textures
4902  type: bool
4903  value: false
4904  mirror: once
4905
4906- name: gfx.use-mutex-on-present
4907  type: bool
4908  value: false
4909  mirror: once
4910
4911- name: gfx.use-ahardwarebuffer-content
4912  type: bool
4913  value: false
4914  mirror: once
4915
4916# Use SurfaceTextures as preferred backend for TextureClient/Host.
4917- name: gfx.use-surfacetexture-textures
4918  type: bool
4919  value: false
4920  mirror: once
4921
4922- name: gfx.vsync.collect-scroll-transforms
4923  type: RelaxedAtomicBool
4924  value: false
4925  mirror: always
4926
4927- name: gfx.vsync.compositor.unobserve-count
4928  type: int32_t
4929  value: 10
4930  mirror: once
4931
4932- name: gfx.vsync.force-disable-waitforvblank
4933  type: RelaxedAtomicBool
4934  value: false
4935  mirror: always
4936
4937# We expose two prefs: gfx.webrender.all and gfx.webrender.enabled.
4938# The first enables WR+additional features, and the second just enables WR.
4939# For developer convenience, building with --enable-webrender=true or just
4940# --enable-webrender will set gfx.webrender.enabled to true by default.
4941#
4942# We also have a pref gfx.webrender.all.qualified which is not exposed via
4943# about:config. That pref enables WR but only on qualified hardware. This is
4944# the pref we'll eventually flip to deploy WebRender to the target population.
4945- name: gfx.webrender.all
4946  type: bool
4947  value: false
4948  mirror: once
4949
4950- name: gfx.webrender.enabled
4951  type: bool
4952  value: false
4953  mirror: once
4954  do_not_use_directly: true
4955
4956#ifdef XP_WIN
4957- name: gfx.webrender.force-angle
4958  type: bool
4959  value: true
4960  mirror: once
4961#endif
4962
4963# WebRender is not enabled when there is no GPU process on window when
4964# WebRender uses ANGLE. It is for avoiding that WebGL and WebRender use ANGLE
4965# at once. But there is a case that we want to enable WebRender for testing.
4966#ifdef XP_WIN
4967- name: gfx.webrender.enabled-no-gpu-process-with-angle-win
4968  type: bool
4969  value: true
4970  mirror: once
4971#endif
4972
4973- name: gfx.webrender.blob-images
4974  type: RelaxedAtomicBool
4975  value: true
4976  mirror: always
4977
4978- name: gfx.webrender.svg-images
4979  type: RelaxedAtomicBool
4980  value: false
4981  mirror: always
4982
4983- name: gfx.webrender.blob.paint-flashing
4984  type: RelaxedAtomicBool
4985  value: false
4986  mirror: always
4987
4988- name: gfx.webrender.enable-capture
4989  type: bool
4990  value: false
4991  mirror: once
4992
4993- name: gfx.webrender.dl.dump-parent
4994  type: RelaxedAtomicBool
4995  value: false
4996  mirror: always
4997
4998- name: gfx.webrender.dl.dump-content
4999  type: RelaxedAtomicBool
5000  value: false
5001  mirror: always
5002
5003- name: gfx.webrender.dl.dump-content-serialized
5004  type: RelaxedAtomicBool
5005  value: false
5006  mirror: always
5007
5008# Also expose a pref to allow users to force-disable WR. This is exposed
5009# on all channels because WR can be enabled on qualified hardware on all
5010# channels.
5011- name: gfx.webrender.force-disabled
5012  type: bool
5013  value: false
5014  mirror: once
5015
5016#ifdef MOZ_WIDGET_GTK
5017- name: gfx.webrender.reject-software-driver
5018  type: bool
5019  value: true
5020  mirror: once
5021#endif
5022
5023- name: gfx.webrender.highlight-painted-layers
5024  type: RelaxedAtomicBool
5025  value: false
5026  mirror: always
5027
5028- name: gfx.webrender.late-scenebuild-threshold
5029  type: RelaxedAtomicInt32
5030  value: 4
5031  mirror: always
5032
5033- name: gfx.webrender.max-filter-ops-per-chain
5034  type: RelaxedAtomicUint32
5035  value: 64
5036  mirror: always
5037
5038- name: gfx.webrender.enable-multithreading
5039  type: bool
5040  value: true
5041  mirror: always
5042
5043- name: gfx.webrender.batching.lookback
5044  type: uint32_t
5045  value: 10
5046  mirror: always
5047
5048- name: gfx.webrender.compositor
5049  type: bool
5050#if defined(XP_WIN) || defined(XP_MACOSX)
5051  value: true
5052#else
5053  value: false
5054#endif
5055  mirror: once
5056
5057- name: gfx.webrender.compositor.force-enabled
5058  type: bool
5059  value: false
5060  mirror: once
5061
5062- name: gfx.webrender.compositor.max_update_rects
5063  type: uint32_t
5064#if defined(XP_WIN) || defined(XP_MACOSX)
5065  value: 1
5066#else
5067  value: 0
5068#endif
5069  mirror: once
5070
5071- name: gfx.webrender.compositor.surface-pool-size
5072  type: uint32_t
5073  value: 25
5074  mirror: once
5075
5076# Number of damage rects we can give to the compositor for a new frame with
5077# partial present. This controls whether partial present is used or not.
5078- name: gfx.webrender.max-partial-present-rects
5079  type: uint32_t
5080#if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WIDGET_GTK)
5081  value: 1
5082#else
5083  value: 0
5084#endif
5085  mirror: once
5086
5087# Whether or not we can reuse the buffer contents using the GL buffer age
5088# extension, if supported by the platform. This requires partial present
5089# to be used.
5090- name: gfx.webrender.allow-partial-present-buffer-age
5091  type: bool
5092  value: true
5093  mirror: once
5094
5095- name: gfx.webrender.enable-gpu-markers
5096  type: bool
5097#ifdef DEBUG
5098  value: true
5099#else
5100  value: false
5101#endif
5102  mirror: once
5103
5104- name: gfx.webrender.enable-item-cache
5105  type: bool
5106  value: true
5107  mirror: once
5108
5109# Whether or not to fallback from WebRender/WebRender Software to Basic.
5110- name: gfx.webrender.fallback.basic
5111  type: bool
5112#if defined(MOZ_WIDGET_ANDROID)
5113  value: true
5114#else
5115  value: @IS_NOT_EARLY_BETA_OR_EARLIER@
5116#endif
5117  mirror: once
5118
5119# Whether or not to fallback from WebRender to Software WebRender.
5120- name: gfx.webrender.fallback.software
5121  type: bool
5122#if defined(MOZ_WIDGET_ANDROID)
5123  value: false
5124#else
5125  value: true
5126#endif
5127  mirror: once
5128
5129#ifdef XP_WIN
5130  # Whether or not to fallback from WebRender to Software WebRender + D3D11.
5131-   name: gfx.webrender.fallback.software-d3d11
5132    type: bool
5133    value: true
5134    mirror: once
5135#endif
5136
5137# Whether or not fallback to Software WebRender requires the GPU process.
5138- name: gfx.webrender.fallback.software.requires-gpu-process
5139  type: bool
5140  value: false
5141  mirror: once
5142
5143- name: gfx.webrender.program-binary-disk
5144  type: bool
5145#if defined(XP_WIN) || defined(ANDROID)
5146  value: true
5147#else
5148  value: false
5149#endif
5150  mirror: once
5151
5152- name: gfx.webrender.use-optimized-shaders
5153  type: bool
5154  value: true
5155  mirror: once
5156
5157- name: gfx.webrender.precache-shaders
5158  type: bool
5159  value: false
5160  mirror: once
5161
5162# When gl debug message is a high severity message, forwward it to gfx critical
5163# note.
5164- name: gfx.webrender.gl-debug-message-critical-note
5165  type: bool
5166#if defined(XP_WIN) && defined(NIGHTLY_BUILD)
5167  value: true
5168#else
5169  value: false
5170#endif
5171  mirror: once
5172
5173# Enable printing gl debug messages
5174- name: gfx.webrender.gl-debug-message-print
5175  type: bool
5176  value: false
5177  mirror: once
5178
5179#ifdef NIGHTLY_BUILD
5180  # Keep this pref hidden on non-nightly builds to avoid people accidentally
5181  # turning it on.
5182- name: gfx.webrender.panic-on-gl-error
5183  type: bool
5184  value: false
5185  mirror: once
5186#endif
5187
5188#ifdef XP_WIN
5189  # Enables display of performance debugging counters when DirectComposition
5190  # is used.
5191  # Performance counters are displayed on the top-right corner of the screen.
5192-   name: gfx.webrender.debug.dcomp-counter
5193    type: RelaxedAtomicBool
5194    value: false
5195    mirror: always
5196  # Enables highlighting redraw regions of DCompositionVisual
5197-   name: gfx.webrender.debug.dcomp-redraw-regions
5198    type: RelaxedAtomicBool
5199    value: false
5200    mirror: always
5201#endif
5202
5203- name: gfx.webrender.enable-low-priority-pool
5204  type: RelaxedAtomicBool
5205#if defined(ANDROID)
5206  value: false
5207#else
5208  value: true
5209#endif
5210  mirror: always
5211
5212  # Force subpixel anti-aliasing as much as possible, despite performance cost.
5213- name: gfx.webrender.quality.force-subpixel-aa-where-possible
5214  type: bool
5215  value: false
5216  mirror: always
5217
5218#ifdef XP_MACOSX
5219- name: gfx.webrender.enable-client-storage
5220  type: bool
5221  value: true
5222  mirror: once
5223#endif
5224
5225 # Width of WebRender tile size
5226- name: gfx.webrender.picture-tile-width
5227  type: RelaxedAtomicInt32
5228  value: 1024
5229  mirror: always
5230
5231 # Width of WebRender tile size
5232- name: gfx.webrender.picture-tile-height
5233  type: RelaxedAtomicInt32
5234  value: 512
5235  mirror: always
5236
5237# Whether to use EGL robustness or not.
5238- name: gfx.webrender.prefer-robustness
5239  type: bool
5240#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
5241  value: true
5242#else
5243  value: false
5244#endif
5245  mirror: once
5246
5247# Whether to use the WebRender software backend
5248- name: gfx.webrender.software
5249  type: bool
5250  value: false
5251  mirror: once
5252
5253# Whether to use the D3D11 RenderCompositor when using WebRender software backend
5254- name: gfx.webrender.software.d3d11
5255  type: bool
5256  value: true
5257  mirror: once
5258
5259- name: gfx.webrender.software.opengl
5260  type: bool
5261#if defined(MOZ_WIDGET_ANDROID)
5262  value: true
5263#else
5264  value: false
5265#endif
5266  mirror: once
5267
5268- name: gfx.webrender.software.d3d11.upload-mode
5269  type: RelaxedAtomicInt32
5270  value: 4
5271  mirror: always
5272
5273# Whether to allow widgets that don't support acceleration to use WebRender
5274# software backend
5275- name: gfx.webrender.software.unaccelerated-widget.allow
5276  type: RelaxedAtomicBool
5277  value: true
5278  mirror: always
5279
5280# Whether to force widgets to don't support acceleration to use WebRender
5281# despite that
5282- name: gfx.webrender.unaccelerated-widget.force
5283  type: RelaxedAtomicBool
5284  value: false
5285  mirror: always
5286
5287# Enable a lower quality, but higher performance pinch-zoom mode. Primarily
5288# for devices with weak GPUs, or when running SWGL.
5289- name: gfx.webrender.low-quality-pinch-zoom
5290  type: bool
5291#if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD)
5292  value: true
5293#else
5294  value: false
5295#endif
5296  mirror: once
5297
5298# Use vsync events generated by hardware
5299- name: gfx.work-around-driver-bugs
5300  type: bool
5301  value: true
5302  mirror: once
5303
5304- name: gfx.ycbcr.accurate-conversion
5305  type: RelaxedAtomicBool
5306  value: false
5307  mirror: always
5308
5309#---------------------------------------------------------------------------
5310# Prefs starting with "gl." (OpenGL)
5311#---------------------------------------------------------------------------
5312
5313- name: gl.allow-high-power
5314  type: RelaxedAtomicBool
5315  value: true
5316  mirror: always
5317
5318- name: gl.ignore-dx-interop2-blacklist
5319  type: RelaxedAtomicBool
5320  value: false
5321  mirror: always
5322
5323- name: gl.use-tls-is-current
5324  type: RelaxedAtomicInt32
5325  value: 0
5326  mirror: always
5327
5328#---------------------------------------------------------------------------
5329# Prefs starting with "html5."
5330#---------------------------------------------------------------------------
5331
5332# Turn HTML:inert on or off.
5333- name: html5.inert.enabled
5334  type: bool
5335  value: false
5336  mirror: always
5337
5338# Toggle which thread the HTML5 parser uses for stream parsing.
5339- name: html5.offmainthread
5340  type: bool
5341  value: true
5342  mirror: always
5343
5344# Time in milliseconds between the time a network buffer is seen and the timer
5345# firing when the timer hasn't fired previously in this parse in the
5346# off-the-main-thread HTML5 parser.
5347- name: html5.flushtimer.initialdelay
5348  type: RelaxedAtomicInt32
5349  value: 16
5350  mirror: always
5351
5352# Time in milliseconds between the time a network buffer is seen and the timer
5353# firing when the timer has already fired previously in this parse.
5354- name: html5.flushtimer.subsequentdelay
5355  type: RelaxedAtomicInt32
5356  value: 16
5357  mirror: always
5358
5359#---------------------------------------------------------------------------
5360# Prefs starting with "idle_period."
5361#---------------------------------------------------------------------------
5362
5363- name: idle_period.min
5364  type: uint32_t
5365  value: 3
5366  mirror: always
5367
5368- name: idle_period.during_page_load.min
5369  type: uint32_t
5370  value: 12
5371  mirror: always
5372
5373- name: idle_period.cross_process_scheduling
5374  type: RelaxedAtomicBool
5375  value: true
5376  mirror: always
5377
5378#---------------------------------------------------------------------------
5379# Prefs starting with "image."
5380#---------------------------------------------------------------------------
5381
5382# The maximum size (in kB) that the aggregate frames of an animation can use
5383# before it starts to discard already displayed frames and redecode them as
5384# necessary.
5385- name: image.animated.decode-on-demand.threshold-kb
5386  type: RelaxedAtomicUint32
5387  value: 20*1024
5388  mirror: always
5389
5390# The minimum number of frames we want to have buffered ahead of an
5391# animation's currently displayed frame.
5392- name: image.animated.decode-on-demand.batch-size
5393  type: RelaxedAtomicUint32
5394  value: 6
5395  mirror: always
5396
5397# Whether we should recycle already displayed frames instead of discarding
5398# them. This saves on the allocation itself, and may be able to reuse the
5399# contents as well. Only applies if generating full frames.
5400- name: image.animated.decode-on-demand.recycle
5401  type: bool
5402  value: true
5403  mirror: once
5404
5405# Resume an animated image from the last displayed frame rather than
5406# advancing when out of view.
5407- name: image.animated.resume-from-last-displayed
5408  type: RelaxedAtomicBool
5409  value: true
5410  mirror: always
5411
5412# Maximum number of surfaces for an image before entering "factor of 2" mode.
5413# This in addition to the number of "native" sizes of an image. A native size
5414# is a size for which we can decode a frame without up or downscaling. Most
5415# images only have 1, but some (i.e. ICOs) may have multiple frames for the
5416# same data at different sizes.
5417- name: image.cache.factor2.threshold-surfaces
5418  type: RelaxedAtomicInt32
5419  value: 4
5420  mirror: always
5421
5422# Maximum size of a surface in KB we are willing to produce when rasterizing
5423# an SVG.
5424- name: image.cache.max-rasterized-svg-threshold-kb
5425  type: RelaxedAtomicInt32
5426  value: 200*1024
5427  mirror: always
5428
5429# The maximum size, in bytes, of the decoded images we cache.
5430- name: image.cache.size
5431  type: int32_t
5432  value: 5*1024*1024
5433  mirror: once
5434
5435# A weight, from 0-1000, to place on time when comparing to size.
5436# Size is given a weight of 1000 - timeweight.
5437- name: image.cache.timeweight
5438  type: int32_t
5439  value: 500
5440  mirror: once
5441
5442# Decode all images automatically on load, ignoring our normal heuristics.
5443- name: image.decode-immediately.enabled
5444  type: RelaxedAtomicBool
5445  value: false
5446  mirror: always
5447
5448# Whether we attempt to downscale images during decoding.
5449- name: image.downscale-during-decode.enabled
5450  type: RelaxedAtomicBool
5451  value: true
5452  mirror: always
5453
5454# Whether we use EXIF metadata for image density.
5455- name: image.exif-density-correction.enabled
5456  type: RelaxedAtomicBool
5457  value: true
5458  mirror: always
5459
5460# Whether EXIF density metadata is sanity checked against PixelXDimension and PixelYDimension
5461- name: image.exif-density-correction.sanity-check.enabled
5462  type: RelaxedAtomicBool
5463  value: true
5464  mirror: always
5465
5466# The threshold for inferring that changes to an <img> element's |src|
5467# attribute by JavaScript represent an animation, in milliseconds. If the |src|
5468# attribute is changing more frequently than this value, then we enter a
5469# special "animation mode" which is designed to eliminate flicker. Set to 0 to
5470# disable.
5471- name: image.infer-src-animation.threshold-ms
5472  type: RelaxedAtomicUint32
5473  value: 2000
5474  mirror: always
5475
5476# Whether the network request priority should be adjusted according
5477# the layout and view frame position of each particular image.
5478- name: image.layout_network_priority
5479  type: RelaxedAtomicBool
5480  value: true
5481  mirror: always
5482
5483# Chunk size for calls to the image decoders.
5484- name: image.mem.decode_bytes_at_a_time
5485  type: uint32_t
5486  value: 16384
5487  mirror: once
5488
5489# Discards inactive image frames and re-decodes them on demand from
5490# compressed data.
5491- name: image.mem.discardable
5492  type: RelaxedAtomicBool
5493  value: true
5494  mirror: always
5495
5496# Discards inactive image frames of _animated_ images and re-decodes them on
5497# demand from compressed data. Has no effect if image.mem.discardable is false.
5498- name: image.mem.animated.discardable
5499  type: bool
5500  value: true
5501  mirror: once
5502
5503# Whether the heap should be used for frames from animated images. On Android,
5504# volatile memory keeps file handles open for each buffer.
5505- name: image.mem.animated.use_heap
5506  type: RelaxedAtomicBool
5507  value: @IS_ANDROID@
5508  mirror: always
5509
5510# Enable extra information for debugging in the image memory reports.
5511- name: image.mem.debug-reporting
5512  type: RelaxedAtomicBool
5513  value: false
5514  mirror: always
5515
5516# Decodes images into shared memory to allow direct use in separate
5517# rendering processes. Only applicable with WebRender.
5518- name: image.mem.shared
5519  type: RelaxedAtomicBool
5520  value: true
5521  mirror: always
5522
5523# Force unmapping of unused shared surfaces after a timeout period or when we
5524# encounter virtual memory pressure. By default this is only enabled on 32-bit
5525# Firefox.
5526- name: image.mem.shared.unmap.force-enabled
5527  type: bool
5528  value: false
5529  mirror: once
5530
5531# Minimum timeout to unmap shared surfaces since they have been last used,
5532# in milliseconds.
5533- name: image.mem.shared.unmap.min_expiration_ms
5534  type: uint32_t
5535  value: 60*1000
5536  mirror: once
5537
5538# Mininum size for shared surfaces to consider unmapping, in kilobytes.
5539- name: image.mem.shared.unmap.min_threshold_kb
5540  type: uint32_t
5541  value: 100
5542  mirror: once
5543
5544# How much of the data in the surface cache is discarded when we get a memory
5545# pressure notification, as a fraction. The discard factor is interpreted as a
5546# reciprocal, so a discard factor of 1 means to discard everything in the
5547# surface cache on memory pressure, a discard factor of 2 means to discard half
5548# of the data, and so forth. The default should be a good balance for desktop
5549# and laptop systems, where we never discard visible images.
5550- name: image.mem.surfacecache.discard_factor
5551  type: uint32_t
5552  value: 1
5553  mirror: once
5554
5555# Maximum size for the surface cache, in kilobytes.
5556- name: image.mem.surfacecache.max_size_kb
5557  type: uint32_t
5558  value: 2024 * 1024
5559  mirror: once
5560
5561# Minimum timeout for expiring unused images from the surface cache, in
5562# milliseconds. This controls how long we store cached temporary surfaces.
5563- name: image.mem.surfacecache.min_expiration_ms
5564  type: uint32_t
5565  value: 60*1000
5566  mirror: once
5567
5568# The surface cache's size, within the constraints of the maximum size set
5569# above, is determined as a fraction of main memory size. The size factor is
5570# interpreted as a reciprocal, so a size factor of 4 means to use no more than
5571# 1/4 of main memory.  The default should be a good balance for most systems.
5572- name: image.mem.surfacecache.size_factor
5573  type: uint32_t
5574  value: 4
5575  mirror: once
5576
5577# Minimum buffer size in KB before using volatile memory over the heap.
5578- name: image.mem.volatile.min_threshold_kb
5579  type: RelaxedAtomicInt32
5580#if defined(ANDROID)
5581  # On Android, volatile memory keeps file handles open for each buffer.
5582  value: 100
5583#else
5584  value: -1
5585#endif
5586  mirror: always
5587
5588# How long in ms before we should start shutting down idle decoder threads.
5589- name: image.multithreaded_decoding.idle_timeout
5590  type: int32_t
5591  value: 600000
5592  mirror: once
5593
5594# How many threads we'll use for multithreaded decoding. If < 0, will be
5595# automatically determined based on the system's number of cores.
5596- name: image.multithreaded_decoding.limit
5597  type: int32_t
5598  value: -1
5599  mirror: once
5600
5601# Whether we record SVG images as blobs or not.
5602- name: image.svg.blob-image
5603  type: RelaxedAtomicBool
5604  value: false
5605  mirror: always
5606
5607# Whether we attempt to decode WebP images or not.
5608- name: image.webp.enabled
5609  type: RelaxedAtomicBool
5610  value: true
5611  mirror: always
5612
5613# Whether we attempt to decode AVIF images or not.
5614- name: image.avif.enabled
5615  type: RelaxedAtomicBool
5616#if defined(MOZ_AV1)
5617  value: false
5618#else
5619  value: false
5620#endif
5621  mirror: always
5622
5623# How strict we are in accepting/rejecting AVIF inputs according to whether they
5624# conform to the specification
5625# 0 = Permissive: accept whatever we can simply, unambiguously interpret
5626# 1 = Normal: reject violations of "shall" specification directives
5627# 2 = Strict: reject violations of "should" specification directives
5628- name: image.avif.compliance_strictness
5629  type: RelaxedAtomicInt32
5630  value: 1
5631  mirror: always
5632
5633# Whether we apply container-level transforms like mirroring and rotation
5634- name: image.avif.apply_transforms
5635  type: RelaxedAtomicBool
5636  value: true
5637  mirror: always
5638
5639# Whether we use dav1d (true) or libaom (false) to decode AVIF image
5640- name: image.avif.use-dav1d
5641  type: RelaxedAtomicBool
5642  value: true
5643  mirror: always
5644
5645# Whether we attempt to decode JXL images or not.
5646- name: image.jxl.enabled
5647  type: RelaxedAtomicBool
5648  value: false
5649  mirror: always
5650
5651#---------------------------------------------------------------------------
5652# Prefs starting with "intl."
5653#---------------------------------------------------------------------------
5654
5655# If true, dispatch the keydown and keyup events on any web apps even during
5656# composition.
5657- name: intl.ime.hack.on_any_apps.fire_key_events_for_composition
5658  type: bool
5659  value: @IS_ANDROID@
5660  mirror: always
5661
5662# Android-specific pref to control if keydown and keyup events are fired even
5663# during composition.  Note that those prefs are ignored if
5664# dom.keyboardevent.dispatch_during_composition is false.
5665- name: intl.ime.hack.on_ime_unaware_apps.fire_key_events_for_composition
5666  type: bool
5667# If true and intl.ime.hack.on_any_apps.fire_key_events_for_composition is
5668# false, dispatch the keydown and keyup events only on IME-unaware web apps.
5669# So, this supports web apps which listen to only keydown or keyup events
5670# to get a change to do something at every text input.
5671  value: @IS_ANDROID@
5672  mirror: always
5673
5674#ifdef XP_WIN
5675  # If true, automatically extend selection to cluster boundaries when
5676  # TSF/TIP requests to select from/by middle of a cluster.
5677-   name: intl.tsf.hack.extend_setting_selection_range_to_cluster_boundaries
5678    type: bool
5679    value: @IS_NOT_EARLY_BETA_OR_EARLIER@
5680    mirror: always
5681#endif
5682
5683# If you use legacy Chinese IME which puts an ideographic space to composition
5684# string as placeholder, this pref might be useful.  If this is true and when
5685# web contents forcibly commits composition (e.g., moving focus), the
5686# ideographic space will be ignored (i.e., commits with empty string).
5687- name: intl.ime.remove_placeholder_character_at_commit
5688  type: bool
5689  value: false
5690  mirror: always
5691
5692#if defined(XP_MACOSX) || defined(MOZ_WIDGET_GTK)
5693# Whether text input without keyboard press nor IME composition should cause a
5694# set of composition events or not.  E.g., when you use Emoji picker on macOS,
5695# it inserts an Emoji character directly.  If set to true, `compositionstart`,
5696# `compositionupdate` and `compositionend` events will be fired, and the
5697# correspnding `beforeinput` events are not cancelable.  Otherwise, if set to
5698# false, any user input events are not exposed to web apps but only
5699# `beforeinput` event is fired as "insert text" as a cancelable event.
5700- name: intl.ime.use_composition_events_for_insert_text
5701  type: bool
5702  value: false
5703  mirror: always
5704#endif
5705
5706#---------------------------------------------------------------------------
5707# Prefs starting with "javascript."
5708#
5709# NOTE: SpiderMonkey starts up before `mirror: once` preferences are sealed and
5710#       we cannot use them (Bug 1698311). Instead, we use `mirror: always`
5711#       prefs but mark as `do_not_use_directly` and `LoadStartupJSPrefs` will
5712#       mirror them into SpiderMonkey.
5713#---------------------------------------------------------------------------
5714
5715# The JavaScript JIT compilers. These are read once on startup so a browser may
5716# need to be restarted if toggling them. In general each subsequent JIT depends
5717# on the ones before it being enabled.
5718- name: javascript.options.blinterp
5719  type: bool
5720  value: true
5721  mirror: always  # LoadStartupJSPrefs
5722  do_not_use_directly: true
5723
5724- name: javascript.options.baselinejit
5725  type: bool
5726  value: true
5727  mirror: always  # LoadStartupJSPrefs
5728  do_not_use_directly: true
5729
5730- name: javascript.options.ion
5731  type: bool
5732  value: true
5733  mirror: always  # LoadStartupJSPrefs
5734  do_not_use_directly: true
5735
5736# The irregexp JIT for regex evaluation.
5737- name: javascript.options.native_regexp
5738  type: bool
5739  value: true
5740  mirror: always  # LoadStartupJSPrefs
5741  do_not_use_directly: true
5742
5743# "Warm-up" thresholds at which we attempt to compile a script/function with
5744# the next JIT tier.
5745#
5746# NOTE: These must match JitOptions defaults.
5747- name: javascript.options.blinterp.threshold
5748  type: int32_t
5749  value: 10
5750  mirror: always  # LoadStartupJSPrefs
5751  do_not_use_directly: true
5752
5753- name: javascript.options.baselinejit.threshold
5754  type: int32_t
5755  value: 100
5756  mirror: always  # LoadStartupJSPrefs
5757  do_not_use_directly: true
5758
5759- name: javascript.options.ion.threshold
5760  type: int32_t
5761  value: 1500
5762  mirror: always  # LoadStartupJSPrefs
5763  do_not_use_directly: true
5764
5765# Enable off-main-thread Warp compilation.
5766- name: javascript.options.ion.offthread_compilation
5767  type: bool
5768  value: true
5769  mirror: always  # LoadStartupJSPrefs
5770  do_not_use_directly: true
5771
5772#ifdef DEBUG
5773  # Enable extra correctness checks in the JITs that are slow and only available
5774  # in debug builds.
5775-   name: javascript.options.jit.full_debug_checks
5776    type: bool
5777    value: false
5778    mirror: always  # LoadStartupJSPrefs
5779    do_not_use_directly: true
5780#endif
5781
5782# Heuristic threshold for Warp/Ion to decide that too many bailouts are
5783# happening and an IonScript should be discarded.
5784#
5785# NOTE: This must match JitOptions defaults.
5786- name: javascript.options.ion.frequent_bailout_threshold
5787  type: int32_t
5788  value: 10
5789  mirror: always  # LoadStartupJSPrefs
5790  do_not_use_directly: true
5791
5792# A threshold for Warp to decide whether a function can be inlined.
5793# If the size of a function is smaller than this threshold, then it
5794# may be inlined.
5795#
5796# NOTE: These must match JitOptions defaults.
5797- name: javascript.options.inlining_bytecode_max_length
5798  type: uint32_t
5799  value: 130
5800  mirror: always
5801  do_not_use_directly: true
5802
5803- name: javascript.options.compact_on_user_inactive
5804  type: bool
5805  value: true
5806  mirror: always
5807
5808# The default amount of time to wait from the user being idle to starting a
5809# shrinking GC. Measured in milliseconds.
5810- name: javascript.options.compact_on_user_inactive_delay
5811  type: uint32_t
5812#ifdef NIGHTLY_BUILD
5813  value: 15000
5814#else
5815  value: 300000
5816#endif
5817  mirror: always
5818
5819# Use better error message when accessing property of null or undefined.
5820- name: javascript.options.property_error_message_fix
5821  type: bool
5822  value: @IS_NIGHTLY_OR_DEV_EDITION@
5823  mirror: always
5824
5825# Support for weak references in JavaScript (WeakRef and FinalizationRegistry).
5826- name: javascript.options.weakrefs
5827  type: bool
5828  value: true
5829  mirror: always
5830
5831# Whether to expose the FinalizationRegistry.prototype.cleanupSome method.
5832- name: javascript.options.experimental.weakrefs.expose_cleanupSome
5833  type: bool
5834  value: false
5835  mirror: always
5836
5837#ifdef NIGHTLY_BUILD
5838  # Experimental support for Iterator Helpers in JavaScript.
5839-   name: javascript.options.experimental.iterator_helpers
5840    type: bool
5841    value: false
5842    mirror: always
5843
5844# Experimental support for class static blocks in JavaScript.
5845-   name: javascript.options.experimental.class_static_blocks
5846    type: bool
5847    value: false
5848    mirror: always
5849#endif  // NIGHTLY_BUILD
5850
5851  # Support for Private Fields in JavaScript.
5852- name: javascript.options.experimental.private_fields
5853  type: bool
5854  value: true
5855  mirror: always
5856
5857  # Experimental support for Private Methods in JavaScript.
5858- name: javascript.options.experimental.private_methods
5859  type: bool
5860  value: true
5861  mirror: always
5862
5863  # Experimental support for the ergonomic brand check proposal.
5864- name: javascript.options.experimental.ergonomic_brand_checks
5865  type: bool
5866  value: true
5867  mirror: always
5868
5869  # Experimental support for Top-level Await in JavaScript.
5870-   name: javascript.options.experimental.top_level_await
5871    type: bool
5872    value: true
5873    mirror: always
5874
5875# The amount of time we wait between a request to GC (due to leaving a page) and doing the actual GC, in ms.
5876- name: javascript.options.gc_delay
5877  type: uint32_t
5878  value: 4000
5879  mirror: always
5880
5881# The amount of time we wait from the first request to GC to actually doing the first GC, in ms.
5882- name: javascript.options.gc_delay.first
5883  type: uint32_t
5884  value: 10000
5885  mirror: always
5886
5887# After doing a zonal GC, wait this much time (in ms) and then do a full GC,
5888# unless one is already pending.
5889- name: javascript.options.gc_delay.full
5890  type: uint32_t
5891  value: 60000
5892  mirror: always
5893
5894# Maximum amount of time that should elapse between incremental GC slices, in ms.
5895- name: javascript.options.gc_delay.interslice
5896  type: uint32_t
5897  value: 100
5898  mirror: always
5899
5900# nsJSEnvironmentObserver observes the memory-pressure notifications and
5901# forces a garbage collection and cycle collection when it happens, if the
5902# appropriate pref is set.
5903- name: javascript.options.gc_on_memory_pressure
5904  type: bool
5905  # Disable the JS engine's GC on memory pressure, since we do one in the
5906  # mobile browser (bug 669346).
5907  # XXX: this value possibly should be changed, or the pref removed entirely.
5908  #      See bug 1450787.
5909  value: @IS_NOT_ANDROID@
5910  mirror: always
5911
5912# We allow at most MIN(max, MAX(NUM_CPUS / cpu_divisor, 1)) concurrent GCs
5913# between processes
5914- name: javascript.options.concurrent_multiprocess_gcs.cpu_divisor
5915  type: RelaxedAtomicUint32
5916  value: 4
5917  mirror: always
5918
5919# See 'cpu_divisor' above, 0 means UINT_32_MAX.
5920- name: javascript.options.concurrent_multiprocess_gcs.max
5921  type: RelaxedAtomicUint32
5922  value: 0
5923  mirror: always
5924
5925- name: javascript.options.mem.log
5926  type: bool
5927  value: false
5928  mirror: always
5929
5930- name: javascript.options.mem.notify
5931  type: bool
5932  value: false
5933  mirror: always
5934
5935# Whether the Parent process allocates and shares memory with all content
5936# processes. This is mirrored once, as the parent process will do this
5937# allocation early on.
5938- name: javascript.options.self_hosted.use_shared_memory
5939  type: bool
5940  value: true
5941  mirror: always  # LoadStartupJSPrefs
5942  do_not_use_directly: true
5943
5944# Streams API.
5945- name: javascript.options.streams
5946  type: RelaxedAtomicBool
5947  value: true
5948  mirror: always
5949
5950# Writable Streams API.  (The pref above must also be set to expose this.)
5951#
5952# Writable streams are still EXTRAORDINARILY BETA and it is well-known that
5953# things are likely pretty broken if you poke much at all, so if you flip this
5954# preference, don't report bugs against it just yet.
5955- name: javascript.options.writable_streams
5956  type: RelaxedAtomicBool
5957  value: false
5958  mirror: always
5959
5960- name: javascript.options.main_thread_stack_quota_cap
5961  type: uint32_t
5962#if defined(MOZ_ASAN)
5963  value: 6 * 1024 * 1024
5964#else
5965  value: 2 * 1024 * 1024
5966#endif
5967  mirror: always
5968
5969- name: javascript.options.wasm_optimizingjit
5970  type: bool
5971  value: true
5972  mirror: always
5973
5974#if defined(ENABLE_WASM_SIMD)
5975-   name: javascript.options.wasm_simd
5976    type: bool
5977    value: true
5978    mirror: always
5979#endif  // defined(ENABLE_WASM_SIMD)
5980
5981#if defined(ENABLE_WASM_RELAXED_SIMD)
5982-   name: javascript.options.wasm_relaxed_simd
5983    type: bool
5984    value: false
5985    mirror: always
5986#endif  // defined(ENABLE_WASM_RELAXED_SIMD)
5987
5988#if defined(ENABLE_WASM_EXTENDED_CONST)
5989-   name: javascript.options.wasm_extended_const
5990    type: bool
5991    value: @IS_NIGHTLY_BUILD@
5992    mirror: always
5993#endif  // defined(ENABLE_WASM_EXTENDED_CONST)
5994
5995#if defined(ENABLE_WASM_EXCEPTIONS)
5996-   name: javascript.options.wasm_exceptions
5997    type: bool
5998    value: false
5999    mirror: always
6000#endif // defined(ENABLE_WASM_EXCEPTIONS)
6001
6002#if defined(ENABLE_WASM_FUNCTION_REFERENCES)
6003-   name: javascript.options.wasm_function_references
6004    type: bool
6005    value: false
6006    mirror: always
6007#endif // defined(ENABLE_WASM_FUNCTION_REFERENCES)
6008
6009#if defined(ENABLE_WASM_GC)
6010-   name: javascript.options.wasm_gc
6011    type: bool
6012    value: false
6013    mirror: always
6014#endif // defined(ENABLE_WASM_GC)
6015
6016#if defined(ENABLE_WASM_SIMD_WORMHOLE) && defined(EARLY_BETA_OR_EARLIER)
6017  # This is x64-only and it would break unified macOS builds if
6018  # it were in all.js.  The feature rides the trains but not the
6019  # pref to control it; in late beta and release, it is only
6020  # available to privileged content.
6021-   name: javascript.options.wasm_simd_wormhole
6022    type: bool
6023    value: false
6024    mirror: always
6025#endif
6026
6027# Support for ArrayBuffers larger than 2 GB on 64-bit systems
6028- name: javascript.options.large_arraybuffers
6029  type: bool
6030  value: true
6031  mirror: always  # LoadStartupJSPrefs
6032  do_not_use_directly: true
6033
6034# Support for pretenuring allocations based on their allocation site.
6035- name: javascript.options.site_based_pretenuring
6036  type: bool
6037  value: true
6038  mirror: always  # LoadStartupJSPrefs
6039  do_not_use_directly: true
6040
6041#if !defined(JS_CODEGEN_MIPS32) && !defined(JS_CODEGEN_MIPS64)
6042  # Spectre security vulnerability mitigations for the JS JITs.
6043  #
6044  # NOTE: The MIPS backends do not support these mitigations (and generally
6045  #       do not need them). In that case, leave the pref unlisted with its
6046  #       default value of false.
6047-   name: javascript.options.spectre.index_masking
6048    type: bool
6049    value: true
6050    mirror: always  # LoadStartupJSPrefs
6051    do_not_use_directly: true
6052
6053-   name: javascript.options.spectre.object_mitigations
6054    type: bool
6055    value: true
6056    mirror: always  # LoadStartupJSPrefs
6057    do_not_use_directly: true
6058
6059-   name: javascript.options.spectre.string_mitigations
6060    type: bool
6061    value: true
6062    mirror: always  # LoadStartupJSPrefs
6063    do_not_use_directly: true
6064
6065-   name: javascript.options.spectre.value_masking
6066    type: bool
6067    value: true
6068    mirror: always  # LoadStartupJSPrefs
6069    do_not_use_directly: true
6070
6071-   name: javascript.options.spectre.jit_to_cxx_calls
6072    type: bool
6073    value: true
6074    mirror: always  # LoadStartupJSPrefs
6075    do_not_use_directly: true
6076#endif  // !defined(JS_CODEGEN_MIPSXX)
6077
6078# Whether to use the XPCOM thread pool for JS helper tasks.
6079- name: javascript.options.external_thread_pool
6080  type: bool
6081  value: true
6082  mirror: always
6083  do_not_use_directly: true
6084
6085# Whether to use fdlibm for Math.sin, Math.cos, and Math.tan. When
6086# privacy.resistFingerprinting is true, this pref is ignored and fdlibm is used
6087# anyway.
6088- name: javascript.options.use_fdlibm_for_sin_cos_tan
6089  type: bool
6090  value: false
6091  mirror: always
6092
6093#---------------------------------------------------------------------------
6094# Prefs starting with "layers."
6095#---------------------------------------------------------------------------
6096
6097# Whether to disable acceleration for all widgets.
6098- name: layers.acceleration.disabled
6099  type: bool
6100  value: false
6101  mirror: once
6102  do_not_use_directly: true
6103# Instead, use gfxConfig::IsEnabled(Feature::HW_COMPOSITING).
6104
6105- name: layers.acceleration.draw-fps
6106  type: RelaxedAtomicBool
6107  value: false
6108  mirror: always
6109
6110- name: layers.acceleration.draw-fps.print-histogram
6111  type: RelaxedAtomicBool
6112  value: false
6113  mirror: always
6114
6115- name: layers.acceleration.draw-fps.write-to-file
6116  type: RelaxedAtomicBool
6117  value: false
6118  mirror: always
6119
6120# Whether to force acceleration on, ignoring blacklists.
6121
6122# bug 838603 -- on Android, accidentally blacklisting OpenGL layers
6123# means a startup crash for everyone.
6124# Temporarily force-enable GL compositing.  This is default-disabled
6125# deep within the bowels of the widgetry system.  Remove me when GL
6126# compositing isn't default disabled in widget/android.
6127- name: layers.acceleration.force-enabled
6128  type: bool
6129  value: @IS_ANDROID@
6130  mirror: once
6131  do_not_use_directly: true
6132
6133# Whether we allow AMD switchable graphics.
6134- name: layers.amd-switchable-gfx.enabled
6135  type: bool
6136  value: true
6137  mirror: once
6138
6139# Whether to use async panning and zooming.
6140- name: layers.async-pan-zoom.enabled
6141  type: bool
6142  value: true
6143  mirror: once
6144  do_not_use_directly: true
6145
6146# Preference that when switched at runtime will run a series of benchmarks
6147# and output the result to stderr.
6148- name: layers.bench.enabled
6149  type: RelaxedAtomicBool
6150  value: false
6151  mirror: always
6152
6153- name: layers.bufferrotation.enabled
6154  type: bool
6155  value: true
6156  mirror: once
6157
6158- name: layers.child-process-shutdown
6159  type: RelaxedAtomicBool
6160  value: true
6161  mirror: always
6162
6163- name: layers.componentalpha.enabled
6164  type: bool
6165#ifdef MOZ_GFX_OPTIMIZE_MOBILE
6166  # Nb: we ignore this pref if MOZ_GFX_OPTIMIZE_MOBILE is defined, as if this
6167  # pref was always false. But we go to the effort of setting it to false so
6168  # that telemetry's reporting of the pref value is more likely to reflect what
6169  # the code is doing.
6170  value: false
6171#else
6172  value: true
6173#endif
6174  mirror: once
6175  do_not_use_directly: true
6176
6177- name: layers.d3d11.force-warp
6178  type: bool
6179  value: false
6180  mirror: once
6181
6182- name: layers.d3d11.enable-blacklist
6183  type: bool
6184  value: true
6185  mirror: once
6186
6187# Enable DEAA antialiasing for transformed layers in the compositor.
6188- name: layers.deaa.enabled
6189  type: RelaxedAtomicBool
6190#if defined(MOZ_WIDGET_ANDROID)
6191  value: false
6192#else
6193  value: true
6194#endif
6195  mirror: always
6196
6197- name: layers.draw-bigimage-borders
6198  type: RelaxedAtomicBool
6199  value: false
6200  mirror: always
6201
6202- name: layers.draw-borders
6203  type: RelaxedAtomicBool
6204  value: false
6205  mirror: always
6206
6207- name: layers.draw-tile-borders
6208  type: RelaxedAtomicBool
6209  value: false
6210  mirror: always
6211
6212- name: layers.draw-layer-info
6213  type: RelaxedAtomicBool
6214  value: false
6215  mirror: always
6216
6217- name: layers.dump
6218  type: RelaxedAtomicBool
6219  value: false
6220  mirror: always
6221
6222# If we're dumping layers, also dump the texture data
6223- name: layers.dump-texture
6224  type: RelaxedAtomicBool
6225  value: false
6226  mirror: always
6227
6228#ifdef MOZ_DUMP_PAINTING
6229-   name: layers.dump-decision
6230    type: RelaxedAtomicBool
6231    value: false
6232    mirror: always
6233#endif
6234
6235- name: layers.dump-client-layers
6236  type: RelaxedAtomicBool
6237  value: false
6238  mirror: always
6239
6240- name: layers.dump-host-layers
6241  type: RelaxedAtomicBool
6242  value: false
6243  mirror: always
6244
6245- name: layers.compositing-tiles.width
6246  type: RelaxedAtomicInt32
6247  value: 1024
6248  mirror: always
6249
6250- name: layers.compositing-tiles.height
6251  type: RelaxedAtomicInt32
6252  value: 1024
6253  mirror: always
6254
6255# 0 is "no change" for contrast, positive values increase it, negative values
6256# decrease it until we hit mid gray at -1 contrast, after that it gets weird.
6257- name: layers.effect.contrast
6258  type: AtomicFloat
6259  value: 0.0f
6260  mirror: always
6261
6262- name: layers.effect.grayscale
6263  type: RelaxedAtomicBool
6264  value: false
6265  mirror: always
6266
6267- name: layers.effect.invert
6268  type: RelaxedAtomicBool
6269  value: false
6270  mirror: always
6271
6272- name: layers.enable-tiles
6273  type: bool
6274#if defined(XP_MACOSX) || defined (XP_OPENBSD)
6275  value: true
6276#else
6277  value: false
6278#endif
6279  mirror: once
6280
6281- name: layers.enable-tiles-if-skia-pomtp
6282  type: bool
6283#if defined(XP_WIN)
6284  value: true
6285#else
6286  value: false
6287#endif
6288  mirror: once
6289
6290- name: layers.flash-borders
6291  type: RelaxedAtomicBool
6292  value: false
6293  mirror: always
6294
6295# Force all possible layers to be always active layers.
6296- name: layers.force-active
6297  type: bool
6298  value: false
6299  mirror: always
6300
6301- name: layers.force-shmem-tiles
6302  type: bool
6303  value: false
6304  mirror: once
6305
6306- name: layers.draw-mask-debug
6307  type: RelaxedAtomicBool
6308  value: false
6309  mirror: always
6310
6311- name: layers.force-synchronous-resize
6312  type: RelaxedAtomicBool
6313  value: true
6314  mirror: always
6315
6316# Whether to enable arbitrary layer geometry for OpenGL compositor.
6317- name: layers.geometry.opengl.enabled
6318  type: RelaxedAtomicBool
6319  value: true
6320  mirror: always
6321
6322# Whether to enable arbitrary layer geometry for Basic compositor.
6323- name: layers.geometry.basic.enabled
6324  type: RelaxedAtomicBool
6325  value: true
6326  mirror: always
6327
6328 # Whether to enable arbitrary layer geometry for DirectX compositor.
6329- name: layers.geometry.d3d11.enabled
6330  type: RelaxedAtomicBool
6331  value: true
6332  mirror: always
6333
6334- name: layers.gpu-process.allow-software
6335  type: bool
6336#if defined(XP_WIN)
6337  value: true
6338#else
6339  value: false
6340#endif
6341  mirror: once
6342
6343- name: layers.gpu-process.enabled
6344  type: bool
6345#if defined(XP_WIN)
6346  value: true
6347#else
6348  value: false
6349#endif
6350  mirror: once
6351
6352- name: layers.gpu-process.force-enabled
6353  type: bool
6354  value: false
6355  mirror: once
6356
6357- name: layers.gpu-process.ipc_reply_timeout_ms
6358  type: int32_t
6359  value: 10000
6360  mirror: once
6361
6362# How many unstable GPU process restarts we allow for a given configuration.
6363- name: layers.gpu-process.max_restarts
6364  type: RelaxedAtomicInt32
6365#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
6366  #if defined(NIGHTLY_BUILD)
6367  value: 6
6368  #else
6369  value: 3
6370  #endif
6371#else
6372  value: 1
6373#endif
6374  mirror: always
6375
6376# How many frames we must render before declaring the GPU process stable, and
6377# allow restarts without it counting against our maximum restarts.
6378- name: layers.gpu-process.stable.frame-threshold
6379  type: RelaxedAtomicUint32
6380  value: 10
6381  mirror: always
6382
6383# How many milliseconds the GPU process must have lived before we accept that
6384# it is stable, and allow restarts without it counting against our maximum
6385# restarts.
6386- name: layers.gpu-process.stable.min-uptime-ms
6387  type: RelaxedAtomicInt32
6388  value: 4 * 60000
6389  mirror: always
6390
6391# Note: This pref will only be used if it is less than layers.gpu-process.max_restarts.
6392- name: layers.gpu-process.max_restarts_with_decoder
6393  type: RelaxedAtomicInt32
6394  value: 0
6395  mirror: always
6396
6397- name: layers.gpu-process.startup_timeout_ms
6398  type: int32_t
6399  value: 5000
6400  mirror: once
6401
6402- name: layers.gpu-process.crash-also-crashes-browser
6403  type: bool
6404  value: false
6405  mirror: always
6406
6407- name: layers.low-precision-buffer
6408  type: RelaxedAtomicBool
6409  value: false
6410  mirror: always
6411
6412- name: layers.low-precision-opacity
6413  type: AtomicFloat
6414  value: 1.0f
6415  mirror: always
6416
6417- name: layers.low-precision-resolution
6418  type: AtomicFloat
6419  value: 0.25f
6420  mirror: always
6421
6422# Max number of layers per container. See Overwrite in mobile prefs.
6423- name: layers.max-active
6424  type: RelaxedAtomicInt32
6425  value: -1
6426  mirror: always
6427
6428
6429# Whether to animate simple opacity and transforms on the compositor.
6430- name: layers.offmainthreadcomposition.async-animations
6431  type: bool
6432  value: true
6433  mirror: always
6434
6435# Whether to log information about off main thread animations to stderr.
6436- name: layers.offmainthreadcomposition.log-animations
6437  type: bool
6438  value: false
6439  mirror: always
6440
6441- name: layers.offmainthreadcomposition.force-disabled
6442  type: bool
6443  value: false
6444  mirror: once
6445
6446# Compositor target frame rate. NOTE: If vsync is enabled the compositor
6447# frame rate will still be capped.
6448# -1 -> default (match layout.frame_rate or 60 FPS)
6449# 0  -> full-tilt mode: Recomposite even if not transaction occured.
6450- name: layers.offmainthreadcomposition.frame-rate
6451  type: RelaxedAtomicInt32
6452  value: -1
6453  mirror: always
6454
6455- name: layers.omtp.capture-limit
6456  type: uint32_t
6457  value: 25 * 1024 * 1024
6458  mirror: once
6459
6460- name: layers.omtp.dump-capture
6461  type: RelaxedAtomicBool
6462  value: false
6463  mirror: always
6464
6465- name: layers.omtp.paint-workers
6466  type: int32_t
6467  value: -1
6468  mirror: once
6469
6470- name: layers.omtp.release-capture-on-main-thread
6471  type: RelaxedAtomicBool
6472  value: false
6473  mirror: always
6474
6475- name: layers.orientation.sync.timeout
6476  type: RelaxedAtomicUint32
6477  value: (uint32_t)0
6478  mirror: always
6479
6480#ifdef XP_WIN
6481-   name: layers.prefer-opengl
6482    type: bool
6483    value: false
6484    mirror: once
6485#endif
6486
6487- name: layers.progressive-paint
6488  type: RelaxedAtomicBool
6489  value: false
6490  mirror: always
6491  do_not_use_directly: true
6492
6493# Copy-on-write canvas.
6494- name: layers.shared-buffer-provider.enabled
6495  type: RelaxedAtomicBool
6496  value: true
6497  mirror: always
6498
6499- name: layers.single-tile.enabled
6500  type: RelaxedAtomicBool
6501  value: true
6502  mirror: always
6503
6504# We allow for configurable and rectangular tile size to avoid wasting memory
6505# on devices whose screen size does not align nicely to the default tile size.
6506# Although layers can be any size, they are often the same size as the screen,
6507# especially for width.
6508- name: layers.tile-width
6509  type: int32_t
6510  value: 512
6511  mirror: once
6512
6513- name: layers.tile-height
6514  type: int32_t
6515  value: 512
6516  mirror: once
6517
6518- name: layers.tile-initial-pool-size
6519  type: uint32_t
6520  value: (uint32_t)50
6521  mirror: once
6522
6523- name: layers.tile-pool-unused-size
6524  type: uint32_t
6525  value: (uint32_t)10
6526  mirror: once
6527
6528- name: layers.tile-pool-shrink-timeout
6529  type: uint32_t
6530  value: (uint32_t)50
6531  mirror: once
6532
6533- name: layers.tile-pool-clear-timeout
6534  type: uint32_t
6535  value: (uint32_t)5000
6536  mirror: once
6537
6538# If this is set the tile size will only be treated as a suggestion.
6539# On B2G we will round this to the stride of the underlying allocation.
6540# On any platform we may later use the screen size and ignore
6541# tile-width/tile-height entirely. Its recommended to turn this off
6542# if you change the tile size.
6543- name: layers.tiles.adjust
6544  type: bool
6545  value: true
6546  mirror: once
6547
6548- name: layers.tiles.edge-padding
6549  type: bool
6550  value: @IS_ANDROID@
6551  mirror: once
6552
6553- name: layers.tiles.fade-in.enabled
6554  type: RelaxedAtomicBool
6555  value: false
6556  mirror: always
6557
6558- name: layers.tiles.fade-in.duration-ms
6559  type: RelaxedAtomicUint32
6560  value: 250
6561  mirror: always
6562
6563- name: layers.tiles.retain-back-buffer
6564  type: RelaxedAtomicBool
6565  value: true
6566  mirror: always
6567
6568- name: layers.transaction.warning-ms
6569  type: RelaxedAtomicUint32
6570  value: 200
6571  mirror: always
6572
6573- name: layers.uniformity-info
6574  type: bool
6575  value: false
6576  mirror: once
6577
6578- name: layers.use-image-offscreen-surfaces
6579  type: bool
6580  value: true
6581  mirror: once
6582
6583- name: layers.recycle-allocator-rdd
6584  type: bool
6585  value: true
6586  mirror: once
6587
6588- name: layers.iosurfaceimage.recycle-limit
6589  type: RelaxedAtomicUint32
6590  value: 15
6591  mirror: always
6592
6593#---------------------------------------------------------------------------
6594# Prefs starting with "layout."
6595#---------------------------------------------------------------------------
6596
6597# Debug-only pref to force enable the AccessibleCaret. If you want to
6598# control AccessibleCaret by mouse, you'll need to set
6599# "layout.accessiblecaret.hide_carets_for_mouse_input" to false.
6600- name: layout.accessiblecaret.enabled
6601  type: bool
6602  value: false
6603  mirror: always
6604
6605# Enable the accessible caret on platforms/devices
6606# that we detect have touch support. Note that this pref is an
6607# additional way to enable the accessible carets, rather than
6608# overriding the layout.accessiblecaret.enabled pref.
6609- name: layout.accessiblecaret.enabled_on_touch
6610  type: bool
6611  value: true
6612  mirror: always
6613
6614# By default, carets become tilt only when they are overlapping.
6615- name: layout.accessiblecaret.always_tilt
6616  type: bool
6617  value: false
6618  mirror: always
6619
6620# Show caret in cursor mode when long tapping on an empty content. This
6621# also changes the default update behavior in cursor mode, which is based
6622# on the emptiness of the content, into something more heuristic. See
6623# AccessibleCaretManager::UpdateCaretsForCursorMode() for the details.
6624- name: layout.accessiblecaret.caret_shown_when_long_tapping_on_empty_content
6625  type: bool
6626  value: false
6627  mirror: always
6628
6629# 0 = by default, always hide carets for selection changes due to JS calls.
6630# 1 = update any visible carets for selection changes due to JS calls,
6631#     but don't show carets if carets are hidden.
6632# 2 = always show carets for selection changes due to JS calls.
6633- name: layout.accessiblecaret.script_change_update_mode
6634  type: int32_t
6635  value: 0
6636  mirror: always
6637
6638# Allow one caret to be dragged across the other caret without any limitation.
6639# This matches the built-in convention for all desktop platforms.
6640- name: layout.accessiblecaret.allow_dragging_across_other_caret
6641  type: bool
6642  value: true
6643  mirror: always
6644
6645# Optionally provide haptic feedback on long-press selection events.
6646- name: layout.accessiblecaret.hapticfeedback
6647  type: bool
6648  value: false
6649  mirror: always
6650
6651# Smart phone-number selection on long-press is not enabled by default.
6652- name: layout.accessiblecaret.extend_selection_for_phone_number
6653  type: bool
6654  value: false
6655  mirror: always
6656
6657# Keep the accessible carets hidden when the user is using mouse input (as
6658# opposed to touch/pen/etc.).
6659- name: layout.accessiblecaret.hide_carets_for_mouse_input
6660  type: bool
6661  value: true
6662  mirror: always
6663
6664# CSS attributes (width, height, margin-left) of the AccessibleCaret in CSS
6665# pixels.
6666- name: layout.accessiblecaret.width
6667  type: float
6668  value: 34.0f
6669  mirror: always
6670
6671- name: layout.accessiblecaret.height
6672  type: float
6673  value: 36.0f
6674  mirror: always
6675
6676- name: layout.accessiblecaret.margin-left
6677  type: float
6678  value: -18.5f
6679  mirror: always
6680
6681- name: layout.accessiblecaret.transition-duration
6682  type: float
6683  value: 250.0f
6684  mirror: always
6685
6686# Simulate long tap events to select words. Mainly used in manual testing
6687# with mouse.
6688- name: layout.accessiblecaret.use_long_tap_injector
6689  type: bool
6690  value: false
6691  mirror: always
6692
6693# Whether we should layerize all animated images (if otherwise possible).
6694- name: layout.animated-image-layers.enabled
6695  type: bool
6696  value: false
6697  mirror: always
6698
6699# One of several prefs affecting the maximum area to pre-render when animating
6700# a large element on the compositor.
6701# This pref enables transform (and transform like properties) animations on a
6702# large element run on the compositor with rendering partial area of the
6703# element on the main thread instead of rendering the whole area.  Once the
6704# animation tried to composite out of the partial rendered area, the animation
6705# is rendered again with the latest visible partial area.
6706- name: layout.animation.prerender.partial
6707  type: RelaxedAtomicBool
6708  value: @IS_NIGHTLY_BUILD@
6709  mirror: always
6710
6711# One of several prefs affecting the maximum area to pre-render when animating
6712# a large element on the compositor.
6713# This value is applied to both x and y axes and a perfect square contructed
6714# by the greater axis value which will be capped by the absolute limits is used
6715# for the partial pre-render area.
6716- name: layout.animation.prerender.viewport-ratio-limit
6717  type: AtomicFloat
6718  value: 1.125f
6719  mirror: always
6720
6721# One of several prefs affecting the maximum area to pre-render when animating
6722# a large element on the compositor.
6723- name: layout.animation.prerender.absolute-limit-x
6724  type: RelaxedAtomicUint32
6725  value: 4096
6726  mirror: always
6727
6728# One of several prefs affecting the maximum area to pre-render when animating
6729# a large element on the compositor.
6730- name: layout.animation.prerender.absolute-limit-y
6731  type: RelaxedAtomicUint32
6732  value: 4096
6733  mirror: always
6734
6735# Test-only pref, if this is true, partial pre-rendered transform animations
6736# get stuck when it reaches to the pre-rendered boundaries and the pre-render
6737# region is never updated.
6738- name: layout.animation.prerender.partial.jank
6739  type: RelaxedAtomicBool
6740  value: false
6741  mirror: always
6742
6743# Whether non-standard caption-side values are enabled
6744- name: layout.css.caption-side-non-standard.enabled
6745  type: RelaxedAtomicBool
6746  value: false
6747  mirror: always
6748  rust: true
6749
6750# Whether Constructable Stylesheets are enabled in script.
6751- name: layout.css.constructable-stylesheets.enabled
6752  type: bool
6753  value: false
6754  mirror: always
6755
6756# Should we look for counter ancestor scopes first?
6757- name: layout.css.counter-ancestor-scope.enabled
6758  type: bool
6759  value: true
6760  mirror: always
6761
6762# Whether we get notified of history queries for visited even if unvisited.
6763- name: layout.css.notify-of-unvisited
6764  type: RelaxedAtomicBool
6765  value: true
6766  mirror: always
6767
6768# Whether we always restyle / repaint as a result of a visited query
6769- name: layout.css.always-repaint-on-unvisited
6770  type: RelaxedAtomicBool
6771  value: true
6772  mirror: always
6773
6774# Make `zoom` a `transform` + `transform-origin` alias.
6775- name: layout.css.zoom-transform-hack.enabled
6776  type: RelaxedAtomicBool
6777  value: false
6778  mirror: always
6779  rust: true
6780
6781# Whether the `:autofill` pseudo-class is exposed to content.
6782- name: layout.css.autofill.enabled
6783  type: RelaxedAtomicBool
6784  value: true
6785  mirror: always
6786  rust: true
6787
6788# Whether the `:-moz-submit-invalid` pseudo-class is exposed to content.
6789- name: layout.css.moz-submit-invalid.enabled
6790  type: RelaxedAtomicBool
6791  value: false
6792  mirror: always
6793  rust: true
6794
6795# Whether the `-moz-control-character-visibility` property is exposed to
6796# content.
6797#
6798# Only for testing purposes.
6799- name: layout.css.moz-control-character-visibility.enabled
6800  type: RelaxedAtomicBool
6801  value: false
6802  mirror: always
6803  rust: true
6804
6805# Whether the `accent-color` css property is enabled.
6806- name: layout.css.accent-color.enabled
6807  type: RelaxedAtomicBool
6808  value: @IS_NIGHTLY_BUILD@
6809  mirror: always
6810  rust: true
6811
6812# Whether the `aspect-ratio` in css-sizing-4 is enabled.
6813- name: layout.css.aspect-ratio.enabled
6814  type: bool
6815  value: true
6816  mirror: always
6817  rust: true
6818
6819# Is the codepath for using cached scrollbar styles enabled?
6820- name: layout.css.cached-scrollbar-styles.enabled
6821  type: bool
6822  value: true
6823  mirror: always
6824
6825# Is path() supported in clip-path?
6826- name: layout.css.clip-path-path.enabled
6827  type: RelaxedAtomicBool
6828  value: true
6829  mirror: always
6830  rust: true
6831
6832# Is the image-set() function enabled?
6833- name: layout.css.image-set.enabled
6834  type: RelaxedAtomicBool
6835  value: true
6836  mirror: always
6837  rust: true
6838
6839# Are implicit tracks in computed grid templates serialized?
6840- name: layout.css.serialize-grid-implicit-tracks
6841  type: RelaxedAtomicBool
6842  value: true
6843  mirror: always
6844
6845# Whether the bloom filter optimization is applied to attribute names too, not
6846# only classes / id / namespaces / etc.
6847- name: layout.css.bloom-filter-attribute-names.enabled
6848  type: RelaxedAtomicBool
6849  value: true
6850  mirror: always
6851  rust: true
6852
6853# Set the number of device pixels per CSS pixel. A value <= 0 means choose
6854# automatically based on user settings for the platform (e.g., "UI scale factor"
6855# on Mac). A positive value is used as-is. This effectively controls the size
6856# of a CSS "px". This is only used for windows on the screen, not for printing.
6857- name: layout.css.devPixelsPerPx
6858  type: AtomicFloat
6859  value: -1.0f
6860  mirror: always
6861
6862# Is support for CSS backdrop-filter enabled?
6863- name: layout.css.backdrop-filter.enabled
6864  type: bool
6865  value: false
6866  mirror: always
6867
6868# Should stray control characters be rendered visibly?
6869- name: layout.css.control-characters.visible
6870  type: RelaxedAtomicBool
6871  value: @IS_NOT_RELEASE_OR_BETA@
6872  mirror: always
6873  rust: true
6874
6875# Is support for GeometryUtils.convert*FromNode enabled?
6876- name: layout.css.convertFromNode.enabled
6877  type: bool
6878  value: @IS_NOT_RELEASE_OR_BETA@
6879  mirror: always
6880
6881- name: layout.css.cross-fade.enabled
6882  type: RelaxedAtomicBool
6883  value: false
6884  mirror: always
6885  rust: true
6886
6887# Is support for color-mix on content enabled?
6888- name: layout.css.color-mix.enabled
6889  type: RelaxedAtomicBool
6890  value: @IS_NIGHTLY_BUILD@
6891  mirror: always
6892  rust: true
6893
6894# Is support for DOMMatrix enabled?
6895- name: layout.css.DOMMatrix.enabled
6896  type: RelaxedAtomicBool
6897  value: true
6898  mirror: always
6899
6900# Is support for DOMQuad enabled?
6901- name: layout.css.DOMQuad.enabled
6902  type: RelaxedAtomicBool
6903  value: true
6904  mirror: always
6905
6906# Is support for DOMPoint enabled?
6907- name: layout.css.DOMPoint.enabled
6908  type: RelaxedAtomicBool
6909  value: true
6910  mirror: always
6911
6912# Is support for d property for SVG path element?
6913- name: layout.css.d-property.enabled
6914  type: bool
6915  value: @IS_NIGHTLY_BUILD@
6916  mirror: always
6917
6918# Are we emulating -moz-{inline}-box layout using CSS flexbox?
6919- name: layout.css.emulate-moz-box-with-flex
6920  type: bool
6921  value: false
6922  mirror: always
6923
6924# Is support for fit-content() enabled?
6925- name: layout.css.fit-content-function.enabled
6926  type: RelaxedAtomicBool
6927  value: false
6928  mirror: always
6929  rust: true
6930
6931# Is support for the font-display @font-face descriptor enabled?
6932- name: layout.css.font-display.enabled
6933  type: RelaxedAtomicBool
6934  value: true
6935  mirror: always
6936  rust: true
6937
6938# Is support for document.fonts enabled?
6939- name: layout.css.font-loading-api.enabled
6940  type: bool
6941  value: true
6942  mirror: always
6943
6944# Is support for the @font-face metrics override descriptors enabled?
6945- name: layout.css.font-metrics-overrides.enabled
6946  type: RelaxedAtomicBool
6947  value: true
6948  mirror: always
6949  rust: true
6950
6951# Is support for variation fonts enabled?
6952- name: layout.css.font-variations.enabled
6953  type: RelaxedAtomicBool
6954  value: true
6955  mirror: always
6956  rust: true
6957
6958# Is support for the size-adjust @font-face descriptor enabled?
6959- name: layout.css.size-adjust.enabled
6960  type: RelaxedAtomicBool
6961  value: @IS_NIGHTLY_BUILD@
6962  mirror: always
6963  rust: true
6964
6965# Is the optional adjustment-basis value for font-size-adjust enabled?
6966- name: layout.css.font-size-adjust.basis.enabled
6967  type: RelaxedAtomicBool
6968  value: @IS_NIGHTLY_BUILD@
6969  mirror: always
6970  rust: true
6971
6972# Visibility level of font families available to CSS font-matching:
6973#   1 - only base system fonts
6974#   2 - also fonts from optional language packs
6975#   3 - also user-installed fonts
6976- name: layout.css.font-visibility.level
6977  type: RelaxedAtomicInt32
6978  value: 3
6979  mirror: always
6980
6981# Is support for GeometryUtils.getBoxQuads enabled?
6982- name: layout.css.getBoxQuads.enabled
6983  type: bool
6984  value: @IS_NOT_RELEASE_OR_BETA@
6985  mirror: always
6986
6987# Is support for CSS "grid-template-{columns,rows}: subgrid X" enabled?
6988- name: layout.css.grid-template-subgrid-value.enabled
6989  type: RelaxedAtomicBool
6990  value: true
6991  mirror: always
6992  rust: true
6993
6994# Is support for CSS masonry layout enabled?
6995- name: layout.css.grid-template-masonry-value.enabled
6996  type: RelaxedAtomicBool
6997  value: @IS_NIGHTLY_BUILD@
6998  mirror: always
6999  rust: true
7000
7001# Is support for CSS individual transform enabled?
7002- name: layout.css.individual-transform.enabled
7003  type: bool
7004  value: true
7005  mirror: always
7006
7007# Is support for CSS initial-letter property enabled?
7008- name: layout.css.initial-letter.enabled
7009  type: bool
7010  value: false
7011  mirror: always
7012
7013# Pref to control whether line-height: -moz-block-height is exposed to content.
7014- name: layout.css.line-height-moz-block-height.content.enabled
7015  type: RelaxedAtomicBool
7016  value: false
7017  mirror: always
7018  rust: true
7019
7020# Is support for motion-path enabled?
7021- name: layout.css.motion-path.enabled
7022  type: bool
7023  value: true
7024  mirror: always
7025
7026# Is support for motion-path ray() enabled?
7027- name: layout.css.motion-path-ray.enabled
7028  type: RelaxedAtomicBool
7029  value: @IS_NIGHTLY_BUILD@
7030  mirror: always
7031  rust: true
7032
7033# Pref to control whether the ::marker property restrictions defined in [1]
7034# apply.
7035#
7036# [1]: https://drafts.csswg.org/css-pseudo-4/#selectordef-marker
7037- name: layout.css.marker.restricted
7038  type: RelaxedAtomicBool
7039  value: true
7040  mirror: always
7041  rust: true
7042
7043# Is support for math-style enabled?
7044- name: layout.css.math-style.enabled
7045  type: RelaxedAtomicBool
7046  value: @IS_NIGHTLY_BUILD@
7047  mirror: always
7048  rust: true
7049
7050# Is support for math-depth enabled?
7051# This must not be enabled until implementation is complete (see bug 1667090).
7052- name: layout.css.math-depth.enabled
7053  type: RelaxedAtomicBool
7054  value: false
7055  mirror: always
7056  rust: true
7057
7058# Pref to control whether @-moz-document rules are enabled in content pages.
7059- name: layout.css.moz-document.content.enabled
7060  type: RelaxedAtomicBool
7061  value: false
7062  mirror: always
7063  rust: true
7064
7065# Is -moz-osx-font-smoothing enabled? (Only supported in OSX builds)
7066- name: layout.css.osx-font-smoothing.enabled
7067  type: bool
7068#if defined(XP_MACOSX)
7069  value: true
7070#else
7071  value: false
7072#endif
7073  mirror: always
7074
7075# Is support for CSS overflow-clip-box enabled for non-UA sheets?
7076- name: layout.css.overflow-clip-box.enabled
7077  type: bool
7078  value: false
7079  mirror: always
7080
7081# Is support for overscroll-behavior enabled?
7082- name: layout.css.overscroll-behavior.enabled
7083  type: bool
7084  value: true
7085  mirror: always
7086
7087- name: layout.css.overflow-logical.enabled
7088  type: bool
7089  value: true
7090  mirror: always
7091
7092# Enables parsing size properties in page at-rules
7093- name: layout.css.page-size.enabled
7094  type: RelaxedAtomicBool
7095  value: false
7096  mirror: always
7097  rust: true
7098
7099# Dictates whether or not the prefers contrast media query will be
7100# usable.
7101#   true: prefers-contrast will toggle based on OS and browser settings.
7102#   false: prefers-contrast will only parse and toggle in the browser
7103#   chrome and ua.
7104- name: layout.css.prefers-contrast.enabled
7105  type: RelaxedAtomicBool
7106  value: false
7107  mirror: always
7108  rust: true
7109
7110# Dictates whether or not the forced-colors media query is enabled.
7111- name: layout.css.forced-colors.enabled
7112  type: RelaxedAtomicBool
7113  value: true
7114  mirror: always
7115  rust: true
7116
7117# Is support for -moz-prefixed animation properties enabled?
7118- name: layout.css.prefixes.animations
7119  type: bool
7120  value: true
7121  mirror: always
7122
7123# Is support for -moz-border-image enabled?
7124- name: layout.css.prefixes.border-image
7125  type: bool
7126  value: true
7127  mirror: always
7128
7129# Is support for -moz-box-sizing enabled?
7130- name: layout.css.prefixes.box-sizing
7131  type: bool
7132  value: true
7133  mirror: always
7134
7135# Is support for -moz-prefixed multi-column properties (including column-gap) enabled?
7136- name: layout.css.prefixes.columns
7137  type: bool
7138  value: false
7139  mirror: always
7140
7141# Is support for -moz-prefixed font feature properties enabled?
7142- name: layout.css.prefixes.font-features
7143  type: bool
7144  value: true
7145  mirror: always
7146
7147# Is support for -moz-prefixed transform properties enabled?
7148- name: layout.css.prefixes.transforms
7149  type: bool
7150  value: true
7151  mirror: always
7152
7153# Is support for -moz-prefixed transition properties enabled?
7154- name: layout.css.prefixes.transitions
7155  type: bool
7156  value: true
7157  mirror: always
7158
7159# Is CSS error reporting enabled?
7160- name: layout.css.report_errors
7161  type: bool
7162  value: true
7163  mirror: always
7164
7165- name: layout.css.resizeobserver.enabled
7166  type: bool
7167  value: true
7168  mirror: always
7169
7170# Are inter-character ruby annotations enabled?
7171- name: layout.css.ruby.intercharacter.enabled
7172  type: bool
7173  value: false
7174  mirror: always
7175
7176- name: layout.css.scroll-behavior.damping-ratio
7177  type: AtomicFloat
7178  value: 1.0f
7179  mirror: always
7180
7181- name: layout.css.supports-selector.enabled
7182  type: RelaxedAtomicBool
7183  value: true
7184  mirror: always
7185  rust: true
7186
7187# Is CSSOM-View scroll-behavior and its MSD smooth scrolling enabled?
7188- name: layout.css.scroll-behavior.enabled
7189  type: RelaxedAtomicBool
7190  value: true
7191  mirror: always
7192
7193# Tuning of the smooth scroll motion used by CSSOM-View scroll-behavior.
7194# Spring-constant controls the strength of the simulated MSD
7195# (Mass-Spring-Damper).
7196- name: layout.css.scroll-behavior.spring-constant
7197  type: AtomicFloat
7198  value: 250.0f
7199  mirror: always
7200
7201# When selecting the snap point for CSS scroll snapping, the velocity of the
7202# scroll frame is clamped to this speed, in CSS pixels / s.
7203- name: layout.css.scroll-snap.prediction-max-velocity
7204  type: RelaxedAtomicInt32
7205  value: 2000
7206  mirror: always
7207
7208#  When selecting the snap point for CSS scroll snapping, the velocity of the
7209# scroll frame is integrated over this duration, in seconds.  The snap point
7210# best suited for this position is selected, enabling the user to perform fling
7211# gestures.
7212- name: layout.css.scroll-snap.prediction-sensitivity
7213  type: AtomicFloat
7214  value: 0.750f
7215  mirror: always
7216
7217# Set the threshold distance in CSS pixels below which scrolling will snap to
7218# an edge, when scroll snapping is set to "proximity".
7219- name: layout.css.scroll-snap.proximity-threshold
7220  type: RelaxedAtomicInt32
7221  value: 200
7222  mirror: always
7223
7224# Is steps(jump-*) supported in easing functions?
7225- name: layout.css.step-position-jump.enabled
7226  type: RelaxedAtomicBool
7227  value: true
7228  mirror: always
7229  rust: true
7230
7231# W3C touch-action css property (related to touch and pointer events)
7232# Note that we turn this on even on platforms/configurations where touch
7233# events are not supported (e.g. OS X, or Windows with e10s disabled). For
7234# those platforms we don't handle touch events anyway so it's conceptually
7235# a no-op.
7236- name: layout.css.touch_action.enabled
7237  type: RelaxedAtomicBool
7238  value: true
7239  mirror: always
7240
7241# Are counters for implemented CSS properties enabled?
7242- name: layout.css.use-counters.enabled
7243  type: bool
7244  value: true
7245  mirror: always
7246
7247# Are counters for unimplemented CSS properties enabled?
7248- name: layout.css.use-counters-unimplemented.enabled
7249  type: RelaxedAtomicBool
7250  value: true
7251  mirror: always
7252  rust: true
7253
7254# Should the :visited selector ever match (otherwise :link matches instead)?
7255- name: layout.css.visited_links_enabled
7256  type: bool
7257  value: true
7258  mirror: always
7259
7260- name: layout.css.xul-display-values.content.enabled
7261  type: RelaxedAtomicBool
7262  value: false
7263  mirror: always
7264  rust: true
7265
7266# Pref to control whether display: -moz-box and display: -moz-inline-box are
7267# parsed in content pages.
7268- name: layout.css.xul-box-display-values.content.enabled
7269  type: RelaxedAtomicBool
7270  value: false
7271  mirror: always
7272  rust: true
7273
7274# Whether to block large cursors intersecting UI.
7275- name: layout.cursor.block.enabled
7276  type: bool
7277  value: true
7278  mirror: always
7279
7280# The maximum width or height of the cursor we should allow when intersecting
7281# the UI, in CSS pixels.
7282- name: layout.cursor.block.max-size
7283  type: uint32_t
7284  value: 32
7285  mirror: always
7286
7287- name: layout.display-list.build-twice
7288  type: RelaxedAtomicBool
7289  value: false
7290  mirror: always
7291
7292# Toggle retaining display lists between paints.
7293- name: layout.display-list.retain
7294  type: RelaxedAtomicBool
7295  value: true
7296  mirror: always
7297
7298# Toggle retaining display lists between paints.
7299- name: layout.display-list.retain.chrome
7300  type: RelaxedAtomicBool
7301  value: true
7302  mirror: always
7303
7304# Set the maximum number of modified frames allowed before doing a full
7305# display list rebuild.
7306- name: layout.display-list.rebuild-frame-limit
7307  type: RelaxedAtomicUint32
7308  value: 500
7309  mirror: always
7310
7311# Pref to dump the display list to the log. Useful for debugging drawing.
7312- name: layout.display-list.dump
7313  type: RelaxedAtomicBool
7314  value: false
7315  mirror: always
7316
7317# Pref to dump the display list to the log. Useful for debugging drawing.
7318- name: layout.display-list.dump-content
7319  type: RelaxedAtomicBool
7320  value: false
7321  mirror: always
7322
7323# Pref to dump the display list to the log. Useful for debugging drawing.
7324- name: layout.display-list.dump-parent
7325  type: RelaxedAtomicBool
7326  value: false
7327  mirror: always
7328
7329- name: layout.display-list.show-rebuild-area
7330  type: RelaxedAtomicBool
7331  value: false
7332  mirror: always
7333
7334- name: layout.display-list.flatten-transform
7335  type: RelaxedAtomicBool
7336  value: true
7337  mirror: always
7338
7339- name: layout.display-list.improve-fragmentation
7340  type: RelaxedAtomicBool
7341  value: true
7342  mirror: always
7343
7344# Are dynamic reflow roots enabled?
7345- name: layout.dynamic-reflow-roots.enabled
7346  type: bool
7347  value: @IS_EARLY_BETA_OR_EARLIER@
7348  mirror: always
7349
7350# Enables the <input type=search> custom layout frame with a clear icon.
7351# Still needs tests and a web-exposed way to remove that icon, see bug 1654288.
7352- name: layout.forms.input-type-search.enabled
7353  type: bool
7354  value: false
7355  mirror: always
7356
7357# Pref to control browser frame rate, in Hz. A value <= 0 means choose
7358# automatically based on knowledge of the platform (or 60Hz if no platform-
7359# specific information is available).
7360- name: layout.frame_rate
7361  type: RelaxedAtomicInt32
7362  value: -1
7363  mirror: always
7364
7365# If it has been this many frame periods since a refresh, assume that painting
7366# is quiescent (will not happen again soon).
7367- name: layout.idle_period.required_quiescent_frames
7368  type: uint32_t
7369  value: 2
7370  mirror: always
7371
7372# The amount of time (milliseconds) needed between an idle period's
7373# end and the start of the next tick to avoid jank.
7374- name: layout.idle_period.time_limit
7375  type: uint32_t
7376  value: 1
7377  mirror: always
7378
7379# The minimum amount of time (milliseconds) required to be remaining
7380# in the current vsync interval for us to attempt an extra tick, or
7381# <0 to disable extra ticks entirely.
7382- name: layout.extra-tick.minimum-ms
7383  type: int32_t
7384  value: 4
7385  mirror: always
7386
7387# Enable/disable interruptible reflow, which allows reflows to stop
7388# before completion (and display the partial results) when user events
7389# are pending.
7390- name: layout.interruptible-reflow.enabled
7391  type: bool
7392  value: true
7393  mirror: always
7394
7395- name: layout.min-active-layer-size
7396  type: int32_t
7397  value: 64
7398  mirror: always
7399
7400- name: layout.paint_rects_separately
7401  type: bool
7402  value: true
7403  mirror: once
7404
7405# On Android, don't synth mouse move events after scrolling, as they cause
7406# unexpected user-visible behaviour. Can remove this after bug 1633450 is
7407# satisfactorily resolved.
7408- name: layout.reflow.synthMouseMove
7409  type: bool
7410  value: @IS_NOT_ANDROID@
7411  mirror: always
7412
7413# This pref is to be set by test code only.
7414- name: layout.scrollbars.always-layerize-track
7415  type: RelaxedAtomicBool
7416  value: false
7417  mirror: always
7418
7419# Controls caret style and word-delete during text selection.
7420# 0: Use platform default
7421# 1: Caret moves and blinks as when there is no selection; word
7422#    delete deselects the selection and then deletes word.
7423# 2: Caret moves to selection edge and is not visible during selection;
7424#    word delete deletes the selection (Mac and Linux default).
7425# 3: Caret moves and blinks as when there is no selection; word delete
7426#    deletes the selection.
7427# Windows default is 1 for word delete behavior, the rest as for 2.
7428- name: layout.selection.caret_style
7429  type: int32_t
7430  value: 0
7431  mirror: always
7432
7433# If layout.show_previous_page is true then during loading of a new page we
7434# will draw the previous page if the new page has painting suppressed.
7435- name: layout.show_previous_page
7436  type: bool
7437  value: true
7438  mirror: always
7439
7440- name: layout.smaller-painted-layers
7441  type: RelaxedAtomicBool
7442  value: false
7443  mirror: always
7444
7445# Pref to stop overlay scrollbars from fading out, for testing purposes.
7446- name: layout.testing.overlay-scrollbars.always-visible
7447  type: bool
7448  value: false
7449  mirror: always
7450
7451- name: layout.lower_priority_refresh_driver_during_load
7452  type: bool
7453  value: true
7454  mirror: always
7455
7456# If > 0, nsRefreshDriver will keep ticking this amount of milliseconds after
7457# top level page load.
7458- name: layout.keep_ticking_after_load_ms
7459  type: uint32_t
7460  value: 1000
7461  mirror: always
7462
7463# Is layout of CSS outline-style:auto enabled?
7464- name: layout.css.outline-style-auto.enabled
7465  type: bool
7466  value: true
7467  mirror: always
7468
7469# Pref to control enabling scroll anchoring.
7470- name: layout.css.scroll-anchoring.enabled
7471  type: bool
7472  value: true
7473  mirror: always
7474
7475# Pref to control how many consecutive scroll-anchoring adjustments (since the
7476# most recent user scroll) we'll average, before we consider whether to
7477# automatically turn off scroll anchoring. When we hit this threshold, the
7478# actual decision to disable also depends on the
7479# min-average-adjustment-threshold pref, see below for more details.
7480#
7481# Zero disables the heuristic.
7482- name: layout.css.scroll-anchoring.max-consecutive-adjustments
7483  type: uint32_t
7484  value: 10
7485  mirror: always
7486
7487# Pref to control whether we should disable scroll anchoring on a scroller
7488# where at least max-consecutive-adjustments have happened, and which the
7489# average adjustment ends up being less than this number, in CSS pixels.
7490#
7491# So, for example, given max-consecutive-adjustments=10 and
7492# min-average-adjustment-treshold=3, we'll block scroll anchoring if there have
7493# been 10 consecutive adjustments without a user scroll or more, and the
7494# average offset difference between them amount to less than 3 CSS pixels.
7495- name: layout.css.scroll-anchoring.min-average-adjustment-threshold
7496  type: uint32_t
7497  value: 3
7498  mirror: always
7499
7500# Pref to control disabling scroll anchoring suppression triggers, see
7501#
7502# https://drafts.csswg.org/css-scroll-anchoring/#suppression-triggers
7503#
7504# Those triggers should be unnecessary after bug 1561450.
7505- name: layout.css.scroll-anchoring.suppressions.enabled
7506  type: bool
7507  value: true
7508  mirror: always
7509
7510- name: layout.css.scroll-anchoring.highlight
7511  type: bool
7512  value: false
7513  mirror: always
7514
7515# Are shared memory User Agent style sheets enabled?
7516- name: layout.css.shared-memory-ua-sheets.enabled
7517  type: bool
7518  value: true
7519  mirror: always
7520
7521# Is support for -webkit-line-clamp enabled?
7522- name: layout.css.webkit-line-clamp.enabled
7523  type: bool
7524  value: true
7525  mirror: always
7526
7527# Whether the computed value of line-height: normal returns the `normal`
7528# keyword rather than a pixel value based on the first available font.
7529#
7530# Only enabled on Nightly and early beta, at least for now.
7531#
7532# It'd be nice to make numbers compute also to themselves, but it looks like
7533# everybody agrees on turning them into pixels, see the discussion starting
7534# from [1].
7535#
7536# [1]: https://github.com/w3c/csswg-drafts/issues/3749#issuecomment-477287453
7537- name: layout.css.line-height.normal-as-resolved-value.enabled
7538  type: bool
7539  value: true
7540  mirror: always
7541
7542# Whether :is() and :where() ignore errors inside their selector lists
7543# internally, rather than failing to parse altogether.
7544#
7545# See https://github.com/w3c/csswg-drafts/issues/3264
7546- name: layout.css.is-and-where-better-error-recovery.enabled
7547  type: RelaxedAtomicBool
7548  value: true
7549  mirror: always
7550  rust: true
7551
7552# Is 'content:none' supported on (non-pseudo) elements?
7553- name: layout.css.element-content-none.enabled
7554  type: RelaxedAtomicBool
7555  value: false
7556  mirror: always
7557  rust: true
7558
7559# Whether frame visibility tracking is enabled globally.
7560- name: layout.framevisibility.enabled
7561  type: bool
7562  value: true
7563  mirror: always
7564
7565# The fraction of the scrollport we allow to horizontally scroll by before we
7566# schedule an update of frame visibility.
7567- name: layout.framevisibility.amountscrollbeforeupdatehorizontal
7568  type: int32_t
7569  value: 2
7570  mirror: always
7571
7572# The fraction of the scrollport we allow to vertically scroll by before we
7573# schedule an update of frame visibility.
7574- name: layout.framevisibility.amountscrollbeforeupdatevertical
7575  type: int32_t
7576  value: 2
7577  mirror: always
7578
7579# The number of scrollports wide to expand when tracking frame visibility.
7580- name: layout.framevisibility.numscrollportwidths
7581  type: uint32_t
7582#ifdef ANDROID
7583  value: 1
7584#else
7585  value: 0
7586#endif
7587  mirror: always
7588
7589# The number of scrollports high to expand when tracking frame visibility.
7590- name: layout.framevisibility.numscrollportheights
7591  type: uint32_t
7592  value: 1
7593  mirror: always
7594
7595# Test only.
7596- name: layout.dynamic-toolbar-max-height
7597  type: RelaxedAtomicInt32
7598  value: 0
7599  mirror: always
7600
7601# Controls double click and Alt+Arrow word selection behavior.
7602- name: layout.word_select.eat_space_to_next_word
7603  type: bool
7604#ifdef XP_WIN
7605  value: true
7606#else
7607  value: false
7608#endif
7609  mirror: always
7610
7611- name: layout.word_select.stop_at_punctuation
7612  type: bool
7613  value: true
7614  mirror: always
7615
7616# Whether underscore should be treated as a word-breaking character for
7617# word selection/arrow-key movement purposes.
7618- name: layout.word_select.stop_at_underscore
7619  type: bool
7620  value: false
7621  mirror: always
7622
7623# Should deprecated plugin behavior fallback to normal behavior or use
7624# the experimental design.
7625- name: layout.use-plugin-fallback
7626  type: bool
7627  value: false
7628  mirror: always
7629
7630#---------------------------------------------------------------------------
7631# Prefs starting with "mathml."
7632#---------------------------------------------------------------------------
7633
7634# Whether to disable deprecated style attributes background, color, fontfamily,
7635# fontsize, fontstyle and fontweight.
7636- name: mathml.deprecated_style_attributes.disabled
7637  type: bool
7638  value: true
7639  mirror: always
7640
7641# Whether to disable deprecated "radical" notation for the menclose element.
7642- name: mathml.deprecated_menclose_notation_radical.disabled
7643  type: bool
7644  value: true
7645  mirror: always
7646
7647# Whether to disable legacy names "small", "normal" and "big" for the
7648# mathsize attribute.
7649- name: mathml.mathsize_names.disabled
7650  type: bool
7651  value: true
7652  mirror: always
7653
7654# Whether to disable legacy names "thickmathspace", "mediummathspace",
7655# "thickmathspace" etc for length attributes.
7656- name: mathml.mathspace_names.disabled
7657  type: bool
7658  value: @IS_NIGHTLY_BUILD@
7659  mirror: always
7660
7661# Whether to disable the mfrac bevelled  attribute.
7662- name: mathml.mfrac_bevelled_attribute.disabled
7663  type: bool
7664  value: true
7665  mirror: always
7666
7667# Whether to disable legacy names "thin", "thick" and "medium" for the
7668# linethickness attribute of the mfrac element.
7669- name: mathml.mfrac_linethickness_names.disabled
7670  type: bool
7671  value: true
7672  mirror: always
7673
7674# Whether to disable deprecated numalign/denomalign/align attributes
7675- name: mathml.deprecated_alignment_attributes.disabled
7676  type: bool
7677  value: true
7678  mirror: always
7679
7680# Whether to disable subscriptshift and superscriptshift attributes.
7681- name: mathml.script_shift_attributes.disabled
7682  type: bool
7683  value: true
7684  mirror: always
7685
7686# Whether to disable the scriptminsize attribute.
7687# Note that this only disables parsing, not the default effect when no attribute
7688# is unspecified.
7689- name: mathml.scriptminsize_attribute.disabled
7690  type: bool
7691  value: @IS_NIGHTLY_BUILD@
7692  mirror: always
7693
7694# Whether to disable the scriptsizemultiplier attribute.
7695- name: mathml.scriptsizemultiplier_attribute.disabled
7696  type: bool
7697  value: @IS_NIGHTLY_BUILD@
7698  mirror: always
7699
7700# Whether to disable support for XLink on MathML elements.
7701- name: mathml.xlink.disabled
7702  type: bool
7703  value: true
7704  mirror: always
7705
7706# Whether to disable support for stretching operators with STIXGeneral fonts.
7707# macos still has the deprecated STIXGeneral font pre-installed.
7708- name: mathml.stixgeneral_operator_stretching.disabled
7709  type: bool
7710#if defined(XP_MACOSX)
7711  value: @IS_NIGHTLY_BUILD@
7712#else
7713  value: true
7714#endif
7715  mirror: always
7716
7717#---------------------------------------------------------------------------
7718# Prefs starting with "media."
7719#---------------------------------------------------------------------------
7720
7721
7722# This pref defines what the blocking policy would be used in blocking autoplay.
7723# 0 : use sticky activation (default)
7724# https://html.spec.whatwg.org/multipage/interaction.html#sticky-activation
7725# 1 : use transient activation (the transient activation duration can be
7726#     adjusted by the pref `dom.user_activation.transient.timeout`)
7727# https://html.spec.whatwg.org/multipage/interaction.html#transient-activation
7728# 2 : user input depth (allow autoplay when the play is trigged by user input
7729#     which is determined by the user input depth)
7730- name: media.autoplay.blocking_policy
7731  type: uint32_t
7732  value: 0
7733  mirror: always
7734
7735# File-backed MediaCache size.
7736- name: media.cache_size
7737  type: RelaxedAtomicUint32
7738  value: 512000   # Measured in KiB
7739  mirror: always
7740
7741# Size of file backed MediaCache while on a connection which is cellular (3G,
7742# etc), and thus assumed to be "expensive".
7743- name: media.cache_size.cellular
7744  type: RelaxedAtomicUint32
7745  value: 32768   # Measured in KiB
7746  mirror: always
7747
7748# Whether cubeb is sandboxed
7749- name: media.cubeb.sandbox
7750  type: bool
7751  mirror: always
7752#if defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID)
7753  value: true
7754#elif defined(XP_WIN) && !defined(_ARM64_)
7755  value: true
7756#else
7757  value: false
7758#endif
7759
7760# Whether or not to pass AUDCLNT_STREAMOPTIONS_RAW when initializing audio
7761# streams when using WASAPI.
7762# 0 - don't use RAW streams
7763# 1 - use RAW streams for input streams only
7764# 2 - use RAW streams for output streams only
7765# 3 - use RAW streams for input and output streams
7766#if defined (XP_WIN)
7767- name: media.cubeb.wasapi-raw
7768  type: RelaxedAtomicUint32
7769  mirror: always
7770  value: 0
7771#endif // XP_WIN
7772
7773# ClockDrift desired buffering in milliseconds
7774- name: media.clockdrift.buffering
7775  type: int32_t
7776  mirror: always
7777  value: 50
7778
7779# If a resource is known to be smaller than this size (in kilobytes), a
7780# memory-backed MediaCache may be used; otherwise the (single shared global)
7781# file-backed MediaCache is used.
7782- name: media.memory_cache_max_size
7783  type: uint32_t
7784  value: 8192        # Measured in KiB
7785  mirror: always
7786
7787# Don't create more memory-backed MediaCaches if their combined size would go
7788# above this absolute size limit.
7789- name: media.memory_caches_combined_limit_kb
7790  type: uint32_t
7791  value: 524288
7792  mirror: always
7793
7794# Don't create more memory-backed MediaCaches if their combined size would go
7795# above this relative size limit (a percentage of physical memory).
7796- name: media.memory_caches_combined_limit_pc_sysmem
7797  type: uint32_t
7798  value: 5           # A percentage
7799  mirror: always
7800
7801# When a network connection is suspended, don't resume it until the amount of
7802# buffered data falls below this threshold (in seconds).
7803- name: media.cache_resume_threshold
7804  type: RelaxedAtomicUint32
7805  value: 30
7806  mirror: always
7807- name: media.cache_resume_threshold.cellular
7808  type: RelaxedAtomicUint32
7809  value: 10
7810  mirror: always
7811
7812# Stop reading ahead when our buffered data is this many seconds ahead of the
7813# current playback position. This limit can stop us from using arbitrary
7814# amounts of network bandwidth prefetching huge videos.
7815- name: media.cache_readahead_limit
7816  type: RelaxedAtomicUint32
7817  value: 60
7818  mirror: always
7819- name: media.cache_readahead_limit.cellular
7820  type: RelaxedAtomicUint32
7821  value: 30
7822  mirror: always
7823
7824# MediaCapabilities
7825- name: media.mediacapabilities.drop-threshold
7826  type: RelaxedAtomicInt32
7827  value: 95
7828  mirror: always
7829
7830- name: media.mediacapabilities.from-database
7831  type: RelaxedAtomicBool
7832  value: @IS_NIGHTLY_BUILD@
7833  mirror: always
7834
7835# AudioSink
7836- name: media.resampling.enabled
7837  type: RelaxedAtomicBool
7838  value: false
7839  mirror: always
7840
7841# libcubeb backend implements .get_preferred_channel_layout
7842- name: media.forcestereo.enabled
7843  type: RelaxedAtomicBool
7844#if defined(XP_WIN) || defined(XP_DARWIN) || defined(MOZ_PULSEAUDIO)
7845  value: false
7846#else
7847  value: true
7848#endif
7849  mirror: always
7850
7851# MediaSource
7852
7853# Whether to enable MediaSource support.
7854- name: media.mediasource.enabled
7855  type: RelaxedAtomicBool
7856  value: true
7857  mirror: always
7858
7859- name: media.mediasource.mp4.enabled
7860  type: RelaxedAtomicBool
7861  value: true
7862  mirror: always
7863
7864- name: media.mediasource.webm.enabled
7865  type: RelaxedAtomicBool
7866  value: true
7867  mirror: always
7868
7869# Check if vp9 is enabled by default in mediasource. False on Android.
7870# If disabled, vp9 will only be enabled under some conditions:
7871# - h264 HW decoding is not supported
7872# - mp4 is not enabled
7873# - Device was deemed fast enough to decode VP9 via the VP9Benchmark utility
7874# - A VP9 HW decoder is present.
7875- name: media.mediasource.vp9.enabled
7876  type: RelaxedAtomicBool
7877  value: @IS_NOT_ANDROID@
7878  mirror: always
7879
7880- name: media.mediasource.webm.audio.enabled
7881  type: RelaxedAtomicBool
7882  value: true
7883  mirror: always
7884
7885# Whether to enable MediaSource v2 support.
7886- name: media.mediasource.experimental.enabled
7887  type: RelaxedAtomicBool
7888  value: false
7889  mirror: always
7890
7891# VideoSink
7892- name: media.ruin-av-sync.enabled
7893  type: RelaxedAtomicBool
7894  value: false
7895  mirror: always
7896
7897# Encrypted Media Extensions
7898- name: media.eme.enabled
7899  type: bool
7900#if defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID)
7901  # On Linux EME is visible but disabled by default. This is so that the "Play
7902  # DRM content" checkbox in the Firefox UI is unchecked by default. DRM
7903  # requires downloading and installing proprietary binaries, which users on an
7904  # open source operating systems didn't opt into. The first time a site using
7905  # EME is encountered, the user will be prompted to enable DRM, whereupon the
7906  # EME plugin binaries will be downloaded if permission is granted.
7907  value: false
7908#else
7909  value: true
7910#endif
7911  mirror: always
7912
7913# Whether we expose the functionality proposed in
7914# https://github.com/WICG/encrypted-media-encryption-scheme/blob/master/explainer.md
7915# I.e. if true, apps calling navigator.requestMediaKeySystemAccess() can pass
7916# an optional encryption scheme as part of MediaKeySystemMediaCapability
7917# objects. If a scheme is present when we check for support, we must ensure we
7918# support that scheme in order to provide key system access.
7919- name: media.eme.encrypted-media-encryption-scheme.enabled
7920  type: bool
7921  value: false
7922  mirror: always
7923
7924# Do we need explicit approval from the application to allow access to EME?
7925# If true, Gecko will ask for permission before allowing MediaKeySystemAccess.
7926# At time of writing this is aimed at GeckoView, and setting this to true
7927# outside of GeckoView or test environments will likely break EME.
7928- name: media.eme.require-app-approval
7929  type: bool
7930  value: false
7931  mirror: always
7932
7933- name: media.eme.audio.blank
7934  type: RelaxedAtomicBool
7935  value: false
7936  mirror: always
7937
7938- name: media.eme.video.blank
7939  type: RelaxedAtomicBool
7940  value: false
7941  mirror: always
7942
7943- name: media.eme.chromium-api.video-shmems
7944  type: RelaxedAtomicUint32
7945  value: 6
7946  mirror: always
7947
7948# Is support for MediaKeys.getStatusForPolicy enabled?
7949- name: media.eme.hdcp-policy-check.enabled
7950  type: bool
7951  value: false
7952  mirror: always
7953
7954- name: media.clearkey.persistent-license.enabled
7955  type: bool
7956  value: false
7957  mirror: always
7958
7959- name: media.cloneElementVisually.testing
7960  type: bool
7961  value: false
7962  mirror: always
7963
7964#if defined(XP_LINUX) && defined(MOZ_SANDBOX)
7965  # Whether to allow, on a Linux system that doesn't support the necessary
7966  # sandboxing features, loading Gecko Media Plugins unsandboxed.  However, EME
7967  # CDMs will not be loaded without sandboxing even if this pref is changed.
7968-   name: media.gmp.insecure.allow
7969    type: RelaxedAtomicBool
7970    value: false
7971    mirror: always
7972#endif
7973
7974#ifdef XP_MACOSX
7975  # These prefs control whether or not a universal build running on
7976  # an Apple Silicon machine will attempt to use an x64 Widevine or
7977  # OpenH264 plugin. This requires launching the GMP child process
7978  # executable in x64 mode. We expect to allow this for Widevine until
7979  # an arm64 version of Widevine is made available. We don't expect
7980  # to need to allow this for OpenH264.
7981  #
7982  # Allow a Widevine GMP x64 process to be executed on ARM builds.
7983- name: media.gmp-widevinecdm.allow-x64-plugin-on-arm64
7984  type: RelaxedAtomicBool
7985  value: true
7986  mirror: always
7987
7988  # Don't allow an OpenH264 GMP x64 process to be executed on ARM builds.
7989- name: media.gmp-gmpopenh264.allow-x64-plugin-on-arm64
7990  type: RelaxedAtomicBool
7991  value: false
7992  mirror: always
7993#endif
7994
7995# Specifies whether the PDMFactory can create a test decoder that just outputs
7996# blank frames/audio instead of actually decoding. The blank decoder works on
7997# all platforms.
7998- name: media.use-blank-decoder
7999  type: RelaxedAtomicBool
8000  value: false
8001  mirror: always
8002
8003- name: media.gpu-process-decoder
8004  type: RelaxedAtomicBool
8005#if defined(XP_WIN)
8006  value: true
8007#else
8008  value: false
8009#endif
8010  mirror: always
8011
8012- name: media.rdd-process.enabled
8013  type: RelaxedAtomicBool
8014#if defined(XP_WIN)
8015  value: true
8016#elif defined(XP_MACOSX)
8017  value: true
8018#elif defined(XP_LINUX) && !defined(ANDROID)
8019  value: true
8020#elif defined(XP_OPENBSD)
8021  value: true
8022#else
8023  value: false
8024#endif
8025  mirror: always
8026
8027- name: media.rdd-retryonfailure.enabled
8028  type: RelaxedAtomicBool
8029  value: true
8030  mirror: always
8031
8032- name: media.rdd-process.startup_timeout_ms
8033  type: RelaxedAtomicInt32
8034  value: 5000
8035  mirror: always
8036
8037#ifdef MOZ_FFMPEG
8038- name: media.rdd-ffmpeg.enabled
8039  type: RelaxedAtomicBool
8040  value: false
8041  mirror: always
8042#endif
8043
8044#ifdef MOZ_FFVPX
8045- name: media.rdd-ffvpx.enabled
8046  type: RelaxedAtomicBool
8047#if defined(XP_WIN)
8048  value: true
8049#elif defined(XP_MACOSX)
8050  value: true
8051#elif defined(XP_LINUX) && !defined(ANDROID)
8052  value: true
8053#elif defined(XP_OPENBSD)
8054  value: true
8055#else
8056  value: false
8057#endif
8058  mirror: always
8059#endif
8060
8061#ifdef MOZ_WMF
8062- name: media.rdd-wmf.enabled
8063  type: RelaxedAtomicBool
8064  value: true
8065  mirror: always
8066#endif
8067
8068#ifdef MOZ_APPLEMEDIA
8069- name: media.rdd-applemedia.enabled
8070  type: RelaxedAtomicBool
8071  value: true
8072  mirror: always
8073#endif
8074
8075- name: media.rdd-theora.enabled
8076  type: RelaxedAtomicBool
8077#if defined(XP_WIN)
8078  value: true
8079#elif defined(XP_MACOSX)
8080  value: true
8081#elif defined(XP_LINUX) && !defined(ANDROID)
8082  value: true
8083#elif defined(XP_OPENBSD)
8084  value: true
8085#else
8086  value: false
8087#endif
8088  mirror: always
8089
8090- name: media.rdd-vorbis.enabled
8091  type: RelaxedAtomicBool
8092#if defined(XP_WIN)
8093  value: true
8094#elif defined(XP_MACOSX)
8095  value: true
8096#elif defined(XP_LINUX) && !defined(ANDROID)
8097  value: true
8098#elif defined(XP_OPENBSD)
8099  value: true
8100#else
8101  value: false
8102#endif
8103  mirror: always
8104
8105- name: media.rdd-vpx.enabled
8106  type: RelaxedAtomicBool
8107#if defined(XP_WIN)
8108  value: true
8109#elif defined(XP_MACOSX)
8110  value: true
8111#elif defined(XP_LINUX) && !defined(ANDROID)
8112  value: true
8113#elif defined(XP_OPENBSD)
8114  value: true
8115#else
8116  value: false
8117#endif
8118  mirror: always
8119
8120- name: media.rdd-wav.enabled
8121  type: RelaxedAtomicBool
8122#if defined(XP_WIN)
8123  value: true
8124#elif defined(XP_MACOSX)
8125  value: true
8126#elif defined(XP_LINUX) && !defined(ANDROID)
8127  value: true
8128#elif defined(XP_OPENBSD)
8129  value: true
8130#else
8131  value: false
8132#endif
8133  mirror: always
8134
8135- name: media.rdd-opus.enabled
8136  type: RelaxedAtomicBool
8137#if defined(XP_WIN)
8138  value: true
8139#elif defined(XP_MACOSX)
8140  value: true
8141#elif defined(XP_LINUX) && !defined(ANDROID)
8142  value: true
8143#elif defined(XP_OPENBSD)
8144  value: true
8145#else
8146  value: false
8147#endif
8148  mirror: always
8149
8150- name: media.rdd-webaudio.batch.size
8151  type: RelaxedAtomicInt32
8152  value: 100
8153  mirror: always
8154
8155#ifdef ANDROID
8156  # Enable the MediaCodec PlatformDecoderModule by default.
8157-   name: media.android-media-codec.enabled
8158    type: RelaxedAtomicBool
8159    value: true
8160    mirror: always
8161
8162-   name: media.android-media-codec.preferred
8163    type: RelaxedAtomicBool
8164    value: true
8165    mirror: always
8166#endif  # ANDROID
8167
8168#ifdef MOZ_OMX
8169-   name: media.omx.enabled
8170    type: bool
8171    value: false
8172    mirror: always
8173#endif
8174
8175#ifdef MOZ_FFMPEG
8176-   name: media.ffmpeg.enabled
8177    type: RelaxedAtomicBool
8178  #if defined(XP_MACOSX)
8179    value: false
8180  #else
8181    value: true
8182  #endif
8183    mirror: always
8184
8185-   name: media.libavcodec.allow-obsolete
8186    type: bool
8187    value: false
8188    mirror: always
8189
8190#ifdef MOZ_WAYLAND
8191# Disable DMABuf for ffmpeg video textures on Linux
8192- name: media.ffmpeg.dmabuf-textures.disabled
8193  type: RelaxedAtomicBool
8194  value: false
8195  mirror: always
8196
8197# Use VA-API for ffmpeg video playback on Linux
8198- name: media.ffmpeg.vaapi.enabled
8199  type: RelaxedAtomicBool
8200  value: false
8201  mirror: always
8202
8203# Use DRM display for VA-API ffmpeg video decoding on Linux
8204- name: media.ffmpeg.vaapi-drm-display.enabled
8205  type: RelaxedAtomicBool
8206  value: true
8207  mirror: always
8208#endif # MOZ_WAYLAND
8209#endif  # MOZ_FFMPEG
8210
8211-   name: media.ffvpx.enabled
8212    type: RelaxedAtomicBool
8213#ifdef MOZ_FFVPX
8214    value: true
8215#else
8216    value: false
8217#endif
8218    mirror: always
8219
8220-   name: media.ffvpx.mp3.enabled
8221    type: RelaxedAtomicBool
8222#ifdef MOZ_FFVPX
8223    value: true
8224#else
8225    value: false
8226#endif
8227    mirror: always
8228
8229# Set to true in marionette tests to disable the sanity test
8230# which would lead to unnecessary start of the RDD process.
8231-   name: media.sanity-test.disabled
8232    type: RelaxedAtomicBool
8233    value: false
8234    mirror: always
8235
8236#ifdef MOZ_WMF
8237
8238-   name: media.wmf.enabled
8239    type: RelaxedAtomicBool
8240    value: true
8241    mirror: always
8242
8243  # Whether DD should consider WMF-disabled a WMF failure, useful for testing.
8244-   name: media.decoder-doctor.wmf-disabled-is-failure
8245    type: bool
8246    value: false
8247    mirror: always
8248
8249-   name: media.wmf.dxva.d3d11.enabled
8250    type: RelaxedAtomicBool
8251    value: true
8252    mirror: always
8253
8254-   name: media.wmf.dxva.max-videos
8255    type: RelaxedAtomicUint32
8256    value: 8
8257    mirror: always
8258
8259-   name: media.wmf.use-nv12-format
8260    type: RelaxedAtomicBool
8261    value: true
8262    mirror: always
8263
8264-   name: media.wmf.force.allow-p010-format
8265    type: RelaxedAtomicBool
8266    value: false
8267    mirror: always
8268
8269-   name: media.wmf.use-sync-texture
8270    type: bool
8271    value: true
8272    mirror: once
8273
8274-   name: media.wmf.low-latency.enabled
8275    type: RelaxedAtomicBool
8276    value: false
8277    mirror: always
8278
8279-   name: media.wmf.low-latency.force-disabled
8280    type: RelaxedAtomicBool
8281    value: false
8282    mirror: always
8283
8284-   name: media.wmf.skip-blacklist
8285    type: RelaxedAtomicBool
8286    value: false
8287    mirror: always
8288
8289-   name: media.wmf.amd.highres.enabled
8290    type: RelaxedAtomicBool
8291    value: true
8292    mirror: always
8293
8294-   name: media.wmf.allow-unsupported-resolutions
8295    type: RelaxedAtomicBool
8296    value: false
8297    mirror: always
8298
8299-   name: media.wmf.vp9.enabled
8300    type: bool
8301    value: true
8302    mirror: once
8303
8304#endif  # MOZ_WMF
8305
8306- name: media.decoder-doctor.testing
8307  type: bool
8308  value: false
8309  mirror: always
8310
8311- name: media.hardware-video-decoding.force-enabled
8312  type: bool
8313  value: false
8314  mirror: once
8315
8316# Whether to check the decoder supports recycling.
8317- name: media.decoder.recycle.enabled
8318  type: RelaxedAtomicBool
8319  value: @IS_ANDROID@
8320  mirror: always
8321
8322# Should MFR try to skip to the next key frame?
8323- name: media.decoder.skip-to-next-key-frame.enabled
8324  type: RelaxedAtomicBool
8325  value: true
8326  mirror: always
8327
8328# When video continues later than the current media time for this period of
8329# time, then it will trigger skip-to-next-keyframe mechanism. As this aims to
8330# solve the drop frames issue where video decoding too slow for high
8331# resolution videos. eg. 4k+. Therefore, the value is is determined by the
8332# telemetry probe `video_inter_keyframe_max_ms` in the key of `AV,h>2160` which
8333# shows that 95% video's key frame interval are less than ~5000. We use its
8334# half value as a threashold to decide whether we should keep decoding in the
8335# current video position or jump to the next keyframe in order to decode future
8336# frames in advance.
8337- name: media.decoder.skip_when_video_too_slow_ms
8338  type: RelaxedAtomicInt32
8339  value: 2500
8340  mirror: always
8341
8342- name: media.gmp.decoder.enabled
8343  type: RelaxedAtomicBool
8344  value: false
8345  mirror: always
8346
8347# Whether to suspend decoding of videos in background tabs.
8348- name: media.suspend-bkgnd-video.enabled
8349  type: RelaxedAtomicBool
8350  value: true
8351  mirror: always
8352
8353# Delay, in ms, from time window goes to background to suspending
8354# video decoders. Defaults to 10 seconds.
8355- name: media.suspend-bkgnd-video.delay-ms
8356  type: RelaxedAtomicUint32
8357  value: 10000
8358  mirror: always
8359
8360- name: media.dormant-on-pause-timeout-ms
8361  type: RelaxedAtomicInt32
8362  value: 5000
8363  mirror: always
8364
8365# AudioTrack and VideoTrack support
8366- name: media.track.enabled
8367  type: bool
8368  value: false
8369  mirror: always
8370
8371# This pref disables the reception of RTCP. It is used for testing.
8372- name: media.webrtc.net.force_disable_rtcp_reception
8373  type: ReleaseAcquireAtomicBool
8374  value: false
8375  mirror: always
8376
8377# TextTrack WebVTT Region extension support.
8378- name: media.webvtt.regions.enabled
8379  type: bool
8380  value: true
8381  mirror: always
8382
8383# This pref controls whether dispatch testing-only events.
8384- name: media.webvtt.testing.events
8385  type: bool
8386  value: true
8387  mirror: always
8388
8389- name: media.webspeech.synth.force_global_queue
8390  type: bool
8391  value: false
8392  mirror: always
8393
8394- name: media.webspeech.test.enable
8395  type: bool
8396  value: false
8397  mirror: always
8398
8399- name: media.webspeech.test.fake_fsm_events
8400  type: bool
8401  value: false
8402  mirror: always
8403
8404- name: media.webspeech.test.fake_recognition_service
8405  type: bool
8406  value: false
8407  mirror: always
8408
8409#ifdef MOZ_WEBSPEECH
8410-   name: media.webspeech.recognition.enable
8411    type: bool
8412    value: false
8413    mirror: always
8414#endif
8415
8416- name: media.webspeech.recognition.force_enable
8417  type: bool
8418  value: false
8419  mirror: always
8420
8421#ifdef MOZ_WEBSPEECH
8422-   name: media.webspeech.synth.enabled
8423    type: bool
8424    value: false
8425    mirror: always
8426#endif  # MOZ_WEBSPEECH
8427
8428- name: media.encoder.webm.enabled
8429  type: RelaxedAtomicBool
8430#if defined(MOZ_WEBM_ENCODER)
8431  value: true
8432#else
8433  value: false
8434#endif
8435  mirror: always
8436
8437- name: media.audio-max-decode-error
8438  type: uint32_t
8439#if defined(RELEASE_OR_BETA)
8440  value: 3
8441#else
8442  # Zero tolerance in pre-release builds to detect any decoder regression.
8443  value: 0
8444#endif
8445  mirror: always
8446
8447- name: media.video-max-decode-error
8448  type: uint32_t
8449#if defined(RELEASE_OR_BETA)
8450  value: 2
8451#else
8452  # Zero tolerance in pre-release builds to detect any decoder regression.
8453  value: 0
8454#endif
8455  mirror: always
8456
8457# Are video stats enabled? (Disabling can help prevent fingerprinting.)
8458- name: media.video_stats.enabled
8459  type: bool
8460  value: true
8461  mirror: always
8462
8463# Opus
8464- name: media.opus.enabled
8465  type: RelaxedAtomicBool
8466  value: true
8467  mirror: always
8468
8469# Wave
8470- name: media.wave.enabled
8471  type: RelaxedAtomicBool
8472  value: true
8473  mirror: always
8474
8475# Ogg
8476- name: media.ogg.enabled
8477  type: RelaxedAtomicBool
8478  value: true
8479  mirror: always
8480
8481# WebM
8482- name: media.webm.enabled
8483  type: RelaxedAtomicBool
8484  value: true
8485  mirror: always
8486
8487# AV1
8488- name: media.av1.enabled
8489  type: RelaxedAtomicBool
8490#if defined(XP_WIN) && !defined(_ARM64_)
8491  value: true
8492#elif defined(XP_MACOSX)
8493  value: true
8494#elif defined(MOZ_WIDGET_ANDROID)
8495  value: @IS_EARLY_BETA_OR_EARLIER@
8496#elif defined(XP_UNIX)
8497  value: true
8498#else
8499  value: false
8500#endif
8501  mirror: always
8502
8503- name: media.av1.use-dav1d
8504  type: RelaxedAtomicBool
8505#if defined(XP_WIN) && !defined(_ARM64_)
8506  value: true
8507#elif defined(XP_MACOSX)
8508  value: true
8509#elif defined(XP_UNIX)
8510  value: true
8511#else
8512  value: false
8513#endif
8514  mirror: always
8515
8516- name: media.flac.enabled
8517  type: bool
8518  value: true
8519  mirror: always
8520
8521# Hls
8522- name: media.hls.enabled
8523  type: RelaxedAtomicBool
8524  value: @IS_ANDROID@
8525  mirror: always
8526
8527# Max number of HLS players that can be created concurrently. Used only on
8528# Android and when "media.hls.enabled" is true.
8529#ifdef ANDROID
8530-   name: media.hls.max-allocations
8531    type: uint32_t
8532    value: 20
8533    mirror: always
8534#endif
8535
8536- name: media.mp4.enabled
8537  type: RelaxedAtomicBool
8538#ifdef MOZ_FMP4
8539  value: true
8540#else
8541  value: false
8542#endif
8543  mirror: always
8544
8545# Error/warning handling, Decoder Doctor.
8546#
8547# Set to true to force demux/decode warnings to be treated as errors.
8548- name: media.playback.warnings-as-errors
8549  type: RelaxedAtomicBool
8550  value: false
8551  mirror: always
8552
8553# Resume video decoding when the cursor is hovering on a background tab to
8554# reduce the resume latency and improve the user experience.
8555- name: media.resume-bkgnd-video-on-tabhover
8556  type: bool
8557  value: true
8558  mirror: always
8559
8560- name: media.videocontrols.lock-video-orientation
8561  type: bool
8562  value: @IS_ANDROID@
8563  mirror: always
8564
8565# Media Seamless Looping
8566- name: media.seamless-looping
8567  type: RelaxedAtomicBool
8568  value: true
8569  mirror: always
8570
8571- name: media.autoplay.block-event.enabled
8572  type: bool
8573  value: false
8574  mirror: always
8575
8576- name: media.media-capabilities.enabled
8577  type: RelaxedAtomicBool
8578  value: true
8579  mirror: always
8580
8581- name: media.media-capabilities.screen.enabled
8582  type: RelaxedAtomicBool
8583  value: false
8584  mirror: always
8585
8586- name: media.benchmark.vp9.fps
8587  type: RelaxedAtomicUint32
8588  value: 0
8589  mirror: always
8590
8591- name: media.benchmark.vp9.threshold
8592  type: RelaxedAtomicUint32
8593  value: 150
8594  mirror: always
8595
8596- name: media.benchmark.vp9.versioncheck
8597  type: RelaxedAtomicUint32
8598  value: 0
8599  mirror: always
8600
8601- name: media.benchmark.frames
8602  type: RelaxedAtomicUint32
8603  value: 300
8604  mirror: always
8605
8606- name: media.benchmark.timeout
8607  type: RelaxedAtomicUint32
8608  value: 1000
8609  mirror: always
8610
8611- name: media.test.video-suspend
8612  type: RelaxedAtomicBool
8613  value: false
8614  mirror: always
8615
8616# MediaCapture prefs follow
8617
8618# Enables navigator.mediaDevices and getUserMedia() support. See also
8619# media.peerconnection.enabled
8620- name: media.navigator.enabled
8621  type: bool
8622  value: true
8623  mirror: always
8624
8625# This pref turns off [SecureContext] on the navigator.mediaDevices object, for
8626# more compatible legacy behavior.
8627- name: media.devices.insecure.enabled
8628  type: bool
8629  value: false
8630  mirror: always
8631
8632# If the above pref is also enabled, this pref enabled getUserMedia() support
8633# in http, bypassing the instant NotAllowedError you get otherwise.
8634- name: media.getusermedia.insecure.enabled
8635  type: bool
8636  value: false
8637  mirror: always
8638
8639# Enable tab sharing
8640- name: media.getusermedia.browser.enabled
8641  type: RelaxedAtomicBool
8642  value: false
8643  mirror: always
8644
8645# The getDisplayMedia method is always SecureContext regardless of the above two
8646# prefs. But it is not implemented on android, and can be turned off elsewhere.
8647- name: media.getdisplaymedia.enabled
8648  type: bool
8649  value: @IS_NOT_ANDROID@
8650  mirror: always
8651
8652# Turn off any cameras (but not mics) while in the background. This is desirable
8653# on mobile.
8654- name: media.getusermedia.camera.background.mute.enabled
8655  type: bool
8656  value: @IS_ANDROID@
8657  mirror: always
8658
8659# WebRTC prefs follow
8660
8661# Enables RTCPeerConnection support. Note that, when true, this pref enables
8662# navigator.mediaDevices and getUserMedia() support as well.
8663# See also media.navigator.enabled
8664- name: media.peerconnection.enabled
8665  type: bool
8666  value: true
8667  mirror: always
8668
8669- name: media.peerconnection.dtmf.enabled
8670  type: bool
8671  value: true
8672  mirror: always
8673
8674- name: media.peerconnection.identity.enabled
8675  type: bool
8676  value: true
8677  mirror: always
8678
8679- name: media.peerconnection.rtpsourcesapi.enabled
8680  type: bool
8681  value: true
8682  mirror: always
8683
8684#ifdef MOZ_WEBRTC
8685  #ifdef ANDROID
8686-     name: media.navigator.hardware.vp8_encode.acceleration_remote_enabled
8687      type: bool
8688      value: true
8689      mirror: always
8690
8691-     name: media.navigator.hardware.vp8_encode.acceleration_enabled
8692      type: bool
8693      value: true
8694      mirror: never
8695
8696-     name: media.navigator.hardware.vp8_decode.acceleration_enabled
8697      type: bool
8698      value: false
8699      mirror: never
8700  #endif  # ANDROID
8701
8702  # Use MediaDataDecoder API for VP8/VP9 in WebRTC. This includes hardware
8703  # acceleration for decoding.
8704-   name: media.navigator.mediadatadecoder_vpx_enabled
8705    type: RelaxedAtomicBool
8706#if defined(NIGHTLY_BUILD)
8707    value: true
8708#else
8709    value: false
8710#endif
8711    mirror: always
8712
8713  # Use MediaDataDecoder API for H264 in WebRTC. This includes hardware
8714  # acceleration for decoding.
8715-   name: media.navigator.mediadatadecoder_h264_enabled
8716    type: RelaxedAtomicBool
8717  #if defined(_ARM64_) && defined(XP_WIN)
8718    value: false
8719  #else
8720    value: true
8721  #endif
8722    mirror: always
8723
8724#endif  # MOZ_WEBRTC
8725
8726# HTMLMediaElement.allowedToPlay should be exposed to web content when
8727# block autoplay rides the trains to release. Until then, Nightly only.
8728- name: media.allowed-to-play.enabled
8729  type: bool
8730  value: @IS_NIGHTLY_BUILD@
8731  mirror: always
8732
8733# Is support for MediaDevices.ondevicechange enabled?
8734- name: media.ondevicechange.enabled
8735  type: bool
8736  value: true
8737  mirror: always
8738
8739# Is support for HTMLMediaElement.seekToNextFrame enabled?
8740- name: media.seekToNextFrame.enabled
8741  type: bool
8742  value: true
8743  mirror: always
8744
8745# setSinkId will be enabled in bug 1498512. Till then the
8746# implementation will remain hidden behind this pref (Bug 1152401, Bug 934425).
8747- name: media.setsinkid.enabled
8748  type: bool
8749  value: false
8750  mirror: always
8751
8752# Turn on this pref can enable test-only events for media element.
8753- name: media.testing-only-events
8754  type: bool
8755  value: false
8756  mirror: always
8757
8758- name: media.useAudioChannelService.testing
8759  type: bool
8760  value: false
8761  mirror: always
8762
8763- name: media.audioFocus.management
8764  type: bool
8765#if defined(MOZ_WIDGET_ANDROID)
8766  value: true
8767#else
8768  value: false
8769#endif
8770  mirror: always
8771
8772- name: media.hardwaremediakeys.enabled
8773  type: bool
8774  value: true
8775  mirror: always
8776
8777# If this pref is on, then `media.mediacontrol.stopcontrol.timer.ms` would take
8778# effect and determine the timing to stop controlling media.
8779- name: media.mediacontrol.stopcontrol.timer
8780  type: bool
8781  value: true
8782  mirror: always
8783
8784# If media is being paused after a certain period, then we would think that
8785# media doesn't need to be controlled anymore. Therefore, that media would stop
8786# listening to the media control key events. The value of this pref is how long
8787# media would stop listening to the event after it's paused. The default value
8788# is set to 24 hrs (24*60*60*1000)
8789- name: media.mediacontrol.stopcontrol.timer.ms
8790  type: RelaxedAtomicUint32
8791  value: 86400000
8792  mirror: always
8793
8794# If this pref is on, we would stop controlling media after it reaches to the
8795# end.
8796- name: media.mediacontrol.stopcontrol.aftermediaends
8797  type: bool
8798  value: true
8799  mirror: always
8800
8801# We would only use media control to control media which duration is longer
8802# than this value.
8803- name: media.mediacontrol.eligible.media.duration.s
8804  type: AtomicFloat
8805  value: 3.0f
8806  mirror: always
8807
8808- name: media.webrtc.platformencoder
8809  type: bool
8810#if defined(MOZ_WIDGET_ANDROID)
8811  value: true
8812#else
8813  value: false
8814#endif
8815  mirror: always
8816
8817- name: media.block-autoplay-until-in-foreground
8818  type: bool
8819#if !defined(MOZ_WIDGET_ANDROID)
8820  value: true
8821#else
8822  value: false
8823#endif
8824  mirror: always
8825
8826- name: media.webrtc.hw.h264.enabled
8827  type: bool
8828#if defined(MOZ_WIDGET_ANDROID)
8829  value: true
8830#else
8831  value: false
8832#endif
8833  mirror: always
8834
8835 # If true, then we require explicit approval from the embedding app (ex. Fenix)
8836 # on GeckoView to know if we can allow audible, inaudible media or both kinds
8837 # of media to autoplay.
8838- name: media.geckoview.autoplay.request
8839  type: bool
8840  value: false
8841  mirror: always
8842
8843 # This is used in testing only, in order to skip the prompting process. This
8844 # pref works only when enabling the pref `media.geckoview.autoplay.request`.
8845 # 0=prompt as normal, 1=allow all, 2=deny all, 3=allow audible request,
8846 # 4=deny audible request, 5=allow inaudible request, 6=deny inaudible request.
8847 # 7=leave all requests pending.
8848- name: media.geckoview.autoplay.request.testing
8849  type: uint32_t
8850  value: 0
8851  mirror: always
8852
8853- name: media.mediacontrol.testingevents.enabled
8854  type: bool
8855  value: false
8856  mirror: always
8857
8858#if defined(XP_MACOSX)
8859- name: media.macos.screenrecording.oscheck.enabled
8860  type: bool
8861  value: true
8862  mirror: always
8863#endif
8864
8865#---------------------------------------------------------------------------
8866# Prefs starting with "mousewheel."
8867#---------------------------------------------------------------------------
8868
8869# This affects how line scrolls from wheel events will be accelerated.
8870# Factor to be multiplied for constant acceleration.
8871- name: mousewheel.acceleration.factor
8872  type: RelaxedAtomicInt32
8873  value: 10
8874  mirror: always
8875
8876# This affects how line scrolls from wheel events will be accelerated.
8877# Number of mousewheel clicks when acceleration starts.
8878# Acceleration can be turned off if pref is set to -1.
8879- name: mousewheel.acceleration.start
8880  type: RelaxedAtomicInt32
8881  value: -1
8882  mirror: always
8883
8884# Auto-dir is a feature which treats any single-wheel scroll as a scroll in the
8885# only one scrollable direction if the target has only one scrollable
8886# direction. For example, if the user scrolls a vertical wheel inside a target
8887# which is horizontally scrollable but vertical unscrollable, then the vertical
8888# scroll is converted to a horizontal scroll for that target.
8889# Note that auto-dir only takes effect for |mousewheel.*.action|s and
8890# |mousewheel.*.action.override_x|s whose values are 1.
8891- name: mousewheel.autodir.enabled
8892  type: bool
8893  value: false
8894  mirror: always
8895
8896# When a wheel scroll is converted due to auto-dir, which side the converted
8897# scroll goes towards is decided by one thing called "honoured target". If the
8898# content of the honoured target horizontally starts from right to left, then
8899# an upward scroll maps to a rightward scroll and a downward scroll maps to a
8900# leftward scroll; otherwise, an upward scroll maps to a leftward scroll and a
8901# downward scroll maps to a rightward scroll.
8902# If this pref is set to false, then consider the scrolling target as the
8903# honoured target.
8904# If set to true, then consider the root element in the document where the
8905# scrolling target is as the honoured target. But note that there's one
8906# exception: for targets in an HTML document, the real root element(I.e. the
8907# <html> element) is typically not considered as a root element, but the <body>
8908# element is typically considered as a root element. If there is no <body>
8909# element, then consider the <html> element instead.
8910- name: mousewheel.autodir.honourroot
8911  type: bool
8912  value: false
8913  mirror: always
8914
8915- name: mousewheel.system_scroll_override.enabled
8916  type: RelaxedAtomicBool
8917#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
8918  value: true
8919#else
8920  value: false
8921#endif
8922  mirror: always
8923
8924# Prefs for overriding the system mouse wheel scrolling speed on
8925# content of the web pages.  When
8926# "mousewheel.system_scroll_override.enabled" is true and the
8927# system scrolling speed isn't customized by the user, the content scrolling
8928# speed is multiplied by the following factors.  The value will be used as
8929# 1/100.  E.g., 200 means 2.00.
8930# NOTE: Even if "mousewheel.system_scroll_override.enabled" is
8931# true, when Gecko detects the user customized the system scrolling speed
8932# settings, the override isn't executed.
8933- name: mousewheel.system_scroll_override.horizontal.factor
8934  type: RelaxedAtomicInt32
8935  value: 200
8936  mirror: always
8937- name: mousewheel.system_scroll_override.vertical.factor
8938  type: RelaxedAtomicInt32
8939  value: 200
8940  mirror: always
8941
8942# Mouse wheel scroll transaction is held even if the mouse cursor is moved.
8943- name: mousewheel.transaction.ignoremovedelay
8944  type: RelaxedAtomicInt32
8945  value: 100
8946  mirror: always
8947
8948# Mouse wheel scroll transaction period of time (in milliseconds).
8949- name: mousewheel.transaction.timeout
8950  type: RelaxedAtomicInt32
8951  value: 1500
8952  mirror: always
8953
8954# Mouse wheel scroll position is determined by GetMessagePos rather than
8955# LPARAM msg value
8956- name: mousewheel.ignore_cursor_position_in_lparam
8957  type: RelaxedAtomicBool
8958  value: false
8959  mirror: always
8960
8961# If line-height is lower than this value (in device pixels), 1 line scroll
8962# scrolls this height.
8963- name: mousewheel.min_line_scroll_amount
8964  type: int32_t
8965  value: 5
8966  mirror: always
8967
8968#---------------------------------------------------------------------------
8969# Prefs starting with "network."
8970#---------------------------------------------------------------------------
8971
8972# Force less-secure NTLMv1 when needed (NTLMv2 is the default).
8973- name: network.auth.force-generic-ntlm-v1
8974  type: RelaxedAtomicBool
8975  value: false
8976  mirror: always
8977
8978# Sub-resources HTTP-authentication:
8979#   0 - don't allow sub-resources to open HTTP authentication credentials
8980#       dialogs
8981#   1 - allow sub-resources to open HTTP authentication credentials dialogs,
8982#       but don't allow it for cross-origin sub-resources
8983#   2 - allow the cross-origin authentication as well.
8984- name: network.auth.subresource-http-auth-allow
8985  type: uint32_t
8986  value: 2
8987  mirror: always
8988
8989# Sub-resources HTTP-authentication for cross-origin images:
8990# - true: It is allowed to present http auth. dialog for cross-origin images.
8991# - false: It is not allowed.
8992# If network.auth.subresource-http-auth-allow has values 0 or 1 this pref does
8993# not have any effect.
8994- name: network.auth.subresource-img-cross-origin-http-auth-allow
8995  type: bool
8996  value: false
8997  mirror: always
8998
8999# Resources that are triggered by some non-web-content:
9000# - true: They are allow to present http auth. dialog
9001# - false: They are not allow to present http auth. dialog.
9002- name: network.auth.non-web-content-triggered-resources-http-auth-allow
9003  type: bool
9004  value: false
9005  mirror: always
9006
9007# Whether to show anti-spoof confirmation prompts when navigating to a url
9008# with userinfo
9009- name: network.auth.confirmAuth.enabled
9010  type: bool
9011  value: true
9012  mirror: always
9013
9014# See the full list of values in nsICookieService.idl.
9015- name: network.cookie.cookieBehavior
9016  type: RelaxedAtomicInt32
9017  value: 0 # accept all cookies
9018  mirror: always
9019
9020# See the full list of values in nsICookieService.idl.
9021- name: network.cookie.rejectForeignWithExceptions.enabled
9022  type: bool
9023  value: false
9024  mirror: always
9025
9026# The cookieBehavior to be used in Private Browsing mode.
9027- name: network.cookie.cookieBehavior.pbmode
9028  type: RelaxedAtomicInt32
9029  value: 0 # accept all cookies
9030  mirror: always
9031
9032# Stale threshold for cookies in seconds.
9033- name: network.cookie.staleThreshold
9034  type: uint32_t
9035  value: 60
9036  mirror: always
9037
9038# Cookie lifetime policy. Possible values:
9039# 0 - accept all cookies
9040# 1 - deprecated. don't use it.
9041# 2 - accept as session cookies
9042# 3 - deprecated. don't use it.
9043- name: network.cookie.lifetimePolicy
9044  type: RelaxedAtomicInt32
9045  value: 0
9046  mirror: always
9047
9048- name: network.cookie.sameSite.laxByDefault
9049  type: bool
9050  value: @IS_NIGHTLY_BUILD@
9051  mirror: always
9052
9053# lax-by-default 2 minutes tollerance for unsafe methods. The value is in seconds.
9054- name: network.cookie.sameSite.laxPlusPOST.timeout
9055  type: uint32_t
9056  value: 120
9057  mirror: always
9058
9059- name: network.cookie.sameSite.noneRequiresSecure
9060  type: bool
9061  value: @IS_NIGHTLY_BUILD@
9062  mirror: always
9063
9064- name: network.cookie.sameSite.schemeful
9065  type: bool
9066  value: @IS_NIGHTLY_BUILD@
9067  mirror: always
9068
9069- name: network.cookie.thirdparty.sessionOnly
9070  type: bool
9071  value: false
9072  mirror: always
9073
9074- name: network.cookie.thirdparty.nonsecureSessionOnly
9075  type: bool
9076  value: false
9077  mirror: always
9078
9079# If we should attempt to race the cache and network.
9080- name: network.http.rcwn.enabled
9081  type: bool
9082  value: true
9083  mirror: always
9084
9085- name: network.http.rcwn.cache_queue_normal_threshold
9086  type: uint32_t
9087  value: 8
9088  mirror: always
9089
9090- name: network.http.rcwn.cache_queue_priority_threshold
9091  type: uint32_t
9092  value: 2
9093  mirror: always
9094
9095# We might attempt to race the cache with the network only if a resource
9096# is smaller than this size.
9097- name: network.http.rcwn.small_resource_size_kb
9098  type: uint32_t
9099  value: 256
9100  mirror: always
9101
9102- name: network.http.rcwn.min_wait_before_racing_ms
9103  type: uint32_t
9104  value: 0
9105  mirror: always
9106
9107- name: network.http.rcwn.max_wait_before_racing_ms
9108  type: uint32_t
9109  value: 500
9110  mirror: always
9111
9112# false=real referer, true=spoof referer (use target URI as referer).
9113- name: network.http.referer.spoofSource
9114  type: bool
9115  value: false
9116  mirror: always
9117
9118# Check whether we need to hide referrer when leaving a .onion domain.
9119# false=allow onion referer, true=hide onion referer (use empty referer).
9120- name: network.http.referer.hideOnionSource
9121  type: bool
9122  value: false
9123  mirror: always
9124
9125# Include an origin header on non-GET and non-HEAD requests regardless of CORS.
9126# 0=never send, 1=send when same-origin only, 2=always send.
9127- name: network.http.sendOriginHeader
9128  type: uint32_t
9129  value: 2
9130  mirror: always
9131
9132# Prefs allowing granular control of referers.
9133# 0=don't send any, 1=send only on clicks, 2=send on image requests as well
9134- name: network.http.sendRefererHeader
9135  type: uint32_t
9136  value: 2
9137  mirror: always
9138  do_not_use_directly: true
9139
9140# The maximum allowed length for a referrer header - 4096 default.
9141# 0 means no limit.
9142- name: network.http.referer.referrerLengthLimit
9143  type: uint32_t
9144  value: 4096
9145  mirror: always
9146
9147#  0=always send, 1=send iff base domains match, 2=send iff hosts match.
9148- name: network.http.referer.XOriginPolicy
9149  type: uint32_t
9150  value: 0
9151  mirror: always
9152  do_not_use_directly: true
9153
9154# 0=full URI, 1=scheme+host+port+path, 2=scheme+host+port.
9155- name: network.http.referer.trimmingPolicy
9156  type: uint32_t
9157  value: 0
9158  mirror: always
9159  do_not_use_directly: true
9160
9161# 0=full URI, 1=scheme+host+port+path, 2=scheme+host+port.
9162- name: network.http.referer.XOriginTrimmingPolicy
9163  type: uint32_t
9164  value: 0
9165  mirror: always
9166  do_not_use_directly: true
9167
9168# Set the default Referrer Policy; to be used unless overriden by the site.
9169# 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
9170# 3=no-referrer-when-downgrade.
9171- name: network.http.referer.defaultPolicy
9172  type: uint32_t
9173  value: 2
9174  mirror: always
9175
9176# Set the default Referrer Policy applied to third-party trackers when the
9177# default cookie policy is set to reject third-party trackers, to be used
9178# unless overriden by the site.
9179# 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
9180# 3=no-referrer-when-downgrade.
9181# Trim referrers from trackers to origins by default.
9182- name: network.http.referer.defaultPolicy.trackers
9183  type: uint32_t
9184  value: 2
9185  mirror: always
9186
9187# Set the Private Browsing Default Referrer Policy, to be used
9188# unless overriden by the site.
9189# 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
9190# 3=no-referrer-when-downgrade.
9191- name: network.http.referer.defaultPolicy.pbmode
9192  type: uint32_t
9193  value: 2
9194  mirror: always
9195
9196# Set the Private Browsing Default Referrer Policy applied to third-party
9197# trackers when the default cookie policy is set to reject third-party
9198# trackers, to be used unless overriden by the site.
9199# 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
9200# 3=no-referrer-when-downgrade.
9201# No need to change this pref for trimming referrers from trackers since in
9202# private windows we already trim all referrers to origin only.
9203- name: network.http.referer.defaultPolicy.trackers.pbmode
9204  type: uint32_t
9205  value: 2
9206  mirror: always
9207
9208# Whether certain http header values should be censored out in logs.
9209# Specifically filters out "authorization" and "proxy-authorization".
9210- name: network.http.sanitize-headers-in-logs
9211  type: RelaxedAtomicBool
9212  value: true
9213  mirror: always
9214
9215# Whether or not we use Windows for SSO to Microsoft sites.
9216- name: network.http.windows-sso.enabled
9217  type: RelaxedAtomicBool
9218  value: false
9219  mirror: always
9220
9221# If set to true, IOService.offline depends on IOService.connectivity.
9222- name: network.offline-mirrors-connectivity
9223  type: RelaxedAtomicBool
9224  value: false
9225  mirror: always
9226
9227# Enables the predictive service.
9228- name: network.predictor.enabled
9229  type: bool
9230  value: true
9231  mirror: always
9232
9233# Set true to allow resolving proxy for localhost
9234- name: network.proxy.allow_hijacking_localhost
9235  type: RelaxedAtomicBool
9236  value: false
9237  mirror: always
9238
9239# Allow CookieJarSettings to be unblocked for channels without a document.
9240# This is for testing only.
9241- name: network.cookieJarSettings.unblocked_for_testing
9242  type: bool
9243  value: false
9244  mirror: always
9245
9246- name: network.predictor.enable-hover-on-ssl
9247  type: bool
9248  value: false
9249  mirror: always
9250
9251- name: network.predictor.enable-prefetch
9252  type: bool
9253  value: false
9254  mirror: always
9255
9256- name: network.predictor.page-degradation.day
9257  type: int32_t
9258  value: 0
9259  mirror: always
9260- name: network.predictor.page-degradation.week
9261  type: int32_t
9262  value: 5
9263  mirror: always
9264- name: network.predictor.page-degradation.month
9265  type: int32_t
9266  value: 10
9267  mirror: always
9268- name: network.predictor.page-degradation.year
9269  type: int32_t
9270  value: 25
9271  mirror: always
9272- name: network.predictor.page-degradation.max
9273  type: int32_t
9274  value: 50
9275  mirror: always
9276
9277- name: network.predictor.subresource-degradation.day
9278  type: int32_t
9279  value: 1
9280  mirror: always
9281- name: network.predictor.subresource-degradation.week
9282  type: int32_t
9283  value: 10
9284  mirror: always
9285- name: network.predictor.subresource-degradation.month
9286  type: int32_t
9287  value: 25
9288  mirror: always
9289- name: network.predictor.subresource-degradation.year
9290  type: int32_t
9291  value: 50
9292  mirror: always
9293- name: network.predictor.subresource-degradation.max
9294  type: int32_t
9295  value: 100
9296  mirror: always
9297
9298- name: network.predictor.prefetch-rolling-load-count
9299  type: int32_t
9300  value: 10
9301  mirror: always
9302
9303- name: network.predictor.prefetch-min-confidence
9304  type: int32_t
9305  value: 100
9306  mirror: always
9307- name: network.predictor.preconnect-min-confidence
9308  type: int32_t
9309  value: 90
9310  mirror: always
9311- name: network.predictor.preresolve-min-confidence
9312  type: int32_t
9313  value: 60
9314  mirror: always
9315
9316- name: network.predictor.prefetch-force-valid-for
9317  type: int32_t
9318  value: 10
9319  mirror: always
9320
9321- name: network.predictor.max-resources-per-entry
9322  type: int32_t
9323  value: 100
9324  mirror: always
9325
9326# This is selected in concert with max-resources-per-entry to keep memory
9327# usage low-ish. The default of the combo of the two is ~50k.
9328- name: network.predictor.max-uri-length
9329  type: uint32_t
9330  value: 500
9331  mirror: always
9332
9333# A testing flag.
9334- name: network.predictor.doing-tests
9335  type: bool
9336  value: false
9337  mirror: always
9338
9339# Enables `<link rel="preload">` tag and `Link: rel=preload` response header handling.
9340- name: network.preload
9341  type: RelaxedAtomicBool
9342  value: true
9343  mirror: always
9344
9345# Whether to use the network process or not
9346# Start a separate socket process. Performing networking on the socket process
9347# is control by a sepparate pref
9348# ("network.http.network_access_on_socket_process.enabled").
9349# Changing these prefs requires a restart.
9350- name: network.process.enabled
9351  type: RelaxedAtomicBool
9352  mirror: always
9353#if defined(ANDROID) || defined(MOZ_THUNDERBIRD)
9354  value: false # see bug 1641427
9355#else
9356  value: @IS_EARLY_BETA_OR_EARLIER@
9357#endif
9358
9359# Whether we can send OnDataAvailable to content process directly.
9360- name: network.send_ODA_to_content_directly
9361  type: RelaxedAtomicBool
9362  value: false
9363  mirror: always
9364
9365# Perform all network access on the socket process.
9366# The pref requires "network.process.enabled" to be true.
9367# Changing these prefs requires a restart.
9368- name: network.http.network_access_on_socket_process.enabled
9369  type: RelaxedAtomicBool
9370  mirror: always
9371  value: false
9372
9373# Telemetry of traffic categories. Whether or not to enable HttpTrafficAnalyzer.
9374- name: network.traffic_analyzer.enabled
9375  type: RelaxedAtomicBool
9376  value: true
9377  mirror: always
9378
9379# Whether DNS resolution is limited to literals and cached entries.
9380- name: network.dns.disabled
9381  type: RelaxedAtomicBool
9382  value: false
9383  mirror: always
9384
9385# Whether DNS resolution is limited to literals and cached entries.
9386- name: network.dns.skipTRR-when-parental-control-enabled
9387  type: RelaxedAtomicBool
9388  value: true
9389  mirror: always
9390
9391- name: network.dns.disablePrefetchFromHTTPS
9392  type: bool
9393  value: true
9394  mirror: always
9395
9396# Max time to shutdown the resolver threads
9397- name: network.dns.resolver_shutdown_timeout_ms
9398  type: uint32_t
9399  value: 2000
9400  mirror: always
9401
9402# When true on Windows DNS resolutions for single label domains
9403# (domains that don't contain a dot) will be resolved using the DnsQuery
9404# API instead of PR_GetAddrInfoByName
9405- name: network.dns.dns_query_single_label
9406  type: RelaxedAtomicBool
9407  value: false
9408  mirror: always
9409
9410# When this pref is true we enforce a 253 character limit on domains we try to
9411# resolve. See bug 1264117. If it doesn't cause any web-compat issues we can
9412# remove it in a few releases
9413- name: network.dns.limit_253_chars
9414  type: RelaxedAtomicBool
9415  value: true
9416  mirror: always
9417
9418# When this pref is true, we copy the host name to a fresh string before
9419# calling into getaddrinfo.
9420- name: network.dns.copy_string_before_call
9421  type: RelaxedAtomicBool
9422  value: true
9423  mirror: always
9424
9425# The proxy type. See nsIProtocolProxyService.idl
9426#     PROXYCONFIG_DIRECT   = 0
9427#     PROXYCONFIG_MANUAL   = 1
9428#     PROXYCONFIG_PAC      = 2
9429#     PROXYCONFIG_WPAD     = 4
9430#     PROXYCONFIG_SYSTEM   = 5
9431- name: network.proxy.type
9432  type: RelaxedAtomicUint32
9433  value: 5
9434  mirror: always
9435
9436# Whether the SOCKS proxy should be in charge of DNS resolution.
9437- name: network.proxy.socks_remote_dns
9438  type: RelaxedAtomicBool
9439  value: false
9440  mirror: always
9441
9442# When receiving a network change event, the time (in ms) we wait to reload the
9443# PAC url.
9444- name: network.proxy.reload_pac_delay
9445  type: RelaxedAtomicUint32
9446  value: 2000
9447  mirror: always
9448
9449# When parsing "SOCKS" in PAC string, the default version of SOCKS that will be
9450# used.
9451- name: network.proxy.default_pac_script_socks_version
9452  type: RelaxedAtomicUint32
9453  value: 4
9454  mirror: always
9455
9456# Whether to force failover to direct for system requests.
9457#ifdef MOZ_PROXY_DIRECT_FAILOVER
9458- name: network.proxy.failover_direct
9459  type: bool
9460  value: true
9461  mirror: always
9462#endif
9463
9464# Some requests during a page load are marked as "tail", mainly trackers, but not only.
9465# This pref controls whether such requests are put to the tail, behind other requests
9466# emerging during page loading process.
9467- name: network.http.tailing.enabled
9468  type: bool
9469  value: true
9470  mirror: always
9471
9472# Whether to run proxy checks when processing Alt-Svc headers.
9473- name: network.http.altsvc.proxy_checks
9474  type: bool
9475  value: true
9476  mirror: always
9477
9478- name: network.http.stale_while_revalidate.enabled
9479  type: RelaxedAtomicBool
9480  value: true
9481  mirror: always
9482
9483# Whether to cache SSL resumption tokens in necko.
9484- name: network.ssl_tokens_cache_enabled
9485  type: RelaxedAtomicBool
9486  value: @IS_NIGHTLY_BUILD@
9487  mirror: always
9488
9489# Capacity of the above cache, in kilobytes.
9490- name: network.ssl_tokens_cache_capacity
9491  type: RelaxedAtomicUint32
9492  value: 2048
9493  mirror: always
9494
9495# The maximum allowed length for a URL - 1MB default.
9496- name: network.standard-url.max-length
9497  type: RelaxedAtomicUint32
9498  value: 1048576
9499  mirror: always
9500
9501# Default global TRR provider
9502- name: network.trr.default_provider_uri
9503  type: String
9504  value: "https://mozilla.cloudflare-dns.com/dns-query"
9505  mirror: never
9506
9507# Single TRR request timeout, in milliseconds
9508- name: network.trr.request_timeout_ms
9509  type: RelaxedAtomicUint32
9510  value: 1500
9511  mirror: always
9512
9513# Single TRR request timeout, in milliseconds for mode 3
9514- name: network.trr.request_timeout_mode_trronly_ms
9515  type: RelaxedAtomicUint32
9516  value: 30000
9517  mirror: always
9518
9519# The timeout of the TRR confirmation request
9520- name: network.trr.confirmation_timeout_ms
9521  type: RelaxedAtomicUint32
9522  value: 6000
9523  mirror: always
9524
9525# The timeout of the TRR confirmation request
9526- name: network.trr.confirmation_telemetry_enabled
9527  type: RelaxedAtomicBool
9528  value: true
9529  mirror: always
9530
9531# Whether to send the Accept-Language header for TRR requests
9532- name: network.trr.send_accept-language_headers
9533  type: RelaxedAtomicBool
9534  value: false
9535  mirror: always
9536
9537# Whether to send an empty Accept-Encoding header for TRR requests
9538- name: network.trr.send_empty_accept-encoding_headers
9539  type: RelaxedAtomicBool
9540  value: true
9541  mirror: always
9542
9543# Whether to send the User-Agent header for TRR requests
9544- name: network.trr.send_user-agent_headers
9545  type: RelaxedAtomicBool
9546  value: false
9547  mirror: always
9548
9549# This pref controls whether to use TRRServiceChannel off main thread.
9550- name: network.trr.fetch_off_main_thread
9551  type: RelaxedAtomicBool
9552  value: true
9553  mirror: always
9554
9555# If this pref is false, a task will be dispatched to remove the file from the
9556# disk and the pref will be set to true.
9557# It can probably be removed after a few releases.
9558- name: network.trr.blocklist_cleanup_done
9559  type: RelaxedAtomicBool
9560  value: false
9561  mirror: always
9562
9563# If we should wait for captive portal confirmation before enabling TRR
9564- name: network.trr.wait-for-portal
9565  type: RelaxedAtomicBool
9566  value: false
9567  mirror: always
9568
9569# If we should wait for TRR service confirmation to complete before enabling
9570# TRR for lookups when fallback is enabled. Confirmation is always skipped when
9571# global mode is TRR-only (no fallback).
9572- name: network.trr.wait-for-confirmation
9573  type: RelaxedAtomicBool
9574  value: false
9575  mirror: always
9576
9577# Normally when confirmation fails we wait for the confirmation to succeed
9578# before attempting to do TRR. When this pref is true, we optimistically
9579# assume the confirmation will succeed and might attempt TRR anyway.
9580# If network.trr.wait-for-confirmation is true, this pref is ignored.
9581- name: network.trr.attempt-when-retrying-confirmation
9582  type: RelaxedAtomicBool
9583  value: false
9584  mirror: always
9585
9586# Use GET (rather than POST)
9587- name: network.trr.useGET
9588  type: RelaxedAtomicBool
9589  value: false
9590  mirror: always
9591
9592# Allow RFC1918 address in responses?
9593- name: network.trr.allow-rfc1918
9594  type: RelaxedAtomicBool
9595  value: false
9596  mirror: always
9597
9598# When true, it only sends AAAA when the system has IPv6 connectivity
9599- name: network.trr.skip-AAAA-when-not-supported
9600  type: RelaxedAtomicBool
9601  value: true
9602  mirror: always
9603
9604# Whether to apply split horizon mitigations when using TRR.
9605# These include adding the DNS suffix to the excluded domains
9606- name: network.trr.split_horizon_mitigations
9607  type: RelaxedAtomicBool
9608  value: true
9609  mirror: always
9610
9611# Explicitly disable ECS (EDNS Client Subnet, RFC 7871)
9612- name: network.trr.disable-ECS
9613  type: RelaxedAtomicBool
9614  value: true
9615  mirror: always
9616
9617# When true, the DNS+TRR cache will be cleared when a relevant TRR pref
9618# changes. (uri, bootstrapAddress, excluded-domains)
9619- name: network.trr.clear-cache-on-pref-change
9620  type: RelaxedAtomicBool
9621  value: true
9622  mirror: always
9623
9624# After this many failed TRR requests in a row, consider TRR borked
9625- name: network.trr.max-fails
9626  type: RelaxedAtomicUint32
9627  value: 15
9628  mirror: always
9629
9630# When the TRR confirmation is set to CONFIRM_FAILED due to many failures in
9631# a row, we set a timer to retry. This has an exponential backoff up to
9632# 64 seconds.
9633- name: network.trr.retry-timeout-ms
9634  type: RelaxedAtomicUint32
9635  value: 125
9636  mirror: always
9637
9638# Retry with no TRR when the response contained only 0.0.0.0 or ::
9639- name: network.trr.fallback-on-zero-response
9640  type: RelaxedAtomicBool
9641  value: false
9642  mirror: always
9643
9644# If true we parse the /etc/hosts file and exclude any host names from TRR.
9645# Reading the file is only done once, when TRR is first enabled - this could be
9646# soon after startup or when the pref is flipped.
9647- name: network.trr.exclude-etc-hosts
9648  type: RelaxedAtomicBool
9649  value: true
9650  mirror: always
9651
9652# Whether to enable odoh.
9653- name: network.trr.odoh.enabled
9654  type: RelaxedAtomicBool
9655  value: false
9656  mirror: always
9657
9658# The uri of Oblivious Proxy.
9659- name: network.trr.odoh.proxy_uri
9660  type: String
9661  value: ""
9662  mirror: never
9663
9664# The host name of Oblivious Target.
9665- name: network.trr.odoh.target_host
9666  type: String
9667  value: ""
9668  mirror: never
9669
9670# The uri path of the odoh uri.
9671- name: network.trr.odoh.target_path
9672  type: String
9673  value: ""
9674  mirror: never
9675
9676# The minimum ttl of the DNS record that contains ODoHConfigs.
9677- name: network.trr.odoh.min_ttl
9678  type: RelaxedAtomicUint32
9679  value: 60
9680  mirror: always
9681
9682# The uri indicates where to get ODoHConfigs.
9683- name: network.trr.odoh.configs_uri
9684  type: String
9685  value: ""
9686  mirror: never
9687
9688# Whether to skip the NS check for the blocked host.
9689# Note this is used for test only.
9690- name: network.trr.skip-check-for-blocked-host
9691  type: RelaxedAtomicBool
9692  value: false
9693  mirror: always
9694
9695# Allow the network changed event to get sent when a network topology or setup
9696# change is noticed while running.
9697- name: network.notify.changed
9698  type: RelaxedAtomicBool
9699  value: true
9700  mirror: always
9701
9702# Allow network detection of IPv6 related changes (bug 1245059)
9703- name: network.notify.IPv6
9704  type: RelaxedAtomicBool
9705#ifdef XP_WIN
9706  value: false
9707#else
9708  value: true
9709#endif
9710  mirror: always
9711
9712# Whether to check the dnsSuffix on network changes
9713- name: network.notify.dnsSuffixList
9714  type: RelaxedAtomicBool
9715  value: true
9716  mirror: always
9717
9718# Whether to check the registry for proxies on network changes that indicate
9719# that TRR should not be used.
9720- name: network.notify.checkForProxies
9721  type: RelaxedAtomicBool
9722  value: true
9723  mirror: always
9724
9725# Whether to check the registry for NRPT rules on network changes that
9726# indicate that TRR should not be used.
9727- name: network.notify.checkForNRPT
9728  type: RelaxedAtomicBool
9729  value: true
9730  mirror: always
9731
9732# Whether NotifyIpInterfaceChange should be called immediately after
9733# registration in order to record the initial state of the network adapters.
9734- name: network.notify.initial_call
9735  type: RelaxedAtomicBool
9736  value: true
9737  mirror: always
9738
9739# Whether to check for DNS resolvers
9740- name: network.notify.resolvers
9741  type: RelaxedAtomicBool
9742  value: true
9743  mirror: always
9744
9745# Whether to use the rust implemented DefaultURI for unknown scheme types
9746- name: network.url.useDefaultURI
9747  type: RelaxedAtomicBool
9748  value: false
9749  mirror: always
9750
9751# Force remapping of remote port numbers to allow reaching local testing
9752# servers or port forwarders listening on non-standard ports.  Note that
9753# this is not changing the origin URL in the addressbar, only internally
9754# the port number used.  This is intended to be used along with the
9755# `network.dns.forceResolve` preference.
9756#
9757# The form is:
9758#   "80,443,808-888=8080; 563=8081"
9759# this will remap ports for HTTP, HTTPS and the range of 808-888 included
9760# to use port 8080, and port 563 to go to 8081.
9761- name: network.socket.forcePort
9762  type: String
9763  value: ""
9764  mirror: never
9765
9766# Receive buffer size of QUIC socket
9767- name: network.http.http3.recvBufferSize
9768  type: RelaxedAtomicInt32
9769  value: 1048576
9770  mirror: always
9771
9772- name: network.http.http3.enable_qlog
9773  type: RelaxedAtomicBool
9774  value: false
9775  mirror: always
9776
9777- name: network.http.http3.enable_0rtt
9778  type: RelaxedAtomicBool
9779  value: true
9780  mirror: always
9781
9782# When a h3 transaction is inserted in the pending queue, the time (ms) we wait
9783# to create a TCP backup connection.
9784- name: network.http.http3.backup_timer_delay
9785  type: RelaxedAtomicUint32
9786  value: 100
9787  mirror: always
9788
9789# The global half open sockets allowed for creating a backup connection.
9790- name: network.http.http3.parallel_fallback_conn_limit
9791  type: RelaxedAtomicUint32
9792  value: 32
9793  mirror: always
9794
9795# When true, a http request will be upgraded to https when HTTPS RR is
9796# available.
9797- name: network.dns.upgrade_with_https_rr
9798  type: RelaxedAtomicBool
9799  value: @IS_EARLY_BETA_OR_EARLIER@
9800  mirror: always
9801
9802# Whether to use HTTPS RR as AltSvc
9803- name: network.dns.use_https_rr_as_altsvc
9804  type: RelaxedAtomicBool
9805  value: @IS_EARLY_BETA_OR_EARLIER@
9806  mirror: always
9807
9808# Whether to check for NAT64 using the system resolver
9809- name: network.connectivity-service.nat64-check
9810  type: bool
9811  value: true
9812  mirror: always
9813
9814# Manually enter the NAT64 prefix that will be used if IPv4 is unavailable.
9815# The value is formatted as IPv6 with the least significant bits to be dropped.
9816# For example, 64:ff9b:: is a common prefix. This will not disable
9817# the NAT64 check, although the value of this pref will be prioritized.
9818- name: network.connectivity-service.nat64-prefix
9819  type: String
9820  value: ""
9821  mirror: never
9822
9823# Whether to enable echconfig.
9824- name: network.dns.echconfig.enabled
9825  type: RelaxedAtomicBool
9826  value: false
9827  mirror: always
9828
9829# This pref needs to be worked together with network.dns.echconfig.enabled
9830# being true and there is no record without ECHConfig.
9831# When we try all records with ECHConfig in HTTPS RRs and still can't connect,
9832# this pref indicate whether we can fallback to the origin server.
9833- name: network.dns.echconfig.fallback_to_origin_when_all_failed
9834  type: RelaxedAtomicBool
9835  value: true
9836  mirror: always
9837
9838# When true, reset the exclusion list when all records are excluded.
9839- name: network.dns.httpssvc.reset_exclustion_list
9840  type: RelaxedAtomicBool
9841  value: true
9842  mirror: always
9843
9844# If the http3 connection cannot be ready after the timeout value here, the
9845# transaction will start another non-http3 conneciton.
9846# Setting this value to 0 indicates this feature is disabled.
9847- name: network.dns.httpssvc.http3_fast_fallback_timeout
9848  type: RelaxedAtomicUint32
9849  value: 50
9850  mirror: always
9851
9852# Whether to use https rr for speculative connections.
9853- name: network.dns.use_https_rr_for_speculative_connection
9854  type: RelaxedAtomicBool
9855  value: false
9856  mirror: always
9857
9858# Whether to force a transaction to wait https rr.
9859- name: network.dns.force_waiting_https_rr
9860  type: RelaxedAtomicBool
9861  value: @IS_NIGHTLY_BUILD@
9862  mirror: always
9863
9864# The TTL for negative responses of TXT and HTTPS records.
9865- name: network.dns.negative_ttl_for_type_record
9866  type: RelaxedAtomicUint32
9867  value: 300   # 5 minutes (in seconds)
9868  mirror: always
9869
9870- name: network.cache.frecency_array_check_enabled
9871  type: RelaxedAtomicBool
9872  value: @IS_EARLY_BETA_OR_EARLIER@
9873  mirror: always
9874
9875#  This is used for a temporary workaround for a web-compat issue. If pref is
9876# true CORS preflight requests are allowed to send client certificates.
9877- name: network.cors_preflight.allow_client_cert
9878  type: RelaxedAtomicBool
9879  value: false
9880  mirror: always
9881
9882# Whether to record the telemetry event when a JAR channel is failed to load.
9883- name: network.jar.record_failure_reason
9884  type: RelaxedAtomicBool
9885  value: @IS_EARLY_BETA_OR_EARLIER@
9886  mirror: always
9887
9888# Support http3 version1
9889- name: network.http.http3.support_version1
9890  type: RelaxedAtomicBool
9891  value: true
9892  mirror: always
9893
9894#---------------------------------------------------------------------------
9895# Prefs starting with "nglayout."
9896#---------------------------------------------------------------------------
9897
9898# Enable/disable display list invalidation logging --- useful for debugging.
9899- name: nglayout.debug.invalidation
9900  type: bool
9901  value: false
9902  mirror: always
9903
9904# Enable/disable widget update area flashing --- only supported with
9905# BasicLayers (other layer managers always update the entire widget area).
9906- name: nglayout.debug.widget_update_flashing
9907  type: RelaxedAtomicBool
9908  value: false
9909  mirror: always
9910
9911- name: nglayout.initialpaint.delay
9912  type: int32_t
9913  value: 5
9914  mirror: always
9915
9916- name: nglayout.initialpaint.delay_in_oopif
9917  type: int32_t
9918  value: 5
9919  mirror: always
9920
9921#---------------------------------------------------------------------------
9922# Prefs starting with "page_load."
9923#---------------------------------------------------------------------------
9924
9925# Time in milliseconds during which certain tasks are deprioritized during
9926# page load.
9927- name: page_load.deprioritization_period
9928  type: RelaxedAtomicUint32
9929  value: 5000
9930  mirror: always
9931
9932#---------------------------------------------------------------------------
9933# Prefs starting with "permissions."
9934#---------------------------------------------------------------------------
9935
9936# 1-Accept, 2-Deny, Any other value: Accept
9937- name: permissions.default.image
9938  type: RelaxedAtomicUint32
9939  value: 1
9940  mirror: always
9941
9942- name: permissions.delegation.enabled
9943  type: bool
9944  value: true
9945  mirror: always
9946
9947- name: permissions.isolateBy.userContext
9948  type: RelaxedAtomicBool
9949  value: false
9950  mirror: always
9951
9952- name: permissions.isolateBy.privateBrowsing
9953  type: RelaxedAtomicBool
9954  value: true
9955  mirror: always
9956
9957#---------------------------------------------------------------------------
9958# Prefs starting with "plain_text."
9959#---------------------------------------------------------------------------
9960
9961# When false, text in plaintext documents does not wrap long lines.
9962- name: plain_text.wrap_long_lines
9963  type: bool
9964  value: true
9965  mirror: always
9966
9967#---------------------------------------------------------------------------
9968# Prefs starting with "plugin."
9969#---------------------------------------------------------------------------
9970
9971- name: plugin.state.flash
9972  type: uint32_t
9973  # Flash is Click-to-Activate by default on all channels. Disabled for ARM builds.
9974#if defined(_ARM64_) && defined(XP_WIN)
9975  value: 0
9976#else
9977  value: 1
9978#endif
9979  mirror: always
9980
9981#---------------------------------------------------------------------------
9982# Prefs starting with "plugins."
9983#---------------------------------------------------------------------------
9984
9985- name: plugins.flashBlock.enabled
9986  type: bool
9987  value: false
9988  mirror: always
9989
9990- name: plugins.http_https_only
9991  type: bool
9992  value: true
9993  mirror: always
9994
9995#---------------------------------------------------------------------------
9996# Prefs starting with "preferences."
9997#---------------------------------------------------------------------------
9998
9999- name: preferences.allow.omt-write
10000  type: bool
10001  value: true
10002  mirror: never
10003
10004#ifdef DEBUG
10005  # If set to true, setting a Preference matched to a `Once` StaticPref will
10006  # assert that the value matches. Such assertion being broken is a clear flag
10007  # that the Once policy shouldn't be used.
10008-   name: preferences.check.once.policy
10009    type: bool
10010    value: false
10011    mirror: always
10012
10013  # If set to true, StaticPrefs Once policy check will be skipped during
10014  # automation regression test. Use with care. This pref must be set back to
10015  # false as soon as specific test has completed.
10016-   name: preferences.force-disable.check.once.policy
10017    type: bool
10018    value: false
10019    mirror: always
10020#endif
10021
10022#---------------------------------------------------------------------------
10023# Prefs starting with "print."
10024#---------------------------------------------------------------------------
10025
10026# Variation fonts can't always be embedded in certain output formats
10027# such as PDF. To work around this, draw the variation fonts using
10028# paths instead of using font embedding.
10029- name: print.font-variations-as-paths
10030  type: RelaxedAtomicBool
10031  value: true
10032  mirror: always
10033
10034# Whether we always print silently (without a print dialog).
10035- name: print.always_print_silent
10036  type: RelaxedAtomicBool
10037  value: false
10038  mirror: always
10039
10040# Whether tab_modal print UI is enabled.
10041#
10042# The tab modal print dialog is currently only for early beta or nightly.
10043- name: print.tab_modal.enabled
10044  type: RelaxedAtomicBool
10045  value: true
10046  mirror: always
10047
10048# Whether the pages per sheet print setting is enabled.
10049- name: print.pages_per_sheet.enabled
10050  type: RelaxedAtomicBool
10051  value: true
10052  mirror: always
10053
10054# Print via the parent process. This is only used when e10s is enabled.
10055- name: print.print_via_parent
10056  type: RelaxedAtomicBool
10057  value: @IS_NOT_ANDROID@
10058  mirror: always
10059
10060# Whether we allow the print progress dialog to show up.
10061- name: print.show_print_progress
10062  type: RelaxedAtomicBool
10063  value: true
10064  mirror: always
10065
10066# Whether we attempt to generate links in Save As PDF output.
10067- name: print.save_as_pdf.links.enabled
10068  type: RelaxedAtomicBool
10069  value: true
10070  mirror: always
10071
10072# The default DPI for printing.
10073#
10074# For PDF-based output, DPI should ideally be irrelevant, but in fact it is not
10075# for multiple reasons:
10076#
10077#  * Layout code that tries to respect device pixels (e.g. for snapping glyph
10078#    positions and baselines, and especially for the "GDI Classic"
10079#    rendering-mode threshold for certain fonts).
10080#
10081#  * The limitations of the PDF format mean that we can't natively represent
10082#    certain effects, such as filters, in PDF output, so we need to rasterize
10083#    the parts of the document with these applied.
10084#
10085#  * Other rasterized things like images and such are also affected by DPI
10086#    (both in the output, and the images we select via srcset, for example).
10087#
10088# Therefore, using a high DPI is preferable. For now, we use 144dpi to match
10089# physical printer output on Windows, but higher (e.g. 300dpi) might be better
10090# if it does not lead to issues such as excessive memory use.
10091- name: print.default_dpi
10092  type: float
10093  value: 144.0f
10094  mirror: always
10095
10096# Whether support for monochrome printing is enabled for CUPS.
10097- name: print.cups.monochrome.enabled
10098  type: RelaxedAtomicBool
10099  value: true
10100  mirror: always
10101
10102#---------------------------------------------------------------------------
10103# Prefs starting with "privacy."
10104#---------------------------------------------------------------------------
10105
10106- name: privacy.file_unique_origin
10107  type: bool
10108  value: true
10109  mirror: always
10110
10111- name: privacy.fuzzyfox.clockgrainus
10112  type: RelaxedAtomicUint32
10113  value: 100
10114  mirror: always
10115
10116# Annotate trackers using the strict list. If set to false, the basic list will
10117# be used instead.
10118- name: privacy.annotate_channels.strict_list.enabled
10119  type: bool
10120  value: @IS_EARLY_BETA_OR_EARLIER@
10121  mirror: always
10122
10123# First Party Isolation (double keying), disabled by default.
10124- name: privacy.firstparty.isolate
10125  type: RelaxedAtomicBool
10126  value: false
10127  mirror: always
10128
10129# If false, two windows in the same domain with different first party domains
10130# (top level URLs) can access resources through window.opener. This pref is
10131# effective only when "privacy.firstparty.isolate" is true.
10132- name: privacy.firstparty.isolate.restrict_opener_access
10133  type: RelaxedAtomicBool
10134  value: true
10135  mirror: always
10136
10137- name: privacy.firstparty.isolate.block_post_message
10138  type: RelaxedAtomicBool
10139  value: false
10140  mirror: always
10141
10142- name: privacy.firstparty.isolate.use_site
10143  type: RelaxedAtomicBool
10144  value: false
10145  mirror: always
10146
10147# Enforce tracking protection in all modes.
10148- name: privacy.trackingprotection.enabled
10149  type: bool
10150  value: false
10151  mirror: always
10152
10153# Enforce tracking protection in Private Browsing mode.
10154- name: privacy.trackingprotection.pbmode.enabled
10155  type: bool
10156  value: true
10157  mirror: always
10158
10159# Annotate channels based on the tracking protection list in all modes
10160- name: privacy.trackingprotection.annotate_channels
10161  type: bool
10162  value: true
10163  mirror: always
10164
10165# Block 3rd party fingerprinting resources.
10166- name: privacy.trackingprotection.fingerprinting.enabled
10167  type: bool
10168  value: false
10169  mirror: always
10170
10171# Block 3rd party cryptomining resources.
10172- name: privacy.trackingprotection.cryptomining.enabled
10173  type: bool
10174  value: false
10175  mirror: always
10176
10177# Block 3rd party socialtracking resources.
10178- name: privacy.trackingprotection.socialtracking.enabled
10179  type: bool
10180  value: false
10181  mirror: always
10182
10183# Consider socialtracking annotation as trackers (see ETP).
10184- name: privacy.socialtracking.block_cookies.enabled
10185  type: bool
10186  value: true
10187  mirror: always
10188
10189# Whether Origin Telemetry should be enabled.
10190# NOTE: if telemetry.origin_telemetry_test_mode.enabled is enabled, this pref
10191#       won't have any effect.
10192- name: privacy.trackingprotection.origin_telemetry.enabled
10193  type: RelaxedAtomicBool
10194  value: @IS_NIGHTLY_BUILD@
10195  mirror: always
10196
10197- name: privacy.trackingprotection.testing.report_blocked_node
10198  type: RelaxedAtomicBool
10199  value: false
10200  mirror: always
10201
10202# Whether to spoof user locale to English (used as part of Resist
10203# Fingerprinting).
10204# 0 - will prompt
10205# 1 - don't spoof
10206# 2 - spoof
10207- name: privacy.spoof_english
10208  type: RelaxedAtomicUint32
10209  value: 0
10210  mirror: always
10211
10212# Send "do not track" HTTP header, disabled by default.
10213- name: privacy.donottrackheader.enabled
10214  type: bool
10215  value: false
10216  mirror: always
10217
10218# Lower the priority of network loads for resources on the tracking protection
10219# list.  Note that this requires the
10220# privacy.trackingprotection.annotate_channels pref to be on in order to have
10221# any effect.
10222- name: privacy.trackingprotection.lower_network_priority
10223  type: bool
10224  value: @IS_NIGHTLY_BUILD@
10225  mirror: always
10226
10227# A subset of Resist Fingerprinting protections focused specifically on timers.
10228# This affects the Animation API, the performance APIs, Date.getTime,
10229# Event.timestamp, File.lastModified, audioContext.currentTime,
10230# canvas.captureStream.currentTime.
10231- name: privacy.reduceTimerPrecision
10232  type: RelaxedAtomicBool
10233  value: true
10234  mirror: always
10235
10236# If privacy.reduceTimerPrecision is false, this pref controls whether or not
10237# to clamp all timers at a fixed 20 microsconds. It should always be enabled,
10238# and is only specified as a pref to enable an emergency disabling in the event
10239# of catastrophic failure.
10240- name: privacy.reduceTimerPrecision.unconditional
10241  type: RelaxedAtomicBool
10242  value: true
10243  mirror: always
10244
10245# The resistFingerprinting variables are marked with 'Relaxed' memory ordering.
10246# We don't particurally care that threads have a percently consistent view of
10247# the values of these prefs. They are not expected to change often, and having
10248# an outdated view is not particurally harmful. They will eventually become
10249# consistent.
10250#
10251# The variables will, however, be read often (specifically .microseconds on
10252# each timer rounding) so performance is important.
10253
10254- name: privacy.resistFingerprinting
10255  type: RelaxedAtomicBool
10256  value: false
10257  mirror: always
10258
10259# We automatically decline canvas permission requests if they are not initiated
10260# from user input. Just in case that breaks something, we allow the user to
10261# revert this behavior with this obscure pref. We do not intend to support this
10262# long term. If you do set it, to work around some broken website, please file
10263# a bug with information so we can understand why it is needed.
10264- name: privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts
10265  type: bool
10266  value: true
10267  mirror: always
10268
10269# Whether canvas extraction should result in random data. If false, canvas
10270# extraction results in all-white, opaque pixel data.
10271- name: privacy.resistFingerprinting.randomDataOnCanvasExtract
10272  type: RelaxedAtomicBool
10273  value: true
10274  mirror: always
10275
10276# The log level for browser console messages logged in RFPHelper.jsm. Change to
10277# 'All' and restart to see the messages.
10278- name: privacy.resistFingerprinting.jsmloglevel
10279  type: String
10280  value: "Warn"
10281  mirror: never
10282
10283# Enable jittering the clock one precision value forward.
10284- name: privacy.resistFingerprinting.reduceTimerPrecision.jitter
10285  type: RelaxedAtomicBool
10286  value: true
10287  mirror: always
10288
10289# Dynamically tune the resolution of the timer reduction for
10290# `privacy.reduceTimerPrecision` and `privacy.resistFingerprinting`.
10291- name: privacy.resistFingerprinting.reduceTimerPrecision.microseconds
10292  type: RelaxedAtomicUint32
10293  value: 1000
10294  mirror: always
10295
10296- name: privacy.resistFingerprinting.target_video_res
10297  type: uint32_t
10298  value: 480
10299  mirror: always
10300
10301# Bitfield for selectively disabling RFP
10302#   0 for no new behavior
10303#   1 for disabling RFP if it's a WebExtension
10304#   2 for disabling RFP if we are not in PBM
10305#   4 for disabling RFP on specific domains (see privacy.resistFingerprinting.exemptedDomains)
10306- name: privacy.resistFingerprinting.testGranularityMask
10307  type: RelaxedAtomicUint32
10308  value: 0
10309  mirror: always
10310
10311# Anti-tracking permission expiration.
10312- name: privacy.restrict3rdpartystorage.expiration
10313  type: uint32_t
10314  value: 2592000   # 30 days (in seconds)
10315  mirror: always
10316
10317# Report Anti-tracking warnings to console lazily
10318- name: privacy.restrict3rdpartystorage.console.lazy
10319  type: bool
10320  value: true
10321  mirror: always
10322
10323# Enable the heuristic to allow storage access for windows opened using window.open() after user interaction
10324- name: privacy.restrict3rdpartystorage.heuristic.opened_window_after_interaction
10325  type: bool
10326  value: true
10327  mirror: always
10328
10329# Enable the heuristic to allow storage access for windows opened using window.open()
10330- name: privacy.restrict3rdpartystorage.heuristic.window_open
10331  type: bool
10332  value: true
10333  mirror: always
10334
10335# Enable the heuristic to allow storage access for windows opened using window.open()
10336- name: privacy.restrict3rdpartystorage.heuristic.redirect
10337  type: bool
10338  value: true
10339  mirror: always
10340
10341# Anti-tracking permission expiration.
10342- name: privacy.restrict3rdpartystorage.expiration_redirect
10343  type: uint32_t
10344  value: 900    # 15 minutes
10345  mirror: always
10346
10347# Anti-tracking user-interaction expiration.
10348- name: privacy.userInteraction.expiration
10349  type: uint32_t
10350  value: 3888000   # 45 days (in seconds)
10351  mirror: always
10352
10353# Anti-tracking user-interaction document interval.
10354- name: privacy.userInteraction.document.interval
10355  type: uint32_t
10356  value: 1800   # 30 minutes (in seconds)
10357  mirror: always
10358
10359# Enable Anti-tracking testing. When it enables, it will notify the observers
10360# when user-interaction permission or storage access permission is added. This
10361# is for testing only.
10362- name: privacy.antitracking.testing
10363  type: bool
10364  value: false
10365  mirror: always
10366
10367# Enable the heuristic to allow storage access for recent visited pages
10368- name: privacy.restrict3rdpartystorage.heuristic.recently_visited
10369  type: bool
10370  value: true
10371  mirror: always
10372
10373# Valid time gap since last visit
10374- name: privacy.restrict3rdpartystorage.heuristic.recently_visited_time
10375  type: uint32_t
10376  value: 600    # 10 minutes
10377  mirror: always
10378
10379# Recent visited pages redirection permission expiration.
10380- name: privacy.restrict3rdpartystorage.expiration_visited
10381  type: uint32_t
10382  value: 2592000   # 30 days (in seconds)
10383  mirror: always
10384
10385# Maximum client-side cookie life-time cap. Measured in seconds, set to 0 to
10386# disable.
10387- name: privacy.documentCookies.maxage
10388  type: uint32_t
10389  value: 0
10390  mirror: always
10391
10392- name: privacy.storagePrincipal.enabledForTrackers
10393  type: RelaxedAtomicBool
10394  value: false
10395  mirror: always
10396
10397- name: privacy.window.maxInnerWidth
10398  type: int32_t
10399  value: 1000
10400  mirror: always
10401
10402- name: privacy.window.maxInnerHeight
10403  type: int32_t
10404  value: 1000
10405  mirror: always
10406
10407- name: privacy.sanitize.sanitizeOnShutdown
10408  type: RelaxedAtomicBool
10409  value: false
10410  mirror: always
10411
10412- name: privacy.clearOnShutdown.cache
10413  type: RelaxedAtomicBool
10414  value: false
10415  mirror: always
10416
10417- name: privacy.dynamic_firstparty.limitForeign
10418  type: RelaxedAtomicBool
10419  value: false
10420  mirror: always
10421
10422- name: privacy.dynamic_firstparty.use_site
10423  type: RelaxedAtomicBool
10424  value: true
10425  mirror: always
10426
10427- name: privacy.partition.network_state
10428  type: RelaxedAtomicBool
10429  value: true
10430  mirror: always
10431
10432- name: privacy.partition.bloburl_per_agent_cluster
10433  type: RelaxedAtomicBool
10434  value: @IS_NIGHTLY_BUILD@
10435  mirror: always
10436
10437- name: privacy.window.name.update.enabled
10438  type: bool
10439  value: true
10440  mirror: always
10441
10442# By default, the network state isolation is not active when there is a proxy
10443# setting. This pref forces the network isolation even in these scenarios.
10444- name: privacy.partition.network_state.connection_with_proxy
10445  type: bool
10446  value: false
10447  mirror: always
10448
10449# The global switch to control the URL query sting stripping which strips query
10450# parameters from loading URIs to prevent bounce (redirect) tracking.
10451- name: privacy.query_stripping.enabled
10452  type: RelaxedAtomicBool
10453  value: false
10454  mirror: always
10455
10456# The list which contains query parameters that are needed to be stripped from
10457# URIs. The query parameters are separated by a space.
10458- name: privacy.query_stripping.strip_list
10459  type: String
10460  value: ""
10461  mirror: never
10462
10463# This controls if we will do the query string stripping for redirects.
10464- name: privacy.query_stripping.redirect
10465  type: bool
10466  value: true
10467  mirror: always
10468
10469# the list which contains sites where should exempt from query stripping
10470- name: privacy.query_stripping.allow_list
10471  type: String
10472  value: ""
10473  mirror: never
10474
10475#---------------------------------------------------------------------------
10476# Prefs starting with "prompts."
10477#---------------------------------------------------------------------------
10478
10479# Prompt modal type prefs
10480# See nsIPromptService::MODAL_TYPE fields for possible values.
10481
10482# Insecure form submit warning.
10483- name: prompts.modalType.insecureFormSubmit
10484  type: int32_t
10485  value: 2
10486  mirror: always
10487
10488# nsHttpChannelAuthProvider#ConfirmAuth anti-phishing prompts.
10489- name: prompts.modalType.confirmAuth
10490  type: int32_t
10491  value: 2
10492  mirror: always
10493
10494#---------------------------------------------------------------------------
10495# Prefs starting with "security."
10496#---------------------------------------------------------------------------
10497
10498# Mochitests that need to load resource:// URIs not declared content-accessible
10499# in manifests should set this pref.
10500- name: security.all_resource_uri_content_accessible
10501  type: bool
10502  value: false
10503  mirror: always
10504
10505- name: security.bad_cert_domain_error.url_fix_enabled
10506  type: bool
10507  value: true
10508  mirror: always
10509
10510- name: security.csp.enable
10511  type: bool
10512  value: true
10513  mirror: always
10514
10515- name: security.csp.reporting.script-sample.max-length
10516  type: int32_t
10517  value: 40
10518  mirror: always
10519
10520- name: security.csp.truncate_blocked_uri_for_frame_navigations
10521  type: bool
10522  value: true
10523  mirror: always
10524
10525# If true, all toplevel data: URI navigations will be blocked.
10526# Please note that manually entering a data: URI in the
10527# URL-Bar will not be blocked when flipping this pref.
10528- name: security.data_uri.block_toplevel_data_uri_navigations
10529  type: bool
10530  value: true
10531  mirror: always
10532
10533# Whether window A is allowed to navigate cross-origin window B (that is not
10534# a descendant frame of A) to a URI that loads externally.
10535- name: security.allow_disjointed_external_uri_loads
10536  type: bool
10537  value: false
10538  mirror: always
10539
10540# Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
10541# not allowed for Firefox Desktop in firefox.js
10542- name: security.allow_parent_unrestricted_js_loads
10543  type: RelaxedAtomicBool
10544  value: true
10545  mirror: always
10546
10547# Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
10548# not allowed for Firefox Desktop in firefox.js
10549- name: security.allow_eval_with_system_principal
10550  type: RelaxedAtomicBool
10551  value: true
10552  mirror: always
10553
10554# Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
10555# not allowed for Firefox Desktop in firefox.js
10556- name: security.allow_eval_in_parent_process
10557  type: RelaxedAtomicBool
10558  value: true
10559  mirror: always
10560
10561# Disallowed by default, ensure not disallowed content is loaded in the parent
10562# process.
10563- name: security.allow_unsafe_parent_loads
10564  type: bool
10565  value: false
10566  mirror: always
10567
10568# Pref to block mixed scripts (fonts, plugin content, scripts, stylesheets,
10569# iframes, websockets, XHR).
10570- name: security.mixed_content.block_active_content
10571  type: bool
10572  value: @IS_ANDROID@
10573  mirror: always
10574
10575# Pref to block sub requests that happen within an object.
10576- name: security.mixed_content.block_object_subrequest
10577  type: bool
10578  value: false
10579  mirror: always
10580
10581# Pref for mixed display content blocking (images, audio, video).
10582- name: security.mixed_content.block_display_content
10583  type: bool
10584  value: false
10585  mirror: always
10586
10587# Pref for mixed display content upgrading (images, audio, video).
10588- name: security.mixed_content.upgrade_display_content
10589  type: bool
10590  value: false
10591  mirror: always
10592
10593# Whether strict file origin policy is in effect. "False" is traditional.
10594- name: security.fileuri.strict_origin_policy
10595  type: RelaxedAtomicBool
10596  value: true
10597  mirror: always
10598
10599
10600# The level to which we sandbox the content process. firefox.js sets the
10601# default to different values on a per-OS basis, and has documentation
10602# on what the defaults are and what the numbers mean.
10603- name: security.sandbox.content.level
10604  type: int32_t
10605  value: 0
10606  mirror: always
10607  do_not_use_directly: true # Consumers should use SandboxSettings to ask.
10608
10609- name: security.sandbox.socket.process.level
10610  type: int32_t
10611  value: 0
10612  mirror: always
10613  do_not_use_directly: true # Consumers should use SandboxSettings to ask.
10614
10615
10616# Whether win32k is disabled for content processes.
10617# true means win32k system calls are not permitted.
10618# (This cannot be put behind the XP_WIN and MOZ_SANDBOX guards because
10619#  "Nightly Experiments" has no way to filter options based on OS or other
10620#  CPP defines, and it fails if the pref doesn't exist)
10621- name: security.sandbox.content.win32k-disable
10622  type: RelaxedAtomicBool
10623  value: false
10624  mirror: always
10625
10626#if defined(XP_WIN) && defined(MOZ_SANDBOX)
10627  # Note: win32k is currently _not_ disabled for GMP due to intermittent test
10628  # failures, where the GMP process fails very early. See bug 1449348.
10629-   name: security.sandbox.gmp.win32k-disable
10630    type: RelaxedAtomicBool
10631    value: false
10632    mirror: always
10633
10634  # Whether win32k is disabled for socket processes.
10635  # true means win32k system calls are not permitted.
10636-   name: security.sandbox.socket.win32k-disable
10637    type: RelaxedAtomicBool
10638    value: true
10639    mirror: always
10640
10641  # Whether CET Shadow Stacks Strict mode is enabled for the content processes.
10642-   name: security.sandbox.content.shadow-stacks-strict
10643    type: RelaxedAtomicBool
10644    value: false
10645    mirror: always
10646
10647  # Whether CET Shadow Stacks Strict mode is enabled for the RDD processes.
10648-   name: security.sandbox.rdd.shadow-stacks-strict
10649    type: RelaxedAtomicBool
10650    value: false
10651    mirror: always
10652
10653  # Whether CET Shadow Stacks Strict mode is enabled for the socket processes.
10654-   name: security.sandbox.socket.shadow-stacks-strict
10655    type: RelaxedAtomicBool
10656    value: false
10657    mirror: always
10658
10659  # Whether CET Shadow Stacks Strict mode is enabled for the GPU processes.
10660-   name: security.sandbox.gpu.shadow-stacks-strict
10661    type: RelaxedAtomicBool
10662    value: false
10663    mirror: always
10664
10665  # Whether CET Shadow Stacks Strict mode is enabled for the GMP processes.
10666-   name: security.sandbox.gmp.shadow-stacks-strict
10667    type: RelaxedAtomicBool
10668    value: false
10669    mirror: always
10670
10671  # This controls the depth of stack trace that is logged when Windows sandbox
10672  # logging is turned on. This is only currently available for the content
10673  # process because the only other sandbox (for GMP) has too strict a policy to
10674  # allow stack tracing. This does not require a restart to take effect.
10675-   name: security.sandbox.windows.log.stackTraceDepth
10676    type: RelaxedAtomicUint32
10677    value: 0
10678    mirror: always
10679#endif
10680
10681#if defined(XP_LINUX) && defined(MOZ_SANDBOX)
10682  # Run content processes in headless mode and disallow connections to
10683  # the X server.  Experimental; breaks WebGL and Flash, and requires
10684  # `widget.non-native-theme.enabled` and `widget.remote-look-and-feel`.
10685  # Changing it requires a restart because sandbox policy information dependent
10686  # on it is cached.  See bug 1640345 for details.
10687- name: security.sandbox.content.headless
10688  type: bool
10689  value: false
10690  mirror: once
10691#endif
10692
10693# Pref to show warning when submitting from secure to insecure.
10694- name: security.warn_submit_secure_to_insecure
10695  type: bool
10696  value: true
10697  mirror: always
10698
10699# Hardware Origin-bound Second Factor Support
10700- name: security.webauth.webauthn
10701  type: bool
10702  value: true
10703  mirror: always
10704
10705# Navigate-to CSP 3 directive
10706- name: security.csp.enableNavigateTo
10707  type: bool
10708  value: false
10709  mirror: always
10710
10711# No way to enable on Android, Bug 1552602
10712- name: security.webauth.u2f
10713  type: bool
10714  value: @IS_NOT_ANDROID@
10715  mirror: always
10716
10717# Block Worker/SharedWorker scripts with wrong MIME type.
10718- name: security.block_Worker_with_wrong_mime
10719  type: bool
10720  value: true
10721  mirror: always
10722
10723# Cancel outgoing requests from SystemPrincipal
10724- name: security.cancel_non_local_loads_triggered_by_systemprincipal
10725  type: bool
10726  value: false
10727  mirror: always
10728
10729# Disable preloaded static key pins by default.
10730- name: security.cert_pinning.enforcement_level
10731  type: ReleaseAcquireAtomicUint32
10732  value: 0
10733  mirror: always
10734  do_not_use_directly: true
10735
10736#---------------------------------------------------------------------------
10737# Prefs starting with "signon."
10738#---------------------------------------------------------------------------
10739- name: signon.usernameOnlyForm.enabled
10740  type: bool
10741  value: @IS_EARLY_BETA_OR_EARLIER@
10742  mirror: always
10743
10744#---------------------------------------------------------------------------
10745# Prefs starting with "slider."
10746#---------------------------------------------------------------------------
10747
10748# Scrollbar snapping region.
10749# - 0: off
10750# - 1 and higher: slider thickness multiple
10751- name: slider.snapMultiplier
10752  type: int32_t
10753#ifdef XP_WIN
10754  value: 6
10755#else
10756  value: 0
10757#endif
10758  mirror: once
10759
10760#---------------------------------------------------------------------------
10761# Prefs starting with "storage."
10762#---------------------------------------------------------------------------
10763
10764# Whether to use a non-exclusive VFS.
10765# By default we use the unix-excl VFS, for the following reasons:
10766# 1. It improves compatibility with NFS shares, whose implementation
10767#    is incompatible with SQLite's locking requirements (reliable fcntl), and
10768#    in particular with WAL journaling.
10769#    Bug 433129 attempted to automatically identify such file-systems,
10770#    but a reliable way was not found and the fallback locking is slower than
10771#    POSIX locking, so we do not want to do it by default.
10772# 2. It allows wal mode to avoid the memory mapped -shm file, reducing the
10773#    likelihood of SIGBUS failures when disk space is exhausted.
10774# 3. It provides some protection from third party database tampering while a
10775#    connection is open.
10776# Note there's no win32-excl VFS, so this has no effect on Windows.
10777- name: storage.sqlite.exclusiveLock.enabled
10778  type: RelaxedAtomicBool
10779  value: @IS_NOT_ANDROID@
10780  mirror: always
10781
10782#---------------------------------------------------------------------------
10783# Prefs starting with "svg."
10784#---------------------------------------------------------------------------
10785
10786# This pref controls whether the 'context-fill' and 'context-stroke' keywords
10787# can be used in SVG-as-an-image in the content processes to use the fill/
10788# stroke specified on the element that embeds the image. (These keywords are
10789# always enabled in the chrome process, regardless of this pref.) Also, these
10790# keywords are currently not part of any spec, which is partly why we disable
10791# them for web content.
10792- name: svg.context-properties.content.enabled
10793  type: RelaxedAtomicBool
10794  value: false
10795  mirror: always
10796
10797# Enables the 'context-fill' and 'context-stroke' keywords for particular
10798# domains. We expect this list to be Mozilla-controlled properties, since the
10799# 'context-*' keywords are not part of any spec. We expect to remove this
10800# preference and the 'context-` keyword support entirely in the
10801# not-too-distant future when a standardized alternative ships. This preference
10802# is _not_ for allowing web content to use these keywords. For performance
10803# reasons, the list of domains in this preference should remain short in
10804# length.
10805- name: svg.context-properties.content.allowed-domains
10806  type: String
10807  value: ""
10808  mirror: never
10809
10810# Enable the use of display-lists for SVG hit-testing.
10811- name: svg.display-lists.hit-testing.enabled
10812  type: bool
10813  value: true
10814  mirror: always
10815
10816# Enable the use of display-lists for SVG painting.
10817- name: svg.display-lists.painting.enabled
10818  type: bool
10819  value: true
10820  mirror: always
10821
10822# Is support for the new getBBox method from SVG 2 enabled?
10823# See https://svgwg.org/svg2-draft/single-page.html#types-SVGBoundingBoxOptions
10824- name: svg.new-getBBox.enabled
10825  type: bool
10826  value: false
10827  mirror: always
10828
10829#---------------------------------------------------------------------------
10830# Prefs starting with "telemetry."
10831#---------------------------------------------------------------------------
10832
10833# Enable origin telemetry test mode or not
10834# NOTE: turning this on will override the
10835#       privacy.trackingprotection.origin_telemetry.enabled pref.
10836- name: telemetry.origin_telemetry_test_mode.enabled
10837  type: RelaxedAtomicBool
10838  value: false
10839  mirror: always
10840
10841- name: telemetry.number_of_site_origin.min_interval
10842  type: uint32_t
10843  value: 300000
10844  mirror: always
10845
10846- name: telemetry.fog.test.localhost_port
10847  type: RelaxedAtomicInt32
10848  value: 0
10849  mirror: always
10850  rust: true
10851
10852- name: telemetry.fog.test.activity_limit
10853  type: RelaxedAtomicUint32
10854  value: 120
10855  mirror: always
10856  rust: true
10857
10858- name: telemetry.fog.test.inactivity_limit
10859  type: RelaxedAtomicUint32
10860  value: 1200
10861  mirror: always
10862  rust: true
10863
10864#---------------------------------------------------------------------------
10865# Prefs starting with "test."
10866#---------------------------------------------------------------------------
10867
10868- name: test.events.async.enabled
10869  type: RelaxedAtomicBool
10870  value: false
10871  mirror: always
10872
10873- name: test.mousescroll
10874  type: RelaxedAtomicBool
10875  value: false
10876  mirror: always
10877
10878#---------------------------------------------------------------------------
10879# Prefs starting with "thread."
10880#---------------------------------------------------------------------------
10881
10882- name: threads.medium_high_event_queue.enabled
10883  type: RelaxedAtomicBool
10884  value: true
10885  mirror: always
10886
10887# If control tasks aren't enabled, they get medium high priority.
10888- name: threads.control_event_queue.enabled
10889  type: RelaxedAtomicBool
10890  value: true
10891  mirror: always
10892
10893#---------------------------------------------------------------------------
10894# Prefs starting with "timer."
10895#---------------------------------------------------------------------------
10896
10897# Since our timestamp on macOS does not increment while the system is asleep, we
10898# should ignore sleep/wake notifications to make timer thread process timers.
10899- name: timer.ignore_sleep_wake_notifications
10900  type: RelaxedAtomicBool
10901#ifdef XP_MACOSX
10902  value: true
10903#else
10904  value: false
10905#endif
10906  mirror: always
10907
10908#---------------------------------------------------------------------------
10909# Prefs starting with "toolkit."
10910#---------------------------------------------------------------------------
10911
10912# Returns true if BHR is disabled.
10913- name: toolkit.content-background-hang-monitor.disabled
10914  type: bool
10915  value: false
10916  mirror: always
10917
10918- name: toolkit.scrollbox.horizontalScrollDistance
10919  type: RelaxedAtomicInt32
10920  value: 5
10921  mirror: always
10922
10923- name: toolkit.scrollbox.verticalScrollDistance
10924  type: RelaxedAtomicInt32
10925  value: 3
10926  mirror: always
10927
10928# The lateWriteChecksStage and fastShutdownStage below represent the stage
10929# of shutdown after which we (for lateWriteChecksStage) crash / gather
10930# telemetry data on file writes, or (for fastShutdownStage) we call _exit(0).
10931# Higher values are earlier during shutdown, and the full enumeration can
10932# be found in AppShutdown.h in the AppShutdownPhase enum.
10933- name: toolkit.shutdown.lateWriteChecksStage
10934  type: int32_t
10935#ifdef MOZ_CODE_COVERAGE
10936  value: 0
10937#else
10938  value: 3
10939#endif
10940  mirror: always
10941
10942# See the comment above toolkit.shutdown.lateWriteChecksStage. A higher value
10943# for this pref means we call _exit(0) earlier during shutdown.
10944- name: toolkit.shutdown.fastShutdownStage
10945  type: int32_t
10946#if !defined(DEBUG) && !defined(MOZ_ASAN) && !defined(MOZ_TSAN) && !defined(MOZ_CODE_COVERAGE) && !defined(MOZ_VALGRIND) && !defined(MOZ_PROFILE_GENERATE) && !defined(JS_STRUCTURED_SPEW)
10947  value: 1
10948#else
10949  value: 0
10950#endif
10951  mirror: always
10952
10953# Sending each remote accumulation immediately places undue strain on the IPC
10954# subsystem. Batch the remote accumulations for a period of time before sending
10955# them all at once. This value was chosen as a balance between data timeliness
10956# and performance (see bug 1218576).
10957- name: toolkit.telemetry.ipcBatchTimeout
10958  type: uint32_t
10959  value: 2000
10960  mirror: always
10961
10962- name: toolkit.telemetry.geckoview.batchDurationMS
10963  type: RelaxedAtomicUint32
10964  value: 5000
10965  mirror: always
10966
10967- name: toolkit.telemetry.geckoview.maxBatchStalenessMS
10968  type: RelaxedAtomicUint32
10969  value: 60000
10970  mirror: always
10971
10972- name: toolkit.telemetry.geckoview.streaming
10973  type: RelaxedAtomicBool
10974  value: false
10975  mirror: always
10976
10977- name: toolkit.telemetry.testing.overrideProductsCheck
10978  type: RelaxedAtomicBool
10979  value: false
10980  mirror: always
10981
10982#---------------------------------------------------------------------------
10983# Prefs starting with "ui."
10984#---------------------------------------------------------------------------
10985
10986- name: ui.key.generalAccessKey
10987  type: int32_t
10988  value: -1
10989  mirror: always
10990
10991# Only used if generalAccessKey is -1.
10992- name: ui.key.chromeAccess
10993  type: int32_t
10994#ifdef XP_MACOSX
10995  # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 3 =  ctrl+shift, 8 = Meta
10996  value: 2
10997#else
10998  # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 5 =  Alt+Shift,
10999  # 8 = Meta, 16 = Win
11000  value: 4
11001#endif
11002  mirror: always
11003
11004# Only used if generalAccessKey is -1.
11005- name: ui.key.contentAccess
11006  type: int32_t
11007#ifdef XP_MACOSX
11008  # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 3 = ctrl+shift, 8 = Meta
11009  value: 6
11010#else
11011  # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 5 =  Alt+Shift,
11012  # 8 = Meta, 16 = Win
11013  value: 5
11014#endif
11015  mirror: always
11016
11017# Does the access key by itself focus the menu bar?
11018- name: ui.key.menuAccessKeyFocuses
11019  type: bool
11020#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
11021  # On Windows and Linux, we now default to showing the menu bar only when alt
11022  # is pressed.
11023  value: true
11024#else
11025  value: false
11026#endif
11027  mirror: always
11028
11029# Duration of timeout of incremental search in menus (ms).  0 means infinite.
11030- name: ui.menu.incremental_search.timeout
11031  type: uint32_t
11032  value: 1000
11033  mirror: always
11034
11035# If true, all popups won't hide automatically on blur
11036- name: ui.popup.disable_autohide
11037  type: RelaxedAtomicBool
11038  value: false
11039  mirror: always
11040
11041# Negate scroll, true will make the mouse scroll wheel move the screen the
11042# same direction as with most desktops or laptops.
11043- name: ui.scrolling.negate_wheel_scroll
11044  type: RelaxedAtomicBool
11045  value: @IS_ANDROID@
11046  mirror: always
11047
11048# If the user puts a finger down on an element and we think the user might be
11049# executing a pan gesture, how long do we wait before tentatively deciding the
11050# gesture is actually a tap and activating the target element?
11051- name: ui.touch_activation.delay_ms
11052  type: int32_t
11053  value: 100
11054  mirror: always
11055
11056# If the user has clicked an element, how long do we keep the :active state
11057# before it is cleared by the mouse sequences fired after a
11058# touchstart/touchend.
11059- name: ui.touch_activation.duration_ms
11060  type: int32_t
11061  value: 10
11062  mirror: always
11063
11064# Prevent system colors from being exposed to CSS or canvas.
11065- name: ui.use_standins_for_native_colors
11066  type: RelaxedAtomicBool
11067  value: false
11068  mirror: always
11069
11070# Disable page loading activity cursor by default.
11071- name: ui.use_activity_cursor
11072  type: bool
11073  value: false
11074  mirror: always
11075
11076# Whether context menus should only appear on mouseup instead of mousedown,
11077# on OSes where they normally appear on mousedown (macOS, *nix).
11078# Note: ignored on Windows (context menus always use mouseup).
11079- name: ui.context_menus.after_mouseup
11080  type: bool
11081  value: false
11082  mirror: always
11083
11084# Whether click-hold context menus are enabled.
11085- name: ui.click_hold_context_menus
11086  type: RelaxedAtomicBool
11087  value: false
11088  mirror: always
11089
11090# How long to wait for a drag gesture before displaying click-hold context menu,
11091# in milliseconds.
11092- name: ui.click_hold_context_menus.delay
11093  type: RelaxedAtomicInt32
11094  value: 500
11095  mirror: always
11096
11097# When enabled, the touch.radius and mouse.radius prefs allow events to be
11098# dispatched to nearby elements that are sensitive to the event. See
11099# PositionedEventTargeting.cpp. The 'mm' prefs define a rectangle around the
11100# nominal event target point within which we will search for suitable elements.
11101# 'visitedWeight' is a percentage weight; a value > 100 makes a visited link be
11102# treated as further away from the event target than it really is, while a
11103# value < 100 makes a visited link be treated as closer to the event target
11104# than it really is.
11105
11106- name: ui.touch.radius.enabled
11107  type: bool
11108  value: @IS_ANDROID@
11109  mirror: always
11110
11111- name: ui.touch.radius.topmm
11112  type: uint32_t
11113#ifdef ANDROID
11114  value: 5
11115#else
11116  value: 12
11117#endif
11118  mirror: always
11119
11120- name: ui.touch.radius.rightmm
11121  type: uint32_t
11122#ifdef ANDROID
11123  value: 3
11124#else
11125  value: 8
11126#endif
11127  mirror: always
11128
11129- name: ui.touch.radius.bottommm
11130  type: uint32_t
11131#ifdef ANDROID
11132  value: 2
11133#else
11134  value: 4
11135#endif
11136  mirror: always
11137
11138- name: ui.touch.radius.leftmm
11139  type: uint32_t
11140#ifdef ANDROID
11141  value: 3
11142#else
11143  value: 8
11144#endif
11145  mirror: always
11146
11147- name: ui.touch.radius.visitedWeight
11148  type: uint32_t
11149  value: 120
11150  mirror: always
11151
11152- name: ui.mouse.radius.enabled
11153  type: bool
11154  value: @IS_ANDROID@
11155  mirror: always
11156
11157- name: ui.mouse.radius.topmm
11158  type: uint32_t
11159#ifdef ANDROID
11160  value: 5
11161#else
11162  value: 12
11163#endif
11164  mirror: always
11165
11166- name: ui.mouse.radius.rightmm
11167  type: uint32_t
11168#ifdef ANDROID
11169  value: 3
11170#else
11171  value: 8
11172#endif
11173  mirror: always
11174
11175- name: ui.mouse.radius.bottommm
11176  type: uint32_t
11177#ifdef ANDROID
11178  value: 2
11179#else
11180  value: 4
11181#endif
11182  mirror: always
11183
11184- name: ui.mouse.radius.leftmm
11185  type: uint32_t
11186#ifdef ANDROID
11187  value: 3
11188#else
11189  value: 8
11190#endif
11191  mirror: always
11192
11193- name: ui.mouse.radius.visitedWeight
11194  type: uint32_t
11195  value: 120
11196  mirror: always
11197
11198- name: ui.mouse.radius.reposition
11199  type: bool
11200  value: @IS_ANDROID@
11201  mirror: always
11202
11203# When true, the ui.mouse.radius.* prefs will only affect simulated mouse
11204# events generated by touch input. When false, the prefs will be used for all
11205# mouse events.
11206- name: ui.mouse.radius.inputSource.touchOnly
11207  type: bool
11208  value: true
11209  mirror: always
11210
11211#---------------------------------------------------------------------------
11212# Prefs starting with "urlclassifier."
11213#---------------------------------------------------------------------------
11214
11215# Update server response timeout for Safe Browsing.
11216- name: urlclassifier.update.response_timeout_ms
11217  type: uint32_t
11218  value: 30000
11219  mirror: always
11220
11221# Download update timeout for Safe Browsing.
11222- name: urlclassifier.update.timeout_ms
11223  type: uint32_t
11224  value: 90000
11225  mirror: always
11226
11227#---------------------------------------------------------------------------
11228# Prefs starting with "view_source."
11229#---------------------------------------------------------------------------
11230
11231- name: view_source.editor.external
11232  type: bool
11233  value: false
11234  mirror: always
11235
11236- name: view_source.wrap_long_lines
11237  type: bool
11238  value: @IS_ANDROID@
11239  mirror: always
11240
11241- name: view_source.syntax_highlight
11242  type: bool
11243  value: true
11244  mirror: always
11245
11246- name: view_source.tab_size
11247  type: int32_t
11248  value: 4
11249  mirror: always
11250
11251#---------------------------------------------------------------------------
11252# Prefs starting with "webgl." (for pref access from Worker threads)
11253#---------------------------------------------------------------------------
11254
11255- name: webgl.1.allow-core-profiles
11256  type: RelaxedAtomicBool
11257#ifdef XP_MACOSX
11258  value: true
11259#else
11260  value: false
11261#endif
11262  mirror: always
11263
11264- name: webgl.all-angle-options
11265  type: RelaxedAtomicBool
11266  value: false
11267  mirror: always
11268
11269- name: webgl.angle.force-d3d11
11270  type: RelaxedAtomicBool
11271  value: false
11272  mirror: always
11273
11274- name: webgl.angle.try-d3d11
11275  type: RelaxedAtomicBool
11276#ifdef XP_WIN
11277  value: true
11278#else
11279  value: false
11280#endif
11281  mirror: always
11282
11283- name: webgl.angle.force-warp
11284  type: RelaxedAtomicBool
11285  value: false
11286  mirror: always
11287
11288- name: webgl.can-lose-context-in-foreground
11289  type: RelaxedAtomicBool
11290  value: true
11291  mirror: always
11292
11293- name: webgl.cgl.multithreaded
11294  type: RelaxedAtomicBool
11295  value: true
11296  mirror: always
11297
11298- name: webgl.debug.incomplete-tex-color
11299  type: RelaxedAtomicUint32
11300  value: 0
11301  mirror: always
11302
11303- name: webgl.default-antialias
11304  type: RelaxedAtomicBool
11305  value: @IS_NOT_ANDROID@
11306  mirror: always
11307
11308- name: webgl.default-no-alpha
11309  type: RelaxedAtomicBool
11310  value: false
11311  mirror: always
11312
11313- name: webgl.disable-angle
11314  type: RelaxedAtomicBool
11315  value: false
11316  mirror: always
11317
11318- name: webgl.disable-wgl
11319  type: RelaxedAtomicBool
11320  value: false
11321  mirror: always
11322
11323- name: webgl.dxgl.enabled
11324  type: RelaxedAtomicBool
11325#ifdef XP_WIN
11326  value: true
11327#else
11328  value: false
11329#endif
11330  mirror: always
11331
11332- name: webgl.dxgl.needs-finish
11333  type: RelaxedAtomicBool
11334  value: false
11335  mirror: always
11336
11337- name: webgl.disable-fail-if-major-performance-caveat
11338  type: RelaxedAtomicBool
11339  value: true
11340  mirror: always
11341
11342- name: webgl.disable-DOM-blit-uploads
11343  type: RelaxedAtomicBool
11344  value: false
11345  mirror: always
11346
11347- name: webgl.disabled
11348  type: RelaxedAtomicBool
11349  value: false
11350  mirror: always
11351
11352- name: webgl.enable-debug-renderer-info
11353  type: RelaxedAtomicBool
11354  value: true
11355  mirror: always
11356
11357- name: webgl.enable-draft-extensions
11358  type: RelaxedAtomicBool
11359  value: false
11360  mirror: always
11361
11362- name: webgl.enable-privileged-extensions
11363  type: RelaxedAtomicBool
11364  value: false
11365  mirror: always
11366
11367- name: webgl.enable-surface-texture
11368  type: RelaxedAtomicBool
11369  value: true
11370  mirror: always
11371
11372- name: webgl.enable-ahardwarebuffer
11373  type: RelaxedAtomicBool
11374  value: false
11375  mirror: always
11376
11377- name: webgl.enable-webgl2
11378  type: RelaxedAtomicBool
11379  value: true
11380  mirror: always
11381
11382- name: webgl.force-enabled
11383  type: RelaxedAtomicBool
11384  value: false
11385  mirror: always
11386
11387- name: webgl.force-layers-readback
11388  type: RelaxedAtomicBool
11389  value: false
11390  mirror: always
11391
11392- name: webgl.force-index-validation
11393  type: RelaxedAtomicInt32
11394  value: 0
11395  mirror: always
11396
11397- name: webgl.lose-context-on-memory-pressure
11398  type: RelaxedAtomicBool
11399  value: false
11400  mirror: always
11401
11402- name: webgl.max-contexts
11403  type: RelaxedAtomicUint32
11404  value: 1000
11405  mirror: always
11406
11407- name: webgl.max-contexts-per-principal
11408  type: RelaxedAtomicUint32
11409  value: 300
11410  mirror: always
11411
11412- name: webgl.max-warnings-per-context
11413  type: RelaxedAtomicUint32
11414  value: 32
11415  mirror: always
11416
11417- name: webgl.min_capability_mode
11418  type: RelaxedAtomicBool
11419  value: false
11420  mirror: always
11421
11422- name: webgl.msaa-force
11423  type: RelaxedAtomicBool
11424  value: false
11425  mirror: always
11426
11427- name: webgl.msaa-samples
11428  type: RelaxedAtomicUint32
11429  value: 4
11430  mirror: always
11431
11432- name: webgl.out-of-process
11433  type: RelaxedAtomicBool
11434#if defined(XP_MACOSX) || defined(XP_WIN)
11435  value: true
11436#else
11437  value: false
11438#endif
11439  mirror: always
11440
11441- name: webgl.out-of-process.force
11442  type: RelaxedAtomicBool
11443  value: false
11444  mirror: always
11445
11446- name: webgl.out-of-process.shmem-size
11447  type: RelaxedAtomicUint32
11448  value: 100000 # 100KB
11449  mirror: always
11450
11451- name: webgl.power-preference-override
11452  type: RelaxedAtomicInt32
11453  value: 0
11454  mirror: always
11455
11456- name: webgl.prefer-16bpp
11457  type: RelaxedAtomicBool
11458  value: false
11459  mirror: always
11460
11461- name: webgl.allow-immediate-queries
11462  type: RelaxedAtomicBool
11463  value: false
11464  mirror: always
11465
11466- name: webgl.allow-fb-invalidation
11467  type: RelaxedAtomicBool
11468  value: false
11469  mirror: always
11470
11471
11472- name: webgl.perf.max-warnings
11473  type: RelaxedAtomicInt32
11474  value: 0
11475  mirror: always
11476
11477- name: webgl.perf.max-acceptable-fb-status-invals
11478  type: RelaxedAtomicInt32
11479  value: 0
11480  mirror: always
11481
11482- name: webgl.perf.spew-frame-allocs
11483  type: RelaxedAtomicBool
11484  value: true
11485  mirror: always
11486
11487#---------------------------------------------------------------------------
11488# Prefs starting with "widget."
11489#---------------------------------------------------------------------------
11490
11491# Global user preference for disabling native theme in content processes.
11492#
11493# NOTE(emilio): When changing this make sure to update the non_native_theme
11494# entry in python/mozbuild/mozbuild/mozinfo.py and test_fission_autostart.py
11495- name: widget.non-native-theme.enabled
11496  type: RelaxedAtomicBool
11497  value: true
11498  mirror: always
11499
11500# The size in CSS pixels at full zoom of the minimum scrollbar width.
11501- name: widget.non-native-theme.scrollbar.size
11502  type: uint32_t
11503#if defined(MOZ_WIDGET_GTK)
11504  value: 12
11505#else
11506  value: 17
11507#endif
11508  mirror: always
11509
11510# Whether the active thumb color should always use the themed colors, even if
11511# dark scrollbars are in use.
11512- name: widget.non-native-theme.scrollbar.active-always-themed
11513  type: bool
11514  value: true
11515  mirror: always
11516
11517# Whether we use the Windows CSS scrollbar sizes, or the scrollbar sizes
11518# defined above.
11519- name: widget.non-native-theme.win.scrollbar.use-system-size
11520  type: bool
11521  value: true
11522  mirror: always
11523
11524# The amount of space that the thumb should fill the scrollbar, from zero to
11525# one.
11526- name: widget.non-native-theme.gtk.scrollbar.thumb-size
11527  type: float
11528  value: 0.75
11529  mirror: always
11530
11531# The minimum size of the scroll thumb, in the scrollbar direction.
11532- name: widget.non-native-theme.gtk.scrollbar.thumb-cross-size
11533  type: uint32_t
11534  value: 40
11535  mirror: always
11536
11537# Whether the thumb should be rounded for the non-native scrollbars.
11538- name: widget.non-native-theme.gtk.scrollbar.round-thumb
11539  type: bool
11540  value: true
11541  mirror: always
11542
11543# Whether buttons shouldn't be suppressed for non-native scrollbars.
11544- name: widget.non-native-theme.gtk.scrollbar.allow-buttons
11545  type: bool
11546  value: false
11547  mirror: always
11548
11549# Whether we should use the default accent color or the theme-provided one.
11550#
11551# TODO(emilio): This should probably do the right thing in most other
11552# platforms, but stick to the standard colors on those.
11553- name: widget.non-native-theme.use-theme-accent
11554  type: bool
11555#if defined(MOZ_WIDGET_GTK) || defined(XP_MACOSX)
11556  value: true
11557#else
11558  value: false
11559#endif
11560  mirror: always
11561
11562# Whether we should try to use WebRender to render widgets.
11563- name: widget.non-native-theme.webrender
11564  type: bool
11565#if defined(XP_MACOSX)
11566  # Disabled on macOS release / beta because of a suspected AMD driver bug (see
11567  # bug 1715452).
11568  value: @IS_NIGHTLY_BUILD@
11569#else
11570  value: true
11571#endif
11572  mirror: always
11573
11574# Preference to disable dark scrollbar implementation.
11575# This is mainly for testing because dark scrollbars have to be semi-
11576# transparent, but many reftests expect scrollbars to look identical
11577# among different backgrounds.
11578# However, some users may want to disable this as well.
11579- name: widget.disable-dark-scrollbar
11580  type: bool
11581  value: false
11582  mirror: always
11583
11584- name: widget.window-transforms.disabled
11585  type: RelaxedAtomicBool
11586  value: false
11587  mirror: always
11588
11589#ifdef XP_MACOSX
11590- name: widget.macos.native-context-menus
11591  type: RelaxedAtomicBool
11592  value: true
11593  mirror: always
11594
11595- name: widget.macos.enable-pre-bigsur-workaround-for-dark-mode-context-menus
11596  type: RelaxedAtomicBool
11597  value: true
11598  mirror: always
11599
11600- name: widget.macos.support-dark-appearance
11601  type: RelaxedAtomicBool
11602  value: true
11603  mirror: always
11604#endif
11605
11606# Whether to allow gtk dark themes in content.
11607- name: widget.content.allow-gtk-dark-theme
11608  type: bool
11609  value: false
11610  mirror: always
11611
11612# Whether widget follows the firefox theme in order to choose a light / dark
11613# appearance.
11614- name: widget.gtk.follow-firefox-theme
11615  type: RelaxedAtomicBool
11616  value: true
11617  mirror: always
11618
11619# Whether we try to extract dark theme GTK colors.
11620#
11621# For now, needed for follow-firefox-theme. In the future will also be needed
11622# for the color-scheme CSS property / meta tag / etc.
11623- name: widget.gtk.alt-theme.dark
11624  type: bool
11625  value: true
11626  mirror: always
11627
11628# Whether selection colors for the non-system theme get passed from the system
11629# GTK theme.
11630- name: widget.gtk.alt-theme.selection
11631  type: bool
11632  value: true
11633  mirror: always
11634
11635# Whether form control accent colors for the non-system theme get passed from
11636# the system GTK theme.
11637- name: widget.gtk.alt-theme.accent
11638  type: bool
11639  value: true
11640  mirror: always
11641
11642# Whether the scrollbar thumb active color from the non-system theme gets
11643# passed from the system GTK theme.
11644- name: widget.gtk.alt-theme.scrollbar_active
11645  type: bool
11646  value: true
11647  mirror: always
11648
11649# Whether other scrollbar colors get passed from the real GTK theme.
11650#
11651# This is default false because light scrollbars usually match better websites,
11652# and we have automatic scrollbar darkening.
11653- name: widget.gtk.alt-theme.scrollbar
11654  type: bool
11655  value: false
11656  mirror: always
11657
11658# Whether to use gtk high contrast themes to disable content styling like on
11659# windows high contrast mode.
11660- name: widget.content.gtk-high-contrast.enabled
11661  type: bool
11662  value: true
11663  mirror: always
11664
11665# Whether to pause the compositor when a native window is minimized.
11666- name: widget.pause-compositor-when-minimized
11667  type: bool
11668  value: true
11669  mirror: always
11670
11671#ifdef MOZ_WAYLAND
11672# Whether to override the DMABuf blocklist.
11673- name: widget.dmabuf.force-enabled
11674  type: bool
11675  value: false
11676  mirror: once
11677
11678#ifdef NIGHTLY_BUILD
11679# Keep those pref hidden on non-nightly builds to avoid people accidentally
11680# turning it on.
11681
11682# Use DMABuf for content textures.
11683# For testing purposes only.
11684- name: widget.dmabuf-textures.enabled
11685  type: RelaxedAtomicBool
11686  value: false
11687  mirror: always
11688#endif
11689
11690# Smooth rendering mode for Wayland basic compositor.
11691# 0 - direct draw
11692# 1 - basic caching
11693# 2 - all caching
11694- name: widget.wayland-smooth-rendering
11695  type: RelaxedAtomicUint32
11696  value: 1
11697  mirror: always
11698
11699# Use DMABuf backend for WebGL.
11700- name: widget.dmabuf-webgl.enabled
11701  type: RelaxedAtomicBool
11702  value: true
11703  mirror: always
11704
11705# Force fractional scaling using wp_viewporter. Valid values: 0.5 - 8
11706- name: widget.wayland.fractional_buffer_scale
11707  type: float
11708  value: 0.0f
11709  mirror: once
11710
11711- name: widget.wayland.multi-buffer-software-backend.enabled
11712  type: bool
11713  value: false
11714  mirror: once
11715
11716# Use opaque region for MozContainer wl_surface
11717- name: widget.wayland.opaque-region.enabled
11718  type: bool
11719  value: true
11720  mirror: once
11721
11722# Use frame callback based vsync
11723- name: widget.wayland.vsync.enabled
11724  type: bool
11725  value: true
11726  mirror: once
11727#endif
11728
11729#---------------------------------------------------------------------------
11730# Prefs starting with "xul."
11731#---------------------------------------------------------------------------
11732
11733# Pref to control whether arrow-panel animations are enabled or not.
11734# Transitions are currently disabled on Linux due to rendering issues on
11735# certain configurations.
11736- name: xul.panel-animations.enabled
11737  type: bool
11738#ifdef MOZ_WIDGET_GTK
11739  value: false
11740#else
11741  value: true
11742#endif
11743  mirror: always
11744
11745#---------------------------------------------------------------------------
11746# Prefs starting with "zoom."
11747#---------------------------------------------------------------------------
11748
11749- name: zoom.maxPercent
11750  type: uint32_t
11751#ifdef ANDROID
11752  value: 400
11753#else
11754  value: 500
11755#endif
11756  mirror: always
11757
11758- name: zoom.minPercent
11759  type: uint32_t
11760#ifdef ANDROID
11761  value: 20
11762#else
11763  value: 30
11764#endif
11765  mirror: always
11766
11767#---------------------------------------------------------------------------
11768# End of prefs
11769#---------------------------------------------------------------------------
11770