aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Robinson <mrobinson@igalia.com>2025-01-14 14:54:06 +0100
committerGitHub <noreply@github.com>2025-01-14 13:54:06 +0000
commit0e616e0c5d2bef8a6de1df25f2419a435837ed63 (patch)
tree71a3c54941f8283e58b5d6477f6b0a9aebe044d9
parentc4c85affb50419af4b70c42fcb1f03dea3527044 (diff)
downloadservo-0e616e0c5d2bef8a6de1df25f2419a435837ed63.tar.gz
servo-0e616e0c5d2bef8a6de1df25f2419a435837ed63.zip
api: Flatten and simplify Servo preferences (#34966)
Flatten and simplify Servo's preferences code. In addition, have both preferences and options passed in as arguments to `Servo::new()` and make sure not to use the globally set preferences in `servoshell` (as much as possible now). Instead of a complex procedural macro to generate preferences, just expose a very simple derive macro that adds string based getters and setters. - All command-line parsing is moved to servoshell. - There is no longer the concept of a missing preference. - Preferences no longer have to be part of the resources bundle because they now have reasonable default values. - servoshell specific preferences are no longer part of the preferences exposed by the Servo API. Signed-off-by: Martin Robinson <mrobinson@igalia.com>
-rw-r--r--Cargo.lock26
-rw-r--r--components/bluetooth/lib.rs2
-rw-r--r--components/compositing/compositor.rs2
-rw-r--r--components/config/Cargo.toml9
-rw-r--r--components/config/basedir.rs44
-rw-r--r--components/config/lib.rs5
-rw-r--r--components/config/macro/Cargo.toml (renamed from components/config_plugins/Cargo.toml)6
-rw-r--r--components/config/macro/lib.rs55
-rw-r--r--components/config/opts.rs522
-rw-r--r--components/config/pref_util.rs282
-rw-r--r--components/config/prefs.rs999
-rw-r--r--components/config/tests/prefs.rs333
-rw-r--r--components/config_plugins/lib.rs206
-rw-r--r--components/config_plugins/parse.rs151
-rw-r--r--components/constellation/constellation.rs6
-rw-r--r--components/constellation/pipeline.rs15
-rw-r--r--components/constellation/sandboxing.rs5
-rw-r--r--components/constellation/serviceworker.rs13
-rw-r--r--components/devtools/actors/preference.rs189
-rw-r--r--components/fonts/system_font_service.rs8
-rw-r--r--components/layout_thread/lib.rs6
-rw-r--r--components/layout_thread_2020/lib.rs6
-rw-r--r--components/net/async_runtime.rs4
-rw-r--r--components/net/decoder.rs2
-rw-r--r--components/net/filemanager_thread.rs4
-rw-r--r--components/net/hsts.rs6
-rw-r--r--components/net/http_cache.rs2
-rw-r--r--components/net/image_cache.rs5
-rw-r--r--components/net/local_directory_listing.rs2
-rw-r--r--components/net/resource_thread.rs4
-rw-r--r--components/net/tests/filemanager_thread.rs7
-rw-r--r--components/script/dom/bindings/codegen/run.py23
-rw-r--r--components/script/dom/bindings/guard.rs4
-rw-r--r--components/script/dom/create.rs2
-rw-r--r--components/script/dom/document.rs14
-rw-r--r--components/script/dom/htmlmediaelement.rs2
-rw-r--r--components/script/dom/htmlscriptelement.rs2
-rw-r--r--components/script/dom/mouseevent.rs2
-rw-r--r--components/script/dom/paintworkletglobalscope.rs2
-rw-r--r--components/script/dom/permissions.rs2
-rw-r--r--components/script/dom/serviceworkerglobalscope.rs2
-rw-r--r--components/script/dom/servoparser/mod.rs2
-rw-r--r--components/script/dom/testbinding.rs17
-rw-r--r--components/script/dom/webgl2renderingcontext.rs2
-rw-r--r--components/script/dom/webglrenderingcontext.rs2
-rw-r--r--components/script/dom/webidls/AbortController.webidl2
-rw-r--r--components/script/dom/webidls/ActivatableElement.webidl4
-rw-r--r--components/script/dom/webidls/Bluetooth.webidl2
-rw-r--r--components/script/dom/webidls/BluetoothAdvertisingEvent.webidl2
-rw-r--r--components/script/dom/webidls/BluetoothCharacteristicProperties.webidl2
-rw-r--r--components/script/dom/webidls/BluetoothDevice.webidl2
-rw-r--r--components/script/dom/webidls/BluetoothPermissionResult.webidl2
-rw-r--r--components/script/dom/webidls/BluetoothRemoteGATTCharacteristic.webidl2
-rw-r--r--components/script/dom/webidls/BluetoothRemoteGATTDescriptor.webidl2
-rw-r--r--components/script/dom/webidls/BluetoothRemoteGATTServer.webidl2
-rw-r--r--components/script/dom/webidls/BluetoothRemoteGATTService.webidl2
-rw-r--r--components/script/dom/webidls/BluetoothUUID.webidl2
-rw-r--r--components/script/dom/webidls/CSS.webidl2
-rw-r--r--components/script/dom/webidls/CSSStyleValue.webidl2
-rw-r--r--components/script/dom/webidls/CanvasRenderingContext2D.webidl4
-rw-r--r--components/script/dom/webidls/Client.webidl2
-rw-r--r--components/script/dom/webidls/CompositionEvent.webidl2
-rw-r--r--components/script/dom/webidls/Crypto.webidl2
-rw-r--r--components/script/dom/webidls/CryptoKey.webidl2
-rw-r--r--components/script/dom/webidls/CustomElementRegistry.webidl2
-rw-r--r--components/script/dom/webidls/Element.webidl2
-rw-r--r--components/script/dom/webidls/ExtendableEvent.webidl2
-rw-r--r--components/script/dom/webidls/ExtendableMessageEvent.webidl2
-rw-r--r--components/script/dom/webidls/FakeXRDevice.webidl2
-rw-r--r--components/script/dom/webidls/FakeXRInputController.webidl2
-rw-r--r--components/script/dom/webidls/GPUCanvasContext.webidl2
-rw-r--r--components/script/dom/webidls/Gamepad.webidl2
-rw-r--r--components/script/dom/webidls/GamepadButton.webidl2
-rw-r--r--components/script/dom/webidls/GamepadButtonList.webidl2
-rw-r--r--components/script/dom/webidls/GamepadEvent.webidl2
-rw-r--r--components/script/dom/webidls/GamepadHapticActuator.webidl2
-rw-r--r--components/script/dom/webidls/GamepadPose.webidl2
-rw-r--r--components/script/dom/webidls/HTMLCanvasElement.webidl2
-rw-r--r--components/script/dom/webidls/HTMLElement.webidl4
-rw-r--r--components/script/dom/webidls/HTMLInputElement.webidl2
-rw-r--r--components/script/dom/webidls/HTMLVideoElement.webidl2
-rw-r--r--components/script/dom/webidls/ImageBitmap.webidl2
-rw-r--r--components/script/dom/webidls/IntersectionObserver.webidl2
-rw-r--r--components/script/dom/webidls/IntersectionObserverEntry.webidl2
-rw-r--r--components/script/dom/webidls/MediaDeviceInfo.webidl2
-rw-r--r--components/script/dom/webidls/MediaDevices.webidl4
-rw-r--r--components/script/dom/webidls/MouseEvent.webidl2
-rw-r--r--components/script/dom/webidls/MutationObserver.webidl2
-rw-r--r--components/script/dom/webidls/MutationRecord.webidl2
-rw-r--r--components/script/dom/webidls/NavigationPreloadManager.webidl2
-rw-r--r--components/script/dom/webidls/Navigator.webidl8
-rw-r--r--components/script/dom/webidls/OffscreenCanvas.webidl2
-rw-r--r--components/script/dom/webidls/OffscreenCanvasRenderingContext2D.webidl2
-rw-r--r--components/script/dom/webidls/PaintRenderingContext2D.webidl2
-rw-r--r--components/script/dom/webidls/PaintSize.webidl2
-rw-r--r--components/script/dom/webidls/PaintWorkletGlobalScope.webidl4
-rw-r--r--components/script/dom/webidls/PerformanceNavigationTiming.webidl2
-rw-r--r--components/script/dom/webidls/PermissionStatus.webidl2
-rw-r--r--components/script/dom/webidls/Permissions.webidl2
-rw-r--r--components/script/dom/webidls/RTCDataChannel.webidl2
-rw-r--r--components/script/dom/webidls/RTCDataChannelEvent.webidl2
-rw-r--r--components/script/dom/webidls/RTCError.webidl2
-rw-r--r--components/script/dom/webidls/RTCErrorEvent.webidl2
-rw-r--r--components/script/dom/webidls/RTCIceCandidate.webidl2
-rw-r--r--components/script/dom/webidls/RTCPeerConnection.webidl4
-rw-r--r--components/script/dom/webidls/RTCPeerConnectionIceEvent.webidl2
-rw-r--r--components/script/dom/webidls/RTCRtpSender.webidl2
-rw-r--r--components/script/dom/webidls/RTCRtpTransceiver.webidl2
-rw-r--r--components/script/dom/webidls/RTCSessionDescription.webidl2
-rw-r--r--components/script/dom/webidls/RTCTrackEvent.webidl2
-rw-r--r--components/script/dom/webidls/ResizeObserver.webidl2
-rw-r--r--components/script/dom/webidls/ResizeObserverEntry.webidl2
-rw-r--r--components/script/dom/webidls/ResizeObserverSize.webidl2
-rw-r--r--components/script/dom/webidls/SVGElement.webidl2
-rw-r--r--components/script/dom/webidls/SVGGraphicsElement.webidl2
-rw-r--r--components/script/dom/webidls/SVGSVGElement.webidl2
-rw-r--r--components/script/dom/webidls/ServiceWorker.webidl2
-rw-r--r--components/script/dom/webidls/ServiceWorkerContainer.webidl2
-rw-r--r--components/script/dom/webidls/ServiceWorkerGlobalScope.webidl2
-rw-r--r--components/script/dom/webidls/ServiceWorkerRegistration.webidl2
-rw-r--r--components/script/dom/webidls/StylePropertyMapReadOnly.webidl2
-rw-r--r--components/script/dom/webidls/SubtleCrypto.webidl2
-rw-r--r--components/script/dom/webidls/TestBinding.webidl28
-rw-r--r--components/script/dom/webidls/TestBindingIterable.webidl2
-rw-r--r--components/script/dom/webidls/TestBindingMaplike.webidl2
-rw-r--r--components/script/dom/webidls/TestBindingPairIterable.webidl2
-rw-r--r--components/script/dom/webidls/TestBindingProxy.webidl2
-rw-r--r--components/script/dom/webidls/TestBindingSetlike.webidl2
-rw-r--r--components/script/dom/webidls/TestRunner.webidl2
-rw-r--r--components/script/dom/webidls/TestWorklet.webidl2
-rw-r--r--components/script/dom/webidls/TestWorkletGlobalScope.webidl2
-rw-r--r--components/script/dom/webidls/TextMetrics.webidl2
-rw-r--r--components/script/dom/webidls/VTTCue.webidl2
-rw-r--r--components/script/dom/webidls/VTTRegion.webidl2
-rw-r--r--components/script/dom/webidls/WebGLQuery.webidl2
-rw-r--r--components/script/dom/webidls/WebGLSampler.webidl2
-rw-r--r--components/script/dom/webidls/WebGLSync.webidl2
-rw-r--r--components/script/dom/webidls/WebGLTransformFeedback.webidl2
-rw-r--r--components/script/dom/webidls/WebGLVertexArrayObject.webidl2
-rw-r--r--components/script/dom/webidls/WebGPU.webidl86
-rw-r--r--components/script/dom/webidls/Window.webidl12
-rw-r--r--components/script/dom/webidls/WindowOrWorkerGlobalScope.webidl2
-rw-r--r--components/script/dom/webidls/WorkerNavigator.webidl2
-rw-r--r--components/script/dom/webidls/Worklet.webidl2
-rw-r--r--components/script/dom/webidls/WorkletGlobalScope.webidl2
-rw-r--r--components/script/dom/webidls/XPathEvaluator.webidl6
-rw-r--r--components/script/dom/webidls/XPathExpression.webidl2
-rw-r--r--components/script/dom/webidls/XPathResult.webidl2
-rw-r--r--components/script/dom/webidls/XRBoundedReferenceSpace.webidl2
-rw-r--r--components/script/dom/webidls/XRCompositionLayer.webidl2
-rw-r--r--components/script/dom/webidls/XRCubeLayer.webidl2
-rw-r--r--components/script/dom/webidls/XRCylinderLayer.webidl2
-rw-r--r--components/script/dom/webidls/XREquirectLayer.webidl2
-rw-r--r--components/script/dom/webidls/XRFrame.webidl8
-rw-r--r--components/script/dom/webidls/XRHand.webidl2
-rw-r--r--components/script/dom/webidls/XRInputSource.webidl4
-rw-r--r--components/script/dom/webidls/XRInputSourceArray.webidl2
-rw-r--r--components/script/dom/webidls/XRInputSourceEvent.webidl2
-rw-r--r--components/script/dom/webidls/XRInputSourcesChangeEvent.webidl2
-rw-r--r--components/script/dom/webidls/XRJointPose.webidl2
-rw-r--r--components/script/dom/webidls/XRJointSpace.webidl2
-rw-r--r--components/script/dom/webidls/XRLayer.webidl2
-rw-r--r--components/script/dom/webidls/XRLayerEvent.webidl2
-rw-r--r--components/script/dom/webidls/XRMediaBinding.webidl2
-rw-r--r--components/script/dom/webidls/XRPose.webidl2
-rw-r--r--components/script/dom/webidls/XRProjectionLayer.webidl2
-rw-r--r--components/script/dom/webidls/XRQuadLayer.webidl2
-rw-r--r--components/script/dom/webidls/XRRay.webidl2
-rw-r--r--components/script/dom/webidls/XRReferenceSpace.webidl2
-rw-r--r--components/script/dom/webidls/XRReferenceSpaceEvent.webidl2
-rw-r--r--components/script/dom/webidls/XRRenderState.webidl2
-rw-r--r--components/script/dom/webidls/XRRigidTransform.webidl2
-rw-r--r--components/script/dom/webidls/XRSession.webidl2
-rw-r--r--components/script/dom/webidls/XRSessionEvent.webidl2
-rw-r--r--components/script/dom/webidls/XRSpace.webidl2
-rw-r--r--components/script/dom/webidls/XRSubImage.webidl2
-rw-r--r--components/script/dom/webidls/XRSystem.webidl6
-rw-r--r--components/script/dom/webidls/XRTest.webidl2
-rw-r--r--components/script/dom/webidls/XRView.webidl2
-rw-r--r--components/script/dom/webidls/XRViewerPose.webidl2
-rw-r--r--components/script/dom/webidls/XRViewport.webidl2
-rw-r--r--components/script/dom/webidls/XRWebGLBinding.webidl2
-rw-r--r--components/script/dom/webidls/XRWebGLLayer.webidl4
-rw-r--r--components/script/dom/webidls/XRWebGLSubImage.webidl2
-rw-r--r--components/script/dom/webxr/xrsystem.rs4
-rw-r--r--components/script/dom/window.rs2
-rw-r--r--components/script/init.rs2
-rw-r--r--components/script/script_runtime.rs56
-rw-r--r--components/script/script_thread.rs2
-rw-r--r--components/script/serviceworker_manager.rs2
-rw-r--r--components/script/timers.rs2
-rw-r--r--components/servo/lib.rs29
-rw-r--r--components/shared/canvas/webgl.rs2
-rw-r--r--components/shared/embedder/resources.rs5
-rw-r--r--components/webdriver_server/lib.rs48
-rw-r--r--components/webgpu/lib.rs2
-rw-r--r--components/webgpu/wgpu_thread.rs2
-rw-r--r--ports/servoshell/Cargo.toml4
-rw-r--r--ports/servoshell/desktop/app.rs76
-rw-r--r--ports/servoshell/desktop/cli.rs101
-rw-r--r--ports/servoshell/desktop/embedder.rs2
-rw-r--r--ports/servoshell/desktop/events_loop.rs5
-rw-r--r--ports/servoshell/desktop/headed_window.rs14
-rw-r--r--ports/servoshell/desktop/headless_window.rs4
-rw-r--r--ports/servoshell/desktop/minibrowser.rs11
-rw-r--r--ports/servoshell/desktop/webview.rs20
-rw-r--r--ports/servoshell/desktop/window_trait.rs6
-rw-r--r--ports/servoshell/egl/android.rs13
-rw-r--r--ports/servoshell/egl/android/resources.rs1
-rw-r--r--ports/servoshell/egl/android/simpleservo.rs36
-rw-r--r--ports/servoshell/egl/ohos/simpleservo.rs64
-rw-r--r--ports/servoshell/egl/servo_glue.rs11
-rw-r--r--ports/servoshell/panic_hook.rs2
-rw-r--r--ports/servoshell/parser.rs35
-rw-r--r--ports/servoshell/prefs.rs794
-rw-r--r--ports/servoshell/test.rs8
-rw-r--r--resources/prefs.json266
-rw-r--r--resources/wpt-prefs.json4
-rw-r--r--tests/wpt/meta-legacy-layout/WebCryptoAPI/__dir__.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/__dir__.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/bluetooth/__dir__.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/bluetooth/requestDevice/canonicalizeFilter/__dir__.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/__dir__.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-multicol/__dir__.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-paint-api/__dir__.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/dom/nodes/__dir__.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/gamepad/__dir__.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/html/canvas/__dir__.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/permissions/__dir__.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/service-workers/__dir__.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/webvtt/__dir__.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/webxr/__dir__.ini2
-rw-r--r--tests/wpt/meta/WebCryptoAPI/__dir__.ini2
-rw-r--r--tests/wpt/meta/__dir__.ini2
-rw-r--r--tests/wpt/meta/css/css-align/__dir__.ini2
-rw-r--r--tests/wpt/meta/css/css-flexbox/__dir__.ini2
-rw-r--r--tests/wpt/meta/css/css-grid/__dir__.ini2
-rw-r--r--tests/wpt/meta/gamepad/__dir__.ini2
-rw-r--r--tests/wpt/meta/resize-observer/__dir__.ini2
-rw-r--r--tests/wpt/meta/webxr/__dir__.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/bluetooth/__dir__.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/css/animations/__dir__.ini4
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/css/animations/animation-events.html.ini4
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/css/animations/transition-events.html.ini4
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/css/direction_style_caching.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/css/iframe/size_attributes_vertical_writing_mode.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/css/vertical-lr-blocks.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/css/writing-mode_change_display.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/FileAPI/blob_url_upload.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/FileAPI/file-select.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/FileAPI/file-upload.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/activation.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/binding_keyword.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/calc.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/codegen_unions.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/custom_auto_rooter.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/dictionary_to_jsval.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/exceptionToRejection.any.js.ini4
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/fullscreen/reftests/__dir__.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/globals/entry.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/globals/entry.worker.js.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/http-cache.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/interface_member_exposed.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/interfaces.https.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/iterable.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/like.any.js.ini4
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/media_query_list_gc.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/microdata/__dir__.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/ns.any.js.ini4
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/overload_dict.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/partial_shadow_dom.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/partial_shadow_dom_layout_style.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/preferences.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/promise.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/prototypes.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/sequence-hole.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/service-workers/__dir__.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/sigsegv.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/svg/svg.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/trace_null.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/transitionend_safety.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/variadic-interface.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/video_poster_frame.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/weakref.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/webgl/context_creation_error.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/window_performance_topLevelDomComplete.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/worklets/__dir__.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/worklets/test_paint_worklet_timeout.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/mozilla/worklets/test_worklet.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/webxr/__dir__.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/webxr/layerevents.https.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/webxr/layers.https.html.ini2
-rw-r--r--tests/wpt/mozilla/meta-legacy-layout/webxr/sessionavailable.https.html.ini2
-rw-r--r--tests/wpt/mozilla/meta/css/animations/__dir__.ini4
-rw-r--r--tests/wpt/mozilla/meta/css/animations/animation-events.html.ini4
-rw-r--r--tests/wpt/mozilla/meta/css/animations/transition-events.html.ini4
-rw-r--r--tests/wpt/mozilla/meta/css/flex_align_content_stretch_subpixel.html.ini2
-rw-r--r--tests/wpt/mozilla/meta/mozilla/DOMParser-parseFromString.html.ini2
-rw-r--r--tests/wpt/mozilla/meta/mozilla/dictionary_to_jsval.html.ini2
-rw-r--r--tests/wpt/mozilla/meta/mozilla/exceptionToRejection.any.js.ini4
-rw-r--r--tests/wpt/mozilla/meta/mozilla/interfaces.https.html.ini2
-rw-r--r--tests/wpt/mozilla/meta/mozilla/like.any.js.ini4
-rw-r--r--tests/wpt/mozilla/meta/mozilla/media_query_list_gc.html.ini2
-rw-r--r--tests/wpt/mozilla/meta/mozilla/ns.any.js.ini4
-rw-r--r--tests/wpt/mozilla/meta/mozilla/overload_dict.html.ini2
-rw-r--r--tests/wpt/mozilla/meta/mozilla/prototypes.html.ini2
-rw-r--r--tests/wpt/mozilla/meta/mozilla/sequence-hole.html.ini2
-rw-r--r--tests/wpt/mozilla/meta/mozilla/trace_null.html.ini2
-rw-r--r--tests/wpt/mozilla/meta/mozilla/transitionend_safety.html.ini2
-rw-r--r--tests/wpt/mozilla/meta/mozilla/weakref.html.ini2
-rw-r--r--tests/wpt/webgl/meta-legacy-layout/conformance/__dir__.ini2
-rw-r--r--tests/wpt/webgl/meta-legacy-layout/conformance2/__dir__.ini2
-rw-r--r--tests/wpt/webgl/meta-legacy-layout/conformance2/offscreencanvas/__dir__.ini2
-rw-r--r--tests/wpt/webgl/meta/__dir__.ini2
-rw-r--r--tests/wpt/webgl/meta/conformance2/offscreencanvas/__dir__.ini2
-rw-r--r--tests/wpt/webgpu/meta/__dir__.ini2
316 files changed, 2073 insertions, 3220 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 0c17fb13f03..c0459162263 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -949,7 +949,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c"
dependencies = [
"lazy_static",
- "windows-sys 0.59.0",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -1854,7 +1854,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d"
dependencies = [
"libc",
- "windows-sys 0.59.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -2375,7 +2375,7 @@ dependencies = [
"gobject-sys",
"libc",
"system-deps",
- "windows-sys 0.59.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -4160,7 +4160,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34"
dependencies = [
"cfg-if",
- "windows-targets 0.52.6",
+ "windows-targets 0.48.5",
]
[[package]]
@@ -6025,7 +6025,7 @@ dependencies = [
"errno",
"libc",
"linux-raw-sys",
- "windows-sys 0.59.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -6619,29 +6619,24 @@ dependencies = [
name = "servo_config"
version = "0.0.1"
dependencies = [
- "dirs",
- "embedder_traits",
"euclid",
- "getopts",
"log",
- "num_cpus",
"serde",
"serde_json",
- "servo_config_plugins",
+ "servo_config_macro",
"servo_geometry",
"servo_url",
"style_config",
- "url",
]
[[package]]
-name = "servo_config_plugins"
+name = "servo_config_macro"
version = "0.0.1"
dependencies = [
- "itertools 0.13.0",
"proc-macro2",
"quote",
"syn",
+ "synstructure",
]
[[package]]
@@ -6721,6 +6716,7 @@ dependencies = [
"backtrace",
"cc",
"cfg-if",
+ "dirs",
"egui",
"egui-winit",
"egui_glow",
@@ -7312,7 +7308,7 @@ dependencies = [
"getrandom",
"once_cell",
"rustix",
- "windows-sys 0.59.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -8595,7 +8591,7 @@ version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
dependencies = [
- "windows-sys 0.59.0",
+ "windows-sys 0.48.0",
]
[[package]]
diff --git a/components/bluetooth/lib.rs b/components/bluetooth/lib.rs
index d2476c7f371..eb380429d0d 100644
--- a/components/bluetooth/lib.rs
+++ b/components/bluetooth/lib.rs
@@ -76,7 +76,7 @@ pub trait BluetoothThreadFactory {
impl BluetoothThreadFactory for IpcSender<BluetoothRequest> {
fn new(embedder_proxy: EmbedderProxy) -> IpcSender<BluetoothRequest> {
let (sender, receiver) = ipc::channel().unwrap();
- let adapter = if pref!(dom.bluetooth.enabled) {
+ let adapter = if pref!(dom_bluetooth_enabled) {
BluetoothAdapter::new()
} else {
BluetoothAdapter::new_mock()
diff --git a/components/compositing/compositor.rs b/components/compositing/compositor.rs
index ff3d62e8868..3f8bf0c1c3f 100644
--- a/components/compositing/compositor.rs
+++ b/components/compositing/compositor.rs
@@ -2303,7 +2303,7 @@ impl<Window: WindowMethods + ?Sized> IOCompositor<Window> {
self.assert_gl_framebuffer_complete();
// Set the viewport background based on prefs.
- let color = servo_config::pref!(shell.background_color.rgba);
+ let color = servo_config::pref!(shell_background_color_rgba);
gl.clear_color(
color[0] as f32,
color[1] as f32,
diff --git a/components/config/Cargo.toml b/components/config/Cargo.toml
index ea2feb49b5e..450e6298471 100644
--- a/components/config/Cargo.toml
+++ b/components/config/Cargo.toml
@@ -12,18 +12,11 @@ name = "servo_config"
path = "lib.rs"
[dependencies]
-embedder_traits = { workspace = true }
euclid = { workspace = true }
-getopts = { workspace = true }
log = { workspace = true }
-num_cpus = { workspace = true }
serde = { workspace = true, features = ["derive"] }
serde_json = { workspace = true }
-servo_config_plugins = { path = "../config_plugins" }
+servo_config_macro = { path = "macro" }
servo_geometry = { path = "../geometry" }
servo_url = { path = "../url" }
style_config = { workspace = true }
-url = { workspace = true }
-
-[target.'cfg(not(any(target_os = "android", target_env = "ohos")))'.dependencies]
-dirs = "5.0"
diff --git a/components/config/basedir.rs b/components/config/basedir.rs
deleted file mode 100644
index 2fa70408a34..00000000000
--- a/components/config/basedir.rs
+++ /dev/null
@@ -1,44 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-
-//! Contains routines for retrieving default config directories.
-//! For linux based platforms, it uses the XDG base directory spec but provides
-//! similar abstractions for non-linux platforms.
-
-use std::path::PathBuf;
-
-#[cfg(all(
- unix,
- not(target_os = "macos"),
- not(target_os = "ios"),
- not(target_os = "android"),
- not(target_env = "ohos")
-))]
-pub fn default_config_dir() -> Option<PathBuf> {
- let mut config_dir = ::dirs::config_dir().unwrap();
- config_dir.push("servo");
- config_dir.push("default");
- Some(config_dir)
-}
-
-#[cfg(any(target_os = "android", target_env = "ohos"))]
-pub fn default_config_dir() -> Option<PathBuf> {
- None
-}
-
-#[cfg(target_os = "macos")]
-pub fn default_config_dir() -> Option<PathBuf> {
- // FIXME: use `config_dir()` ($HOME/Library/Preferences)
- // instead of `data_dir()` ($HOME/Library/Application Support) ?
- let mut config_dir = ::dirs::data_dir().unwrap();
- config_dir.push("Servo");
- Some(config_dir)
-}
-
-#[cfg(target_os = "windows")]
-pub fn default_config_dir() -> Option<PathBuf> {
- let mut config_dir = ::dirs::config_dir().unwrap();
- config_dir.push("Servo");
- Some(config_dir)
-}
diff --git a/components/config/lib.rs b/components/config/lib.rs
index ce19ea49849..5ecd439d801 100644
--- a/components/config/lib.rs
+++ b/components/config/lib.rs
@@ -4,9 +4,6 @@
#![deny(unsafe_code)]
+pub mod opts;
pub mod pref_util;
pub mod prefs;
-
-pub mod basedir;
-#[allow(unsafe_code)]
-pub mod opts;
diff --git a/components/config_plugins/Cargo.toml b/components/config/macro/Cargo.toml
index 8c94090a61d..17ff88fbe9f 100644
--- a/components/config_plugins/Cargo.toml
+++ b/components/config/macro/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "servo_config_plugins"
+name = "servo_config_macro"
version.workspace = true
authors.workspace = true
license.workspace = true
@@ -8,12 +8,12 @@ publish.workspace = true
rust-version.workspace = true
[lib]
-name = "servo_config_plugins"
+name = "servo_config_macro"
proc-macro = true
path = "lib.rs"
[dependencies]
-itertools = { workspace = true }
proc-macro2 = { workspace = true }
quote = { workspace = true }
syn = { workspace = true }
+synstructure = { workspace = true }
diff --git a/components/config/macro/lib.rs b/components/config/macro/lib.rs
new file mode 100644
index 00000000000..da5d3635bc8
--- /dev/null
+++ b/components/config/macro/lib.rs
@@ -0,0 +1,55 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+use proc_macro2::TokenStream;
+use quote::quote;
+use syn::{Data, Fields};
+use synstructure::decl_derive;
+
+decl_derive!([ServoPreferences] => servo_preferences_derive);
+
+/// A derive macro that adds string-based getter and setter for each field of this struct
+/// (enums and other types are not supported). Each field must be able to be convertable
+/// (with `into()`) into a `PrefValue`.
+fn servo_preferences_derive(input: synstructure::Structure) -> TokenStream {
+ let ast = input.ast();
+
+ let Data::Struct(ref data) = ast.data else {
+ unimplemented!();
+ };
+ let Fields::Named(ref named_fields) = data.fields else {
+ unimplemented!()
+ };
+
+ let mut get_match_cases = quote!();
+ for field in named_fields.named.iter() {
+ let name = field.ident.as_ref().unwrap();
+ get_match_cases.extend(quote!(stringify!(#name) => self.#name.clone().into(),))
+ }
+
+ let mut set_match_cases = quote!();
+ for field in named_fields.named.iter() {
+ let name = field.ident.as_ref().unwrap();
+ set_match_cases.extend(quote!(stringify!(#name) => self.#name = value.try_into().unwrap(),))
+ }
+
+ let structure_name = &ast.ident;
+ quote! {
+ impl #structure_name {
+ pub fn get_value(&self, name: &str) -> PrefValue {
+ match name {
+ #get_match_cases
+ _ => { panic!("Unknown preference: {:?}", name); }
+ }
+ }
+
+ pub fn set_value(&mut self, name: &str, value: PrefValue) {
+ match name {
+ #set_match_cases
+ _ => { panic!("Unknown preference: {:?}", name); }
+ }
+ }
+ }
+ }
+}
diff --git a/components/config/opts.rs b/components/config/opts.rs
index 22e16286254..5b31ba595cf 100644
--- a/components/config/opts.rs
+++ b/components/config/opts.rs
@@ -6,22 +6,13 @@
//! from command line arguments.
use std::default::Default;
-use std::fs::{self, File};
-use std::io::Read;
-use std::path::{Path, PathBuf};
-use std::sync::atomic::{AtomicBool, Ordering};
+use std::path::PathBuf;
use std::sync::{LazyLock, RwLock, RwLockReadGuard};
-use std::{env, process};
use euclid::Size2D;
-use getopts::{Matches, Options};
-use log::error;
use serde::{Deserialize, Serialize};
use servo_geometry::DeviceIndependentPixel;
use servo_url::ServoUrl;
-use url::{self, Url};
-
-use crate::{pref, set_pref};
/// Global flags for Servo, currently set on the command line.
#[derive(Clone, Debug, Deserialize, Serialize)]
@@ -69,13 +60,6 @@ pub struct Opts {
/// behavior for debugging purposes.
pub debug: DebugOptions,
- /// Port number to start a server to listen to remote Firefox devtools connections.
- /// 0 for random port.
- pub devtools_port: u16,
-
- /// Start the devtools server at startup
- pub devtools_server_enabled: bool,
-
/// `None` to disable WebDriver or `Some` with a port number to start a server to listen to
/// remote WebDriver commands.
pub webdriver_port: Option<u16>,
@@ -113,9 +97,6 @@ pub struct Opts {
/// Directory for a default config directory
pub config_dir: Option<PathBuf>,
- /// Print the version and exit.
- pub is_printing_version: bool,
-
/// Path to PEM encoded SSL CA certificate store.
pub certificate_path: Option<String>,
@@ -137,14 +118,6 @@ pub struct Opts {
pub print_pwm: bool,
}
-fn print_usage(app: &str, opts: &Options) {
- let message = format!(
- "Usage: {} [ options ... ] [URL]\n\twhere options include",
- app
- );
- println!("{}", opts.usage(&message));
-}
-
/// Debug options for Servo, currently set on the command line with -Z
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct DebugOptions {
@@ -278,104 +251,6 @@ impl DebugOptions {
Ok(())
}
-
- fn print_usage(app: &str) {
- fn print_option(name: &str, description: &str) {
- println!("\t{:<35} {}", name, description);
- }
-
- println!(
- "Usage: {} debug option,[options,...]\n\twhere options include\n\nOptions:",
- app
- );
-
- print_option(
- "bubble-inline-sizes-separately",
- "Bubble intrinsic widths separately like other engines.",
- );
- print_option(
- "convert-mouse-to-touch",
- "Send touch events instead of mouse events",
- );
- print_option(
- "disable-canvas-aa",
- "Disable antialiasing on the HTML canvas element.",
- );
- print_option(
- "disable-share-style-cache",
- "Disable the style sharing cache.",
- );
- print_option(
- "disable-subpixel-aa",
- "Disable subpixel text antialiasing overriding preference.",
- );
- print_option("disable-text-aa", "Disable antialiasing of rendered text.");
- print_option(
- "dump-stacking-context-tree",
- "Print the stacking context tree after each layout.",
- );
- print_option(
- "dump-display-list",
- "Print the display list after each layout.",
- );
- print_option(
- "dump-display-list-json",
- "Print the display list in JSON form.",
- );
- print_option(
- "dump-flow-tree",
- "Print the flow tree (Layout 2013) or fragment tree (Layout 2020) after each layout.",
- );
- print_option(
- "dump-rule-tree",
- "Print the style rule tree after each layout.",
- );
- print_option(
- "dump-style-tree",
- "Print the DOM with computed styles after each restyle.",
- );
- print_option("dump-style-stats", "Print style statistics each restyle.");
- print_option("gc-profile", "Log GC passes and their durations.");
- print_option(
- "load-webfonts-synchronously",
- "Load web fonts synchronously to avoid non-deterministic network-driven reflows",
- );
- print_option(
- "parallel-display-list-building",
- "Build display lists in parallel.",
- );
- print_option("precache-shaders", "Compile all shaders during init.");
- print_option(
- "profile-script-events",
- "Enable profiling of script-related events.",
- );
- print_option(
- "relayout-event",
- "Print notifications when there is a relayout.",
- );
- print_option("replace-surrogates", "Replace unpaires surrogates in DOM strings with U+FFFD. See https://github.com/servo/servo/issues/6564");
- print_option(
- "show-fragment-borders",
- "Paint borders along fragment boundaries.",
- );
- print_option(
- "show-parallel-layout",
- "Mark which thread laid each flow out with colors.",
- );
- print_option(
- "signpost",
- "Emit native OS signposts for profile events (currently macOS only)",
- );
- print_option(
- "trace-layout",
- "Write layout trace to an external file for debugging.",
- );
- print_option("wr-stats", "Show WebRender profiler on screen.");
-
- println!();
-
- process::exit(0)
- }
}
#[derive(Clone, Debug, Deserialize, Serialize)]
@@ -385,18 +260,6 @@ pub enum OutputOptions {
Stdout(f64),
}
-fn args_fail(msg: &str) -> ! {
- eprintln!("{}", msg);
- process::exit(1)
-}
-
-static MULTIPROCESS: AtomicBool = AtomicBool::new(false);
-
-#[inline]
-pub fn multiprocess() -> bool {
- MULTIPROCESS.load(Ordering::Relaxed)
-}
-
pub fn default_opts() -> Opts {
Opts {
legacy_layout: false,
@@ -410,8 +273,6 @@ pub fn default_opts() -> Opts {
output_file: None,
headless: false,
hard_fail: true,
- devtools_port: 0,
- devtools_server_enabled: false,
webdriver_port: None,
initial_window_size: Size2D::new(1024, 740),
screen_size_override: None,
@@ -423,7 +284,6 @@ pub fn default_opts() -> Opts {
debug: Default::default(),
exit_after_load: false,
config_dir: None,
- is_printing_version: false,
shaders_dir: None,
certificate_path: None,
ignore_certificate_errors: false,
@@ -434,392 +294,12 @@ pub fn default_opts() -> Opts {
}
}
-pub fn from_cmdline_args(mut opts: Options, args: &[String]) -> ArgumentParsingResult {
- let (app_name, args) = args.split_first().unwrap();
-
- opts.optflag("", "legacy-layout", "Use the legacy layout engine");
- opts.optopt("o", "output", "Output file", "output.png");
- opts.optopt("s", "size", "Size of tiles", "512");
- opts.optflagopt(
- "p",
- "profile",
- "Time profiler flag and either a TSV output filename \
- OR an interval for output to Stdout (blank for Stdout with interval of 5s)",
- "10 \
- OR time.tsv",
- );
- opts.optflagopt(
- "",
- "profiler-trace-path",
- "Path to dump a self-contained HTML timeline of profiler traces",
- "",
- );
- opts.optflagopt(
- "m",
- "memory-profile",
- "Memory profiler flag and output interval",
- "10",
- );
- opts.optflag("x", "exit", "Exit after load flag");
- opts.optopt(
- "y",
- "layout-threads",
- "Number of threads to use for layout",
- "1",
- );
- opts.optflag(
- "i",
- "nonincremental-layout",
- "Enable to turn off incremental layout.",
- );
- opts.optflagopt(
- "",
- "userscripts",
- "Uses userscripts in resources/user-agent-js, or a specified full path",
- "",
- );
- opts.optmulti(
- "",
- "user-stylesheet",
- "A user stylesheet to be added to every document",
- "file.css",
- );
- opts.optopt(
- "",
- "shaders",
- "Shaders will be loaded from the specified directory instead of using the builtin ones.",
- "",
- );
- opts.optflag("z", "headless", "Headless mode");
- opts.optflag(
- "f",
- "hard-fail",
- "Exit on thread failure instead of displaying about:failure",
- );
- opts.optflag(
- "F",
- "soft-fail",
- "Display about:failure on thread failure instead of exiting",
- );
- opts.optflagopt("", "devtools", "Start remote devtools server on port", "0");
- opts.optflagopt(
- "",
- "webdriver",
- "Start remote WebDriver server on port",
- "7000",
- );
- opts.optopt(
- "",
- "window-size",
- "Set the initial window size in logical (device independenrt) pixels",
- "1024x740",
- );
- opts.optopt(
- "",
- "screen-size",
- "Override the screen resolution in logical (device independent) pixels",
- "1024x768",
- );
- opts.optflag("M", "multiprocess", "Run in multiprocess mode");
- opts.optflag("B", "bhm", "Background Hang Monitor enabled");
- opts.optflag("S", "sandbox", "Run in a sandbox if multiprocess");
- opts.optopt(
- "",
- "random-pipeline-closure-probability",
- "Probability of randomly closing a pipeline (for testing constellation hardening).",
- "0.0",
- );
- opts.optopt(
- "",
- "random-pipeline-closure-seed",
- "A fixed seed for repeatbility of random pipeline closure.",
- "",
- );
- opts.optmulti(
- "Z",
- "debug",
- "A comma-separated string of debug options. Pass help to show available options.",
- "",
- );
- opts.optflag("h", "help", "Print this message");
- opts.optopt(
- "",
- "resources-path",
- "Path to find static resources",
- "/home/servo/resources",
- );
- opts.optopt(
- "",
- "certificate-path",
- "Path to find SSL certificates",
- "/home/servo/resources/certs",
- );
- opts.optflag(
- "",
- "ignore-certificate-errors",
- "Whether or not to completely ignore certificate errors",
- );
- opts.optopt(
- "",
- "content-process",
- "Run as a content process and connect to the given pipe",
- "servo-ipc-channel.abcdefg",
- );
- opts.optopt(
- "",
- "config-dir",
- "config directory following xdg spec on linux platform",
- "",
- );
- opts.optflag("v", "version", "Display servo version information");
- opts.optflag("", "unminify-js", "Unminify Javascript");
- opts.optflag("", "print-pwm", "Print Progressive Web Metrics");
- opts.optopt(
- "",
- "local-script-source",
- "Directory root with unminified scripts",
- "",
- );
- opts.optflag("", "unminify-css", "Unminify Css");
-
- let opt_match = match opts.parse(args) {
- Ok(m) => m,
- Err(f) => args_fail(&f.to_string()),
- };
-
- if opt_match.opt_present("h") || opt_match.opt_present("help") {
- print_usage(app_name, &opts);
- process::exit(0);
- };
-
- // If this is the content process, we'll receive the real options over IPC. So just fill in
- // some dummy options for now.
- if let Some(content_process) = opt_match.opt_str("content-process") {
- MULTIPROCESS.store(true, Ordering::SeqCst);
- return ArgumentParsingResult::ContentProcess(opt_match, content_process);
- }
-
- let mut debug_options = DebugOptions::default();
- for debug_string in opt_match.opt_strs("Z") {
- if let Err(e) = debug_options.extend(debug_string) {
- args_fail(&format!("error: unrecognized debug option: {}", e));
- }
- }
-
- if debug_options.help {
- DebugOptions::print_usage(app_name)
- }
-
- let tile_size: usize = match opt_match.opt_str("s") {
- Some(tile_size_str) => tile_size_str
- .parse()
- .unwrap_or_else(|err| args_fail(&format!("Error parsing option: -s ({})", err))),
- None => 512,
- };
-
- // If only the flag is present, default to a 5 second period for both profilers
- let time_profiling = if opt_match.opt_present("p") {
- match opt_match.opt_str("p") {
- Some(argument) => match argument.parse::<f64>() {
- Ok(interval) => Some(OutputOptions::Stdout(interval)),
- Err(_) => match ServoUrl::parse(&argument) {
- Ok(_) => panic!("influxDB isn't supported anymore"),
- Err(_) => Some(OutputOptions::FileName(argument)),
- },
- },
- None => Some(OutputOptions::Stdout(5.0)),
- }
- } else {
- // if the p option doesn't exist:
- None
- };
-
- if let Some(ref time_profiler_trace_path) = opt_match.opt_str("profiler-trace-path") {
- let mut path = PathBuf::from(time_profiler_trace_path);
- path.pop();
- if let Err(why) = fs::create_dir_all(&path) {
- error!(
- "Couldn't create/open {:?}: {:?}",
- Path::new(time_profiler_trace_path).to_string_lossy(),
- why
- );
- }
- }
-
- let mem_profiler_period = opt_match.opt_default("m", "5").map(|period| {
- period
- .parse()
- .unwrap_or_else(|err| args_fail(&format!("Error parsing option: -m ({})", err)))
- });
-
- let mut layout_threads: Option<usize> = opt_match.opt_str("y").map(|layout_threads_str| {
- layout_threads_str
- .parse()
- .unwrap_or_else(|err| args_fail(&format!("Error parsing option: -y ({})", err)))
- });
-
- let nonincremental_layout = opt_match.opt_present("i");
-
- let random_pipeline_closure_probability = opt_match
- .opt_str("random-pipeline-closure-probability")
- .map(|prob| {
- prob.parse().unwrap_or_else(|err| {
- args_fail(&format!(
- "Error parsing option: --random-pipeline-closure-probability ({})",
- err
- ))
- })
- });
-
- let random_pipeline_closure_seed =
- opt_match
- .opt_str("random-pipeline-closure-seed")
- .map(|seed| {
- seed.parse().unwrap_or_else(|err| {
- args_fail(&format!(
- "Error parsing option: --random-pipeline-closure-seed ({})",
- err
- ))
- })
- });
-
- if debug_options.trace_layout {
- layout_threads = Some(1);
- }
-
- let (devtools_server_enabled, devtools_port) = if opt_match.opt_present("devtools") {
- let port = opt_match
- .opt_str("devtools")
- .map(|port| {
- port.parse().unwrap_or_else(|err| {
- args_fail(&format!("Error parsing option: --devtools ({})", err))
- })
- })
- .unwrap_or(pref!(devtools.server.port));
- (true, port as u16)
- } else {
- (
- pref!(devtools.server.enabled),
- pref!(devtools.server.port) as u16,
- )
- };
-
- let webdriver_port = opt_match.opt_default("webdriver", "7000").map(|port| {
- port.parse().unwrap_or_else(|err| {
- args_fail(&format!("Error parsing option: --webdriver ({})", err))
- })
- });
-
- let parse_resolution_string = |string: String| {
- let components: Vec<u32> = string
- .split('x')
- .map(|component| {
- component.parse().unwrap_or_else(|error| {
- args_fail(&format!("Error parsing resolution '{string}': {error}"));
- })
- })
- .collect();
- Size2D::new(components[0], components[1])
- };
-
- let screen_size_override = opt_match
- .opt_str("screen-size")
- .map(parse_resolution_string);
-
- // Make sure the default window size is not larger than any provided screen size.
- let default_window_size = Size2D::new(1024, 740);
- let default_window_size = screen_size_override
- .map_or(default_window_size, |screen_size_override| {
- default_window_size.min(screen_size_override)
- });
-
- let initial_window_size = opt_match
- .opt_str("window-size")
- .map_or(default_window_size, parse_resolution_string);
-
- if opt_match.opt_present("M") {
- MULTIPROCESS.store(true, Ordering::SeqCst)
- }
-
- let user_stylesheets = opt_match
- .opt_strs("user-stylesheet")
- .iter()
- .map(|filename| {
- let cwd = env::current_dir().unwrap();
- let path = cwd.join(filename);
- let url = ServoUrl::from_url(Url::from_file_path(&path).unwrap());
- let mut contents = Vec::new();
- File::open(path)
- .unwrap_or_else(|err| args_fail(&format!("Couldn't open {}: {}", filename, err)))
- .read_to_end(&mut contents)
- .unwrap_or_else(|err| args_fail(&format!("Couldn't read {}: {}", filename, err)));
- (contents, url)
- })
- .collect();
-
- let is_printing_version = opt_match.opt_present("v") || opt_match.opt_present("version");
-
- let legacy_layout = opt_match.opt_present("legacy-layout");
- if legacy_layout {
- set_pref!(layout.legacy_layout, true);
- }
-
- let opts = Opts {
- debug: debug_options.clone(),
- legacy_layout,
- tile_size,
- time_profiling,
- time_profiler_trace_path: opt_match.opt_str("profiler-trace-path"),
- mem_profiler_period,
- nonincremental_layout,
- userscripts: opt_match.opt_default("userscripts", ""),
- user_stylesheets,
- output_file: opt_match.opt_str("o"),
- headless: opt_match.opt_present("z"),
- hard_fail: opt_match.opt_present("f") && !opt_match.opt_present("F"),
- devtools_port,
- devtools_server_enabled,
- webdriver_port,
- initial_window_size,
- screen_size_override,
- multiprocess: opt_match.opt_present("M"),
- background_hang_monitor: opt_match.opt_present("B"),
- sandbox: opt_match.opt_present("S"),
- random_pipeline_closure_probability,
- random_pipeline_closure_seed,
- exit_after_load: opt_match.opt_present("x"),
- config_dir: opt_match.opt_str("config-dir").map(Into::into),
- is_printing_version,
- shaders_dir: opt_match.opt_str("shaders").map(Into::into),
- certificate_path: opt_match.opt_str("certificate-path"),
- ignore_certificate_errors: opt_match.opt_present("ignore-certificate-errors"),
- unminify_js: opt_match.opt_present("unminify-js"),
- local_script_source: opt_match.opt_str("local-script-source"),
- unminify_css: opt_match.opt_present("unminify-css"),
- print_pwm: opt_match.opt_present("print-pwm"),
- };
-
- set_options(opts);
-
- if let Some(layout_threads) = layout_threads {
- set_pref!(layout.threads, layout_threads as i64);
- }
-
- ArgumentParsingResult::ChromeProcess(opt_match)
-}
-
-pub enum ArgumentParsingResult {
- ChromeProcess(Matches),
- ContentProcess(Matches, String),
-}
-
// Make Opts available globally. This saves having to clone and pass
// opts everywhere it is used, which gets particularly cumbersome
// when passing through the DOM structures.
static OPTIONS: LazyLock<RwLock<Opts>> = LazyLock::new(|| RwLock::new(default_opts()));
pub fn set_options(opts: Opts) {
- MULTIPROCESS.store(opts.multiprocess, Ordering::SeqCst);
*OPTIONS.write().unwrap() = opts;
}
diff --git a/components/config/pref_util.rs b/components/config/pref_util.rs
index 4499cd89d37..47598206e05 100644
--- a/components/config/pref_util.rs
+++ b/components/config/pref_util.rs
@@ -2,11 +2,6 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-use std::collections::HashMap;
-use std::fmt;
-use std::str::FromStr;
-use std::sync::RwLock;
-
use serde::{Deserialize, Serialize};
use serde_json::Value;
@@ -17,70 +12,46 @@ pub enum PrefValue {
Str(String),
Bool(bool),
Array(Vec<PrefValue>),
- Missing,
}
impl PrefValue {
- pub fn as_str(&self) -> Option<&str> {
- if let PrefValue::Str(val) = self {
- Some(val)
- } else {
- None
- }
- }
-
- pub fn as_i64(&self) -> Option<i64> {
- if let PrefValue::Int(val) = self {
- Some(*val)
- } else {
- None
- }
- }
-
- pub fn as_f64(&self) -> Option<f64> {
- if let PrefValue::Float(val) = self {
- Some(*val)
- } else {
- None
- }
- }
-
- pub fn as_bool(&self) -> Option<bool> {
- if let PrefValue::Bool(val) = self {
- Some(*val)
- } else {
- None
+ pub fn from_booleanish_str(input: &str) -> Self {
+ match input {
+ "false" => PrefValue::Bool(false),
+ "true" => PrefValue::Bool(true),
+ _ => input
+ .parse::<i64>()
+ .map(PrefValue::Int)
+ .or_else(|_| input.parse::<f64>().map(PrefValue::Float))
+ .unwrap_or_else(|_| PrefValue::from(input)),
}
}
+}
- pub fn is_missing(&self) -> bool {
- matches!(self, PrefValue::Missing)
- }
+impl TryFrom<&Value> for PrefValue {
+ type Error = String;
- pub fn from_json_value(value: &Value) -> Option<Self> {
+ fn try_from(value: &Value) -> Result<Self, Self::Error> {
match value {
- Value::Bool(b) => Some(PrefValue::Bool(*b)),
- Value::Number(n) if n.is_i64() => Some(PrefValue::Int(n.as_i64().unwrap())),
- Value::Number(n) if n.is_f64() => Some(PrefValue::Float(n.as_f64().unwrap())),
- Value::String(s) => Some(PrefValue::Str(s.to_owned())),
- _ => None,
- }
- }
-}
-
-impl FromStr for PrefValue {
- type Err = PrefError;
- fn from_str(s: &str) -> Result<Self, Self::Err> {
- if s == "false" {
- Ok(PrefValue::Bool(false))
- } else if s == "true" {
- Ok(PrefValue::Bool(true))
- } else if let Ok(float) = s.parse::<f64>() {
- Ok(PrefValue::Float(float))
- } else if let Ok(integer) = s.parse::<i64>() {
- Ok(PrefValue::Int(integer))
- } else {
- Ok(PrefValue::from(s))
+ Value::Null => Err("Cannot turn null into preference".into()),
+ Value::Bool(value) => Ok((*value).into()),
+ Value::Number(number) => number
+ .as_i64()
+ .map(Into::into)
+ .or_else(|| number.as_f64().map(Into::into))
+ .map(Ok)
+ .unwrap_or(Err("Could not parse number from JSON".into())),
+ Value::String(value) => Ok(value.clone().into()),
+ Value::Array(array) => {
+ let mut array = array.iter().map(TryInto::try_into);
+ if !array.all(|v| v.is_ok()) {
+ return Err(format!(
+ "Cannot turn all array avlues into preference: {array:?}"
+ ));
+ }
+ Ok(PrefValue::Array(array.map(Result::unwrap).collect()))
+ },
+ Value::Object(_) => Err("Cannot turn object into preference".into()),
}
}
}
@@ -94,37 +65,18 @@ macro_rules! impl_pref_from {
}
}
)+
- $(
- impl From<Option<$t>> for PrefValue {
- fn from(other: Option<$t>) -> Self {
- other.map(|val| $variant(val.into())).unwrap_or(PrefValue::Missing)
- }
- }
- )+
}
}
macro_rules! impl_from_pref {
($($variant: path => $t: ty,)*) => {
$(
- impl From<PrefValue> for $t {
- #[allow(unsafe_code)]
- fn from(other: PrefValue) -> Self {
- if let $variant(value) = other {
- value.into()
- } else {
- panic!("Cannot convert {:?} to {:?}", other, std::any::type_name::<$t>())
- }
- }
- }
- )+
- $(
- impl From<PrefValue> for Option<$t> {
- fn from(other: PrefValue) -> Self {
- if let PrefValue::Missing = other {
- None
- } else {
- Some(other.into())
+ impl TryFrom<PrefValue> for $t {
+ type Error = String;
+ fn try_from(other: PrefValue) -> Result<Self, Self::Error> {
+ match other {
+ $variant(value) => Ok(value.into()),
+ _ => Err(format!("Cannot convert {other:?} to {}", std::any::type_name::<$t>())),
}
}
}
@@ -157,9 +109,13 @@ impl From<PrefValue> for [f64; 4] {
fn from(other: PrefValue) -> [f64; 4] {
match other {
PrefValue::Array(values) if values.len() == 4 => {
- let f = values.into_iter().map(Into::into).collect::<Vec<f64>>();
- if f.len() == 4 {
- [f[0], f[1], f[2], f[3]]
+ let values: Vec<f64> = values
+ .into_iter()
+ .map(TryFrom::try_from)
+ .filter_map(Result::ok)
+ .collect();
+ if values.len() == 4 {
+ [values[0], values[1], values[2], values[3]]
} else {
panic!(
"Cannot convert PrefValue to {:?}",
@@ -176,144 +132,20 @@ impl From<PrefValue> for [f64; 4] {
}
}
-#[derive(Debug)]
-pub enum PrefError {
- NoSuchPref(String),
- InvalidValue(String),
- JsonParseErr(serde_json::error::Error),
-}
+#[test]
+fn test_pref_value_from_str() {
+ let value = PrefValue::from_booleanish_str("21");
+ assert_eq!(value, PrefValue::Int(21));
-impl fmt::Display for PrefError {
- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
- match self {
- PrefError::NoSuchPref(s) | PrefError::InvalidValue(s) => f.write_str(s),
- PrefError::JsonParseErr(e) => e.fmt(f),
- }
- }
-}
+ let value = PrefValue::from_booleanish_str("12.5");
+ assert_eq!(value, PrefValue::Float(12.5));
-impl std::error::Error for PrefError {}
+ let value = PrefValue::from_booleanish_str("a string");
+ assert_eq!(value, PrefValue::Str("a string".into()));
-pub struct Accessor<P, V> {
- pub getter: Box<dyn Fn(&P) -> V + Sync + Send>,
- #[allow(clippy::type_complexity)]
- pub setter: Box<dyn Fn(&mut P, V) + Sync + Send>,
-}
+ let value = PrefValue::from_booleanish_str("false");
+ assert_eq!(value, PrefValue::Bool(false));
-impl<P, V> Accessor<P, V> {
- pub fn new<G, S>(getter: G, setter: S) -> Self
- where
- G: Fn(&P) -> V + Sync + Send + 'static,
- S: Fn(&mut P, V) + Sync + Send + 'static,
- {
- Accessor {
- getter: Box::new(getter),
- setter: Box::new(setter),
- }
- }
-}
-
-pub struct Preferences<'m, P> {
- user_prefs: RwLock<P>,
- default_prefs: P,
- accessors: &'m HashMap<String, Accessor<P, PrefValue>>,
-}
-
-impl<'m, P: Clone> Preferences<'m, P> {
- /// Create a new `Preferences` object. The values provided in `default_prefs` are immutable and
- /// can always be restored using `reset` or `reset_all`.
- pub fn new(default_prefs: P, accessors: &'m HashMap<String, Accessor<P, PrefValue>>) -> Self {
- Self {
- user_prefs: RwLock::new(default_prefs.clone()),
- default_prefs,
- accessors,
- }
- }
-
- /// Access to the data structure holding the preference values.
- pub fn values(&self) -> &RwLock<P> {
- &self.user_prefs
- }
-
- /// Retrieve a preference using its key
- pub fn get(&self, key: &str) -> PrefValue {
- if let Some(accessor) = self.accessors.get(key) {
- let prefs = self.user_prefs.read().unwrap();
- (accessor.getter)(&prefs)
- } else {
- PrefValue::Missing
- }
- }
-
- /// Has the preference been modified from its original value?
- pub fn is_default(&self, key: &str) -> Result<bool, PrefError> {
- if let Some(accessor) = self.accessors.get(key) {
- let user = (accessor.getter)(&self.default_prefs);
- let default = (accessor.getter)(&self.user_prefs.read().unwrap());
- Ok(default == user)
- } else {
- Err(PrefError::NoSuchPref(String::from(key)))
- }
- }
-
- /// Creates an iterator over all keys and values
- pub fn iter(&self) -> impl Iterator<Item = (String, PrefValue)> + '_ {
- let prefs = self.user_prefs.read().unwrap();
- self.accessors
- .iter()
- .map(move |(k, accessor)| (k.clone(), (accessor.getter)(&prefs)))
- }
-
- /// Creates an iterator over all keys
- pub fn keys(&self) -> impl Iterator<Item = &'_ str> {
- self.accessors.keys().map(String::as_str)
- }
-
- fn set_inner<V>(&self, key: &str, prefs: &mut P, val: V) -> Result<(), PrefError>
- where
- V: Into<PrefValue>,
- {
- if let Some(accessor) = self.accessors.get(key) {
- (accessor.setter)(prefs, val.into());
- Ok(())
- } else {
- Err(PrefError::NoSuchPref(String::from(key)))
- }
- }
-
- /// Set a new value for a preference, using its key.
- pub fn set<V>(&self, key: &str, val: V) -> Result<(), PrefError>
- where
- V: Into<PrefValue>,
- {
- let mut prefs = self.user_prefs.write().unwrap();
- self.set_inner(key, &mut prefs, val)
- }
-
- pub fn set_all<M>(&self, values: M) -> Result<(), PrefError>
- where
- M: IntoIterator<Item = (String, PrefValue)>,
- {
- let mut prefs = self.user_prefs.write().unwrap();
- for (k, v) in values.into_iter() {
- self.set_inner(&k, &mut prefs, v)?;
- }
- Ok(())
- }
-
- pub fn reset(&self, key: &str) -> Result<PrefValue, PrefError> {
- if let Some(accessor) = self.accessors.get(key) {
- let mut prefs = self.user_prefs.write().unwrap();
- let old_pref = (accessor.getter)(&prefs);
- let default_pref = (accessor.getter)(&self.default_prefs);
- (accessor.setter)(&mut prefs, default_pref);
- Ok(old_pref)
- } else {
- Err(PrefError::NoSuchPref(String::from(key)))
- }
- }
-
- pub fn reset_all(&self) {
- *self.user_prefs.write().unwrap() = self.default_prefs.clone();
- }
+ let value = PrefValue::from_booleanish_str("true");
+ assert_eq!(value, PrefValue::Bool(true));
}
diff --git a/components/config/prefs.rs b/components/config/prefs.rs
index 87eea9a1cc0..9c4edf30e3a 100644
--- a/components/config/prefs.rs
+++ b/components/config/prefs.rs
@@ -2,659 +2,386 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-use std::borrow::ToOwned;
-use std::collections::HashMap;
-use std::convert::{TryFrom, TryInto};
-use std::sync::LazyLock;
+use std::sync::{RwLock, RwLockReadGuard};
-use embedder_traits::resources::{self, Resource};
-use gen::Prefs;
-use log::{error, warn};
-use serde_json::{self, Value};
+use serde::{Deserialize, Serialize};
+use servo_config_macro::ServoPreferences;
-use crate::pref_util::Preferences;
-pub use crate::pref_util::{PrefError, PrefValue};
+pub use crate::pref_util::PrefValue;
-static PREFS: LazyLock<Preferences<'static, Prefs>> = LazyLock::new(|| {
- let def_prefs: Prefs = serde_json::from_str(&resources::read_string(Resource::Preferences))
- .unwrap_or_else(|_| {
- error!("Preference json file is invalid. Setting Preference to default values");
- Prefs::default()
- });
- let result = Preferences::new(def_prefs, &gen::PREF_ACCESSORS);
- for (key, value) in result.iter() {
- set_stylo_pref_ref(&key, &value);
- }
- result
-});
-
-/// A convenience macro for accessing a preference value using its static path.
-/// Passing an invalid path is a compile-time error.
-#[macro_export]
-macro_rules! pref {
- ($($segment: ident).+) => {{
- let values = $crate::prefs::pref_map().values();
- let lock = values.read()
- .map(|prefs| prefs $(.$segment)+.clone());
- lock.unwrap()
- }};
-}
-
-/// A convenience macro for updating a preference value using its static path.
-/// Passing an invalid path is a compile-time error.
-#[macro_export]
-macro_rules! set_pref {
- ($($segment: ident).+, $value: expr) => {{
- let value = $value;
- $crate::prefs::set_stylo_pref(stringify!($($segment).+), value);
- let values = $crate::prefs::pref_map().values();
- let mut lock = values.write().unwrap();
- lock$ (.$segment)+ = value;
- }};
-}
+static PREFERENCES: RwLock<Preferences> = RwLock::new(Preferences::new());
-/// Access preferences using their `String` keys. Note that the key may be different from the
-/// static path because legacy keys contain hyphens, or because a preference name has been renamed.
-///
-/// When retrieving a preference, the value will always be a `PrefValue`. When setting a value, it
-/// may be a `PrefValue` or the type that converts into the correct underlying value; one of `bool`,
-/// `i64`, `f64` or `String`.
#[inline]
-pub fn pref_map() -> &'static Preferences<'static, Prefs> {
- &PREFS
-}
-
-pub fn add_user_prefs(prefs: HashMap<String, PrefValue>) {
- for (key, value) in prefs.iter() {
- set_stylo_pref_ref(key, value);
- }
- if let Err(error) = PREFS.set_all(prefs) {
- panic!("Error setting preference: {:?}", error);
- }
+/// Get the current set of global preferences for Servo.
+pub fn get() -> RwLockReadGuard<'static, Preferences> {
+ PREFERENCES.read().unwrap()
}
-pub fn set_stylo_pref(key: &str, value: impl Into<PrefValue>) {
- set_stylo_pref_ref(key, &value.into());
-}
+pub fn set(preferences: Preferences) {
+ // Map between Stylo preference names and Servo preference names as the This should be
+ // kept in sync with components/script/dom/bindings/codegen/run.py which generates the
+ // DOM CSS style accessors.
+ style_config::set_bool("layout.unimplemented", preferences.layout_unimplemented);
+ style_config::set_i32("layout.threads", preferences.layout_threads as i32);
+ style_config::set_bool("layout.legacy_layout", preferences.layout_legacy_layout);
+ style_config::set_bool("layout.flexbox.enabled", preferences.layout_flexbox_enabled);
+ style_config::set_bool("layout.columns.enabled", preferences.layout_columns_enabled);
+ style_config::set_bool("layout.grid.enabled", preferences.layout_grid_enabled);
+ style_config::set_bool(
+ "layout.css.transition-behavior.enabled",
+ preferences.layout_css_transition_behavior_enabled,
+ );
+ style_config::set_bool(
+ "layout.writing-mode.enabled",
+ preferences.layout_writing_mode_enabled,
+ );
+ style_config::set_bool(
+ "layout.container-queries.enabled",
+ preferences.layout_container_queries_enabled,
+ );
-fn set_stylo_pref_ref(key: &str, value: &PrefValue) {
- match value.try_into() {
- Ok(StyloPrefValue::Bool(value)) => style_config::set_bool(key, value),
- Ok(StyloPrefValue::Int(value)) => style_config::set_i32(key, value),
- Err(TryFromPrefValueError::IntegerOverflow(value)) => {
- // TODO: logging doesn’t actually work this early, so we should
- // split PrefValue into i32 and i64 variants.
- warn!("Pref value too big for Stylo: {} ({})", key, value);
- },
- Err(TryFromPrefValueError::UnmappedType) => {
- // Most of Servo’s prefs will hit this. When adding a new pref type
- // in Stylo, update TryFrom<&PrefValue> for StyloPrefValue as well.
- },
- }
+ *PREFERENCES.write().unwrap() = preferences;
}
-enum StyloPrefValue {
- Bool(bool),
- Int(i32),
+/// A convenience macro for accessing a preference value using its static path.
+/// Passing an invalid path is a compile-time error.
+#[macro_export]
+macro_rules! pref {
+ ($name: ident) => {
+ $crate::prefs::get().$name.clone()
+ };
}
-enum TryFromPrefValueError {
- IntegerOverflow(i64),
- UnmappedType,
+#[derive(Clone, Deserialize, Serialize, ServoPreferences)]
+pub struct Preferences {
+ pub fonts_default: String,
+ pub fonts_serif: String,
+ pub fonts_sans_serif: String,
+ pub fonts_monospace: String,
+ pub fonts_default_size: i64,
+ pub fonts_default_monospace_size: i64,
+ pub css_animations_testing_enabled: bool,
+ /// Start the devtools server at startup
+ pub devtools_server_enabled: bool,
+ /// Port number to start a server to listen to remote Firefox devtools connections.
+ /// 0 for random port.
+ pub devtools_server_port: i64,
+ pub dom_webgpu_enabled: bool,
+ /// List of comma-separated backends to be used by wgpu.
+ pub dom_webgpu_wgpu_backend: String,
+ pub dom_abort_controller_enabled: bool,
+ pub dom_bluetooth_enabled: bool,
+ pub dom_bluetooth_testing_enabled: bool,
+ pub dom_allow_scripts_to_close_windows: bool,
+ pub dom_canvas_capture_enabled: bool,
+ pub dom_canvas_text_enabled: bool,
+ pub dom_composition_event_enabled: bool,
+ pub dom_crypto_subtle_enabled: bool,
+ pub dom_customelements_enabled: bool,
+ pub dom_document_dblclick_timeout: i64,
+ pub dom_document_dblclick_dist: i64,
+ pub dom_forcetouch_enabled: bool,
+ pub dom_fullscreen_test: bool,
+ pub dom_gamepad_enabled: bool,
+ pub dom_imagebitmap_enabled: bool,
+ pub dom_intersection_observer_enabled: bool,
+ pub dom_microdata_testing_enabled: bool,
+ pub dom_mouse_event_which_enabled: bool,
+ pub dom_mutation_observer_enabled: bool,
+ pub dom_offscreen_canvas_enabled: bool,
+ pub dom_permissions_enabled: bool,
+ pub dom_permissions_testing_allowed_in_nonsecure_contexts: bool,
+ pub dom_resize_observer_enabled: bool,
+ pub dom_script_asynch: bool,
+ pub dom_serviceworker_enabled: bool,
+ pub dom_serviceworker_timeout_seconds: i64,
+ pub dom_servo_helpers_enabled: bool,
+ pub dom_servoparser_async_html_tokenizer_enabled: bool,
+ pub dom_shadowdom_enabled: bool,
+ pub dom_svg_enabled: bool,
+ pub dom_testable_crash_enabled: bool,
+ pub dom_testbinding_enabled: bool,
+ pub dom_testbinding_prefcontrolled_enabled: bool,
+ pub dom_testbinding_prefcontrolled2_enabled: bool,
+ pub dom_testbinding_preference_value_falsy: bool,
+ pub dom_testbinding_preference_value_quote_string_test: String,
+ pub dom_testbinding_preference_value_space_string_test: String,
+ pub dom_testbinding_preference_value_string_empty: String,
+ pub dom_testbinding_preference_value_string_test: String,
+ pub dom_testbinding_preference_value_truthy: bool,
+ pub dom_testing_element_activation_enabled: bool,
+ pub dom_testing_html_input_element_select_files_enabled: bool,
+ pub dom_testperf_enabled: bool,
+ pub dom_xpath_enabled: bool,
+ /// Enable WebGL2 APIs.
+ pub dom_webgl2_enabled: bool,
+ pub dom_webrtc_enabled: bool,
+ pub dom_webrtc_transceiver_enabled: bool,
+ pub dom_webvtt_enabled: bool,
+ pub dom_webxr_enabled: bool,
+ pub dom_webxr_test: bool,
+ pub dom_webxr_first_person_observer_view: bool,
+ pub dom_webxr_glwindow_enabled: bool,
+ pub dom_webxr_glwindow_left_right: bool,
+ pub dom_webxr_glwindow_red_cyan: bool,
+ pub dom_webxr_glwindow_spherical: bool,
+ pub dom_webxr_glwindow_cubemap: bool,
+ pub dom_webxr_hands_enabled: bool,
+ pub dom_webxr_layers_enabled: bool,
+ pub dom_webxr_openxr_enabled: bool,
+ pub dom_webxr_sessionavailable: bool,
+ pub dom_webxr_unsafe_assume_user_intent: bool,
+ pub dom_worklet_enabled: bool,
+ pub dom_worklet_blockingsleep: bool,
+ pub dom_worklet_testing_enabled: bool,
+ pub dom_worklet_timeout_ms: i64,
+ pub gfx_subpixel_text_antialiasing_enabled: bool,
+ pub gfx_texture_swizzling_enabled: bool,
+ pub js_asmjs_enabled: bool,
+ pub js_asyncstack: bool,
+ pub js_baseline_interpreter_enabled: bool,
+ /// Whether to disable the jit within SpiderMonkey
+ pub js_disable_jit: bool,
+ pub js_baseline_jit_enabled: bool,
+ pub js_baseline_jit_unsafe_eager_compilation_enabled: bool,
+ pub js_discard_system_source: bool,
+ pub js_dump_stack_on_debuggee_would_run: bool,
+ pub js_ion_enabled: bool,
+ pub js_ion_offthread_compilation_enabled: bool,
+ pub js_ion_unsafe_eager_compilation_enabled: bool,
+ pub js_mem_gc_allocation_threshold_mb: i64,
+ pub js_mem_gc_allocation_threshold_factor: i64,
+ pub js_mem_gc_allocation_threshold_avoid_interrupt_factor: i64,
+ pub js_mem_gc_compacting_enabled: bool,
+ pub js_mem_gc_decommit_threshold_mb: i64,
+ pub js_mem_gc_dynamic_heap_growth_enabled: bool,
+ pub js_mem_gc_dynamic_mark_slice_enabled: bool,
+ pub js_mem_gc_empty_chunk_count_max: i64,
+ pub js_mem_gc_empty_chunk_count_min: i64,
+ pub js_mem_gc_high_frequency_heap_growth_max: i64,
+ pub js_mem_gc_high_frequency_heap_growth_min: i64,
+ pub js_mem_gc_high_frequency_high_limit_mb: i64,
+ pub js_mem_gc_high_frequency_low_limit_mb: i64,
+ pub js_mem_gc_high_frequency_time_limit_ms: i64,
+ pub js_mem_gc_incremental_enabled: bool,
+ pub js_mem_gc_incremental_slice_ms: i64,
+ pub js_mem_gc_low_frequency_heap_growth: i64,
+ pub js_mem_gc_per_zone_enabled: bool,
+ pub js_mem_gc_zeal_frequency: i64,
+ pub js_mem_gc_zeal_level: i64,
+ pub js_mem_max: i64,
+ pub js_native_regex_enabled: bool,
+ pub js_offthread_compilation_enabled: bool,
+ pub js_parallel_parsing_enabled: bool,
+ pub js_shared_memory: bool,
+ pub js_throw_on_asmjs_validation_failure: bool,
+ pub js_throw_on_debuggee_would_run: bool,
+ pub js_timers_minimum_duration: i64,
+ pub js_wasm_baseline_enabled: bool,
+ pub js_wasm_enabled: bool,
+ pub js_wasm_ion_enabled: bool,
+ pub js_werror_enabled: bool,
+ pub layout_animations_test_enabled: bool,
+ pub layout_columns_enabled: bool,
+ pub layout_grid_enabled: bool,
+ pub layout_container_queries_enabled: bool,
+ pub layout_css_transition_behavior_enabled: bool,
+ pub layout_flexbox_enabled: bool,
+ pub layout_legacy_layout: bool,
+ pub layout_threads: i64,
+ pub layout_unimplemented: bool,
+ pub layout_writing_mode_enabled: bool,
+ /// Enable hardware acceleration for video playback.
+ pub media_glvideo_enabled: bool,
+ /// Enable a non-standard event handler for verifying behavior of media elements during tests.
+ pub media_testing_enabled: bool,
+ pub network_enforce_tls_enabled: bool,
+ pub network_enforce_tls_localhost: bool,
+ pub network_enforce_tls_onion: bool,
+ pub network_http_cache_disabled: bool,
+ pub network_local_directory_listing_enabled: bool,
+ pub network_mime_sniff: bool,
+ /// Ignore `std::io::Error` with `ErrorKind::UnexpectedEof` received when a TLS connection
+ /// is closed without a close_notify.
+ ///
+ /// Used for tests because WPT server doesn't properly close the TLS connection.
+ // TODO: remove this when WPT server is updated to use a proper TLS implementation.
+ pub network_tls_ignore_unexpected_eof: bool,
+ pub session_history_max_length: i64,
+ /// The background color of shell's viewport. This will be used by OpenGL's `glClearColor`.
+ pub shell_background_color_rgba: [f64; 4],
+ pub webgl_testing_context_creation_error: bool,
+ /// Number of workers per threadpool, if we fail to detect how much
+ /// parallelism is available at runtime.
+ pub threadpools_fallback_worker_num: i64,
+ /// Maximum number of workers for the Image Cache thread pool
+ pub threadpools_image_cache_workers_max: i64,
+ /// Maximum number of workers for the Networking async runtime thread pool
+ pub threadpools_async_runtime_workers_max: i64,
+ /// Maximum number of workers for the Core Resource Manager
+ pub threadpools_resource_workers_max: i64,
+ /// Maximum number of workers for webrender
+ pub threadpools_webrender_workers_max: i64,
}
-impl TryFrom<&PrefValue> for StyloPrefValue {
- type Error = TryFromPrefValueError;
-
- fn try_from(value: &PrefValue) -> Result<Self, Self::Error> {
- match *value {
- PrefValue::Int(value) => {
- if let Ok(value) = value.try_into() {
- Ok(Self::Int(value))
- } else {
- Err(TryFromPrefValueError::IntegerOverflow(value))
- }
- },
- PrefValue::Bool(value) => Ok(Self::Bool(value)),
- _ => Err(TryFromPrefValueError::UnmappedType),
+impl Preferences {
+ const fn new() -> Self {
+ Self {
+ css_animations_testing_enabled: false,
+ devtools_server_enabled: false,
+ devtools_server_port: 0,
+ dom_abort_controller_enabled: false,
+ dom_allow_scripts_to_close_windows: false,
+ dom_bluetooth_enabled: false,
+ dom_bluetooth_testing_enabled: false,
+ dom_canvas_capture_enabled: false,
+ dom_canvas_text_enabled: true,
+ dom_composition_event_enabled: false,
+ dom_crypto_subtle_enabled: true,
+ dom_customelements_enabled: true,
+ dom_document_dblclick_dist: 1,
+ dom_document_dblclick_timeout: 300,
+ dom_forcetouch_enabled: false,
+ dom_fullscreen_test: false,
+ dom_gamepad_enabled: true,
+ dom_imagebitmap_enabled: false,
+ dom_intersection_observer_enabled: false,
+ dom_microdata_testing_enabled: false,
+ dom_mouse_event_which_enabled: false,
+ dom_mutation_observer_enabled: true,
+ dom_offscreen_canvas_enabled: false,
+ dom_permissions_enabled: false,
+ dom_permissions_testing_allowed_in_nonsecure_contexts: false,
+ dom_resize_observer_enabled: false,
+ dom_script_asynch: true,
+ dom_serviceworker_enabled: false,
+ dom_serviceworker_timeout_seconds: 60,
+ dom_servo_helpers_enabled: false,
+ dom_servoparser_async_html_tokenizer_enabled: false,
+ dom_shadowdom_enabled: false,
+ dom_svg_enabled: false,
+ dom_testable_crash_enabled: false,
+ dom_testbinding_enabled: false,
+ dom_testbinding_prefcontrolled2_enabled: false,
+ dom_testbinding_prefcontrolled_enabled: false,
+ dom_testbinding_preference_value_falsy: false,
+ dom_testbinding_preference_value_quote_string_test: String::new(),
+ dom_testbinding_preference_value_space_string_test: String::new(),
+ dom_testbinding_preference_value_string_empty: String::new(),
+ dom_testbinding_preference_value_string_test: String::new(),
+ dom_testbinding_preference_value_truthy: false,
+ dom_testing_element_activation_enabled: false,
+ dom_testing_html_input_element_select_files_enabled: false,
+ dom_testperf_enabled: false,
+ dom_webgl2_enabled: false,
+ dom_webgpu_enabled: false,
+ dom_webgpu_wgpu_backend: String::new(),
+ dom_webrtc_enabled: false,
+ dom_webrtc_transceiver_enabled: false,
+ dom_webvtt_enabled: false,
+ dom_webxr_enabled: true,
+ dom_webxr_first_person_observer_view: false,
+ dom_webxr_glwindow_cubemap: false,
+ dom_webxr_glwindow_enabled: true,
+ dom_webxr_glwindow_left_right: false,
+ dom_webxr_glwindow_red_cyan: false,
+ dom_webxr_glwindow_spherical: false,
+ dom_webxr_hands_enabled: true,
+ dom_webxr_layers_enabled: false,
+ dom_webxr_openxr_enabled: true,
+ dom_webxr_sessionavailable: false,
+ dom_webxr_test: false,
+ dom_webxr_unsafe_assume_user_intent: false,
+ dom_worklet_blockingsleep: false,
+ dom_worklet_enabled: false,
+ dom_worklet_testing_enabled: false,
+ dom_worklet_timeout_ms: 10,
+ dom_xpath_enabled: false,
+ fonts_default: String::new(),
+ fonts_default_monospace_size: 13,
+ fonts_default_size: 16,
+ fonts_monospace: String::new(),
+ fonts_sans_serif: String::new(),
+ fonts_serif: String::new(),
+ gfx_subpixel_text_antialiasing_enabled: true,
+ gfx_texture_swizzling_enabled: true,
+ js_asmjs_enabled: true,
+ js_asyncstack: false,
+ js_baseline_interpreter_enabled: true,
+ js_baseline_jit_enabled: true,
+ js_baseline_jit_unsafe_eager_compilation_enabled: false,
+ js_disable_jit: false,
+ js_discard_system_source: false,
+ js_dump_stack_on_debuggee_would_run: false,
+ js_ion_enabled: true,
+ js_ion_offthread_compilation_enabled: true,
+ js_ion_unsafe_eager_compilation_enabled: false,
+ js_mem_gc_allocation_threshold_avoid_interrupt_factor: 100,
+ js_mem_gc_allocation_threshold_factor: 100,
+ js_mem_gc_allocation_threshold_mb: 30,
+ js_mem_gc_compacting_enabled: true,
+ js_mem_gc_decommit_threshold_mb: 32,
+ js_mem_gc_dynamic_heap_growth_enabled: true,
+ js_mem_gc_dynamic_mark_slice_enabled: true,
+ js_mem_gc_empty_chunk_count_max: 30,
+ js_mem_gc_empty_chunk_count_min: 1,
+ js_mem_gc_high_frequency_heap_growth_max: 300,
+ js_mem_gc_high_frequency_heap_growth_min: 150,
+ js_mem_gc_high_frequency_high_limit_mb: 500,
+ js_mem_gc_high_frequency_low_limit_mb: 100,
+ js_mem_gc_high_frequency_time_limit_ms: 1000,
+ js_mem_gc_incremental_enabled: true,
+ js_mem_gc_incremental_slice_ms: 10,
+ js_mem_gc_low_frequency_heap_growth: 150,
+ js_mem_gc_per_zone_enabled: false,
+ js_mem_gc_zeal_frequency: 100,
+ js_mem_gc_zeal_level: 0,
+ js_mem_max: -1,
+ js_native_regex_enabled: true,
+ js_offthread_compilation_enabled: true,
+ js_parallel_parsing_enabled: true,
+ js_shared_memory: true,
+ js_throw_on_asmjs_validation_failure: false,
+ js_throw_on_debuggee_would_run: false,
+ js_timers_minimum_duration: 1000,
+ js_wasm_baseline_enabled: true,
+ js_wasm_enabled: true,
+ js_wasm_ion_enabled: true,
+ js_werror_enabled: false,
+ layout_animations_test_enabled: false,
+ layout_columns_enabled: false,
+ layout_container_queries_enabled: false,
+ layout_css_transition_behavior_enabled: true,
+ layout_flexbox_enabled: true,
+ layout_grid_enabled: false,
+ layout_legacy_layout: false,
+ // TODO(mrobinson): This should likely be based on the number of processors.
+ layout_threads: 3,
+ layout_unimplemented: false,
+ layout_writing_mode_enabled: false,
+ media_glvideo_enabled: false,
+ media_testing_enabled: false,
+ network_enforce_tls_enabled: false,
+ network_enforce_tls_localhost: false,
+ network_enforce_tls_onion: false,
+ network_http_cache_disabled: false,
+ network_local_directory_listing_enabled: false,
+ network_mime_sniff: false,
+ network_tls_ignore_unexpected_eof: false,
+ session_history_max_length: 20,
+ shell_background_color_rgba: [1.0, 1.0, 1.0, 1.0],
+ threadpools_async_runtime_workers_max: 6,
+ threadpools_fallback_worker_num: 3,
+ threadpools_image_cache_workers_max: 4,
+ threadpools_resource_workers_max: 4,
+ threadpools_webrender_workers_max: 4,
+ webgl_testing_context_creation_error: false,
}
}
}
-pub fn read_prefs_map(txt: &str) -> Result<HashMap<String, PrefValue>, PrefError> {
- let prefs: HashMap<String, Value> =
- serde_json::from_str(txt).map_err(PrefError::JsonParseErr)?;
- prefs
- .into_iter()
- .map(|(k, pref_value)| {
- Ok({
- let v = match &pref_value {
- Value::Bool(b) => PrefValue::Bool(*b),
- Value::Number(n) if n.is_i64() => PrefValue::Int(n.as_i64().unwrap()),
- Value::Number(n) if n.is_f64() => PrefValue::Float(n.as_f64().unwrap()),
- Value::String(s) => PrefValue::Str(s.to_owned()),
- Value::Array(v) => {
- let mut array = v.iter().map(PrefValue::from_json_value);
- if array.all(|v| v.is_some()) {
- PrefValue::Array(array.flatten().collect())
- } else {
- return Err(PrefError::InvalidValue(format!(
- "Invalid value: {}",
- pref_value
- )));
- }
- },
- _ => {
- return Err(PrefError::InvalidValue(format!(
- "Invalid value: {}",
- pref_value
- )));
- },
- };
- (k.to_owned(), v)
- })
- })
- .collect()
-}
-
-mod gen {
- use serde::{Deserialize, Serialize};
- use servo_config_plugins::build_structs;
-
- // The number of layout threads is calculated if it is not present in `prefs.json`.
- fn default_layout_threads() -> i64 {
- std::cmp::max(num_cpus::get() * 3 / 4, 1) as i64
- }
-
- fn default_font_size() -> i64 {
- 16
- }
-
- fn default_monospace_font_size() -> i64 {
- 13
- }
-
- build_structs! {
- // type of the accessors
- accessor_type = crate::pref_util::Accessor::<Prefs, crate::pref_util::PrefValue>,
- // name of the constant, which will hold a HashMap of preference accessors
- gen_accessors = PREF_ACCESSORS,
- // tree of structs to generate
- gen_types = Prefs {
- fonts: {
- #[serde(default)]
- default: String,
- #[serde(default)]
- serif: String,
- #[serde(default)]
- #[serde(rename = "fonts.sans-serif")]
- sans_serif: String,
- #[serde(default)]
- monospace: String,
- #[serde(default = "default_font_size")]
- #[serde(rename = "fonts.default-size")]
- default_size: i64,
- #[serde(default = "default_monospace_font_size")]
- #[serde(rename = "fonts.default-monospace-size")]
- default_monospace_size: i64,
- },
- /// Allows customizing the different threadpools used by servo
- threadpools: {
- /// Number of workers per threadpool, if we fail to detect how much
- /// parallelism is available at runtime.
- fallback_worker_num: i64,
- image_cache_workers: {
- /// Maximum number of workers for the Image Cache thread pool
- max: i64,
- },
- async_runtime_workers: {
- /// Maximum number of workers for the Networking async runtime thread pool
- max: i64
- },
- resource_workers: {
- /// Maximum number of workers for the Core Resource Manager
- max: i64,
- },
- webrender_workers: {
- /// Maximum number of workers for webrender
- max: i64,
- },
- },
- css: {
- animations: {
- testing: {
- #[serde(default)]
- enabled: bool,
- },
- },
- },
- devtools: {
- server: {
- enabled: bool,
- port: i64,
- },
- },
- dom: {
- webgpu: {
- /// Enable WebGPU APIs.
- enabled: bool,
- /// List of comma-separated backends to be used by wgpu
- wgpu_backend: String,
- },
- bluetooth: {
- enabled: bool,
- testing: {
- enabled: bool,
- }
- },
- abort_controller: {
- /// Whether to expose the AbortControll/AbortSignal DOM interfaces.
- enabled: bool,
- },
- allow_scripts_to_close_windows: bool,
- canvas_capture: {
- enabled: bool,
- },
- canvas_text: {
- enabled: bool,
- },
- composition_event: {
- #[serde(rename = "dom.compositionevent.enabled")]
- enabled: bool,
- },
- crypto: {
- subtle: {
- enabled: bool,
- }
- },
- custom_elements: {
- #[serde(rename = "dom.customelements.enabled")]
- enabled: bool,
- },
- document: {
- dblclick_timeout: i64,
- dblclick_dist: i64,
- },
- forcetouch: {
- enabled: bool,
- },
- fullscreen: {
- test: bool,
- },
- gamepad: {
- enabled: bool,
- },
- imagebitmap: {
- enabled: bool,
- },
- intersection_observer: {
- enabled: bool,
- },
- microdata: {
- testing: {
- enabled: bool,
- }
- },
- mouse_event: {
- which: {
- #[serde(rename = "dom.mouseevent.which.enabled")]
- enabled: bool,
- }
- },
- mutation_observer: {
- enabled: bool,
- },
- offscreen_canvas: {
- enabled: bool,
- },
- permissions: {
- enabled: bool,
- testing: {
- allowed_in_nonsecure_contexts: bool,
- }
- },
- resize_observer: {
- enabled: bool,
- },
- script: {
- asynch: bool,
- },
- serviceworker: {
- enabled: bool,
- timeout_seconds: i64,
- },
- servo_helpers: {
- enabled: bool,
- },
- servoparser: {
- async_html_tokenizer: {
- enabled: bool,
- }
- },
- shadowdom: {
- enabled: bool,
- },
- svg: {
- enabled: bool,
- },
- testable_crash: {
- enabled: bool,
- },
- testbinding: {
- enabled: bool,
- prefcontrolled: {
- #[serde(default)]
- enabled: bool,
- },
- prefcontrolled2: {
- #[serde(default)]
- enabled: bool,
- },
- preference_value: {
- #[serde(default)]
- falsy: bool,
- #[serde(default)]
- quote_string_test: String,
- #[serde(default)]
- space_string_test: String,
- #[serde(default)]
- string_empty: String,
- #[serde(default)]
- string_test: String,
- #[serde(default)]
- truthy: bool,
- },
- },
- testing: {
- element: {
- activation: {
- #[serde(default)]
- enabled: bool,
- }
- },
- html_input_element: {
- select_files: {
- #[serde(rename = "dom.testing.htmlinputelement.select_files.enabled")]
- enabled: bool,
- }
- },
- },
- testperf: {
- #[serde(default)]
- enabled: bool,
- },
- webgl2: {
- /// Enable WebGL2 APIs.
- enabled: bool,
- },
- webrtc: {
- transceiver: {
- enabled: bool,
- },
- #[serde(default)]
- enabled: bool,
- },
- webvtt: {
- enabled: bool,
- },
- webxr: {
- #[serde(default)]
- enabled: bool,
- #[serde(default)]
- test: bool,
- first_person_observer_view: bool,
- glwindow: {
- /// Enable servo/webxr's glwindow port. This is enabled only if openxr is
- /// disabled.
- #[serde(default)]
- enabled: bool,
- #[serde(rename = "dom.webxr.glwindow.left-right")]
- left_right: bool,
- #[serde(rename = "dom.webxr.glwindow.red-cyan")]
- red_cyan: bool,
- spherical: bool,
- cubemap: bool,
- },
- hands: {
- #[serde(default)]
- enabled: bool,
- },
- layers: {
- enabled: bool,
- },
- openxr: {
- /// Enable servo/webxr's openxr port
- enabled: bool,
- },
- sessionavailable: bool,
- #[serde(rename = "dom.webxr.unsafe-assume-user-intent")]
- unsafe_assume_user_intent: bool,
- },
- worklet: {
- blockingsleep: {
- #[serde(default)]
- enabled: bool,
- },
- #[serde(default)]
- enabled: bool,
- testing: {
- #[serde(default)]
- enabled: bool,
- },
- timeout_ms: i64,
- },
- xpath: {
- enabled: bool,
- }
- },
- gfx: {
- subpixel_text_antialiasing: {
- #[serde(rename = "gfx.subpixel-text-antialiasing.enabled")]
- enabled: bool,
- },
- texture_swizzling: {
- #[serde(rename = "gfx.texture-swizzling.enabled")]
- enabled: bool,
- },
- },
- js: {
- asmjs: {
- enabled: bool,
- },
- asyncstack: {
- enabled: bool,
- },
- baseline_interpreter: {
- enabled: bool,
- },
- /// Whether to disable the jit within SpiderMonkey
- disable_jit: bool,
- baseline_jit: {
- enabled: bool,
- unsafe_eager_compilation: {
- enabled: bool,
- },
- },
- discard_system_source: {
- enabled: bool,
- },
- dump_stack_on_debuggee_would_run: {
- enabled: bool,
- },
- ion: {
- enabled: bool,
- offthread_compilation: {
- enabled: bool,
- },
- unsafe_eager_compilation: {
- enabled: bool,
- },
- },
- mem: {
- gc: {
- allocation_threshold_mb: i64,
- allocation_threshold_factor: i64,
- allocation_threshold_avoid_interrupt_factor: i64,
- compacting: {
- enabled: bool,
- },
- decommit_threshold_mb: i64,
- dynamic_heap_growth: {
- enabled: bool,
- },
- dynamic_mark_slice: {
- enabled: bool,
- },
- empty_chunk_count_max: i64,
- empty_chunk_count_min: i64,
- high_frequency_heap_growth_max: i64,
- high_frequency_heap_growth_min: i64,
- high_frequency_high_limit_mb: i64,
- high_frequency_low_limit_mb: i64,
- high_frequency_time_limit_ms: i64,
- incremental: {
- enabled: bool,
- slice_ms: i64,
- },
- low_frequency_heap_growth: i64,
- per_zone: {
- enabled: bool,
- },
- zeal: {
- frequency: i64,
- level: i64,
- },
- },
- max: i64,
- },
- native_regex: {
- enabled: bool,
- },
- offthread_compilation: {
- enabled: bool,
- },
- parallel_parsing: {
- enabled: bool,
- },
- shared_memory: {
- enabled: bool,
- },
- throw_on_asmjs_validation_failure: {
- enabled: bool,
- },
- throw_on_debuggee_would_run: {
- enabled: bool,
- },
- timers: {
- minimum_duration: i64,
- },
- wasm: {
- baseline: {
- enabled: bool,
- },
- enabled: bool,
- ion: {
- enabled: bool,
- }
- },
- werror: {
- enabled: bool,
- },
- },
- layout: {
- animations: {
- test: {
- enabled: bool,
- }
- },
- columns: {
- enabled: bool,
- },
- css: {
- transition_behavior: {
- #[serde(rename = "layout.css.transition-behavior.enabled")]
- enabled: bool,
- }
- },
- flexbox: {
- enabled: bool,
- },
- grid: {
- enabled: bool,
- },
- legacy_layout: bool,
- #[serde(default = "default_layout_threads")]
- threads: i64,
- writing_mode: {
- #[serde(rename = "layout.writing-mode.enabled")]
- enabled: bool,
- }
- },
- media: {
- glvideo: {
- /// Enable hardware acceleration for video playback.
- enabled: bool,
- },
- testing: {
- /// Enable a non-standard event handler for verifying behavior of media elements during tests.
- enabled: bool,
- }
- },
- network: {
- enforce_tls: {
- enabled: bool,
- localhost: bool,
- onion: bool,
- },
- http_cache: {
- #[serde(rename = "network.http-cache.disabled")]
- disabled: bool,
- },
- local_directory_listing: {
- enabled: bool,
- },
- mime: {
- sniff: bool,
- },
- tls: {
- /// Ignore `std::io::Error` with `ErrorKind::UnexpectedEof` received when a TLS connection
- /// is closed without a close_notify.
- ///
- /// Used for tests because WPT server doesn't properly close the TLS connection.
- // TODO: remove this when WPT server is updated to use a proper TLS implementation.
- ignore_unexpected_eof: bool,
- },
- },
- session_history: {
- #[serde(rename = "session-history.max-length")]
- max_length: i64,
- },
- shell: {
- background_color: {
- /// The background color of shell's viewport. This will be used by OpenGL's `glClearColor`.
- #[serde(rename = "shell.background-color.rgba")]
- rgba: [f64; 4],
- },
- crash_reporter: {
- enabled: bool,
- },
- /// URL string of the homepage.
- homepage: String,
- #[serde(rename = "shell.native-orientation")]
- native_orientation: String,
- native_titlebar: {
- /// Enable native window's titlebar and decorations.
- #[serde(rename = "shell.native-titlebar.enabled")]
- enabled: bool,
- },
- /// URL string of the search engine page (for example <https://google.com> or and <https://duckduckgo.com>.
- searchpage: String,
- },
- webgl: {
- testing: {
- context_creation_error: bool,
- }
- },
- }
+impl Default for Preferences {
+ fn default() -> Self {
+ Self::new()
}
}
diff --git a/components/config/tests/prefs.rs b/components/config/tests/prefs.rs
deleted file mode 100644
index 4ff37299a8d..00000000000
--- a/components/config/tests/prefs.rs
+++ /dev/null
@@ -1,333 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-
-use std::collections::HashMap;
-use std::error::Error;
-use std::fs::{self, File};
-use std::io::{Read, Write};
-
-use servo_config::basedir;
-use servo_config::pref_util::Preferences;
-use servo_config::prefs::{read_prefs_map, PrefValue};
-
-#[test]
-fn test_create_prefs_map() {
- let json_str = "{
- \"layout.writing-mode.enabled\": true,
- \"network.mime.sniff\": false,
- \"shell.homepage\": \"https://servo.org\"
- }";
- let prefs = read_prefs_map(json_str);
- assert!(prefs.is_ok());
- let prefs = prefs.unwrap();
- assert_eq!(prefs.len(), 3);
-}
-
-#[test]
-fn test_generated_accessors_get() {
- let prefs: gen::TestPrefs = serde_json::from_str(DEF_JSON_STR).unwrap();
- let map: HashMap<String, PrefValue> = gen::TEST_PREF_ACCESSORS
- .iter()
- .map(move |(key, accessor)| {
- let pref_value = (accessor.getter)(&prefs);
- (key.clone(), pref_value)
- })
- .collect();
-
- assert_eq!(&PrefValue::from("hello"), map.get("pref_string").unwrap());
- assert_eq!(&PrefValue::from(23_i64), map.get("pref_i64").unwrap());
- assert_eq!(&PrefValue::from(1.5_f64), map.get("pref_f64").unwrap());
- assert_eq!(&PrefValue::from(true), map.get("pref_bool").unwrap());
- assert_eq!(
- &PrefValue::from(333_i64),
- map.get("group.nested.nested_i64").unwrap()
- );
- assert_eq!(&PrefValue::from(42_i64), map.get("a.renamed.pref").unwrap());
-}
-
-#[test]
-fn test_generated_accessors_set() {
- let mut prefs: gen::TestPrefs = serde_json::from_str(DEF_JSON_STR).unwrap();
- let setters: HashMap<String, _> = gen::TEST_PREF_ACCESSORS
- .iter()
- .map(|(key, accessor)| (key.clone(), &accessor.setter))
- .collect();
-
- (setters.get("pref_string").unwrap())(&mut prefs, PrefValue::Str(String::from("boo")));
- (setters.get("pref_i64").unwrap())(&mut prefs, PrefValue::Int(-25));
- (setters.get("pref_f64").unwrap())(&mut prefs, PrefValue::Float(-1.9));
- (setters.get("pref_bool").unwrap())(&mut prefs, PrefValue::Bool(false));
- (setters.get("group.nested.nested_i64").unwrap())(&mut prefs, PrefValue::Int(10));
- (setters.get("a.renamed.pref").unwrap())(&mut prefs, PrefValue::Int(11));
-
- assert_eq!("boo", prefs.pref_string);
- assert_eq!(-25, prefs.pref_i64);
- assert_eq!(-1.9, prefs.pref_f64);
- assert_eq!(false, prefs.pref_bool);
- assert_eq!(10, prefs.group.nested.nested_i64);
- assert_eq!(11, prefs.group.nested.renamed);
-}
-
-#[test]
-fn test_static_struct() {
- let prefs: gen::TestPrefs = serde_json::from_str(DEF_JSON_STR).unwrap();
- assert_eq!("hello", prefs.pref_string);
- assert_eq!(23, prefs.pref_i64);
- assert_eq!(1.5, prefs.pref_f64);
- assert_eq!(true, prefs.pref_bool);
- assert_eq!(333, prefs.group.nested.nested_i64);
- assert_eq!(42, prefs.group.nested.renamed);
-}
-
-#[test]
-fn test_set_pref() {
- let prefs = Preferences::new(gen::TestPrefs::default(), &gen::TEST_PREF_ACCESSORS);
- assert_eq!(Some(0), prefs.get("group.nested.nested_i64").as_i64());
- let result = prefs.set("group.nested.nested_i64", 1);
- assert_eq!(true, result.is_ok());
- assert_eq!(Some(1), prefs.get("group.nested.nested_i64").as_i64());
- assert_eq!(1, prefs.values().read().unwrap().group.nested.nested_i64);
-}
-
-#[test]
-fn test_set_unknown_pref_is_err() -> Result<(), Box<dyn Error>> {
- let prefs = Preferences::new(gen::TestPrefs::default(), &gen::TEST_PREF_ACCESSORS);
- let result = prefs.set("unknown_pref", 1);
- assert_eq!(true, result.is_err());
- Ok(())
-}
-
-#[test]
-fn test_reset_pref() -> Result<(), Box<dyn Error>> {
- let mut def_prefs = gen::TestPrefs::default();
- def_prefs.group.nested.nested_i64 = 999;
- let prefs = Preferences::new(def_prefs, &gen::TEST_PREF_ACCESSORS);
- assert_eq!(Some(999), prefs.get("group.nested.nested_i64").as_i64());
-
- prefs.set("group.nested.nested_i64", 1)?;
- assert_eq!(Some(1), prefs.get("group.nested.nested_i64").as_i64());
-
- prefs.reset("group.nested.nested_i64")?;
- assert_eq!(Some(999), prefs.get("group.nested.nested_i64").as_i64());
- assert_eq!(999, prefs.values().read().unwrap().group.nested.nested_i64);
- Ok(())
-}
-
-#[test]
-fn test_default_values() -> Result<(), Box<dyn Error>> {
- let def_prefs: gen::TestPrefs = serde_json::from_str(DEF_JSON_STR)?;
- let prefs = Preferences::new(def_prefs, &gen::TEST_PREF_ACCESSORS);
- assert_eq!(Some(0), prefs.get("default_value").as_i64());
- assert_eq!(Some(555), prefs.get("computed_default_value").as_i64());
- Ok(())
-}
-
-#[test]
-fn test_override_default_values() -> Result<(), Box<dyn Error>> {
- let def_prefs: gen::TestPrefs = serde_json::from_str(WITHOUT_DEFAULTS_JSON_STR)?;
- let prefs = Preferences::new(def_prefs, &gen::TEST_PREF_ACCESSORS);
- assert_eq!(Some(-1), prefs.get("default_value").as_i64());
- assert_eq!(Some(-1), prefs.get("computed_default_value").as_i64());
- Ok(())
-}
-
-#[test]
-fn test_update_reset_default_values() -> Result<(), Box<dyn Error>> {
- let def_prefs: gen::TestPrefs = serde_json::from_str(DEF_JSON_STR)?;
- let prefs = Preferences::new(def_prefs, &gen::TEST_PREF_ACCESSORS);
-
- prefs.set("default_value", 99)?;
- prefs.set("computed_default_value", 199)?;
- assert_eq!(Some(99), prefs.get("default_value").as_i64());
- assert_eq!(Some(199), prefs.get("computed_default_value").as_i64());
-
- prefs.reset("default_value")?;
- prefs.reset("computed_default_value")?;
- assert_eq!(Some(0), prefs.get("default_value").as_i64());
- assert_eq!(Some(555), prefs.get("computed_default_value").as_i64());
- Ok(())
-}
-
-#[test]
-fn test_update_reset_overridden_default_values() -> Result<(), Box<dyn Error>> {
- let def_prefs: gen::TestPrefs = serde_json::from_str(WITHOUT_DEFAULTS_JSON_STR)?;
- let prefs = Preferences::new(def_prefs, &gen::TEST_PREF_ACCESSORS);
- prefs.set("default_value", 99)?;
- prefs.set("computed_default_value", 199)?;
- assert_eq!(Some(99), prefs.get("default_value").as_i64());
- assert_eq!(Some(199), prefs.get("computed_default_value").as_i64());
-
- prefs.reset("default_value")?;
- prefs.reset("computed_default_value")?;
- assert_eq!(Some(-1), prefs.get("default_value").as_i64());
- assert_eq!(Some(-1), prefs.get("computed_default_value").as_i64());
- Ok(())
-}
-
-#[test]
-fn test_user_prefs_override_and_reset() -> Result<(), Box<dyn Error>> {
- let mut def_prefs = gen::TestPrefs::default();
- def_prefs.group.nested.nested_i64 = 999;
- let prefs = Preferences::new(def_prefs, &gen::TEST_PREF_ACCESSORS);
-
- prefs.set("group.nested.nested_i64", 45)?;
- assert_eq!(Some(45), prefs.get("group.nested.nested_i64").as_i64());
-
- prefs.reset("group.nested.nested_i64")?;
- assert_eq!(Some(999), prefs.get("group.nested.nested_i64").as_i64());
- Ok(())
-}
-
-#[test]
-fn test_reset_all() -> Result<(), Box<dyn Error>> {
- let def_prefs: gen::TestPrefs = serde_json::from_str(DEF_JSON_STR)?;
- let prefs = Preferences::new(def_prefs, &gen::TEST_PREF_ACCESSORS);
- prefs.set_all(read_prefs_map(USER_JSON_STR)?)?;
-
- let values = prefs.values();
- assert_eq!("bye", values.read().unwrap().pref_string);
- assert_eq!(-1, values.read().unwrap().pref_i64);
- assert_eq!(-1.0, values.read().unwrap().pref_f64);
- assert_eq!(false, values.read().unwrap().pref_bool);
- assert_eq!(-1, values.read().unwrap().group.nested.nested_i64);
- assert_eq!(-1, values.read().unwrap().group.nested.renamed);
-
- prefs.reset_all();
-
- let values = prefs.values();
- assert_eq!("hello", values.read().unwrap().pref_string);
- assert_eq!(23, values.read().unwrap().pref_i64);
- assert_eq!(1.5, values.read().unwrap().pref_f64);
- assert_eq!(true, values.read().unwrap().pref_bool);
- assert_eq!(333, values.read().unwrap().group.nested.nested_i64);
- assert_eq!(42, values.read().unwrap().group.nested.renamed);
- Ok(())
-}
-
-#[test]
-fn test_set_all_from_map() -> Result<(), Box<dyn Error>> {
- let def_prefs: gen::TestPrefs = serde_json::from_str(DEF_JSON_STR)?;
- let prefs = Preferences::new(def_prefs, &gen::TEST_PREF_ACCESSORS);
- prefs.set_all(read_prefs_map(USER_JSON_STR)?)?;
-
- let mut overrides = HashMap::new();
- overrides.insert(String::from("pref_string"), PrefValue::from("new value"));
- overrides.insert(
- String::from("group.nested.nested_i64"),
- PrefValue::from(1001),
- );
- overrides.insert(String::from("a.renamed.pref"), PrefValue::from(47));
-
- let result = prefs.set_all(overrides.into_iter());
- assert_eq!(true, result.is_ok());
-
- let values = prefs.values();
- assert_eq!("new value", values.read().unwrap().pref_string);
- assert_eq!(1001, values.read().unwrap().group.nested.nested_i64);
- assert_eq!(47, values.read().unwrap().group.nested.renamed);
- Ok(())
-}
-
-#[test]
-fn test_set_all_error_on_unknown_field() -> Result<(), Box<dyn Error>> {
- let def_prefs: gen::TestPrefs = serde_json::from_str(DEF_JSON_STR)?;
- let prefs = Preferences::new(def_prefs, &gen::TEST_PREF_ACCESSORS);
-
- let mut overrides = HashMap::new();
- overrides.insert(String::from("doesnt_exist"), PrefValue::from(1001));
-
- let result = prefs.set_all(overrides.into_iter());
- assert_eq!(true, result.is_err());
- Ok(())
-}
-
-#[cfg(not(target_os = "android"))]
-#[test]
-fn test_default_config_dir_create_read_write() {
- let json_str = "{\
- \"layout.writing-mode.enabled\": true,\
- \"extra.stuff\": false,\
- \"shell.homepage\": \"https://google.com\"\
- }";
- let mut expected_json = String::new();
- let config_path = basedir::default_config_dir().unwrap();
-
- if !config_path.exists() {
- fs::create_dir_all(&config_path).unwrap();
- }
-
- let json_path = config_path.join("test_config.json");
-
- let mut fd = File::create(&json_path).unwrap();
- assert_eq!(json_path.exists(), true);
-
- fd.write_all(json_str.as_bytes()).unwrap();
- let mut fd = File::open(&json_path).unwrap();
- fd.read_to_string(&mut expected_json).unwrap();
-
- assert_eq!(json_str, expected_json);
-
- fs::remove_file(&json_path).unwrap();
-}
-
-static DEF_JSON_STR: &'static str = r#"{
- "pref_string": "hello",
- "pref_i64": 23,
- "pref_f64": 1.5,
- "pref_bool": true,
- "group.nested.nested_i64": 333,
- "a.renamed.pref": 42
-}"#;
-
-static USER_JSON_STR: &'static str = r#"{
- "pref_string": "bye",
- "pref_i64": -1,
- "pref_f64": -1.0,
- "pref_bool": false,
- "group.nested.nested_i64": -1,
- "a.renamed.pref": -1
-}"#;
-
-static WITHOUT_DEFAULTS_JSON_STR: &'static str = r#"{
- "pref_string": "bye",
- "pref_i64": -1,
- "pref_f64": -1.0,
- "pref_bool": false,
- "group.nested.nested_i64": -1,
- "a.renamed.pref": -1,
- "computed_default_value": -1,
- "default_value": -1
-}"#;
-
-mod gen {
- use serde::{Deserialize, Serialize};
- use servo_config::pref_util::{Accessor, PrefValue};
- use servo_config_plugins::build_structs;
-
- fn compute_default() -> i64 {
- 555
- }
-
- build_structs! {
- accessor_type = Accessor::<TestPrefs, PrefValue>,
- gen_accessors = TEST_PREF_ACCESSORS,
- gen_types = TestPrefs {
- pref_string: String,
- pref_i64: i64,
- pref_f64: f64,
- pref_bool: bool,
- #[serde(default)]
- default_value: i64,
- #[serde(default = "compute_default")]
- computed_default_value: i64,
- group: {
- nested: {
- nested_i64: i64,
- #[serde(rename = "a.renamed.pref")]
- renamed: i64,
- }
- }
- }
- }
-}
diff --git a/components/config_plugins/lib.rs b/components/config_plugins/lib.rs
deleted file mode 100644
index 4d2eb61943c..00000000000
--- a/components/config_plugins/lib.rs
+++ /dev/null
@@ -1,206 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-
-use std::collections::{hash_map, HashMap};
-use std::fmt::Write;
-use std::iter;
-
-use itertools::Itertools;
-use proc_macro2::{Span, TokenStream};
-use quote::*;
-use syn::parse::Result;
-use syn::spanned::Spanned;
-use syn::{parse_macro_input, Attribute, Ident, LitStr, Path};
-
-mod parse;
-use parse::*;
-
-#[proc_macro]
-pub fn build_structs(tokens: proc_macro::TokenStream) -> proc_macro::TokenStream {
- let input: MacroInput = parse_macro_input!(tokens);
- let out = Build::new(&input)
- .build(&input.type_def)
- .unwrap_or_else(|e| syn::Error::new(e.span(), e).to_compile_error());
- out.into()
-}
-
-struct Build {
- root_type_name: Ident,
- gen_accessors: Ident,
- accessor_type: Path,
- output: TokenStream,
- path_stack: Vec<Ident>,
- path_map: HashMap<String, Vec<Ident>>,
-}
-
-impl Build {
- fn new(input: &MacroInput) -> Self {
- Build {
- root_type_name: input.type_def.type_name.clone(),
- gen_accessors: input.gen_accessors.clone(),
- accessor_type: input.accessor_type.clone(),
- output: TokenStream::new(),
- path_stack: Vec::new(),
- path_map: HashMap::new(),
- }
- }
-
- fn build(mut self, type_def: &RootTypeDef) -> Result<TokenStream> {
- self.walk(&type_def.type_def)?;
- self.build_accessors();
- Ok(self.output)
- }
-
- fn walk(&mut self, type_def: &NewTypeDef) -> Result<()> {
- self.define_pref_struct(type_def)?;
-
- for field in type_def.fields.iter() {
- self.path_stack.push(field.name.clone());
-
- if let FieldType::NewTypeDef(new_def) = &field.field_type {
- self.walk(new_def)?;
- } else {
- let pref_name =
- self.pref_name(field, &self.path_stack[..self.path_stack.len() - 1]);
- if let hash_map::Entry::Vacant(slot) = self.path_map.entry(pref_name) {
- slot.insert(self.path_stack.clone());
- } else {
- return Err(err(&field.name, "duplicate preference name"));
- }
- }
-
- self.path_stack.pop();
- }
- Ok(())
- }
-
- fn define_pref_struct(&mut self, type_def: &NewTypeDef) -> Result<()> {
- let struct_name = self.path_to_name(self.path_stack.iter());
- let field_defs = type_def
- .fields
- .iter()
- .map(|field| self.field_to_tokens(field, &self.path_stack))
- .collect::<Result<Vec<_>>>()?;
- self.output.extend(quote! {
- #[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
- #[allow(non_camel_case_types)]
- pub struct #struct_name {
- #(#field_defs), *
- }
- });
- Ok(())
- }
-
- fn build_accessors(&mut self) {
- let accessor_type = &self.accessor_type;
- let values = self.path_map.iter().map(|(key, path)| {
- quote! {
- map.insert(String::from(#key),
- #accessor_type::new(
- |prefs| prefs #(.#path)*.clone().into(),
- |prefs, value| prefs #(.#path)* = value.into()
- )
- );
- }
- });
-
- let gen_accessors = &self.gen_accessors;
- let num_prefs = self.path_map.len();
-
- self.output.extend(quote! {
- pub static #gen_accessors: std::sync::LazyLock<std::collections::HashMap<String, #accessor_type>> =
- std::sync::LazyLock::new(|| {
- let mut map = std::collections::HashMap::with_capacity(#num_prefs);
- #(#values)*
- map
- });
- });
- }
-
- fn pref_name(&self, field: &Field, path_stack: &[Ident]) -> String {
- field
- .get_field_name_mapping()
- .map(|pref_attr| pref_attr.value())
- .unwrap_or_else(|| {
- Itertools::intersperse(
- path_stack
- .iter()
- .chain(iter::once(&field.name))
- .map(Ident::to_string),
- String::from("."),
- )
- .collect()
- })
- }
-
- fn field_to_tokens(&self, field: &Field, path_stack: &[Ident]) -> Result<TokenStream> {
- let name = &field.name;
- Ok(match &field.field_type {
- FieldType::NewTypeDef(_) => {
- let type_name = self.path_to_name(path_stack.iter().chain(iter::once(name)));
- quote! {
- #[serde(flatten)]
- pub #name: #type_name
- }
- },
- FieldType::Existing(type_name) => {
- let pref_name = self.pref_name(field, path_stack);
- let attributes = field.get_attributes(&pref_name);
- quote! {
- #attributes
- pub #name: #type_name
- }
- },
- })
- }
-
- fn path_to_name<'p, P: Iterator<Item = &'p Ident> + 'p>(&self, path: P) -> Ident {
- let mut name = format!("{}", self.root_type_name);
- for part in path {
- name.write_fmt(format_args!("__{}", part)).unwrap();
- }
- Ident::new(&name, Span::call_site())
- }
-}
-
-impl Field {
- fn get_attributes(&self, pref_name: &str) -> TokenStream {
- let mut tokens = TokenStream::new();
- for attr in self
- .attributes
- .iter()
- .filter(|attr| attr_to_pref_name(attr).is_none())
- {
- attr.to_tokens(&mut tokens);
- }
- tokens.extend(quote! {
- #[serde(rename = #pref_name)]
- });
- tokens
- }
-
- fn get_field_name_mapping(&self) -> Option<LitStr> {
- self.attributes.iter().filter_map(attr_to_pref_name).next()
- }
-}
-
-fn attr_to_pref_name(attr: &Attribute) -> Option<LitStr> {
- if attr.path().is_ident("serde") {
- // If `parse_nested_meta()` fails, `result` will remain None.
- let mut result = None;
- let _ = attr.parse_nested_meta(|meta| {
- if meta.path.is_ident("rename") {
- result = Some(meta.value()?.parse()?);
- }
- Ok(())
- });
- result
- } else {
- None
- }
-}
-
-fn err<S: Spanned>(s: S, msg: &str) -> syn::Error {
- syn::Error::new(s.span(), msg)
-}
diff --git a/components/config_plugins/parse.rs b/components/config_plugins/parse.rs
deleted file mode 100644
index 63a3d66dfda..00000000000
--- a/components/config_plugins/parse.rs
+++ /dev/null
@@ -1,151 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-
-use proc_macro2::Span;
-use syn::parse::{Parse, ParseStream, Result};
-use syn::punctuated::Punctuated;
-use syn::{braced, token, Attribute, Ident, Path, Token, Type};
-
-#[allow(non_camel_case_types)]
-mod kw {
- syn::custom_keyword!(accessor_type);
- syn::custom_keyword!(gen_accessors);
- syn::custom_keyword!(gen_types);
-}
-
-pub struct MacroInput {
- pub type_def: RootTypeDef,
- pub gen_accessors: Ident,
- pub accessor_type: Path,
-}
-
-enum MacroArg {
- GenAccessors(ArgInner<kw::gen_accessors, Ident>),
- AccessorType(ArgInner<kw::accessor_type, Path>),
- Types(ArgInner<kw::gen_types, RootTypeDef>),
-}
-
-struct ArgInner<K, V> {
- _field_kw: K,
- _equals: Token![=],
- value: V,
-}
-
-pub struct Field {
- pub attributes: Vec<Attribute>,
- pub name: Ident,
- _colon: Token![:],
- pub field_type: FieldType,
-}
-
-pub enum FieldType {
- Existing(Type),
- NewTypeDef(NewTypeDef),
-}
-
-pub struct NewTypeDef {
- _braces: token::Brace,
- pub fields: Punctuated<Field, Token![, ]>,
-}
-
-pub struct RootTypeDef {
- pub type_name: Ident,
- pub type_def: NewTypeDef,
-}
-
-impl Parse for MacroInput {
- fn parse(input: ParseStream<'_>) -> Result<Self> {
- let fields: Punctuated<MacroArg, Token![, ]> =
- Punctuated::parse_terminated_with(input, MacroArg::parse)?;
- let mut gen_accessors = None;
- let mut type_def = None;
- let mut accessor_type = None;
- for arg in fields.into_iter() {
- match arg {
- MacroArg::GenAccessors(ArgInner { value, .. }) => gen_accessors = Some(value),
- MacroArg::AccessorType(ArgInner { value, .. }) => accessor_type = Some(value),
- MacroArg::Types(ArgInner { value, .. }) => type_def = Some(value),
- }
- }
-
- fn missing_attr(att_name: &str) -> syn::Error {
- syn::Error::new(
- Span::call_site(),
- format!("Expected `{}` attribute", att_name),
- )
- }
-
- Ok(MacroInput {
- type_def: type_def.ok_or_else(|| missing_attr("gen_types"))?,
- gen_accessors: gen_accessors.ok_or_else(|| missing_attr("gen_accessors"))?,
- accessor_type: accessor_type.ok_or_else(|| missing_attr("accessor_type"))?,
- })
- }
-}
-
-impl Parse for MacroArg {
- fn parse(input: ParseStream<'_>) -> Result<Self> {
- let lookahead = input.lookahead1();
- if lookahead.peek(kw::gen_types) {
- Ok(MacroArg::Types(input.parse()?))
- } else if lookahead.peek(kw::gen_accessors) {
- Ok(MacroArg::GenAccessors(input.parse()?))
- } else if lookahead.peek(kw::accessor_type) {
- Ok(MacroArg::AccessorType(input.parse()?))
- } else {
- Err(lookahead.error())
- }
- }
-}
-
-impl<K: Parse, V: Parse> Parse for ArgInner<K, V> {
- fn parse(input: ParseStream<'_>) -> Result<Self> {
- Ok(ArgInner {
- _field_kw: input.parse()?,
- _equals: input.parse()?,
- value: input.parse()?,
- })
- }
-}
-
-impl Parse for Field {
- fn parse(input: ParseStream<'_>) -> Result<Self> {
- Ok(Field {
- attributes: input.call(Attribute::parse_outer)?,
- name: input.parse()?,
- _colon: input.parse()?,
- field_type: input.parse()?,
- })
- }
-}
-
-impl Parse for RootTypeDef {
- fn parse(input: ParseStream<'_>) -> Result<Self> {
- Ok(RootTypeDef {
- type_name: input.parse()?,
- type_def: input.parse()?,
- })
- }
-}
-
-impl Parse for NewTypeDef {
- fn parse(input: ParseStream<'_>) -> Result<Self> {
- let content;
- #[allow(clippy::mixed_read_write_in_expression)]
- Ok(NewTypeDef {
- _braces: braced!(content in input),
- fields: Punctuated::parse_terminated_with(&content, Field::parse)?,
- })
- }
-}
-
-impl Parse for FieldType {
- fn parse(input: ParseStream<'_>) -> Result<Self> {
- if input.peek(token::Brace) {
- Ok(FieldType::NewTypeDef(input.parse()?))
- } else {
- Ok(FieldType::Existing(input.parse()?))
- }
- }
-}
diff --git a/components/constellation/constellation.rs b/components/constellation/constellation.rs
index 55777f1b6a1..0558c234f51 100644
--- a/components/constellation/constellation.rs
+++ b/components/constellation/constellation.rs
@@ -660,7 +660,7 @@ where
// a dedicated per-process hang monitor will be initialized later inside the content process.
// See run_content_process in servo/lib.rs
let (background_monitor_register, background_hang_monitor_control_ipc_senders) =
- if opts::multiprocess() {
+ if opts::get().multiprocess {
(None, vec![])
} else {
let (
@@ -2502,7 +2502,7 @@ where
};
let content = ServiceWorkerUnprivilegedContent::new(sw_senders, origin);
- if opts::multiprocess() {
+ if opts::get().multiprocess {
if content.spawn_multiprocess().is_err() {
return warn!("Failed to spawn process for SW manager.");
}
@@ -5034,7 +5034,7 @@ where
let pipelines_to_evict = {
let session_history = self.get_joint_session_history(top_level_browsing_context_id);
- let history_length = pref!(session_history.max_length) as usize;
+ let history_length = pref!(session_history_max_length) as usize;
// The past is stored with older entries at the front.
// We reverse the iter so that newer entries are at the front and then
diff --git a/components/constellation/pipeline.rs b/components/constellation/pipeline.rs
index d8dd2028ebb..73bdd612884 100644
--- a/components/constellation/pipeline.rs
+++ b/components/constellation/pipeline.rs
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use std::borrow::Cow;
-use std::collections::{HashMap, HashSet};
+use std::collections::HashSet;
use std::rc::Rc;
use std::sync::Arc;
@@ -39,8 +39,7 @@ use script_traits::{
};
use serde::{Deserialize, Serialize};
use servo_config::opts::{self, Opts};
-use servo_config::prefs;
-use servo_config::prefs::PrefValue;
+use servo_config::prefs::{self, Preferences};
use servo_url::ServoUrl;
use webrender_api::DocumentId;
use webrender_traits::CrossProcessCompositorApi;
@@ -283,7 +282,7 @@ impl Pipeline {
load_data: state.load_data.clone(),
script_port,
opts: (*opts::get()).clone(),
- prefs: prefs::pref_map().iter().collect(),
+ prefs: Box::new(prefs::get().clone()),
pipeline_namespace_id: state.pipeline_namespace_id,
webrender_document: state.webrender_document,
cross_process_compositor_api: state
@@ -300,7 +299,7 @@ impl Pipeline {
// Spawn the child process.
//
// Yes, that's all there is to it!
- let bhm_control_chan = if opts::multiprocess() {
+ let bhm_control_chan = if opts::get().multiprocess {
let (bhm_control_chan, bhm_control_port) =
ipc::channel().expect("Sampler chan");
unprivileged_pipeline_content.bhm_control_port = Some(bhm_control_port);
@@ -490,7 +489,7 @@ pub struct UnprivilegedPipelineContent {
load_data: LoadData,
script_port: IpcReceiver<ConstellationControlMsg>,
opts: Opts,
- prefs: HashMap<String, PrefValue>,
+ prefs: Box<Preferences>,
pipeline_namespace_id: PipelineNamespaceId,
cross_process_compositor_api: CrossProcessCompositorApi,
webrender_document: DocumentId,
@@ -581,7 +580,7 @@ impl UnprivilegedPipelineContent {
self.opts.clone()
}
- pub fn prefs(&self) -> HashMap<String, PrefValue> {
- self.prefs.clone()
+ pub fn prefs(&self) -> &Preferences {
+ &self.prefs
}
}
diff --git a/components/constellation/sandboxing.rs b/components/constellation/sandboxing.rs
index ffb0d44d5cc..0f883b4743a 100644
--- a/components/constellation/sandboxing.rs
+++ b/components/constellation/sandboxing.rs
@@ -2,7 +2,6 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-use std::collections::HashMap;
#[cfg(not(windows))]
use std::env;
use std::ffi::OsStr;
@@ -23,7 +22,7 @@ use gaol::profile::{Operation, PathPattern, Profile};
use ipc_channel::Error;
use serde::{Deserialize, Serialize};
use servo_config::opts::Opts;
-use servo_config::prefs::PrefValue;
+use servo_config::prefs::Preferences;
use crate::pipeline::UnprivilegedPipelineContent;
use crate::serviceworker::ServiceWorkerUnprivilegedContent;
@@ -43,7 +42,7 @@ impl UnprivilegedContent {
}
}
- pub fn prefs(&self) -> HashMap<String, PrefValue> {
+ pub fn prefs(&self) -> &Preferences {
match self {
UnprivilegedContent::Pipeline(content) => content.prefs(),
UnprivilegedContent::ServiceWorker(content) => content.prefs(),
diff --git a/components/constellation/serviceworker.rs b/components/constellation/serviceworker.rs
index 9db6a8d8281..c4b13d7dbff 100644
--- a/components/constellation/serviceworker.rs
+++ b/components/constellation/serviceworker.rs
@@ -2,13 +2,12 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-use std::collections::HashMap;
-
use ipc_channel::Error;
use script_traits::{SWManagerSenders, ServiceWorkerManagerFactory};
use serde::{Deserialize, Serialize};
use servo_config::opts::{self, Opts};
-use servo_config::prefs::{self, PrefValue};
+use servo_config::prefs;
+use servo_config::prefs::Preferences;
use servo_url::ImmutableOrigin;
use crate::sandboxing::{spawn_multiprocess, UnprivilegedContent};
@@ -18,7 +17,7 @@ use crate::sandboxing::{spawn_multiprocess, UnprivilegedContent};
#[derive(Deserialize, Serialize)]
pub struct ServiceWorkerUnprivilegedContent {
opts: Opts,
- prefs: HashMap<String, PrefValue>,
+ prefs: Box<Preferences>,
senders: SWManagerSenders,
origin: ImmutableOrigin,
}
@@ -30,7 +29,7 @@ impl ServiceWorkerUnprivilegedContent {
) -> ServiceWorkerUnprivilegedContent {
ServiceWorkerUnprivilegedContent {
opts: (*opts::get()).clone(),
- prefs: prefs::pref_map().iter().collect(),
+ prefs: Box::new(prefs::get().clone()),
senders,
origin,
}
@@ -53,7 +52,7 @@ impl ServiceWorkerUnprivilegedContent {
self.opts.clone()
}
- pub fn prefs(&self) -> HashMap<String, PrefValue> {
- self.prefs.clone()
+ pub fn prefs(&self) -> &Preferences {
+ &self.prefs
}
}
diff --git a/components/devtools/actors/preference.rs b/components/devtools/actors/preference.rs
index 10bb402cc2f..bb48057e0da 100644
--- a/components/devtools/actors/preference.rs
+++ b/components/devtools/actors/preference.rs
@@ -2,14 +2,12 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-use std::collections::HashMap;
use std::net::TcpStream;
use log::warn;
use serde::Serialize;
use serde_json::{Map, Value};
-use servo_config::pref_util::PrefValue;
-use servo_config::prefs::pref_map;
+use servo_config::pref;
use crate::actor::{Actor, ActorMessageStatus, ActorRegistry};
use crate::protocol::JsonPacketStream;
@@ -38,128 +36,93 @@ impl Actor for PreferenceActor {
stream: &mut TcpStream,
_id: StreamId,
) -> Result<ActorMessageStatus, ()> {
- let Some(mut key) = msg.get("value").and_then(|v| v.as_str()) else {
+ let Some(key) = msg.get("value").and_then(|v| v.as_str()) else {
warn!("PreferenceActor: handle_message: value is not a string");
return Ok(ActorMessageStatus::Ignored);
};
- // Mapping to translate a Firefox preference name onto the corresponding Servo preference name
- let pref_name_mapping: HashMap<&str, &str> =
- [("dom.serviceWorkers.enabled", "dom.serviceworker.enabled")]
- .iter()
- .copied()
- .collect();
- if pref_name_mapping.contains_key(key) {
- key = pref_name_mapping.get(key).unwrap();
- }
-
- let pref_value = pref_map().get(key);
- Ok(handle_preference_value(
- pref_value,
- self.name(),
- msg_type,
- stream,
- ))
+ // TODO: Map more preferences onto their Servo values.
+ Ok(match key {
+ "dom.serviceWorkers.enabled" => {
+ self.write_bool(pref!(dom_serviceworker_enabled), stream)
+ },
+ _ => self.handle_missing_preference(msg_type, stream),
+ })
}
}
-fn handle_preference_value(
- pref_value: PrefValue,
- name: String,
- msg_type: &str,
- stream: &mut TcpStream,
-) -> ActorMessageStatus {
- match pref_value {
- PrefValue::Float(value) => {
- let reply = FloatReply { from: name, value };
- let _ = stream.write_json_packet(&reply);
- ActorMessageStatus::Processed
- },
- PrefValue::Int(value) => {
- let reply = IntReply { from: name, value };
- let _ = stream.write_json_packet(&reply);
- ActorMessageStatus::Processed
- },
- PrefValue::Str(value) => {
- let reply = CharReply { from: name, value };
- let _ = stream.write_json_packet(&reply);
- ActorMessageStatus::Processed
- },
- PrefValue::Bool(value) => {
- let reply = BoolReply { from: name, value };
- let _ = stream.write_json_packet(&reply);
- ActorMessageStatus::Processed
- },
- PrefValue::Array(values) => {
- let mut result = ActorMessageStatus::Processed;
- for value in values {
- result = handle_preference_value(value, name.clone(), msg_type, stream);
- }
- result
- },
- PrefValue::Missing => handle_missing_preference(name, msg_type, stream),
+impl PreferenceActor {
+ fn handle_missing_preference(
+ &self,
+ msg_type: &str,
+ stream: &mut TcpStream,
+ ) -> ActorMessageStatus {
+ match msg_type {
+ "getBoolPref" => self.write_bool(false, stream),
+ "getCharPref" => self.write_char("".into(), stream),
+ "getIntPref" => self.write_int(0, stream),
+ "getFloatPref" => self.write_float(0., stream),
+ _ => ActorMessageStatus::Ignored,
+ }
}
-}
-// if the preferences are missing from pref_map then we return a
-// fake preference response based on msg_type.
-fn handle_missing_preference(
- name: String,
- msg_type: &str,
- stream: &mut TcpStream,
-) -> ActorMessageStatus {
- match msg_type {
- "getBoolPref" => {
- let reply = BoolReply {
- from: name,
- value: false,
- };
- let _ = stream.write_json_packet(&reply);
- ActorMessageStatus::Processed
- },
-
- "getCharPref" => {
- let reply = CharReply {
- from: name,
- value: "".to_owned(),
- };
- let _ = stream.write_json_packet(&reply);
- ActorMessageStatus::Processed
- },
-
- "getIntPref" => {
- let reply = IntReply {
- from: name,
- value: 0,
- };
- let _ = stream.write_json_packet(&reply);
- ActorMessageStatus::Processed
- },
-
- _ => ActorMessageStatus::Ignored,
+ fn write_bool(&self, pref_value: bool, stream: &mut TcpStream) -> ActorMessageStatus {
+ #[derive(Serialize)]
+ struct BoolReply {
+ from: String,
+ value: bool,
+ }
+
+ let reply = BoolReply {
+ from: self.name.clone(),
+ value: pref_value,
+ };
+ let _ = stream.write_json_packet(&reply);
+ ActorMessageStatus::Processed
}
-}
-#[derive(Serialize)]
-struct BoolReply {
- from: String,
- value: bool,
-}
+ fn write_char(&self, pref_value: String, stream: &mut TcpStream) -> ActorMessageStatus {
+ #[derive(Serialize)]
+ struct CharReply {
+ from: String,
+ value: String,
+ }
-#[derive(Serialize)]
-struct CharReply {
- from: String,
- value: String,
-}
+ let reply = CharReply {
+ from: self.name.clone(),
+ value: pref_value,
+ };
+ let _ = stream.write_json_packet(&reply);
+ ActorMessageStatus::Processed
+ }
-#[derive(Serialize)]
-struct IntReply {
- from: String,
- value: i64,
-}
+ fn write_int(&self, pref_value: i64, stream: &mut TcpStream) -> ActorMessageStatus {
+ #[derive(Serialize)]
+ struct IntReply {
+ from: String,
+ value: i64,
+ }
-#[derive(Serialize)]
-struct FloatReply {
- from: String,
- value: f64,
+ let reply = IntReply {
+ from: self.name.clone(),
+ value: pref_value,
+ };
+ let _ = stream.write_json_packet(&reply);
+ ActorMessageStatus::Processed
+ }
+
+ fn write_float(&self, pref_value: f64, stream: &mut TcpStream) -> ActorMessageStatus {
+ #[derive(Serialize)]
+ struct FloatReply {
+ from: String,
+ value: f64,
+ }
+
+ let reply = FloatReply {
+ from: self.name.clone(),
+ value: pref_value,
+ };
+ let _ = stream.write_json_packet(&reply);
+ ActorMessageStatus::Processed
+ }
}
diff --git a/components/fonts/system_font_service.rs b/components/fonts/system_font_service.rs
index 42acc5ab85b..b29eca6b86c 100644
--- a/components/fonts/system_font_service.rs
+++ b/components/fonts/system_font_service.rs
@@ -323,10 +323,10 @@ impl SystemFontService {
.get_or_init(|| {
// First check whether the font is set in the preferences.
let family_name = match generic {
- GenericFontFamily::None => pref!(fonts.default),
- GenericFontFamily::Serif => pref!(fonts.serif),
- GenericFontFamily::SansSerif => pref!(fonts.sans_serif),
- GenericFontFamily::Monospace => pref!(fonts.monospace),
+ GenericFontFamily::None => pref!(fonts_default),
+ GenericFontFamily::Serif => pref!(fonts_serif),
+ GenericFontFamily::SansSerif => pref!(fonts_sans_serif),
+ GenericFontFamily::Monospace => pref!(fonts_monospace),
_ => String::new(),
};
diff --git a/components/layout_thread/lib.rs b/components/layout_thread/lib.rs
index 1a5630293b3..d0eae9afb45 100644
--- a/components/layout_thread/lib.rs
+++ b/components/layout_thread/lib.rs
@@ -520,7 +520,7 @@ impl LayoutThread {
compositor_api.send_initial_transaction(id.into());
let mut font = Font::initial_values();
- let default_font_size = pref!(fonts.default_size);
+ let default_font_size = pref!(fonts_default_size);
font.font_size = FontSize {
computed_size: NonNegativeLength::new(default_font_size as f32),
used_size: NonNegativeLength::new(default_font_size as f32),
@@ -1519,8 +1519,8 @@ impl FontMetricsProvider for LayoutFontMetricsProvider {
fn base_size_for_generic(&self, generic: GenericFontFamily) -> Length {
Length::new(match generic {
- GenericFontFamily::Monospace => pref!(fonts.default_monospace_size),
- _ => pref!(fonts.default_size),
+ GenericFontFamily::Monospace => pref!(fonts_default_monospace_size),
+ _ => pref!(fonts_default_size),
} as f32)
.max(Length::new(0.0))
}
diff --git a/components/layout_thread_2020/lib.rs b/components/layout_thread_2020/lib.rs
index 496e15b16ee..85d499ecfde 100644
--- a/components/layout_thread_2020/lib.rs
+++ b/components/layout_thread_2020/lib.rs
@@ -495,7 +495,7 @@ impl LayoutThread {
compositor_api.send_initial_transaction(id.into());
let mut font = Font::initial_values();
- let default_font_size = pref!(fonts.default_size);
+ let default_font_size = pref!(fonts_default_size);
font.font_size = FontSize {
computed_size: NonNegativeLength::new(default_font_size as f32),
used_size: NonNegativeLength::new(default_font_size as f32),
@@ -1232,8 +1232,8 @@ impl FontMetricsProvider for LayoutFontMetricsProvider {
fn base_size_for_generic(&self, generic: GenericFontFamily) -> Length {
Length::new(match generic {
- GenericFontFamily::Monospace => pref!(fonts.default_monospace_size),
- _ => pref!(fonts.default_size),
+ GenericFontFamily::Monospace => pref!(fonts_default_monospace_size),
+ _ => pref!(fonts_default_size),
} as f32)
.max(Length::new(0.0))
}
diff --git a/components/net/async_runtime.rs b/components/net/async_runtime.rs
index 7d1fb9daeaa..c99068b1076 100644
--- a/components/net/async_runtime.rs
+++ b/components/net/async_runtime.rs
@@ -19,9 +19,9 @@ pub static HANDLE: LazyLock<Mutex<Option<Runtime>>> = LazyLock::new(|| {
.worker_threads(
thread::available_parallelism()
.map(|i| i.get())
- .unwrap_or(servo_config::pref!(threadpools.fallback_worker_num) as usize)
+ .unwrap_or(servo_config::pref!(threadpools_fallback_worker_num) as usize)
.min(
- servo_config::pref!(threadpools.async_runtime_workers.max).max(1) as usize,
+ servo_config::pref!(threadpools_async_runtime_workers_max).max(1) as usize,
),
)
.enable_io()
diff --git a/components/net/decoder.rs b/components/net/decoder.rs
index 9b6c8f1a3d0..4d0973cdac2 100644
--- a/components/net/decoder.rs
+++ b/components/net/decoder.rs
@@ -280,7 +280,7 @@ impl Stream for BodyStream {
.content_length
.map_or(false, |c| c.0 == self.total_read);
if self.is_secure_scheme &&
- (all_content_read || pref!(network.tls.ignore_unexpected_eof))
+ (all_content_read || pref!(network_tls_ignore_unexpected_eof))
{
let source = err.source();
let is_unexpected_eof = source
diff --git a/components/net/filemanager_thread.rs b/components/net/filemanager_thread.rs
index e72290b2694..65c3736bf24 100644
--- a/components/net/filemanager_thread.rs
+++ b/components/net/filemanager_thread.rs
@@ -602,7 +602,7 @@ impl FileManagerStore {
// Check if the select_files preference is enabled
// to ensure process-level security against compromised script;
// Then try applying opt_test_path directly for testing convenience
- let opt_s = if pref!(dom.testing.html_input_element.select_files.enabled) {
+ let opt_s = if pref!(dom_testing_html_input_element_select_files_enabled) {
opt_test_path
} else {
self.query_files_from_embedder(patterns, false, embedder_proxy)
@@ -632,7 +632,7 @@ impl FileManagerStore {
// Check if the select_files preference is enabled
// to ensure process-level security against compromised script;
// Then try applying opt_test_paths directly for testing convenience
- let opt_v = if pref!(dom.testing.html_input_element.select_files.enabled) {
+ let opt_v = if pref!(dom_testing_html_input_element_select_files_enabled) {
opt_test_paths
} else {
self.query_files_from_embedder(patterns, true, embedder_proxy)
diff --git a/components/net/hsts.rs b/components/net/hsts.rs
index ebaf6e783bd..da57051790f 100644
--- a/components/net/hsts.rs
+++ b/components/net/hsts.rs
@@ -144,8 +144,8 @@ impl HstsList {
return;
}
- let upgrade_scheme = if pref!(network.enforce_tls.enabled) {
- if (!pref!(network.enforce_tls.localhost) &&
+ let upgrade_scheme = if pref!(network_enforce_tls_enabled) {
+ if (!pref!(network_enforce_tls_localhost) &&
match url.host() {
Some(Host::Domain(domain)) => {
domain.ends_with(".localhost") || domain == "localhost"
@@ -154,7 +154,7 @@ impl HstsList {
Some(Host::Ipv6(ipv6)) => ipv6.is_loopback(),
_ => false,
}) ||
- (!pref!(network.enforce_tls.onion) &&
+ (!pref!(network_enforce_tls_onion) &&
url.domain()
.is_some_and(|domain| domain.ends_with(".onion")))
{
diff --git a/components/net/http_cache.rs b/components/net/http_cache.rs
index bf6d28de220..0f0f715b3f6 100644
--- a/components/net/http_cache.rs
+++ b/components/net/http_cache.rs
@@ -756,7 +756,7 @@ impl HttpCache {
/// Storing Responses in Caches.
/// <https://tools.ietf.org/html/rfc7234#section-3>
pub fn store(&mut self, request: &Request, response: &Response) {
- if pref!(network.http_cache.disabled) {
+ if pref!(network_http_cache_disabled) {
return;
}
if request.method != Method::GET {
diff --git a/components/net/image_cache.rs b/components/net/image_cache.rs
index 3d2ffcf5706..a9a6e558919 100644
--- a/components/net/image_cache.rs
+++ b/components/net/image_cache.rs
@@ -17,6 +17,7 @@ use net_traits::image_cache::{
use net_traits::request::CorsSettings;
use net_traits::{FetchMetadata, FetchResponseMsg, FilteredMetadata, NetworkError};
use pixels::{load_from_memory, CorsStatus, Image, ImageMetadata, PixelFormat};
+use servo_config::pref;
use servo_url::{ImmutableOrigin, ServoUrl};
use webrender_api::units::DeviceIntSize;
use webrender_api::{ImageDescriptor, ImageDescriptorFlags, ImageFormat};
@@ -422,8 +423,8 @@ impl ImageCache for ImageCacheImpl {
// If no information can be obtained about the system, uses 4 threads as a default
let thread_count = thread::available_parallelism()
.map(|i| i.get())
- .unwrap_or(servo_config::pref!(threadpools.fallback_worker_num) as usize)
- .min(servo_config::pref!(threadpools.async_runtime_workers.max).max(1) as usize);
+ .unwrap_or(pref!(threadpools_fallback_worker_num) as usize)
+ .min(pref!(threadpools_async_runtime_workers_max).max(1) as usize);
ImageCacheImpl {
store: Arc::new(Mutex::new(ImageCacheStore {
diff --git a/components/net/local_directory_listing.rs b/components/net/local_directory_listing.rs
index 39e6a98d66c..ab89e054b20 100644
--- a/components/net/local_directory_listing.rs
+++ b/components/net/local_directory_listing.rs
@@ -16,7 +16,7 @@ use servo_url::ServoUrl;
use url::Url;
pub fn fetch(request: &mut Request, url: ServoUrl, path_buf: PathBuf) -> Response {
- if !pref!(network.local_directory_listing.enabled) {
+ if !pref!(network_local_directory_listing_enabled) {
// If you want to be able to browse local directories, configure Servo prefs so that
// "network.local_directory_listing.enabled" is set to true.
return Response::network_error(NetworkError::Internal(
diff --git a/components/net/resource_thread.rs b/components/net/resource_thread.rs
index 2001faccd22..12278d4c326 100644
--- a/components/net/resource_thread.rs
+++ b/components/net/resource_thread.rs
@@ -695,8 +695,8 @@ impl CoreResourceManager {
) -> CoreResourceManager {
let num_threads = thread::available_parallelism()
.map(|i| i.get())
- .unwrap_or(servo_config::pref!(threadpools.fallback_worker_num) as usize)
- .min(servo_config::pref!(threadpools.resource_workers.max).max(1) as usize);
+ .unwrap_or(servo_config::pref!(threadpools_fallback_worker_num) as usize)
+ .min(servo_config::pref!(threadpools_resource_workers_max).max(1) as usize);
let pool = CoreResourceThreadPool::new(num_threads, "CoreResourceThreadPool".to_string());
let pool_handle = Arc::new(pool);
CoreResourceManager {
diff --git a/components/net/tests/filemanager_thread.rs b/components/net/tests/filemanager_thread.rs
index 9a1b33becec..0e3e8aeb91a 100644
--- a/components/net/tests/filemanager_thread.rs
+++ b/components/net/tests/filemanager_thread.rs
@@ -15,16 +15,19 @@ use net_traits::blob_url_store::BlobURLStoreError;
use net_traits::filemanager_thread::{
FileManagerThreadError, FileManagerThreadMsg, ReadFileProgress,
};
-use servo_config::set_pref;
+use servo_config::prefs::Preferences;
use crate::create_embedder_proxy;
#[test]
fn test_filemanager() {
+ let mut preferences = Preferences::default();
+ preferences.dom_testing_html_input_element_select_files_enabled = true;
+ servo_config::prefs::set(preferences);
+
let pool = CoreResourceThreadPool::new(1, "CoreResourceTestPool".to_string());
let pool_handle = Arc::new(pool);
let filemanager = FileManager::new(create_embedder_proxy(), Arc::downgrade(&pool_handle));
- set_pref!(dom.testing.html_input_element.select_files.enabled, true);
// Try to open a dummy file "components/net/tests/test.jpeg" in tree
let mut handler = File::open("tests/test.jpeg").expect("test.jpeg is stolen");
diff --git a/components/script/dom/bindings/codegen/run.py b/components/script/dom/bindings/codegen/run.py
index 2dee39814b2..d60cff896da 100644
--- a/components/script/dom/bindings/codegen/run.py
+++ b/components/script/dom/bindings/codegen/run.py
@@ -89,10 +89,31 @@ def generate(config, name, filename):
def add_css_properties_attributes(css_properties_json, parser):
+ def map_preference_name(preference_name: str):
+ """Map between Stylo preference names and Servo preference names as the
+ `css-properties.json` file is generated by Stylo. This should be kept in sync with the
+ preference mapping done in `components/servo_config/prefs.rs`, which handles the runtime version of
+ these preferences."""
+ MAPPING = [
+ ["layout.unimplemented", "layout_unimplemented"],
+ ["layout.threads", "layout_threads"],
+ ["layout.legacy_layout", "layout_legacy_layout"],
+ ["layout.flexbox.enabled", "layout_flexbox_enabled"],
+ ["layout.columns.enabled", "layout_columns_enabled"],
+ ["layout.grid.enabled", "layout_grid_enabled"],
+ ["layout.css.transition-behavior.enabled", "layout_css_transition_behavior_enabled"],
+ ["layout.writing-mode.enabled", "layout_writing_mode_enabled"],
+ ["layout.container-queries.enabled", "layout_container_queries_enabled"],
+ ]
+ for mapping in MAPPING:
+ if mapping[0] == preference_name:
+ return mapping[1]
+ return preference_name
+
css_properties = json.load(open(css_properties_json, "rb"))
idl = "partial interface CSSStyleDeclaration {\n%s\n};\n" % "\n".join(
" [%sCEReactions, SetterThrows] attribute [LegacyNullToEmptyString] DOMString %s;" % (
- ('Pref="%s", ' % data["pref"] if data["pref"] else ""),
+ (f'Pref="{map_preference_name(data["pref"])}", ' if data["pref"] else ""),
attribute_name
)
for (kind, properties_list) in sorted(css_properties.items())
diff --git a/components/script/dom/bindings/guard.rs b/components/script/dom/bindings/guard.rs
index 45e4473d821..fb2b2ebc807 100644
--- a/components/script/dom/bindings/guard.rs
+++ b/components/script/dom/bindings/guard.rs
@@ -5,7 +5,7 @@
//! Machinery to conditionally expose things.
use js::rust::HandleObject;
-use servo_config::prefs;
+use servo_config::prefs::get;
use crate::dom::bindings::codegen::InterfaceObjectMap;
use crate::dom::bindings::interface::is_exposed_in;
@@ -85,7 +85,7 @@ impl Condition {
global: HandleObject,
) -> bool {
match *self {
- Condition::Pref(name) => prefs::pref_map().get(name).as_bool().unwrap_or(false),
+ Condition::Pref(name) => get().get_value(name).try_into().unwrap_or(false),
Condition::Func(f) => f(cx, obj),
Condition::Exposed(globals) => is_exposed_in(global, globals),
Condition::SecureContext() => is_secure_context(cx),
diff --git a/components/script/dom/create.rs b/components/script/dom/create.rs
index 7f3dfdac540..cde5bcbb13f 100644
--- a/components/script/dom/create.rs
+++ b/components/script/dom/create.rs
@@ -108,7 +108,7 @@ fn create_svg_element(
})
);
- if !pref!(dom.svg.enabled) {
+ if !pref!(dom_svg_enabled) {
return Element::new(name.local, name.ns, prefix, document, proto, CanGc::note());
}
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index 11602547b7e..11a0c0935cd 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -1356,8 +1356,8 @@ impl Document {
if let Some((last_time, last_pos)) = opt {
let DBL_CLICK_TIMEOUT =
- Duration::from_millis(pref!(dom.document.dblclick_timeout) as u64);
- let DBL_CLICK_DIST_THRESHOLD = pref!(dom.document.dblclick_dist) as u64;
+ Duration::from_millis(pref!(dom_document_dblclick_timeout) as u64);
+ let DBL_CLICK_DIST_THRESHOLD = pref!(dom_document_dblclick_dist) as u64;
// Calculate distance between this click and the previous click.
let line = click_pos - last_pos;
@@ -2469,7 +2469,7 @@ impl Document {
// https://immersive-web.github.io/webxr/#user-intention
// https://github.com/immersive-web/navigation/issues/10
#[cfg(feature = "webxr")]
- if pref!(dom.webxr.sessionavailable) && self.window.is_top_level() {
+ if pref!(dom_webxr_sessionavailable) && self.window.is_top_level() {
self.window.Navigator().Xr().dispatch_sessionavailable();
}
@@ -2850,7 +2850,7 @@ impl Document {
local_name: &LocalName,
is: Option<&LocalName>,
) -> Option<Rc<CustomElementDefinition>> {
- if !pref!(dom.custom_elements.enabled) {
+ if !pref!(dom_customelements_enabled) {
return None;
}
@@ -3344,7 +3344,7 @@ impl Document {
#[cfg(feature = "webgpu")]
webgpu_contexts: Rc::new(RefCell::new(HashMapTracedValues::new())),
selection: MutNullableDom::new(None),
- animation_timeline: if pref!(layout.animations.test.enabled) {
+ animation_timeline: if pref!(layout_animations_test_enabled) {
DomRefCell::new(AnimationTimeline::new_for_testing())
} else {
DomRefCell::new(AnimationTimeline::new())
@@ -3826,7 +3826,7 @@ impl Document {
error = true;
}
- if pref!(dom.fullscreen.test) {
+ if pref!(dom_fullscreen_test) {
// For reftests we just take over the current window,
// and don't try to really enter fullscreen.
info!("Tests don't really enter fullscreen.");
@@ -4109,7 +4109,7 @@ impl Document {
/// An implementation of <https://drafts.csswg.org/web-animations-1/#update-animations-and-send-events>.
pub(crate) fn update_animations_and_send_events(&self, can_gc: CanGc) {
// Only update the time if it isn't being managed by a test.
- if !pref!(layout.animations.test.enabled) {
+ if !pref!(layout_animations_test_enabled) {
self.animation_timeline.borrow_mut().update();
}
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs
index 22fb9084189..704ec00f45c 100644
--- a/components/script/dom/htmlmediaelement.rs
+++ b/components/script/dom/htmlmediaelement.rs
@@ -1325,7 +1325,7 @@ impl HTMLMediaElement {
.render_poster_frame(image);
self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
- if pref!(media.testing.enabled) {
+ if pref!(media_testing_enabled) {
self.owner_global()
.task_manager()
.media_element_task_source()
diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs
index b0d8d5ab47b..c76075a93aa 100644
--- a/components/script/dom/htmlscriptelement.rs
+++ b/components/script/dom/htmlscriptelement.rs
@@ -463,7 +463,7 @@ impl FetchResponseListener for ClassicContext {
/*
let options = unsafe { CompileOptionsWrapper::new(*cx, final_url.as_str(), 1) };
- let can_compile_off_thread = pref!(dom.script.asynch) &&
+ let can_compile_off_thread = pref!(dom_script_asynch) &&
unsafe { CanCompileOffThread(*cx, options.ptr as *const _, source_text.len()) };
if can_compile_off_thread {
diff --git a/components/script/dom/mouseevent.rs b/components/script/dom/mouseevent.rs
index 1d616c5f1ab..7d2a51bc8f7 100644
--- a/components/script/dom/mouseevent.rs
+++ b/components/script/dom/mouseevent.rs
@@ -408,7 +408,7 @@ impl MouseEventMethods<crate::DomTypeHolder> for MouseEvent {
// This returns the same result as current gecko.
// https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/which
fn Which(&self) -> i32 {
- if pref!(dom.mouse_event.which.enabled) {
+ if pref!(dom_mouse_event_which_enabled) {
(self.button.get() + 1) as i32
} else {
0
diff --git a/components/script/dom/paintworkletglobalscope.rs b/components/script/dom/paintworkletglobalscope.rs
index b806927a9b9..b971bbbd35f 100644
--- a/components/script/dom/paintworkletglobalscope.rs
+++ b/components/script/dom/paintworkletglobalscope.rs
@@ -421,7 +421,7 @@ impl PaintWorkletGlobalScope {
.expect("Locking a painter.")
.schedule_a_worklet_task(WorkletTask::Paint(task));
- let timeout = pref!(dom.worklet.timeout_ms) as u64;
+ let timeout = pref!(dom_worklet_timeout_ms) as u64;
receiver
.recv_timeout(Duration::from_millis(timeout))
diff --git a/components/script/dom/permissions.rs b/components/script/dom/permissions.rs
index badadb9b0ee..8efa1b09765 100644
--- a/components/script/dom/permissions.rs
+++ b/components/script/dom/permissions.rs
@@ -301,7 +301,7 @@ pub(crate) fn get_descriptor_permission_state(
// and let the user decide to grant the permission or not.
let state = if allowed_in_nonsecure_contexts(&permission_name) {
PermissionState::Prompt
- } else if pref!(dom.permissions.testing.allowed_in_nonsecure_contexts) {
+ } else if pref!(dom_permissions_testing_allowed_in_nonsecure_contexts) {
PermissionState::Granted
} else {
globalscope
diff --git a/components/script/dom/serviceworkerglobalscope.rs b/components/script/dom/serviceworkerglobalscope.rs
index 870940d0609..aa9184a3dc9 100644
--- a/components/script/dom/serviceworkerglobalscope.rs
+++ b/components/script/dom/serviceworkerglobalscope.rs
@@ -306,7 +306,7 @@ impl ServiceWorkerGlobalScope {
// Service workers are time limited
// https://w3c.github.io/ServiceWorker/#service-worker-lifetime
- let sw_lifetime_timeout = pref!(dom.serviceworker.timeout_seconds) as u64;
+ let sw_lifetime_timeout = pref!(dom_serviceworker_timeout_seconds) as u64;
let time_out_port = after(Duration::new(sw_lifetime_timeout, 0));
let (devtools_mpsc_chan, devtools_mpsc_port) = unbounded();
diff --git a/components/script/dom/servoparser/mod.rs b/components/script/dom/servoparser/mod.rs
index 18a7aed45f0..fe9719f5569 100644
--- a/components/script/dom/servoparser/mod.rs
+++ b/components/script/dom/servoparser/mod.rs
@@ -158,7 +158,7 @@ impl ServoParser {
url: ServoUrl,
can_gc: CanGc,
) {
- let parser = if pref!(dom.servoparser.async_html_tokenizer.enabled) {
+ let parser = if pref!(dom_servoparser_async_html_tokenizer_enabled) {
ServoParser::new(
document,
Tokenizer::AsyncHtml(self::async_html::Tokenizer::new(document, url, None)),
diff --git a/components/script/dom/testbinding.rs b/components/script/dom/testbinding.rs
index 9e3aa7749c6..0677623ea36 100644
--- a/components/script/dom/testbinding.rs
+++ b/components/script/dom/testbinding.rs
@@ -880,17 +880,18 @@ impl TestBindingMethods<crate::DomTypeHolder> for TestBinding {
fn PassVariadicAny(&self, _: SafeJSContext, _: Vec<HandleValue>) {}
fn PassVariadicObject(&self, _: SafeJSContext, _: Vec<*mut JSObject>) {}
fn BooleanMozPreference(&self, pref_name: DOMString) -> bool {
- prefs::pref_map()
- .get(pref_name.as_ref())
- .as_bool()
+ prefs::get()
+ .get_value(pref_name.as_ref())
+ .try_into()
.unwrap_or(false)
}
fn StringMozPreference(&self, pref_name: DOMString) -> DOMString {
- prefs::pref_map()
- .get(pref_name.as_ref())
- .as_str()
- .map(DOMString::from)
- .unwrap_or_default()
+ DOMString::from_string(
+ prefs::get()
+ .get_value(pref_name.as_ref())
+ .try_into()
+ .unwrap_or_default(),
+ )
}
fn PrefControlledAttributeDisabled(&self) -> bool {
false
diff --git a/components/script/dom/webgl2renderingcontext.rs b/components/script/dom/webgl2renderingcontext.rs
index c351f025245..db81983c106 100644
--- a/components/script/dom/webgl2renderingcontext.rs
+++ b/components/script/dom/webgl2renderingcontext.rs
@@ -198,7 +198,7 @@ impl WebGL2RenderingContext {
#[allow(unsafe_code)]
pub(crate) fn is_webgl2_enabled(_cx: JSContext, global: HandleObject) -> bool {
- if pref!(dom.webgl2.enabled) {
+ if pref!(dom_webgl2_enabled) {
return true;
}
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs
index 0b8e53f5961..1ca324baaab 100644
--- a/components/script/dom/webglrenderingcontext.rs
+++ b/components/script/dom/webglrenderingcontext.rs
@@ -222,7 +222,7 @@ impl WebGLRenderingContext {
size: Size2D<u32>,
attrs: GLContextAttributes,
) -> Result<WebGLRenderingContext, String> {
- if pref!(webgl.testing.context_creation_error) {
+ if pref!(webgl_testing_context_creation_error) {
return Err("WebGL context creation error forced by pref `webgl.testing.context_creation_error`".into());
}
diff --git a/components/script/dom/webidls/AbortController.webidl b/components/script/dom/webidls/AbortController.webidl
index faeaf9cbd44..cef49010d3c 100644
--- a/components/script/dom/webidls/AbortController.webidl
+++ b/components/script/dom/webidls/AbortController.webidl
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://dom.spec.whatwg.org/#interface-abortcontroller
-[Exposed=*, Pref="dom.abort_controller.enabled"]
+[Exposed=*, Pref="dom_abort_controller_enabled"]
interface AbortController {
constructor();
diff --git a/components/script/dom/webidls/ActivatableElement.webidl b/components/script/dom/webidls/ActivatableElement.webidl
index e9d959c8470..99a250a4b55 100644
--- a/components/script/dom/webidls/ActivatableElement.webidl
+++ b/components/script/dom/webidls/ActivatableElement.webidl
@@ -7,9 +7,9 @@
// web pages.
[Exposed=(Window,Worker)]
interface mixin ActivatableElement {
- [Throws, Pref="dom.testing.element.activation.enabled"]
+ [Throws, Pref="dom_testing_element_activation_enabled"]
undefined enterFormalActivationState();
- [Throws, Pref="dom.testing.element.activation.enabled"]
+ [Throws, Pref="dom_testing_element_activation_enabled"]
undefined exitFormalActivationState();
};
diff --git a/components/script/dom/webidls/Bluetooth.webidl b/components/script/dom/webidls/Bluetooth.webidl
index e5e135c0577..65ce8ea79b3 100644
--- a/components/script/dom/webidls/Bluetooth.webidl
+++ b/components/script/dom/webidls/Bluetooth.webidl
@@ -25,7 +25,7 @@ dictionary RequestDeviceOptions {
boolean acceptAllDevices = false;
};
-[Exposed=Window, Pref="dom.bluetooth.enabled"]
+[Exposed=Window, Pref="dom_bluetooth_enabled"]
interface Bluetooth : EventTarget {
[SecureContext]
Promise<boolean> getAvailability();
diff --git a/components/script/dom/webidls/BluetoothAdvertisingEvent.webidl b/components/script/dom/webidls/BluetoothAdvertisingEvent.webidl
index a7dd3fe947f..c6f3c6a8480 100644
--- a/components/script/dom/webidls/BluetoothAdvertisingEvent.webidl
+++ b/components/script/dom/webidls/BluetoothAdvertisingEvent.webidl
@@ -10,7 +10,7 @@
interface BluetoothServiceDataMap {
readonly maplike<UUID, DataView>;
};*/
-[Exposed=Window, Pref="dom.bluetooth.enabled"]
+[Exposed=Window, Pref="dom_bluetooth_enabled"]
interface BluetoothAdvertisingEvent : Event {
[Throws] constructor(DOMString type, BluetoothAdvertisingEventInit init);
[SameObject]
diff --git a/components/script/dom/webidls/BluetoothCharacteristicProperties.webidl b/components/script/dom/webidls/BluetoothCharacteristicProperties.webidl
index 124f881a2e0..fb812ff7c46 100644
--- a/components/script/dom/webidls/BluetoothCharacteristicProperties.webidl
+++ b/components/script/dom/webidls/BluetoothCharacteristicProperties.webidl
@@ -4,7 +4,7 @@
// https://webbluetoothcg.github.io/web-bluetooth/#characteristicproperties
-[Exposed=Window, Pref="dom.bluetooth.enabled"]
+[Exposed=Window, Pref="dom_bluetooth_enabled"]
interface BluetoothCharacteristicProperties {
readonly attribute boolean broadcast;
readonly attribute boolean read;
diff --git a/components/script/dom/webidls/BluetoothDevice.webidl b/components/script/dom/webidls/BluetoothDevice.webidl
index c514132140d..f9cb44dda5a 100644
--- a/components/script/dom/webidls/BluetoothDevice.webidl
+++ b/components/script/dom/webidls/BluetoothDevice.webidl
@@ -4,7 +4,7 @@
// https://webbluetoothcg.github.io/web-bluetooth/#bluetoothdevice
-[Exposed=Window, Pref="dom.bluetooth.enabled"]
+[Exposed=Window, Pref="dom_bluetooth_enabled"]
interface BluetoothDevice : EventTarget {
readonly attribute DOMString id;
readonly attribute DOMString? name;
diff --git a/components/script/dom/webidls/BluetoothPermissionResult.webidl b/components/script/dom/webidls/BluetoothPermissionResult.webidl
index 95c06797aef..67822fc55cf 100644
--- a/components/script/dom/webidls/BluetoothPermissionResult.webidl
+++ b/components/script/dom/webidls/BluetoothPermissionResult.webidl
@@ -12,7 +12,7 @@ dictionary BluetoothPermissionDescriptor : PermissionDescriptor {
boolean acceptAllDevices = false;
};
-[Exposed=Window, Pref="dom.bluetooth.enabled"]
+[Exposed=Window, Pref="dom_bluetooth_enabled"]
interface BluetoothPermissionResult : PermissionStatus {
// attribute FrozenArray<BluetoothDevice> devices;
// Workaround until FrozenArray get implemented.
diff --git a/components/script/dom/webidls/BluetoothRemoteGATTCharacteristic.webidl b/components/script/dom/webidls/BluetoothRemoteGATTCharacteristic.webidl
index 9f41d2450f9..9e0140d8129 100644
--- a/components/script/dom/webidls/BluetoothRemoteGATTCharacteristic.webidl
+++ b/components/script/dom/webidls/BluetoothRemoteGATTCharacteristic.webidl
@@ -4,7 +4,7 @@
// https://webbluetoothcg.github.io/web-bluetooth/#bluetoothremotegattcharacteristic
-[Exposed=Window, Pref="dom.bluetooth.enabled"]
+[Exposed=Window, Pref="dom_bluetooth_enabled"]
interface BluetoothRemoteGATTCharacteristic : EventTarget {
[SameObject]
readonly attribute BluetoothRemoteGATTService service;
diff --git a/components/script/dom/webidls/BluetoothRemoteGATTDescriptor.webidl b/components/script/dom/webidls/BluetoothRemoteGATTDescriptor.webidl
index 29cbc3040a4..31e19a850fc 100644
--- a/components/script/dom/webidls/BluetoothRemoteGATTDescriptor.webidl
+++ b/components/script/dom/webidls/BluetoothRemoteGATTDescriptor.webidl
@@ -4,7 +4,7 @@
// http://webbluetoothcg.github.io/web-bluetooth/#bluetoothremotegattdescriptor
-[Exposed=Window, Pref="dom.bluetooth.enabled"]
+[Exposed=Window, Pref="dom_bluetooth_enabled"]
interface BluetoothRemoteGATTDescriptor {
[SameObject]
readonly attribute BluetoothRemoteGATTCharacteristic characteristic;
diff --git a/components/script/dom/webidls/BluetoothRemoteGATTServer.webidl b/components/script/dom/webidls/BluetoothRemoteGATTServer.webidl
index e46cef4a079..3d60ace070f 100644
--- a/components/script/dom/webidls/BluetoothRemoteGATTServer.webidl
+++ b/components/script/dom/webidls/BluetoothRemoteGATTServer.webidl
@@ -4,7 +4,7 @@
//https://webbluetoothcg.github.io/web-bluetooth/#bluetoothremotegattserver
-[Exposed=Window, Pref="dom.bluetooth.enabled"]
+[Exposed=Window, Pref="dom_bluetooth_enabled"]
interface BluetoothRemoteGATTServer {
[SameObject]
readonly attribute BluetoothDevice device;
diff --git a/components/script/dom/webidls/BluetoothRemoteGATTService.webidl b/components/script/dom/webidls/BluetoothRemoteGATTService.webidl
index 7e9f624dd1c..e505ae3aabe 100644
--- a/components/script/dom/webidls/BluetoothRemoteGATTService.webidl
+++ b/components/script/dom/webidls/BluetoothRemoteGATTService.webidl
@@ -4,7 +4,7 @@
// https://webbluetoothcg.github.io/web-bluetooth/#bluetoothremotegattservice
-[Exposed=Window, Pref="dom.bluetooth.enabled"]
+[Exposed=Window, Pref="dom_bluetooth_enabled"]
interface BluetoothRemoteGATTService : EventTarget {
[SameObject]
readonly attribute BluetoothDevice device;
diff --git a/components/script/dom/webidls/BluetoothUUID.webidl b/components/script/dom/webidls/BluetoothUUID.webidl
index dde82d3acb7..5ee501bf6e6 100644
--- a/components/script/dom/webidls/BluetoothUUID.webidl
+++ b/components/script/dom/webidls/BluetoothUUID.webidl
@@ -4,7 +4,7 @@
// https://webbluetoothcg.github.io/web-bluetooth/#bluetoothuuid
-[Exposed=Window, Pref="dom.bluetooth.enabled"]
+[Exposed=Window, Pref="dom_bluetooth_enabled"]
interface BluetoothUUID {
[Throws]
static UUID getService(BluetoothServiceUUID name);
diff --git a/components/script/dom/webidls/CSS.webidl b/components/script/dom/webidls/CSS.webidl
index 15049ae7539..2a199569cd8 100644
--- a/components/script/dom/webidls/CSS.webidl
+++ b/components/script/dom/webidls/CSS.webidl
@@ -20,5 +20,5 @@ partial interface CSS {
// https://drafts.css-houdini.org/css-paint-api-1/#paint-worklet
partial interface CSS {
- [SameObject, Pref="dom.worklet.enabled"] static readonly attribute Worklet paintWorklet;
+ [SameObject, Pref="dom_worklet_enabled"] static readonly attribute Worklet paintWorklet;
};
diff --git a/components/script/dom/webidls/CSSStyleValue.webidl b/components/script/dom/webidls/CSSStyleValue.webidl
index 3cd075b67e8..a87c2b29910 100644
--- a/components/script/dom/webidls/CSSStyleValue.webidl
+++ b/components/script/dom/webidls/CSSStyleValue.webidl
@@ -4,7 +4,7 @@
// https://drafts.css-houdini.org/css-typed-om-1/#cssstylevalue
// NOTE: should this be exposed to Window?
-[Pref="dom.worklet.enabled", Exposed=(Worklet)]
+[Pref="dom_worklet_enabled", Exposed=(Worklet)]
interface CSSStyleValue {
stringifier;
};
diff --git a/components/script/dom/webidls/CanvasRenderingContext2D.webidl b/components/script/dom/webidls/CanvasRenderingContext2D.webidl
index 0a7dbf6ab94..4479d068186 100644
--- a/components/script/dom/webidls/CanvasRenderingContext2D.webidl
+++ b/components/script/dom/webidls/CanvasRenderingContext2D.webidl
@@ -139,12 +139,12 @@ interface mixin CanvasUserInterface {
interface mixin CanvasText {
// text (see also the CanvasPathDrawingStyles and CanvasTextDrawingStyles interfaces)
- [Pref="dom.canvas_text.enabled"]
+ [Pref="dom_canvas_text_enabled"]
undefined fillText(DOMString text, unrestricted double x, unrestricted double y,
optional unrestricted double maxWidth);
//void strokeText(DOMString text, unrestricted double x, unrestricted double y,
// optional unrestricted double maxWidth);
- [Pref="dom.canvas_text.enabled"]
+ [Pref="dom_canvas_text_enabled"]
TextMetrics measureText(DOMString text);
};
diff --git a/components/script/dom/webidls/Client.webidl b/components/script/dom/webidls/Client.webidl
index f5a9dee934e..f2b144ffa07 100644
--- a/components/script/dom/webidls/Client.webidl
+++ b/components/script/dom/webidls/Client.webidl
@@ -4,7 +4,7 @@
// https://w3c.github.io/ServiceWorker/#client
-[Pref="dom.serviceworker.enabled", Exposed=ServiceWorker]
+[Pref="dom_serviceworker_enabled", Exposed=ServiceWorker]
interface Client {
readonly attribute USVString url;
readonly attribute FrameType frameType;
diff --git a/components/script/dom/webidls/CompositionEvent.webidl b/components/script/dom/webidls/CompositionEvent.webidl
index 1ed323d26b3..3eeba65e29a 100644
--- a/components/script/dom/webidls/CompositionEvent.webidl
+++ b/components/script/dom/webidls/CompositionEvent.webidl
@@ -8,7 +8,7 @@
*/
// https://w3c.github.io/uievents/#idl-compositionevent
-[Exposed=Window, Pref="dom.composition_event.enabled"]
+[Exposed=Window, Pref="dom_composition_event_enabled"]
interface CompositionEvent : UIEvent {
[Throws] constructor(DOMString type, optional CompositionEventInit eventInitDict = {});
readonly attribute DOMString data;
diff --git a/components/script/dom/webidls/Crypto.webidl b/components/script/dom/webidls/Crypto.webidl
index 828273f4afa..cdda53e27ac 100644
--- a/components/script/dom/webidls/Crypto.webidl
+++ b/components/script/dom/webidls/Crypto.webidl
@@ -13,7 +13,7 @@ partial interface mixin WindowOrWorkerGlobalScope {
[Exposed=(Window,Worker)]
interface Crypto {
- [SecureContext, Pref="dom.crypto.subtle.enabled"] readonly attribute SubtleCrypto subtle;
+ [SecureContext, Pref="dom_crypto_subtle_enabled"] readonly attribute SubtleCrypto subtle;
[Throws] ArrayBufferView getRandomValues(ArrayBufferView array);
[SecureContext] DOMString randomUUID();
};
diff --git a/components/script/dom/webidls/CryptoKey.webidl b/components/script/dom/webidls/CryptoKey.webidl
index 1cad0097df2..4387ef75d98 100644
--- a/components/script/dom/webidls/CryptoKey.webidl
+++ b/components/script/dom/webidls/CryptoKey.webidl
@@ -8,7 +8,7 @@ enum KeyType { "public", "private", "secret" };
enum KeyUsage { "encrypt", "decrypt", "sign", "verify", "deriveKey", "deriveBits", "wrapKey", "unwrapKey" };
-[SecureContext, Exposed=(Window,Worker), Serializable, Pref="dom.crypto.subtle.enabled"]
+[SecureContext, Exposed=(Window,Worker), Serializable, Pref="dom_crypto_subtle_enabled"]
interface CryptoKey {
readonly attribute KeyType type;
readonly attribute boolean extractable;
diff --git a/components/script/dom/webidls/CustomElementRegistry.webidl b/components/script/dom/webidls/CustomElementRegistry.webidl
index be3d19b1cdd..818e8892461 100644
--- a/components/script/dom/webidls/CustomElementRegistry.webidl
+++ b/components/script/dom/webidls/CustomElementRegistry.webidl
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://html.spec.whatwg.org/multipage/#customelementregistry
-[Exposed=Window, Pref="dom.custom_elements.enabled"]
+[Exposed=Window, Pref="dom_customelements_enabled"]
interface CustomElementRegistry {
[Throws, CEReactions]
undefined define(
diff --git a/components/script/dom/webidls/Element.webidl b/components/script/dom/webidls/Element.webidl
index 1a99d5ec480..c7884925541 100644
--- a/components/script/dom/webidls/Element.webidl
+++ b/components/script/dom/webidls/Element.webidl
@@ -83,7 +83,7 @@ interface Element : Node {
[CEReactions, Throws]
undefined insertAdjacentHTML(DOMString position, DOMString html);
- [Throws, Pref="dom.shadowdom.enabled"] ShadowRoot attachShadow(ShadowRootInit init);
+ [Throws, Pref="dom_shadowdom_enabled"] ShadowRoot attachShadow(ShadowRootInit init);
readonly attribute ShadowRoot? shadowRoot;
};
diff --git a/components/script/dom/webidls/ExtendableEvent.webidl b/components/script/dom/webidls/ExtendableEvent.webidl
index 0b030873fc5..cf8a42169a0 100644
--- a/components/script/dom/webidls/ExtendableEvent.webidl
+++ b/components/script/dom/webidls/ExtendableEvent.webidl
@@ -5,7 +5,7 @@
// https://w3c.github.io/ServiceWorker/#extendable-event
[Exposed=ServiceWorker,
- Pref="dom.serviceworker.enabled"]
+ Pref="dom_serviceworker_enabled"]
interface ExtendableEvent : Event {
[Throws] constructor(DOMString type,
optional ExtendableEventInit eventInitDict = {});
diff --git a/components/script/dom/webidls/ExtendableMessageEvent.webidl b/components/script/dom/webidls/ExtendableMessageEvent.webidl
index 247c08e7989..66fbb46371e 100644
--- a/components/script/dom/webidls/ExtendableMessageEvent.webidl
+++ b/components/script/dom/webidls/ExtendableMessageEvent.webidl
@@ -5,7 +5,7 @@
// https://w3c.github.io/ServiceWorker/#extendablemessage-event-section
[Exposed=ServiceWorker,
- Pref="dom.serviceworker.enabled"]
+ Pref="dom_serviceworker_enabled"]
interface ExtendableMessageEvent : ExtendableEvent {
[Throws] constructor(DOMString type, optional ExtendableMessageEventInit eventInitDict = {});
readonly attribute any data;
diff --git a/components/script/dom/webidls/FakeXRDevice.webidl b/components/script/dom/webidls/FakeXRDevice.webidl
index 22a2ddbbd27..dd0bb24b8a4 100644
--- a/components/script/dom/webidls/FakeXRDevice.webidl
+++ b/components/script/dom/webidls/FakeXRDevice.webidl
@@ -6,7 +6,7 @@
// https://github.com/immersive-web/webxr-test-api/
-[Exposed=Window, Pref="dom.webxr.test"]
+[Exposed=Window, Pref="dom_webxr_test"]
interface FakeXRDevice {
// Sets the values to be used for subsequent requestAnimationFrame() callbacks.
[Throws] undefined setViews(sequence<FakeXRViewInit> views, optional sequence<FakeXRViewInit> secondaryViews);
diff --git a/components/script/dom/webidls/FakeXRInputController.webidl b/components/script/dom/webidls/FakeXRInputController.webidl
index 42230c980bb..25237f54c7d 100644
--- a/components/script/dom/webidls/FakeXRInputController.webidl
+++ b/components/script/dom/webidls/FakeXRInputController.webidl
@@ -6,7 +6,7 @@
// https://immersive-web.github.io/webxr-test-api/#fakexrinputcontroller
-[Exposed=Window, Pref="dom.webxr.test"]
+[Exposed=Window, Pref="dom_webxr_test"]
interface FakeXRInputController {
undefined setHandedness(XRHandedness handedness);
undefined setTargetRayMode(XRTargetRayMode targetRayMode);
diff --git a/components/script/dom/webidls/GPUCanvasContext.webidl b/components/script/dom/webidls/GPUCanvasContext.webidl
index b85bb3c9bdf..e83421fa5ea 100644
--- a/components/script/dom/webidls/GPUCanvasContext.webidl
+++ b/components/script/dom/webidls/GPUCanvasContext.webidl
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://html.spec.whatwg.org/multipage/#htmlcanvaselement
-[Exposed=(Window, DedicatedWorker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Pref="dom_webgpu_enabled"]
interface GPUCanvasContext {
readonly attribute (HTMLCanvasElement or OffscreenCanvas) canvas;
};
diff --git a/components/script/dom/webidls/Gamepad.webidl b/components/script/dom/webidls/Gamepad.webidl
index d716f0c0bc4..bef601c5c7c 100644
--- a/components/script/dom/webidls/Gamepad.webidl
+++ b/components/script/dom/webidls/Gamepad.webidl
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://w3c.github.io/gamepad/#gamepad-interface
-[Exposed=Window, Pref="dom.gamepad.enabled"]
+[Exposed=Window, Pref="dom_gamepad_enabled"]
interface Gamepad {
readonly attribute DOMString id;
readonly attribute long index;
diff --git a/components/script/dom/webidls/GamepadButton.webidl b/components/script/dom/webidls/GamepadButton.webidl
index 748d47232ac..d4aa41be8d9 100644
--- a/components/script/dom/webidls/GamepadButton.webidl
+++ b/components/script/dom/webidls/GamepadButton.webidl
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://w3c.github.io/gamepad/#gamepadbutton-interface
-[Exposed=Window, Pref="dom.gamepad.enabled"]
+[Exposed=Window, Pref="dom_gamepad_enabled"]
interface GamepadButton {
readonly attribute boolean pressed;
readonly attribute boolean touched;
diff --git a/components/script/dom/webidls/GamepadButtonList.webidl b/components/script/dom/webidls/GamepadButtonList.webidl
index 34ea9857071..24a82a4b322 100644
--- a/components/script/dom/webidls/GamepadButtonList.webidl
+++ b/components/script/dom/webidls/GamepadButtonList.webidl
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://w3c.github.io/gamepad/#dom-gamepad-buttons
-[Exposed=Window, Pref="dom.gamepad.enabled"]
+[Exposed=Window, Pref="dom_gamepad_enabled"]
interface GamepadButtonList {
getter GamepadButton? item(unsigned long index);
readonly attribute unsigned long length;
diff --git a/components/script/dom/webidls/GamepadEvent.webidl b/components/script/dom/webidls/GamepadEvent.webidl
index 0da800bafe2..0dc82e4083b 100644
--- a/components/script/dom/webidls/GamepadEvent.webidl
+++ b/components/script/dom/webidls/GamepadEvent.webidl
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://w3c.github.io/gamepad/#gamepadevent-interface
-[Exposed=Window, Pref="dom.gamepad.enabled"]
+[Exposed=Window, Pref="dom_gamepad_enabled"]
interface GamepadEvent : Event {
[Throws] constructor(DOMString type, GamepadEventInit eventInitDict);
readonly attribute Gamepad gamepad;
diff --git a/components/script/dom/webidls/GamepadHapticActuator.webidl b/components/script/dom/webidls/GamepadHapticActuator.webidl
index 1961da4c541..db6f6eb5f8b 100644
--- a/components/script/dom/webidls/GamepadHapticActuator.webidl
+++ b/components/script/dom/webidls/GamepadHapticActuator.webidl
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://w3c.github.io/gamepad/#gamepadhapticactuator-interface
-[Exposed=Window, Pref="dom.gamepad.enabled"]
+[Exposed=Window, Pref="dom_gamepad_enabled"]
interface GamepadHapticActuator {
/* [SameObject] */ readonly attribute /* FrozenArray<GamepadHapticEffectType> */ any effects;
[NewObject]
diff --git a/components/script/dom/webidls/GamepadPose.webidl b/components/script/dom/webidls/GamepadPose.webidl
index 5afa9f3251e..aeb5411b12b 100644
--- a/components/script/dom/webidls/GamepadPose.webidl
+++ b/components/script/dom/webidls/GamepadPose.webidl
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://w3c.github.io/gamepad/extensions.html#gamepadpose-interface
-[Exposed=Window, Pref="dom.gamepad.enabled"]
+[Exposed=Window, Pref="dom_gamepad_enabled"]
interface GamepadPose {
readonly attribute boolean hasOrientation;
readonly attribute boolean hasPosition;
diff --git a/components/script/dom/webidls/HTMLCanvasElement.webidl b/components/script/dom/webidls/HTMLCanvasElement.webidl
index cbcb6b4d030..2e7be0389be 100644
--- a/components/script/dom/webidls/HTMLCanvasElement.webidl
+++ b/components/script/dom/webidls/HTMLCanvasElement.webidl
@@ -29,7 +29,7 @@ interface HTMLCanvasElement : HTMLElement {
};
partial interface HTMLCanvasElement {
- [Pref="dom.canvas_capture.enabled"]
+ [Pref="dom_canvas_capture_enabled"]
MediaStream captureStream (optional double frameRequestRate);
};
diff --git a/components/script/dom/webidls/HTMLElement.webidl b/components/script/dom/webidls/HTMLElement.webidl
index a67a13d4be4..76bfada1b94 100644
--- a/components/script/dom/webidls/HTMLElement.webidl
+++ b/components/script/dom/webidls/HTMLElement.webidl
@@ -24,9 +24,9 @@ interface HTMLElement : Element {
// attribute DOMString itemId;
//readonly attribute HTMLPropertiesCollection properties;
// attribute any itemValue; // acts as DOMString on setting
- [Pref="dom.microdata.testing.enabled"]
+ [Pref="dom_microdata_testing_enabled"]
sequence<DOMString>? propertyNames();
- [Pref="dom.microdata.testing.enabled"]
+ [Pref="dom_microdata_testing_enabled"]
sequence<DOMString>? itemtypes();
// user interaction
diff --git a/components/script/dom/webidls/HTMLInputElement.webidl b/components/script/dom/webidls/HTMLInputElement.webidl
index 519198cebd9..724f2cff9b5 100644
--- a/components/script/dom/webidls/HTMLInputElement.webidl
+++ b/components/script/dom/webidls/HTMLInputElement.webidl
@@ -109,7 +109,7 @@ interface HTMLInputElement : HTMLElement {
// also has obsolete members
// Select with file-system paths for testing purpose
- [Pref="dom.testing.htmlinputelement.select_files.enabled"]
+ [Pref="dom_testing_html_input_element_select_files_enabled"]
undefined selectFiles(sequence<DOMString> path);
};
diff --git a/components/script/dom/webidls/HTMLVideoElement.webidl b/components/script/dom/webidls/HTMLVideoElement.webidl
index d9e6b86e4bb..f4550e9857b 100644
--- a/components/script/dom/webidls/HTMLVideoElement.webidl
+++ b/components/script/dom/webidls/HTMLVideoElement.webidl
@@ -17,6 +17,6 @@ interface HTMLVideoElement : HTMLMediaElement {
};
partial interface HTMLVideoElement {
- [Pref="media.testing.enabled"]
+ [Pref="media_testing_enabled"]
attribute EventHandler onpostershown;
};
diff --git a/components/script/dom/webidls/ImageBitmap.webidl b/components/script/dom/webidls/ImageBitmap.webidl
index e2ace645e74..aaa35c67995 100644
--- a/components/script/dom/webidls/ImageBitmap.webidl
+++ b/components/script/dom/webidls/ImageBitmap.webidl
@@ -10,7 +10,7 @@
*/
//[Exposed=(Window,Worker), Serializable, Transferable]
-[Exposed=(Window,Worker), Pref="dom.imagebitmap.enabled"]
+[Exposed=(Window,Worker), Pref="dom_imagebitmap_enabled"]
interface ImageBitmap {
readonly attribute unsigned long width;
readonly attribute unsigned long height;
diff --git a/components/script/dom/webidls/IntersectionObserver.webidl b/components/script/dom/webidls/IntersectionObserver.webidl
index dc24a856363..9607864408e 100644
--- a/components/script/dom/webidls/IntersectionObserver.webidl
+++ b/components/script/dom/webidls/IntersectionObserver.webidl
@@ -16,7 +16,7 @@ dictionary IntersectionObserverInit {
boolean trackVisibility = false;
};
-[Pref="dom.intersection_observer.enabled", Exposed=(Window)]
+[Pref="dom_intersection_observer_enabled", Exposed=(Window)]
interface IntersectionObserver {
constructor(IntersectionObserverCallback callback, optional IntersectionObserverInit options = {});
readonly attribute (Element or Document)? root;
diff --git a/components/script/dom/webidls/IntersectionObserverEntry.webidl b/components/script/dom/webidls/IntersectionObserverEntry.webidl
index 108ad6636de..5e9423a965c 100644
--- a/components/script/dom/webidls/IntersectionObserverEntry.webidl
+++ b/components/script/dom/webidls/IntersectionObserverEntry.webidl
@@ -4,7 +4,7 @@
// https://w3c.github.io/IntersectionObserver/#intersection-observer-entry
-[Pref="dom.intersection_observer.enabled", Exposed=(Window)]
+[Pref="dom_intersection_observer_enabled", Exposed=(Window)]
interface IntersectionObserverEntry {
constructor(IntersectionObserverEntryInit intersectionObserverEntryInit);
readonly attribute DOMHighResTimeStamp time;
diff --git a/components/script/dom/webidls/MediaDeviceInfo.webidl b/components/script/dom/webidls/MediaDeviceInfo.webidl
index ab24f8046f9..d6caaa43499 100644
--- a/components/script/dom/webidls/MediaDeviceInfo.webidl
+++ b/components/script/dom/webidls/MediaDeviceInfo.webidl
@@ -5,7 +5,7 @@
// https://w3c.github.io/mediacapture-main/#device-info
[Exposed=Window,
-SecureContext, Pref="dom.webrtc.enabled"]
+SecureContext, Pref="dom_webrtc_enabled"]
interface MediaDeviceInfo {
readonly attribute DOMString deviceId;
readonly attribute MediaDeviceKind kind;
diff --git a/components/script/dom/webidls/MediaDevices.webidl b/components/script/dom/webidls/MediaDevices.webidl
index 53e6c3599a4..8d14e60abb5 100644
--- a/components/script/dom/webidls/MediaDevices.webidl
+++ b/components/script/dom/webidls/MediaDevices.webidl
@@ -5,7 +5,7 @@
// https://w3c.github.io/mediacapture-main/#dom-mediadevices
[Exposed=Window,
-SecureContext, Pref="dom.webrtc.enabled"]
+SecureContext, Pref="dom_webrtc_enabled"]
interface MediaDevices : EventTarget {
// attribute EventHandler ondevicechange;
Promise<sequence<MediaDeviceInfo>> enumerateDevices();
@@ -13,7 +13,7 @@ interface MediaDevices : EventTarget {
partial interface Navigator {
// [SameObject, SecureContext]
- [Pref="dom.webrtc.enabled"] readonly attribute MediaDevices mediaDevices;
+ [Pref="dom_webrtc_enabled"] readonly attribute MediaDevices mediaDevices;
};
partial interface MediaDevices {
diff --git a/components/script/dom/webidls/MouseEvent.webidl b/components/script/dom/webidls/MouseEvent.webidl
index ba717f724a4..0a3c5c015fd 100644
--- a/components/script/dom/webidls/MouseEvent.webidl
+++ b/components/script/dom/webidls/MouseEvent.webidl
@@ -26,7 +26,7 @@ interface MouseEvent : UIEvent {
readonly attribute unsigned short buttons;
//boolean getModifierState (DOMString keyArg);
- [Pref="dom.mouseevent.which.enabled"]
+ [Pref="dom_mouse_event_which_enabled"]
readonly attribute long which;
};
diff --git a/components/script/dom/webidls/MutationObserver.webidl b/components/script/dom/webidls/MutationObserver.webidl
index baa9a1a79b0..4f643c7b222 100644
--- a/components/script/dom/webidls/MutationObserver.webidl
+++ b/components/script/dom/webidls/MutationObserver.webidl
@@ -7,7 +7,7 @@
*/
// https://dom.spec.whatwg.org/#mutationobserver
-[Exposed=Window, Pref="dom.mutation_observer.enabled"]
+[Exposed=Window, Pref="dom_mutation_observer_enabled"]
interface MutationObserver {
[Throws] constructor(MutationCallback callback);
[Throws]
diff --git a/components/script/dom/webidls/MutationRecord.webidl b/components/script/dom/webidls/MutationRecord.webidl
index 2c08fcea71f..edc5c9e8825 100644
--- a/components/script/dom/webidls/MutationRecord.webidl
+++ b/components/script/dom/webidls/MutationRecord.webidl
@@ -7,7 +7,7 @@
*/
// https://dom.spec.whatwg.org/#mutationrecord
-[Pref="dom.mutation_observer.enabled", Exposed=Window]
+[Pref="dom_mutation_observer_enabled", Exposed=Window]
interface MutationRecord {
readonly attribute DOMString type;
[SameObject]
diff --git a/components/script/dom/webidls/NavigationPreloadManager.webidl b/components/script/dom/webidls/NavigationPreloadManager.webidl
index 1c2e4d09189..026bcafea13 100644
--- a/components/script/dom/webidls/NavigationPreloadManager.webidl
+++ b/components/script/dom/webidls/NavigationPreloadManager.webidl
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://w3c.github.io/ServiceWorker/#navigation-preload-manager
-[Pref="dom.serviceworker.enabled", SecureContext, Exposed=(Window,Worker)]
+[Pref="dom_serviceworker_enabled", SecureContext, Exposed=(Window,Worker)]
interface NavigationPreloadManager {
Promise<undefined> enable();
Promise<undefined> disable();
diff --git a/components/script/dom/webidls/Navigator.webidl b/components/script/dom/webidls/Navigator.webidl
index 2fcef010b4a..05fbdf62024 100644
--- a/components/script/dom/webidls/Navigator.webidl
+++ b/components/script/dom/webidls/Navigator.webidl
@@ -33,12 +33,12 @@ interface mixin NavigatorID {
// https://webbluetoothcg.github.io/web-bluetooth/#navigator-extensions
partial interface Navigator {
- [SameObject, Pref="dom.bluetooth.enabled"] readonly attribute Bluetooth bluetooth;
+ [SameObject, Pref="dom_bluetooth_enabled"] readonly attribute Bluetooth bluetooth;
};
// https://w3c.github.io/ServiceWorker/#navigator-service-worker
partial interface Navigator {
- [SameObject, Pref="dom.serviceworker.enabled"] readonly attribute ServiceWorkerContainer serviceWorker;
+ [SameObject, Pref="dom_serviceworker_enabled"] readonly attribute ServiceWorkerContainer serviceWorker;
};
// https://html.spec.whatwg.org/multipage/#navigatorlanguage
@@ -63,12 +63,12 @@ interface mixin NavigatorCookies {
// https://w3c.github.io/permissions/#navigator-and-workernavigator-extension
[Exposed=(Window)]
partial interface Navigator {
- [Pref="dom.permissions.enabled"] readonly attribute Permissions permissions;
+ [Pref="dom_permissions_enabled"] readonly attribute Permissions permissions;
};
// https://w3c.github.io/gamepad/#navigator-interface-extension
partial interface Navigator {
- [Pref="dom.gamepad.enabled"] sequence<Gamepad?> getGamepads();
+ [Pref="dom_gamepad_enabled"] sequence<Gamepad?> getGamepads();
};
// https://html.spec.whatwg.org/multipage/#navigatorconcurrenthardware
diff --git a/components/script/dom/webidls/OffscreenCanvas.webidl b/components/script/dom/webidls/OffscreenCanvas.webidl
index 04c28f989a5..cc19cefa868 100644
--- a/components/script/dom/webidls/OffscreenCanvas.webidl
+++ b/components/script/dom/webidls/OffscreenCanvas.webidl
@@ -13,7 +13,7 @@ dictionary ImageEncodeOptions {
//enum OffscreenRenderingContextId { "2d", "webgl", "webgl2" };
-[Exposed=(Window,Worker)/*, Transferable*/, Pref="dom.offscreen_canvas.enabled"]
+[Exposed=(Window,Worker)/*, Transferable*/, Pref="dom_offscreen_canvas_enabled"]
interface OffscreenCanvas : EventTarget {
[Throws] constructor([EnforceRange] unsigned long long width, [EnforceRange] unsigned long long height);
attribute [EnforceRange] unsigned long long width;
diff --git a/components/script/dom/webidls/OffscreenCanvasRenderingContext2D.webidl b/components/script/dom/webidls/OffscreenCanvasRenderingContext2D.webidl
index c129bfa8e47..5d6aef5e014 100644
--- a/components/script/dom/webidls/OffscreenCanvasRenderingContext2D.webidl
+++ b/components/script/dom/webidls/OffscreenCanvasRenderingContext2D.webidl
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://html.spec.whatwg.org/multipage/#the-offscreen-2d-rendering-context
-[Exposed=(Window,Worker), Pref="dom.offscreen_canvas.enabled"]
+[Exposed=(Window,Worker), Pref="dom_offscreen_canvas_enabled"]
interface OffscreenCanvasRenderingContext2D {
//void commit();
readonly attribute OffscreenCanvas canvas;
diff --git a/components/script/dom/webidls/PaintRenderingContext2D.webidl b/components/script/dom/webidls/PaintRenderingContext2D.webidl
index bc415450358..8361c298866 100644
--- a/components/script/dom/webidls/PaintRenderingContext2D.webidl
+++ b/components/script/dom/webidls/PaintRenderingContext2D.webidl
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://drafts.css-houdini.org/css-paint-api/#paintrenderingcontext2d
-[Pref="dom.worklet.enabled", Exposed=PaintWorklet]
+[Pref="dom_worklet_enabled", Exposed=PaintWorklet]
interface PaintRenderingContext2D {
};
PaintRenderingContext2D includes CanvasState;
diff --git a/components/script/dom/webidls/PaintSize.webidl b/components/script/dom/webidls/PaintSize.webidl
index ed1b46d29f4..2c3e669d32e 100644
--- a/components/script/dom/webidls/PaintSize.webidl
+++ b/components/script/dom/webidls/PaintSize.webidl
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://drafts.css-houdini.org/css-paint-api/#paintsize
-[Pref="dom.worklet.enabled", Exposed=PaintWorklet]
+[Pref="dom_worklet_enabled", Exposed=PaintWorklet]
interface PaintSize {
readonly attribute double width;
readonly attribute double height;
diff --git a/components/script/dom/webidls/PaintWorkletGlobalScope.webidl b/components/script/dom/webidls/PaintWorkletGlobalScope.webidl
index 981df09321f..a5918c06616 100644
--- a/components/script/dom/webidls/PaintWorkletGlobalScope.webidl
+++ b/components/script/dom/webidls/PaintWorkletGlobalScope.webidl
@@ -3,11 +3,11 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://drafts.css-houdini.org/css-paint-api/#paintworkletglobalscope
-[Global=(Worklet,PaintWorklet), Pref="dom.worklet.enabled", Exposed=PaintWorklet]
+[Global=(Worklet,PaintWorklet), Pref="dom_worklet_enabled", Exposed=PaintWorklet]
interface PaintWorkletGlobalScope : WorkletGlobalScope {
[Throws] undefined registerPaint(DOMString name, VoidFunction paintCtor);
// This function is to be used only for testing, and should not be
// accessible outside of that use.
- [Pref="dom.worklet.blockingsleep.enabled"]
+ [Pref="dom_worklet_blockingsleep_enabled"]
undefined sleep(unsigned long long ms);
};
diff --git a/components/script/dom/webidls/PerformanceNavigationTiming.webidl b/components/script/dom/webidls/PerformanceNavigationTiming.webidl
index 8bd657dbdfb..4757e7fd7d0 100644
--- a/components/script/dom/webidls/PerformanceNavigationTiming.webidl
+++ b/components/script/dom/webidls/PerformanceNavigationTiming.webidl
@@ -27,6 +27,6 @@ interface PerformanceNavigationTiming : PerformanceResourceTiming {
readonly attribute unsigned short redirectCount;
[Default] object toJSON();
/* Servo-only attribute for measuring when the top-level document (not iframes) is complete. */
- [Pref="dom.testperf.enabled"]
+ [Pref="dom_testperf_enabled"]
readonly attribute DOMHighResTimeStamp topLevelDomComplete;
};
diff --git a/components/script/dom/webidls/PermissionStatus.webidl b/components/script/dom/webidls/PermissionStatus.webidl
index 83c0371e0de..a5aebda20dd 100644
--- a/components/script/dom/webidls/PermissionStatus.webidl
+++ b/components/script/dom/webidls/PermissionStatus.webidl
@@ -28,7 +28,7 @@ enum PermissionName {
"persistent-storage",
};
-[Pref="dom.permissions.enabled", Exposed=(Window,Worker)]
+[Pref="dom_permissions_enabled", Exposed=(Window,Worker)]
interface PermissionStatus : EventTarget {
readonly attribute PermissionState state;
attribute EventHandler onchange;
diff --git a/components/script/dom/webidls/Permissions.webidl b/components/script/dom/webidls/Permissions.webidl
index 5b4092cc645..21e20eb2bf5 100644
--- a/components/script/dom/webidls/Permissions.webidl
+++ b/components/script/dom/webidls/Permissions.webidl
@@ -4,7 +4,7 @@
// https://w3c.github.io/permissions/#permissions-interface
-[Pref="dom.permissions.enabled", Exposed=(Window,Worker)]
+[Pref="dom_permissions_enabled", Exposed=(Window,Worker)]
interface Permissions {
Promise<PermissionStatus> query(object permissionDesc);
diff --git a/components/script/dom/webidls/RTCDataChannel.webidl b/components/script/dom/webidls/RTCDataChannel.webidl
index e67c299bcea..419b05bd3f9 100644
--- a/components/script/dom/webidls/RTCDataChannel.webidl
+++ b/components/script/dom/webidls/RTCDataChannel.webidl
@@ -4,7 +4,7 @@
// https://w3c.github.io/webrtc-pc/#dom-rtcdatachannel
-[Exposed=Window, Pref="dom.webrtc.enabled"]
+[Exposed=Window, Pref="dom_webrtc_enabled"]
interface RTCDataChannel : EventTarget {
readonly attribute USVString label;
readonly attribute boolean ordered;
diff --git a/components/script/dom/webidls/RTCDataChannelEvent.webidl b/components/script/dom/webidls/RTCDataChannelEvent.webidl
index bc564a12138..5d2a8e6df24 100644
--- a/components/script/dom/webidls/RTCDataChannelEvent.webidl
+++ b/components/script/dom/webidls/RTCDataChannelEvent.webidl
@@ -4,7 +4,7 @@
// https://w3c.github.io/webrtc-pc/#dom-rtcdatachannelevent
-[Exposed=Window, Pref="dom.webrtc.enabled"]
+[Exposed=Window, Pref="dom_webrtc_enabled"]
interface RTCDataChannelEvent : Event {
constructor(DOMString type, RTCDataChannelEventInit eventInitDict);
readonly attribute RTCDataChannel channel;
diff --git a/components/script/dom/webidls/RTCError.webidl b/components/script/dom/webidls/RTCError.webidl
index f7ffa3d2d57..a745cf5e77f 100644
--- a/components/script/dom/webidls/RTCError.webidl
+++ b/components/script/dom/webidls/RTCError.webidl
@@ -4,7 +4,7 @@
// https://w3c.github.io/webrtc-pc/#dom-rtcerror
-[Exposed=Window, Pref="dom.webrtc.enabled"]
+[Exposed=Window, Pref="dom_webrtc_enabled"]
interface RTCError : DOMException {
constructor(RTCErrorInit init, optional DOMString message = "");
readonly attribute RTCErrorDetailType errorDetail;
diff --git a/components/script/dom/webidls/RTCErrorEvent.webidl b/components/script/dom/webidls/RTCErrorEvent.webidl
index d3ac256744c..c5b7c3e9cc8 100644
--- a/components/script/dom/webidls/RTCErrorEvent.webidl
+++ b/components/script/dom/webidls/RTCErrorEvent.webidl
@@ -4,7 +4,7 @@
// https://w3c.github.io/webrtc-pc/#dom-rtcerrorevent
-[Exposed=Window, Pref="dom.webrtc.enabled"]
+[Exposed=Window, Pref="dom_webrtc_enabled"]
interface RTCErrorEvent : Event {
constructor(DOMString type, RTCErrorEventInit eventInitDict);
[SameObject] readonly attribute RTCError error;
diff --git a/components/script/dom/webidls/RTCIceCandidate.webidl b/components/script/dom/webidls/RTCIceCandidate.webidl
index fde0421c8c0..266fe353f37 100644
--- a/components/script/dom/webidls/RTCIceCandidate.webidl
+++ b/components/script/dom/webidls/RTCIceCandidate.webidl
@@ -5,7 +5,7 @@
// https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface
-[Exposed=Window, Pref="dom.webrtc.enabled"]
+[Exposed=Window, Pref="dom_webrtc_enabled"]
interface RTCIceCandidate {
[Throws] constructor(optional RTCIceCandidateInit candidateInitDict = {});
readonly attribute DOMString candidate;
diff --git a/components/script/dom/webidls/RTCPeerConnection.webidl b/components/script/dom/webidls/RTCPeerConnection.webidl
index 85a7297fce1..24ced7bcce6 100644
--- a/components/script/dom/webidls/RTCPeerConnection.webidl
+++ b/components/script/dom/webidls/RTCPeerConnection.webidl
@@ -4,7 +4,7 @@
// https://w3c.github.io/webrtc-pc/#interface-definition
-[Exposed=Window, Pref="dom.webrtc.enabled"]
+[Exposed=Window, Pref="dom_webrtc_enabled"]
interface RTCPeerConnection : EventTarget {
[Throws] constructor(optional RTCConfiguration configuration = {});
Promise<RTCSessionDescriptionInit> createOffer(optional RTCOfferOptions options = {});
@@ -138,7 +138,7 @@ partial interface RTCPeerConnection {
// RTCRtpSender addTrack(MediaStreamTrack track,
// MediaStream... streams);
// void removeTrack(RTCRtpSender sender);
- [Pref="dom.webrtc.transceiver.enabled"]
+ [Pref="dom_webrtc_transceiver_enabled"]
RTCRtpTransceiver addTransceiver((MediaStreamTrack or DOMString) trackOrKind,
optional RTCRtpTransceiverInit init = {});
attribute EventHandler ontrack;
diff --git a/components/script/dom/webidls/RTCPeerConnectionIceEvent.webidl b/components/script/dom/webidls/RTCPeerConnectionIceEvent.webidl
index 2ffd69cea50..95094c45f3b 100644
--- a/components/script/dom/webidls/RTCPeerConnectionIceEvent.webidl
+++ b/components/script/dom/webidls/RTCPeerConnectionIceEvent.webidl
@@ -4,7 +4,7 @@
// https://w3c.github.io/webrtc-pc/#rtcpeerconnectioniceevent
-[Exposed=Window, Pref="dom.webrtc.enabled"]
+[Exposed=Window, Pref="dom_webrtc_enabled"]
interface RTCPeerConnectionIceEvent : Event {
[Throws] constructor(DOMString type, optional RTCPeerConnectionIceEventInit eventInitDict = {});
readonly attribute RTCIceCandidate? candidate;
diff --git a/components/script/dom/webidls/RTCRtpSender.webidl b/components/script/dom/webidls/RTCRtpSender.webidl
index 752ab7682b8..938ca9e8a63 100644
--- a/components/script/dom/webidls/RTCRtpSender.webidl
+++ b/components/script/dom/webidls/RTCRtpSender.webidl
@@ -34,7 +34,7 @@ dictionary RTCRtpSendParameters : RTCRtpParameters {
required sequence<RTCRtpEncodingParameters> encodings;
};
-[Exposed=Window, Pref="dom.webrtc.transceiver.enabled"]
+[Exposed=Window, Pref="dom_webrtc_transceiver_enabled"]
interface RTCRtpSender {
//readonly attribute MediaStreamTrack? track;
//readonly attribute RTCDtlsTransport? transport;
diff --git a/components/script/dom/webidls/RTCRtpTransceiver.webidl b/components/script/dom/webidls/RTCRtpTransceiver.webidl
index 408c2708709..f11b9853682 100644
--- a/components/script/dom/webidls/RTCRtpTransceiver.webidl
+++ b/components/script/dom/webidls/RTCRtpTransceiver.webidl
@@ -4,7 +4,7 @@
// https://w3c.github.io/webrtc-pc/#rtcrtptransceiver-interface
-[Exposed=Window, Pref="dom.webrtc.transceiver.enabled"]
+[Exposed=Window, Pref="dom_webrtc_transceiver_enabled"]
interface RTCRtpTransceiver {
//readonly attribute DOMString? mid;
[SameObject] readonly attribute RTCRtpSender sender;
diff --git a/components/script/dom/webidls/RTCSessionDescription.webidl b/components/script/dom/webidls/RTCSessionDescription.webidl
index f13d0fd0d9f..0fb325eae41 100644
--- a/components/script/dom/webidls/RTCSessionDescription.webidl
+++ b/components/script/dom/webidls/RTCSessionDescription.webidl
@@ -4,7 +4,7 @@
// https://w3c.github.io/webrtc-pc/#rtcsessiondescription-class
-[Exposed=Window, Pref="dom.webrtc.enabled"]
+[Exposed=Window, Pref="dom_webrtc_enabled"]
interface RTCSessionDescription {
[Throws] constructor(RTCSessionDescriptionInit descriptionInitDict);
readonly attribute RTCSdpType type;
diff --git a/components/script/dom/webidls/RTCTrackEvent.webidl b/components/script/dom/webidls/RTCTrackEvent.webidl
index c2283e5a803..c43b86710b4 100644
--- a/components/script/dom/webidls/RTCTrackEvent.webidl
+++ b/components/script/dom/webidls/RTCTrackEvent.webidl
@@ -4,7 +4,7 @@
// https://w3c.github.io/webrtc-pc/#dom-rtctrackevent
-[Exposed=Window, Pref="dom.webrtc.enabled"]
+[Exposed=Window, Pref="dom_webrtc_enabled"]
interface RTCTrackEvent : Event {
[Throws] constructor(DOMString type, RTCTrackEventInit eventInitDict);
// readonly attribute RTCRtpReceiver receiver;
diff --git a/components/script/dom/webidls/ResizeObserver.webidl b/components/script/dom/webidls/ResizeObserver.webidl
index fc0a87589d5..2f3b9064477 100644
--- a/components/script/dom/webidls/ResizeObserver.webidl
+++ b/components/script/dom/webidls/ResizeObserver.webidl
@@ -4,7 +4,7 @@
// https://drafts.csswg.org/resize-observer/#resize-observer-interface
-[Pref="dom.resize_observer.enabled", Exposed=(Window)]
+[Pref="dom_resize_observer_enabled", Exposed=(Window)]
interface ResizeObserver {
constructor(ResizeObserverCallback callback);
undefined observe(Element target, optional ResizeObserverOptions options = {});
diff --git a/components/script/dom/webidls/ResizeObserverEntry.webidl b/components/script/dom/webidls/ResizeObserverEntry.webidl
index 8cb8802023a..0b7b5c2f5a9 100644
--- a/components/script/dom/webidls/ResizeObserverEntry.webidl
+++ b/components/script/dom/webidls/ResizeObserverEntry.webidl
@@ -4,7 +4,7 @@
// https://drafts.csswg.org/resize-observer/#resize-observer-entry-interface
-[Pref="dom.resize_observer.enabled", Exposed=Window]
+[Pref="dom_resize_observer_enabled", Exposed=Window]
interface ResizeObserverEntry {
readonly attribute Element target;
readonly attribute DOMRectReadOnly contentRect;
diff --git a/components/script/dom/webidls/ResizeObserverSize.webidl b/components/script/dom/webidls/ResizeObserverSize.webidl
index 5cc8db2dbcd..e4bcb1ace78 100644
--- a/components/script/dom/webidls/ResizeObserverSize.webidl
+++ b/components/script/dom/webidls/ResizeObserverSize.webidl
@@ -4,7 +4,7 @@
// https://drafts.csswg.org/resize-observer/#resizeobserversize
-[Pref="dom.resize_observer.enabled", Exposed=Window]
+[Pref="dom_resize_observer_enabled", Exposed=Window]
interface ResizeObserverSize {
readonly attribute unrestricted double inlineSize;
readonly attribute unrestricted double blockSize;
diff --git a/components/script/dom/webidls/SVGElement.webidl b/components/script/dom/webidls/SVGElement.webidl
index e826c741e66..e6bc468d5dc 100644
--- a/components/script/dom/webidls/SVGElement.webidl
+++ b/components/script/dom/webidls/SVGElement.webidl
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://svgwg.org/svg2-draft/types.html#InterfaceSVGElement
-[Exposed=Window, Pref="dom.svg.enabled"]
+[Exposed=Window, Pref="dom_svg_enabled"]
interface SVGElement : Element {
//[SameObject] readonly attribute SVGAnimatedString className;
diff --git a/components/script/dom/webidls/SVGGraphicsElement.webidl b/components/script/dom/webidls/SVGGraphicsElement.webidl
index 052182e374d..ab08503e7ef 100644
--- a/components/script/dom/webidls/SVGGraphicsElement.webidl
+++ b/components/script/dom/webidls/SVGGraphicsElement.webidl
@@ -10,7 +10,7 @@
// boolean clipped = false;
//};
-[Exposed=Window, Abstract, Pref="dom.svg.enabled"]
+[Exposed=Window, Abstract, Pref="dom_svg_enabled"]
interface SVGGraphicsElement : SVGElement {
//[SameObject] readonly attribute SVGAnimatedTransformList transform;
diff --git a/components/script/dom/webidls/SVGSVGElement.webidl b/components/script/dom/webidls/SVGSVGElement.webidl
index 0e61776a40e..25b390cf15a 100644
--- a/components/script/dom/webidls/SVGSVGElement.webidl
+++ b/components/script/dom/webidls/SVGSVGElement.webidl
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://svgwg.org/svg2-draft/struct.html#InterfaceSVGSVGElement
-[Exposed=Window, Pref="dom.svg.enabled"]
+[Exposed=Window, Pref="dom_svg_enabled"]
interface SVGSVGElement : SVGGraphicsElement {
//[SameObject] readonly attribute SVGAnimatedLength x;
diff --git a/components/script/dom/webidls/ServiceWorker.webidl b/components/script/dom/webidls/ServiceWorker.webidl
index a5bc8938602..ee12c92b6e2 100644
--- a/components/script/dom/webidls/ServiceWorker.webidl
+++ b/components/script/dom/webidls/ServiceWorker.webidl
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://w3c.github.io/ServiceWorker/#serviceworker-interface
-[Pref="dom.serviceworker.enabled", SecureContext, Exposed=(Window,Worker)]
+[Pref="dom_serviceworker_enabled", SecureContext, Exposed=(Window,Worker)]
interface ServiceWorker : EventTarget {
readonly attribute USVString scriptURL;
readonly attribute ServiceWorkerState state;
diff --git a/components/script/dom/webidls/ServiceWorkerContainer.webidl b/components/script/dom/webidls/ServiceWorkerContainer.webidl
index 18deb5e58f4..540079583b9 100644
--- a/components/script/dom/webidls/ServiceWorkerContainer.webidl
+++ b/components/script/dom/webidls/ServiceWorkerContainer.webidl
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://w3c.github.io/ServiceWorker/#serviceworkercontainer-interface
-[Pref="dom.serviceworker.enabled", Exposed=(Window,Worker)]
+[Pref="dom_serviceworker_enabled", Exposed=(Window,Worker)]
interface ServiceWorkerContainer : EventTarget {
readonly attribute ServiceWorker? controller;
//readonly attribute Promise<ServiceWorkerRegistration> ready;
diff --git a/components/script/dom/webidls/ServiceWorkerGlobalScope.webidl b/components/script/dom/webidls/ServiceWorkerGlobalScope.webidl
index 257f3ff3252..f7535867deb 100644
--- a/components/script/dom/webidls/ServiceWorkerGlobalScope.webidl
+++ b/components/script/dom/webidls/ServiceWorkerGlobalScope.webidl
@@ -5,7 +5,7 @@
// https://w3c.github.io/ServiceWorker/#serviceworkerglobalscope
[Global=(Worker,ServiceWorker), Exposed=ServiceWorker,
- Pref="dom.serviceworker.enabled"]
+ Pref="dom_serviceworker_enabled"]
interface ServiceWorkerGlobalScope : WorkerGlobalScope {
// A container for a list of Client objects that correspond to
// browsing contexts (or shared workers) that are on the origin of this SW
diff --git a/components/script/dom/webidls/ServiceWorkerRegistration.webidl b/components/script/dom/webidls/ServiceWorkerRegistration.webidl
index f7a10659513..29982ee8ec3 100644
--- a/components/script/dom/webidls/ServiceWorkerRegistration.webidl
+++ b/components/script/dom/webidls/ServiceWorkerRegistration.webidl
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://w3c.github.io/ServiceWorker/#serviceworkerregistration-interface
-[Pref="dom.serviceworker.enabled", SecureContext, Exposed=(Window,Worker)]
+[Pref="dom_serviceworker_enabled", SecureContext, Exposed=(Window,Worker)]
interface ServiceWorkerRegistration : EventTarget {
readonly attribute ServiceWorker? installing;
readonly attribute ServiceWorker? waiting;
diff --git a/components/script/dom/webidls/StylePropertyMapReadOnly.webidl b/components/script/dom/webidls/StylePropertyMapReadOnly.webidl
index 7f3860ee701..b427ebd7ba0 100644
--- a/components/script/dom/webidls/StylePropertyMapReadOnly.webidl
+++ b/components/script/dom/webidls/StylePropertyMapReadOnly.webidl
@@ -4,7 +4,7 @@
// https://drafts.css-houdini.org/css-typed-om-1/#stylepropertymapreadonly
// NOTE: should this be exposed to Window?
-[Pref="dom.worklet.enabled", Exposed=(Worklet)]
+[Pref="dom_worklet_enabled", Exposed=(Worklet)]
interface StylePropertyMapReadOnly {
CSSStyleValue? get(DOMString property);
// sequence<CSSStyleValue> getAll(DOMString property);
diff --git a/components/script/dom/webidls/SubtleCrypto.webidl b/components/script/dom/webidls/SubtleCrypto.webidl
index be01cebf589..e0bc1bc04a5 100644
--- a/components/script/dom/webidls/SubtleCrypto.webidl
+++ b/components/script/dom/webidls/SubtleCrypto.webidl
@@ -18,7 +18,7 @@ dictionary KeyAlgorithm {
enum KeyFormat { "raw", "spki", "pkcs8", "jwk" };
-[SecureContext,Exposed=(Window,Worker),Pref="dom.crypto.subtle.enabled"]
+[SecureContext,Exposed=(Window,Worker),Pref="dom_crypto_subtle_enabled"]
interface SubtleCrypto {
Promise<any> encrypt(AlgorithmIdentifier algorithm,
CryptoKey key,
diff --git a/components/script/dom/webidls/TestBinding.webidl b/components/script/dom/webidls/TestBinding.webidl
index bd6cb2432a4..ee13ed57d55 100644
--- a/components/script/dom/webidls/TestBinding.webidl
+++ b/components/script/dom/webidls/TestBinding.webidl
@@ -100,7 +100,7 @@ dictionary TestURLLike {
required DOMString href;
};
-[Pref="dom.testbinding.enabled",
+[Pref="dom_testbinding_enabled",
Exposed=(Window,Worker)
]
interface TestBinding {
@@ -516,28 +516,28 @@ interface TestBinding {
boolean BooleanMozPreference(DOMString pref_name);
DOMString StringMozPreference(DOMString pref_name);
- [Pref="dom.testbinding.prefcontrolled.enabled"]
+ [Pref="dom_testbinding_prefcontrolled_enabled"]
readonly attribute boolean prefControlledAttributeDisabled;
- [Pref="dom.testbinding.prefcontrolled.enabled"]
+ [Pref="dom_testbinding_prefcontrolled_enabled"]
static readonly attribute boolean prefControlledStaticAttributeDisabled;
- [Pref="dom.testbinding.prefcontrolled.enabled"]
+ [Pref="dom_testbinding_prefcontrolled_enabled"]
undefined prefControlledMethodDisabled();
- [Pref="dom.testbinding.prefcontrolled.enabled"]
+ [Pref="dom_testbinding_prefcontrolled_enabled"]
static undefined prefControlledStaticMethodDisabled();
- [Pref="dom.testbinding.prefcontrolled.enabled"]
+ [Pref="dom_testbinding_prefcontrolled_enabled"]
const unsigned short prefControlledConstDisabled = 0;
- [Pref="layout.animations.test.enabled"]
+ [Pref="layout_animations_test_enabled"]
undefined advanceClock(long millis);
- [Pref="dom.testbinding.prefcontrolled2.enabled"]
+ [Pref="dom_testbinding_prefcontrolled2_enabled"]
readonly attribute boolean prefControlledAttributeEnabled;
- [Pref="dom.testbinding.prefcontrolled2.enabled"]
+ [Pref="dom_testbinding_prefcontrolled2_enabled"]
static readonly attribute boolean prefControlledStaticAttributeEnabled;
- [Pref="dom.testbinding.prefcontrolled2.enabled"]
+ [Pref="dom_testbinding_prefcontrolled2_enabled"]
undefined prefControlledMethodEnabled();
- [Pref="dom.testbinding.prefcontrolled2.enabled"]
+ [Pref="dom_testbinding_prefcontrolled2_enabled"]
static undefined prefControlledStaticMethodEnabled();
- [Pref="dom.testbinding.prefcontrolled2.enabled"]
+ [Pref="dom_testbinding_prefcontrolled2_enabled"]
const unsigned short prefControlledConstEnabled = 0;
[Func="TestBinding::condition_unsatisfied"]
@@ -609,11 +609,11 @@ callback SimpleCallback = undefined(any value);
callback callbackWithOnlyOneOptionalArg = Promise<undefined> (optional any reason);
partial interface TestBinding {
- [Pref="dom.testable_crash.enabled"]
+ [Pref="dom_testable_crash_enabled"]
undefined crashHard();
};
-[Exposed=(Window,Worker), Pref="dom.testbinding.enabled"]
+[Exposed=(Window,Worker), Pref="dom_testbinding_enabled"]
namespace TestNS {
const unsigned long ONE = 1;
const unsigned long TWO = 0x2;
diff --git a/components/script/dom/webidls/TestBindingIterable.webidl b/components/script/dom/webidls/TestBindingIterable.webidl
index 46a2d319e3d..cc7628af707 100644
--- a/components/script/dom/webidls/TestBindingIterable.webidl
+++ b/components/script/dom/webidls/TestBindingIterable.webidl
@@ -5,7 +5,7 @@
// This interface is entirely internal to Servo, and should not be accessible to
// web pages.
-[Pref="dom.testbinding.enabled", Exposed=(Window,Worker)]
+[Pref="dom_testbinding_enabled", Exposed=(Window,Worker)]
interface TestBindingIterable {
[Throws] constructor();
undefined add(DOMString arg);
diff --git a/components/script/dom/webidls/TestBindingMaplike.webidl b/components/script/dom/webidls/TestBindingMaplike.webidl
index f9712d63a8a..8debb804a3e 100644
--- a/components/script/dom/webidls/TestBindingMaplike.webidl
+++ b/components/script/dom/webidls/TestBindingMaplike.webidl
@@ -5,7 +5,7 @@
// This interface is entirely internal to Servo, and should not be accessible to
// web pages.
-[Pref="dom.testbinding.enabled", Exposed=(Window,Worker)]
+[Pref="dom_testbinding_enabled", Exposed=(Window,Worker)]
interface TestBindingMaplike {
[Throws]
constructor();
diff --git a/components/script/dom/webidls/TestBindingPairIterable.webidl b/components/script/dom/webidls/TestBindingPairIterable.webidl
index 64499e7464c..e3106949e3e 100644
--- a/components/script/dom/webidls/TestBindingPairIterable.webidl
+++ b/components/script/dom/webidls/TestBindingPairIterable.webidl
@@ -5,7 +5,7 @@
// This interface is entirely internal to Servo, and should not be accessible to
// web pages.
-[Pref="dom.testbinding.enabled", Exposed=(Window,Worker)]
+[Pref="dom_testbinding_enabled", Exposed=(Window,Worker)]
interface TestBindingPairIterable {
[Throws] constructor();
undefined add(DOMString key, unsigned long value);
diff --git a/components/script/dom/webidls/TestBindingProxy.webidl b/components/script/dom/webidls/TestBindingProxy.webidl
index b16d5104242..957db0f0302 100644
--- a/components/script/dom/webidls/TestBindingProxy.webidl
+++ b/components/script/dom/webidls/TestBindingProxy.webidl
@@ -11,7 +11,7 @@
// This interface is entirely internal to Servo, and should not be accessible to
// web pages.
-[Pref="dom.testbinding.enabled", Exposed=(Window,Worker)]
+[Pref="dom_testbinding_enabled", Exposed=(Window,Worker)]
interface TestBindingProxy : TestBinding {
readonly attribute unsigned long length;
diff --git a/components/script/dom/webidls/TestBindingSetlike.webidl b/components/script/dom/webidls/TestBindingSetlike.webidl
index c8cfcf73b86..16b264bb9f6 100644
--- a/components/script/dom/webidls/TestBindingSetlike.webidl
+++ b/components/script/dom/webidls/TestBindingSetlike.webidl
@@ -5,7 +5,7 @@
// This interface is entirely internal to Servo, and should not be accessible to
// web pages.
-[Pref="dom.testbinding.enabled", Exposed=(Window,Worker)]
+[Pref="dom_testbinding_enabled", Exposed=(Window,Worker)]
interface TestBindingSetlike {
[Throws]
constructor();
diff --git a/components/script/dom/webidls/TestRunner.webidl b/components/script/dom/webidls/TestRunner.webidl
index 448be17c4d4..4be17153247 100644
--- a/components/script/dom/webidls/TestRunner.webidl
+++ b/components/script/dom/webidls/TestRunner.webidl
@@ -6,7 +6,7 @@
// callback BluetoothManualChooserEventsCallback = void(sequence<DOMString> events);
-[Pref="dom.bluetooth.testing.enabled", Exposed=Window]
+[Pref="dom_bluetooth_testing_enabled", Exposed=Window]
interface TestRunner {
[Throws]
undefined setBluetoothMockDataSet(DOMString dataSetName);
diff --git a/components/script/dom/webidls/TestWorklet.webidl b/components/script/dom/webidls/TestWorklet.webidl
index 81b02da0731..8e5898736b0 100644
--- a/components/script/dom/webidls/TestWorklet.webidl
+++ b/components/script/dom/webidls/TestWorklet.webidl
@@ -5,7 +5,7 @@
// This interface is entirely internal to Servo, and should not be accessible to
// web pages.
-[Pref="dom.worklet.testing.enabled", Exposed=(Window)]
+[Pref="dom_worklet_testing_enabled", Exposed=(Window)]
interface TestWorklet {
[Throws] constructor();
[NewObject] Promise<undefined> addModule(USVString moduleURL, optional WorkletOptions options = {});
diff --git a/components/script/dom/webidls/TestWorkletGlobalScope.webidl b/components/script/dom/webidls/TestWorkletGlobalScope.webidl
index 1c2735dbc65..86599a2c257 100644
--- a/components/script/dom/webidls/TestWorkletGlobalScope.webidl
+++ b/components/script/dom/webidls/TestWorkletGlobalScope.webidl
@@ -5,7 +5,7 @@
// This interface is entirely internal to Servo, and should not be accessible to
// web pages.
-[Global=(Worklet,TestWorklet), Pref="dom.worklet.enabled", Exposed=TestWorklet]
+[Global=(Worklet,TestWorklet), Pref="dom_worklet_enabled", Exposed=TestWorklet]
interface TestWorkletGlobalScope : WorkletGlobalScope {
undefined registerKeyValue(DOMString key, DOMString value);
};
diff --git a/components/script/dom/webidls/TextMetrics.webidl b/components/script/dom/webidls/TextMetrics.webidl
index efba27450fe..ebf0bd8a3dc 100644
--- a/components/script/dom/webidls/TextMetrics.webidl
+++ b/components/script/dom/webidls/TextMetrics.webidl
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://html.spec.whatwg.org/multipage/#textmetrics
-[Exposed=(PaintWorklet, Window, Worker), Pref="dom.canvas_text.enabled"]
+[Exposed=(PaintWorklet, Window, Worker), Pref="dom_canvas_text_enabled"]
interface TextMetrics {
// x-direction
readonly attribute double width; // advance width
diff --git a/components/script/dom/webidls/VTTCue.webidl b/components/script/dom/webidls/VTTCue.webidl
index 073aa12f79b..ccbd342a788 100644
--- a/components/script/dom/webidls/VTTCue.webidl
+++ b/components/script/dom/webidls/VTTCue.webidl
@@ -11,7 +11,7 @@ enum LineAlignSetting { "start", "center", "end" };
enum PositionAlignSetting { "line-left", "center", "line-right", "auto" };
enum AlignSetting { "start", "center", "end", "left", "right" };
-[Pref="dom.webvtt.enabled", Exposed=Window]
+[Pref="dom_webvtt_enabled", Exposed=Window]
interface VTTCue : TextTrackCue {
constructor(double startTime, double endTime, DOMString text);
attribute VTTRegion? region;
diff --git a/components/script/dom/webidls/VTTRegion.webidl b/components/script/dom/webidls/VTTRegion.webidl
index 12fbe16170b..f4a616ef323 100644
--- a/components/script/dom/webidls/VTTRegion.webidl
+++ b/components/script/dom/webidls/VTTRegion.webidl
@@ -6,7 +6,7 @@
enum ScrollSetting { "" /* none */, "up"};
-[Pref="dom.webvtt.enabled", Exposed=Window]
+[Pref="dom_webvtt_enabled", Exposed=Window]
interface VTTRegion {
[Throws] constructor();
attribute DOMString id;
diff --git a/components/script/dom/webidls/WebGLQuery.webidl b/components/script/dom/webidls/WebGLQuery.webidl
index 04b3711dd86..feea145c611 100644
--- a/components/script/dom/webidls/WebGLQuery.webidl
+++ b/components/script/dom/webidls/WebGLQuery.webidl
@@ -6,6 +6,6 @@
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.8
//
-[Exposed=Window, Pref="dom.webgl2.enabled"]
+[Exposed=Window, Pref="dom_webgl2_enabled"]
interface WebGLQuery : WebGLObject {
};
diff --git a/components/script/dom/webidls/WebGLSampler.webidl b/components/script/dom/webidls/WebGLSampler.webidl
index 90c66b65a1d..4669aebeabd 100644
--- a/components/script/dom/webidls/WebGLSampler.webidl
+++ b/components/script/dom/webidls/WebGLSampler.webidl
@@ -6,6 +6,6 @@
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.8
//
-[Exposed=Window, Pref="dom.webgl2.enabled"]
+[Exposed=Window, Pref="dom_webgl2_enabled"]
interface WebGLSampler : WebGLObject {
};
diff --git a/components/script/dom/webidls/WebGLSync.webidl b/components/script/dom/webidls/WebGLSync.webidl
index f8cd33ef9ce..66640a888f0 100644
--- a/components/script/dom/webidls/WebGLSync.webidl
+++ b/components/script/dom/webidls/WebGLSync.webidl
@@ -6,6 +6,6 @@
// https://www.khronos.org/registry/webgl/specs/latest/2.0/#3.7.14
//
-[Exposed=Window, Pref="dom.webgl2.enabled"]
+[Exposed=Window, Pref="dom_webgl2_enabled"]
interface WebGLSync : WebGLObject {
};
diff --git a/components/script/dom/webidls/WebGLTransformFeedback.webidl b/components/script/dom/webidls/WebGLTransformFeedback.webidl
index 871c0f15c7b..ee666366dd4 100644
--- a/components/script/dom/webidls/WebGLTransformFeedback.webidl
+++ b/components/script/dom/webidls/WebGLTransformFeedback.webidl
@@ -6,6 +6,6 @@
// https://www.khronos.org/registry/webgl/specs/latest/2.0/#3.7.15
//
-[Exposed=(Window), Pref="dom.webgl2.enabled"]
+[Exposed=(Window), Pref="dom_webgl2_enabled"]
interface WebGLTransformFeedback : WebGLObject {
};
diff --git a/components/script/dom/webidls/WebGLVertexArrayObject.webidl b/components/script/dom/webidls/WebGLVertexArrayObject.webidl
index a42d8cbe051..c6649e17ef8 100644
--- a/components/script/dom/webidls/WebGLVertexArrayObject.webidl
+++ b/components/script/dom/webidls/WebGLVertexArrayObject.webidl
@@ -6,6 +6,6 @@
// https://www.khronos.org/registry/webgl/specs/latest/2.0/#3.7.17
//
-[Exposed=(Window), Pref="dom.webgl2.enabled"]
+[Exposed=(Window), Pref="dom_webgl2_enabled"]
interface WebGLVertexArrayObject : WebGLObject {
};
diff --git a/components/script/dom/webidls/WebGPU.webidl b/components/script/dom/webidls/WebGPU.webidl
index 5f0572c768a..41bee4718cb 100644
--- a/components/script/dom/webidls/WebGPU.webidl
+++ b/components/script/dom/webidls/WebGPU.webidl
@@ -16,7 +16,7 @@ dictionary GPUObjectDescriptorBase {
USVString label = "";
};
-[Exposed=(Window, DedicatedWorker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Pref="dom_webgpu_enabled"]
interface GPUSupportedLimits {
readonly attribute unsigned long maxTextureDimension1D;
readonly attribute unsigned long maxTextureDimension2D;
@@ -52,17 +52,17 @@ interface GPUSupportedLimits {
readonly attribute unsigned long maxComputeWorkgroupsPerDimension;
};
-[Exposed=(Window, DedicatedWorker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Pref="dom_webgpu_enabled"]
interface GPUSupportedFeatures {
readonly setlike<DOMString>;
};
-[Exposed=(Window, DedicatedWorker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Pref="dom_webgpu_enabled"]
interface WGSLLanguageFeatures {
readonly setlike<DOMString>;
};
-[Exposed=(Window, DedicatedWorker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Pref="dom_webgpu_enabled"]
interface GPUAdapterInfo {
readonly attribute DOMString vendor;
readonly attribute DOMString architecture;
@@ -71,13 +71,13 @@ interface GPUAdapterInfo {
};
interface mixin NavigatorGPU {
- [SameObject, Pref="dom.webgpu.enabled", Exposed=(Window /* ,DedicatedWorker */)] readonly attribute GPU gpu;
+ [SameObject, Pref="dom_webgpu_enabled", Exposed=(Window /* ,DedicatedWorker */)] readonly attribute GPU gpu;
};
Navigator includes NavigatorGPU;
WorkerNavigator includes NavigatorGPU;
-[Exposed=(Window, DedicatedWorker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Pref="dom_webgpu_enabled"]
interface GPU {
[NewObject]
Promise<GPUAdapter?> requestAdapter(optional GPURequestAdapterOptions options = {});
@@ -95,7 +95,7 @@ enum GPUPowerPreference {
"high-performance"
};
-[Exposed=(Window, DedicatedWorker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Pref="dom_webgpu_enabled"]
interface GPUAdapter {
[SameObject] readonly attribute GPUSupportedFeatures features;
[SameObject] readonly attribute GPUSupportedLimits limits;
@@ -129,7 +129,7 @@ enum GPUFeatureName {
"dual-source-blending",
};
-[Exposed=(Window, DedicatedWorker), /*Serializable,*/ Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), /*Serializable,*/ Pref="dom_webgpu_enabled"]
interface GPUDevice: EventTarget {
[SameObject] readonly attribute GPUSupportedFeatures features;
[SameObject] readonly attribute GPUSupportedLimits limits;
@@ -170,7 +170,7 @@ interface GPUDevice: EventTarget {
};
GPUDevice includes GPUObjectBase;
-[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom_webgpu_enabled"]
interface GPUBuffer {
readonly attribute GPUSize64Out size;
readonly attribute GPUFlagsConstant usage;
@@ -201,7 +201,7 @@ dictionary GPUBufferDescriptor : GPUObjectDescriptorBase {
};
typedef [EnforceRange] unsigned long GPUBufferUsageFlags;
-[Exposed=(Window, DedicatedWorker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Pref="dom_webgpu_enabled"]
namespace GPUBufferUsage {
const GPUFlagsConstant MAP_READ = 0x0001;
const GPUFlagsConstant MAP_WRITE = 0x0002;
@@ -216,13 +216,13 @@ namespace GPUBufferUsage {
};
typedef [EnforceRange] unsigned long GPUMapModeFlags;
-[Exposed=(Window, DedicatedWorker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Pref="dom_webgpu_enabled"]
namespace GPUMapMode {
const GPUFlagsConstant READ = 0x0001;
const GPUFlagsConstant WRITE = 0x0002;
};
-[Exposed=(Window, DedicatedWorker), Serializable , Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Serializable , Pref="dom_webgpu_enabled"]
interface GPUTexture {
[Throws, NewObject]
GPUTextureView createView(optional GPUTextureViewDescriptor descriptor = {});
@@ -257,7 +257,7 @@ enum GPUTextureDimension {
};
typedef [EnforceRange] unsigned long GPUTextureUsageFlags;
-[Exposed=(Window, DedicatedWorker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Pref="dom_webgpu_enabled"]
interface GPUTextureUsage {
const GPUTextureUsageFlags COPY_SRC = 0x01;
const GPUTextureUsageFlags COPY_DST = 0x02;
@@ -266,7 +266,7 @@ interface GPUTextureUsage {
const GPUTextureUsageFlags RENDER_ATTACHMENT = 0x10;
};
-[Exposed=(Window, DedicatedWorker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Pref="dom_webgpu_enabled"]
interface GPUTextureView {
};
GPUTextureView includes GPUObjectBase;
@@ -418,7 +418,7 @@ enum GPUTextureFormat {
"astc-12x12-unorm-srgb",
};
-[Exposed=(Window, DedicatedWorker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Pref="dom_webgpu_enabled"]
interface GPUSampler {
};
GPUSampler includes GPUObjectBase;
@@ -458,7 +458,7 @@ enum GPUCompareFunction {
"always"
};
-[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom_webgpu_enabled"]
interface GPUBindGroupLayout {
};
GPUBindGroupLayout includes GPUObjectBase;
@@ -479,7 +479,7 @@ dictionary GPUBindGroupLayoutEntry {
};
typedef [EnforceRange] unsigned long GPUShaderStageFlags;
-[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom_webgpu_enabled"]
interface GPUShaderStage {
const GPUShaderStageFlags VERTEX = 1;
const GPUShaderStageFlags FRAGMENT = 2;
@@ -537,7 +537,7 @@ dictionary GPUStorageTextureBindingLayout {
dictionary GPUExternalTextureBindingLayout {
};
-[Exposed=(Window, DedicatedWorker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Pref="dom_webgpu_enabled"]
interface GPUBindGroup {
};
GPUBindGroup includes GPUObjectBase;
@@ -560,7 +560,7 @@ dictionary GPUBufferBinding {
GPUSize64 size;
};
-[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom_webgpu_enabled"]
interface GPUPipelineLayout {
};
GPUPipelineLayout includes GPUObjectBase;
@@ -569,7 +569,7 @@ dictionary GPUPipelineLayoutDescriptor : GPUObjectDescriptorBase {
required sequence<GPUBindGroupLayout> bindGroupLayouts;
};
-[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom_webgpu_enabled"]
interface GPUShaderModule {
Promise<GPUCompilationInfo> getCompilationInfo();
};
@@ -587,7 +587,7 @@ enum GPUCompilationMessageType {
"info"
};
-[Exposed=(Window, DedicatedWorker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Pref="dom_webgpu_enabled"]
interface GPUCompilationMessage {
readonly attribute DOMString message;
readonly attribute GPUCompilationMessageType type;
@@ -597,13 +597,13 @@ interface GPUCompilationMessage {
readonly attribute unsigned long long length;
};
-[Exposed=(Window, DedicatedWorker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Pref="dom_webgpu_enabled"]
interface GPUCompilationInfo {
//readonly attribute FrozenArray<GPUCompilationMessage> messages;
readonly attribute any messages;
};
-[Exposed=(Window, Worker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, Worker), Pref="dom_webgpu_enabled"]
interface GPUPipelineError : DOMException {
constructor(optional DOMString message = "", GPUPipelineErrorInit options);
readonly attribute GPUPipelineErrorReason reason;
@@ -638,7 +638,7 @@ dictionary GPUProgrammableStage {
typedef double GPUPipelineConstantValue; // May represent WGSL's bool, f32, i32, u32, and f16 if enabled.
-[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom_webgpu_enabled"]
interface GPUComputePipeline {
};
GPUComputePipeline includes GPUObjectBase;
@@ -648,7 +648,7 @@ dictionary GPUComputePipelineDescriptor : GPUPipelineDescriptorBase {
required GPUProgrammableStage compute;
};
-[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom_webgpu_enabled"]
interface GPURenderPipeline {
};
GPURenderPipeline includes GPUObjectBase;
@@ -712,7 +712,7 @@ dictionary GPUBlendState {
};
typedef [EnforceRange] unsigned long GPUColorWriteFlags;
-[Exposed=(Window, DedicatedWorker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Pref="dom_webgpu_enabled"]
interface GPUColorWrite {
const GPUColorWriteFlags RED = 0x1;
const GPUColorWriteFlags GREEN = 0x2;
@@ -873,7 +873,7 @@ dictionary GPUImageCopyExternalImage {
boolean flipY = false;
};
-[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom_webgpu_enabled"]
interface GPUCommandBuffer {
};
GPUCommandBuffer includes GPUObjectBase;
@@ -881,7 +881,7 @@ GPUCommandBuffer includes GPUObjectBase;
dictionary GPUCommandBufferDescriptor : GPUObjectDescriptorBase {
};
-[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom_webgpu_enabled"]
interface GPUCommandEncoder {
[NewObject]
GPUComputePassEncoder beginComputePass(optional GPUComputePassDescriptor descriptor = {});
@@ -939,11 +939,11 @@ dictionary GPUCommandEncoderDescriptor : GPUObjectDescriptorBase {
boolean measureExecutionTime = false;
};
-[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom_webgpu_enabled"]
interface GPUComputePassEncoder {
undefined setPipeline(GPUComputePipeline pipeline);
undefined dispatchWorkgroups(GPUSize32 x, optional GPUSize32 y = 1, optional GPUSize32 z = 1);
- //[Pref="dom.webgpu.indirect-dispatch.enabled"]
+ //[Pref="dom_webgpu_indirect-dispatch.enabled"]
undefined dispatchWorkgroupsIndirect(GPUBuffer indirectBuffer, GPUSize64 indirectOffset);
undefined end();
@@ -954,7 +954,7 @@ GPUComputePassEncoder includes GPUProgrammablePassEncoder;
dictionary GPUComputePassDescriptor : GPUObjectDescriptorBase {
};
-[Exposed=(Window, DedicatedWorker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Pref="dom_webgpu_enabled"]
interface GPURenderPassEncoder {
undefined setViewport(float x, float y,
float width, float height,
@@ -1063,13 +1063,13 @@ interface mixin GPURenderEncoderBase {
optional GPUSignedOffset32 baseVertex = 0,
optional GPUSize32 firstInstance = 0);
- //[Pref="dom.webgpu.indirect-dispatch.enabled"]
+ //[Pref="dom_webgpu_indirect-dispatch.enabled"]
undefined drawIndirect(GPUBuffer indirectBuffer, GPUSize64 indirectOffset);
- //[Pref="dom.webgpu.indirect-dispatch.enabled"]
+ //[Pref="dom_webgpu_indirect-dispatch.enabled"]
undefined drawIndexedIndirect(GPUBuffer indirectBuffer, GPUSize64 indirectOffset);
};
-[Exposed=(Window, DedicatedWorker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Pref="dom_webgpu_enabled"]
interface GPURenderBundle {
};
GPURenderBundle includes GPUObjectBase;
@@ -1077,7 +1077,7 @@ GPURenderBundle includes GPUObjectBase;
dictionary GPURenderBundleDescriptor : GPUObjectDescriptorBase {
};
-[Exposed=(Window, DedicatedWorker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Pref="dom_webgpu_enabled"]
interface GPURenderBundleEncoder {
GPURenderBundle finish(optional GPURenderBundleDescriptor descriptor = {});
};
@@ -1090,7 +1090,7 @@ dictionary GPURenderBundleEncoderDescriptor : GPURenderPassLayout {
boolean stencilReadOnly = false;
};
-[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom_webgpu_enabled"]
interface GPUQueue {
undefined submit(sequence<GPUCommandBuffer> buffers);
@@ -1119,7 +1119,7 @@ interface GPUQueue {
};
GPUQueue includes GPUObjectBase;
-[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom.webgpu.enabled"]
+[Exposed=(Window, DedicatedWorker), Serializable, Pref="dom_webgpu_enabled"]
interface GPUQuerySet {
undefined destroy();
};
@@ -1173,7 +1173,7 @@ enum GPUDeviceLostReason {
"destroyed",
};
-[Exposed=(Window, Worker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, Worker), Pref="dom_webgpu_enabled"]
interface GPUDeviceLostInfo {
readonly attribute GPUDeviceLostReason reason;
readonly attribute DOMString message;
@@ -1183,24 +1183,24 @@ partial interface GPUDevice {
readonly attribute Promise<GPUDeviceLostInfo> lost;
};
-[Exposed=(Window, Worker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, Worker), Pref="dom_webgpu_enabled"]
interface GPUError {
readonly attribute DOMString message;
};
-[Exposed=(Window, Worker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, Worker), Pref="dom_webgpu_enabled"]
interface GPUValidationError
: GPUError {
constructor(DOMString message);
};
-[Exposed=(Window, Worker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, Worker), Pref="dom_webgpu_enabled"]
interface GPUOutOfMemoryError
: GPUError {
constructor(DOMString message);
};
-[Exposed=(Window, Worker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, Worker), Pref="dom_webgpu_enabled"]
interface GPUInternalError
: GPUError {
constructor(DOMString message);
@@ -1218,7 +1218,7 @@ partial interface GPUDevice {
Promise<GPUError?> popErrorScope();
};
-[Exposed=(Window, Worker), Pref="dom.webgpu.enabled"]
+[Exposed=(Window, Worker), Pref="dom_webgpu_enabled"]
interface GPUUncapturedErrorEvent : Event {
constructor(
DOMString type,
diff --git a/components/script/dom/webidls/Window.webidl b/components/script/dom/webidls/Window.webidl
index 84871494d2b..64d7563b38e 100644
--- a/components/script/dom/webidls/Window.webidl
+++ b/components/script/dom/webidls/Window.webidl
@@ -15,7 +15,7 @@
[PutForwards=href, LegacyUnforgeable, CrossOriginReadable, CrossOriginWritable]
readonly attribute Location location;
readonly attribute History history;
- [Pref="dom.customelements.enabled"]
+ [Pref="dom_customelements_enabled"]
readonly attribute CustomElementRegistry customElements;
//[Replaceable] readonly attribute BarProp locationbar;
//[Replaceable] readonly attribute BarProp menubar;
@@ -136,11 +136,11 @@ partial interface Window {
// Proprietary extensions.
partial interface Window {
- [Pref="dom.servo_helpers.enabled"]
+ [Pref="dom_servo_helpers_enabled"]
undefined debug(DOMString arg);
- [Pref="dom.servo_helpers.enabled"]
+ [Pref="dom_servo_helpers_enabled"]
undefined gc();
- [Pref="dom.servo_helpers.enabled"]
+ [Pref="dom_servo_helpers_enabled"]
undefined js_backtrace();
};
@@ -168,13 +168,13 @@ callback FrameRequestCallback = undefined (DOMHighResTimeStamp time);
// https://webbluetoothcg.github.io/web-bluetooth/tests#test-interfaces
partial interface Window {
- [Pref="dom.bluetooth.testing.enabled", Exposed=Window]
+ [Pref="dom_bluetooth_testing_enabled", Exposed=Window]
readonly attribute TestRunner testRunner;
//readonly attribute EventSender eventSender;
};
partial interface Window {
- [Pref="css.animations.testing.enabled"]
+ [Pref="css_animations_testing_enabled"]
readonly attribute unsigned long runningAnimationCount;
};
diff --git a/components/script/dom/webidls/WindowOrWorkerGlobalScope.webidl b/components/script/dom/webidls/WindowOrWorkerGlobalScope.webidl
index dbcce406a43..d9204c11774 100644
--- a/components/script/dom/webidls/WindowOrWorkerGlobalScope.webidl
+++ b/components/script/dom/webidls/WindowOrWorkerGlobalScope.webidl
@@ -24,7 +24,7 @@ interface mixin WindowOrWorkerGlobalScope {
undefined queueMicrotask(VoidFunction callback);
// ImageBitmap
- [Pref="dom.imagebitmap.enabled"]
+ [Pref="dom_imagebitmap_enabled"]
Promise<ImageBitmap> createImageBitmap(ImageBitmapSource image, optional ImageBitmapOptions options = {});
// Promise<ImageBitmap> createImageBitmap(
// ImageBitmapSource image, long sx, long sy, long sw, long sh, optional ImageBitmapOptions options);
diff --git a/components/script/dom/webidls/WorkerNavigator.webidl b/components/script/dom/webidls/WorkerNavigator.webidl
index 3de4be96ebc..33ddfade93d 100644
--- a/components/script/dom/webidls/WorkerNavigator.webidl
+++ b/components/script/dom/webidls/WorkerNavigator.webidl
@@ -14,6 +14,6 @@ WorkerNavigator includes NavigatorConcurrentHardware;
[Exposed=(Worker)]
partial interface WorkerNavigator {
- [Pref="dom.permissions.enabled"] readonly attribute Permissions permissions;
+ [Pref="dom_permissions_enabled"] readonly attribute Permissions permissions;
};
diff --git a/components/script/dom/webidls/Worklet.webidl b/components/script/dom/webidls/Worklet.webidl
index 249f9c9d470..a656c1e3865 100644
--- a/components/script/dom/webidls/Worklet.webidl
+++ b/components/script/dom/webidls/Worklet.webidl
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://drafts.css-houdini.org/worklets/#worklet
-[Pref="dom.worklet.enabled", Exposed=(Window)]
+[Pref="dom_worklet_enabled", Exposed=(Window)]
interface Worklet {
[NewObject] Promise<undefined> addModule(USVString moduleURL, optional WorkletOptions options = {});
};
diff --git a/components/script/dom/webidls/WorkletGlobalScope.webidl b/components/script/dom/webidls/WorkletGlobalScope.webidl
index 21f7a7e0af0..33283c84161 100644
--- a/components/script/dom/webidls/WorkletGlobalScope.webidl
+++ b/components/script/dom/webidls/WorkletGlobalScope.webidl
@@ -5,6 +5,6 @@
// https://drafts.css-houdini.org/worklets/#workletglobalscope
// TODO: The spec IDL doesn't make this a subclass of EventTarget
// https://github.com/whatwg/html/issues/2611
-[Pref="dom.worklet.enabled", Exposed=Worklet]
+[Pref="dom_worklet_enabled", Exposed=Worklet]
interface WorkletGlobalScope: GlobalScope {
};
diff --git a/components/script/dom/webidls/XPathEvaluator.webidl b/components/script/dom/webidls/XPathEvaluator.webidl
index 8586b19232b..ebb505c104c 100644
--- a/components/script/dom/webidls/XPathEvaluator.webidl
+++ b/components/script/dom/webidls/XPathEvaluator.webidl
@@ -4,13 +4,13 @@
// https://dom.spec.whatwg.org/#mixin-xpathevaluatorbase
interface mixin XPathEvaluatorBase {
- [NewObject, Throws, Pref="dom.xpath.enabled"] XPathExpression createExpression(
+ [NewObject, Throws, Pref="dom_xpath_enabled"] XPathExpression createExpression(
DOMString expression,
optional XPathNSResolver? resolver = null
);
Node createNSResolver(Node nodeResolver); // legacy
// XPathResult.ANY_TYPE = 0
- [Throws, Pref="dom.xpath.enabled"] XPathResult evaluate(
+ [Throws, Pref="dom_xpath_enabled"] XPathResult evaluate(
DOMString expression,
Node contextNode,
optional XPathNSResolver? resolver = null,
@@ -22,7 +22,7 @@ interface mixin XPathEvaluatorBase {
Document includes XPathEvaluatorBase;
// https://dom.spec.whatwg.org/#interface-xpathevaluator
-[Exposed=Window, Pref="dom.xpath.enabled"]
+[Exposed=Window, Pref="dom_xpath_enabled"]
interface XPathEvaluator {
constructor();
};
diff --git a/components/script/dom/webidls/XPathExpression.webidl b/components/script/dom/webidls/XPathExpression.webidl
index bf5ba2b83aa..29cbd23e757 100644
--- a/components/script/dom/webidls/XPathExpression.webidl
+++ b/components/script/dom/webidls/XPathExpression.webidl
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://dom.spec.whatwg.org/#interface-xpathexpression
-[Exposed=Window, Pref="dom.xpath.enabled"]
+[Exposed=Window, Pref="dom_xpath_enabled"]
interface XPathExpression {
// XPathResult.ANY_TYPE = 0
[Throws] XPathResult evaluate(
diff --git a/components/script/dom/webidls/XPathResult.webidl b/components/script/dom/webidls/XPathResult.webidl
index 25e87e3024a..ed0e9804ca4 100644
--- a/components/script/dom/webidls/XPathResult.webidl
+++ b/components/script/dom/webidls/XPathResult.webidl
@@ -3,7 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://dom.spec.whatwg.org/#interface-xpathresult
-[Exposed=Window, Pref="dom.xpath.enabled"]
+[Exposed=Window, Pref="dom_xpath_enabled"]
interface XPathResult {
const unsigned short ANY_TYPE = 0;
const unsigned short NUMBER_TYPE = 1;
diff --git a/components/script/dom/webidls/XRBoundedReferenceSpace.webidl b/components/script/dom/webidls/XRBoundedReferenceSpace.webidl
index c028f740c87..9bf63f7f685 100644
--- a/components/script/dom/webidls/XRBoundedReferenceSpace.webidl
+++ b/components/script/dom/webidls/XRBoundedReferenceSpace.webidl
@@ -6,7 +6,7 @@
// https://immersive-web.github.io/webxr/#xrboundedreferencespace-interface
-[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_enabled"]
interface XRBoundedReferenceSpace : XRReferenceSpace {
readonly attribute /*FrozenArray<DOMPointReadOnly>*/ any boundsGeometry;
};
diff --git a/components/script/dom/webidls/XRCompositionLayer.webidl b/components/script/dom/webidls/XRCompositionLayer.webidl
index e8cedf71240..bdfe3435965 100644
--- a/components/script/dom/webidls/XRCompositionLayer.webidl
+++ b/components/script/dom/webidls/XRCompositionLayer.webidl
@@ -8,7 +8,7 @@
// https://github.com/servo/servo/issues/27493
// https://immersive-web.github.io/layers/#xrcompositionlayer
-[SecureContext, Exposed=Window, Pref="dom.webxr.layers.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_layers_enabled"]
interface XRCompositionLayer : XRLayer {
// readonly attribute XRLayerLayout layout;
//
diff --git a/components/script/dom/webidls/XRCubeLayer.webidl b/components/script/dom/webidls/XRCubeLayer.webidl
index 1b213f34be3..30744201a87 100644
--- a/components/script/dom/webidls/XRCubeLayer.webidl
+++ b/components/script/dom/webidls/XRCubeLayer.webidl
@@ -9,7 +9,7 @@
// https://immersive-web.github.io/layers/#xrcubelayer
-[SecureContext, Exposed=Window, Pref="dom.webxr.layers.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_layers_enabled"]
interface XRCubeLayer : XRCompositionLayer {
// attribute XRSpace space;
// attribute DOMPointReadOnly orientation;
diff --git a/components/script/dom/webidls/XRCylinderLayer.webidl b/components/script/dom/webidls/XRCylinderLayer.webidl
index e290aecdee4..c20801f81a0 100644
--- a/components/script/dom/webidls/XRCylinderLayer.webidl
+++ b/components/script/dom/webidls/XRCylinderLayer.webidl
@@ -8,7 +8,7 @@
// https://github.com/servo/servo/issues/27493
// https://immersive-web.github.io/layers/#xrcylinderlayer
-[SecureContext, Exposed=Window, Pref="dom.webxr.layers.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_layers_enabled"]
interface XRCylinderLayer : XRCompositionLayer {
// attribute XRSpace space;
// attribute XRRigidTransform transform;
diff --git a/components/script/dom/webidls/XREquirectLayer.webidl b/components/script/dom/webidls/XREquirectLayer.webidl
index f7eeb327b9a..7b1d1584d62 100644
--- a/components/script/dom/webidls/XREquirectLayer.webidl
+++ b/components/script/dom/webidls/XREquirectLayer.webidl
@@ -8,7 +8,7 @@
// https://github.com/servo/servo/issues/27493
// https://immersive-web.github.io/layers/#xrequirectlayer
-[SecureContext, Exposed=Window, Pref="dom.webxr.layers.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_layers_enabled"]
interface XREquirectLayer : XRCompositionLayer {
// attribute XRSpace space;
// attribute XRRigidTransform transform;
diff --git a/components/script/dom/webidls/XRFrame.webidl b/components/script/dom/webidls/XRFrame.webidl
index 2e05028ec0c..d5ec4b6ef21 100644
--- a/components/script/dom/webidls/XRFrame.webidl
+++ b/components/script/dom/webidls/XRFrame.webidl
@@ -6,7 +6,7 @@
// https://immersive-web.github.io/webxr/#xrframe-interface
-[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_enabled"]
interface XRFrame {
[SameObject] readonly attribute XRSession session;
readonly attribute DOMHighResTimeStamp predictedDisplayTime;
@@ -15,12 +15,12 @@ interface XRFrame {
[Throws] XRPose? getPose(XRSpace space, XRSpace baseSpace);
// WebXR Hand Input
- [Pref="dom.webxr.hands.enabled", Throws]
+ [Pref="dom_webxr_hands_enabled", Throws]
XRJointPose? getJointPose(XRJointSpace joint, XRSpace baseSpace);
- [Pref="dom.webxr.hands.enabled", Throws]
+ [Pref="dom_webxr_hands_enabled", Throws]
boolean fillJointRadii(sequence<XRJointSpace> jointSpaces, Float32Array radii);
- [Pref="dom.webxr.hands.enabled", Throws]
+ [Pref="dom_webxr_hands_enabled", Throws]
boolean fillPoses(sequence<XRSpace> spaces, XRSpace baseSpace, Float32Array transforms);
// WebXR Hit Test
diff --git a/components/script/dom/webidls/XRHand.webidl b/components/script/dom/webidls/XRHand.webidl
index ad46e719f2b..6749eab8dd5 100644
--- a/components/script/dom/webidls/XRHand.webidl
+++ b/components/script/dom/webidls/XRHand.webidl
@@ -39,7 +39,7 @@ enum XRHandJoint {
"pinky-finger-tip"
};
-[SecureContext, Exposed=Window, Pref="dom.webxr.hands.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_hands_enabled"]
interface XRHand {
iterable<XRHandJoint, XRJointSpace>;
diff --git a/components/script/dom/webidls/XRInputSource.webidl b/components/script/dom/webidls/XRInputSource.webidl
index 820f24c363f..7b82b050777 100644
--- a/components/script/dom/webidls/XRInputSource.webidl
+++ b/components/script/dom/webidls/XRInputSource.webidl
@@ -19,7 +19,7 @@ enum XRTargetRayMode {
"transient-pointer"
};
-[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_enabled"]
interface XRInputSource {
readonly attribute XRHandedness handedness;
readonly attribute XRTargetRayMode targetRayMode;
@@ -32,6 +32,6 @@ interface XRInputSource {
[SameObject] readonly attribute Gamepad? gamepad;
// Hand Input
- [Pref="dom.webxr.hands.enabled"]
+ [Pref="dom_webxr_hands_enabled"]
readonly attribute XRHand? hand;
};
diff --git a/components/script/dom/webidls/XRInputSourceArray.webidl b/components/script/dom/webidls/XRInputSourceArray.webidl
index 5987c0039d3..093eab67ed9 100644
--- a/components/script/dom/webidls/XRInputSourceArray.webidl
+++ b/components/script/dom/webidls/XRInputSourceArray.webidl
@@ -6,7 +6,7 @@
// https://immersive-web.github.io/webxr/#xrinputsourcearray-interface
-[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_enabled"]
interface XRInputSourceArray {
iterable<XRInputSource>;
readonly attribute unsigned long length;
diff --git a/components/script/dom/webidls/XRInputSourceEvent.webidl b/components/script/dom/webidls/XRInputSourceEvent.webidl
index e2cb1b394c9..11055b3f247 100644
--- a/components/script/dom/webidls/XRInputSourceEvent.webidl
+++ b/components/script/dom/webidls/XRInputSourceEvent.webidl
@@ -6,7 +6,7 @@
// https://immersive-web.github.io/webxr/#xrinputsourceevent-interface
-[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_enabled"]
interface XRInputSourceEvent : Event {
[Throws] constructor(DOMString type, XRInputSourceEventInit eventInitDict);
[SameObject] readonly attribute XRFrame frame;
diff --git a/components/script/dom/webidls/XRInputSourcesChangeEvent.webidl b/components/script/dom/webidls/XRInputSourcesChangeEvent.webidl
index 25a4885cca3..f6b65d12a09 100644
--- a/components/script/dom/webidls/XRInputSourcesChangeEvent.webidl
+++ b/components/script/dom/webidls/XRInputSourcesChangeEvent.webidl
@@ -6,7 +6,7 @@
// https://immersive-web.github.io/webxr/#xrinputsourceschangedevent-interface
-[SecureContext, Exposed=Window, Pref="dom.webxr.test"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_test"]
interface XRInputSourcesChangeEvent : Event {
constructor(DOMString type, XRInputSourcesChangeEventInit eventInitDict);
[SameObject] readonly attribute XRSession session;
diff --git a/components/script/dom/webidls/XRJointPose.webidl b/components/script/dom/webidls/XRJointPose.webidl
index e824745588e..73bde0ca6e6 100644
--- a/components/script/dom/webidls/XRJointPose.webidl
+++ b/components/script/dom/webidls/XRJointPose.webidl
@@ -6,7 +6,7 @@
// https://github.com/immersive-web/webxr-hands-input/blob/master/explainer.md
-[SecureContext, Exposed=Window, Pref="dom.webxr.hands.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_hands_enabled"]
interface XRJointPose: XRPose {
readonly attribute float? radius;
};
diff --git a/components/script/dom/webidls/XRJointSpace.webidl b/components/script/dom/webidls/XRJointSpace.webidl
index 7326e9990a1..2eeca7edc15 100644
--- a/components/script/dom/webidls/XRJointSpace.webidl
+++ b/components/script/dom/webidls/XRJointSpace.webidl
@@ -6,7 +6,7 @@
// https://github.com/immersive-web/webxr-hands-input/blob/master/explainer.md
-[SecureContext, Exposed=Window, Pref="dom.webxr.hands.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_hands_enabled"]
interface XRJointSpace: XRSpace {
readonly attribute XRHandJoint jointName;
};
diff --git a/components/script/dom/webidls/XRLayer.webidl b/components/script/dom/webidls/XRLayer.webidl
index 122946defb9..fdc9b2bee3a 100644
--- a/components/script/dom/webidls/XRLayer.webidl
+++ b/components/script/dom/webidls/XRLayer.webidl
@@ -5,5 +5,5 @@
// skip-unless CARGO_FEATURE_WEBXR
// https://immersive-web.github.io/webxr/#xrlayer
-[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_enabled"]
interface XRLayer : EventTarget {};
diff --git a/components/script/dom/webidls/XRLayerEvent.webidl b/components/script/dom/webidls/XRLayerEvent.webidl
index e45f116da34..553a70fcaec 100644
--- a/components/script/dom/webidls/XRLayerEvent.webidl
+++ b/components/script/dom/webidls/XRLayerEvent.webidl
@@ -5,7 +5,7 @@
// skip-unless CARGO_FEATURE_WEBXR
// https://immersive-web.github.io/layers/#xrlayerevent-interface
-[SecureContext, Exposed=Window, Pref="dom.webxr.layers.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_layers_enabled"]
interface XRLayerEvent : Event {
constructor(DOMString type, XRLayerEventInit eventInitDict);
[SameObject] readonly attribute XRLayer layer;
diff --git a/components/script/dom/webidls/XRMediaBinding.webidl b/components/script/dom/webidls/XRMediaBinding.webidl
index 4c3bfc91e80..558aa0596c3 100644
--- a/components/script/dom/webidls/XRMediaBinding.webidl
+++ b/components/script/dom/webidls/XRMediaBinding.webidl
@@ -5,7 +5,7 @@
// skip-unless CARGO_FEATURE_WEBXR
// https://immersive-web.github.io/layers/#xrmediabindingtype
-[SecureContext, Exposed=Window, Pref="dom.webxr.layers.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_layers_enabled"]
interface XRMediaBinding {
[Throws] constructor(XRSession session);
diff --git a/components/script/dom/webidls/XRPose.webidl b/components/script/dom/webidls/XRPose.webidl
index dab2d9e7af9..2ac5f372cdd 100644
--- a/components/script/dom/webidls/XRPose.webidl
+++ b/components/script/dom/webidls/XRPose.webidl
@@ -6,7 +6,7 @@
// https://immersive-web.github.io/webxr/#xrpose-interface
-[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_enabled"]
interface XRPose {
[SameObject] readonly attribute XRRigidTransform transform;
[SameObject] readonly attribute DOMPointReadOnly? linearVelocity;
diff --git a/components/script/dom/webidls/XRProjectionLayer.webidl b/components/script/dom/webidls/XRProjectionLayer.webidl
index 0c812948795..bdb9de13dd2 100644
--- a/components/script/dom/webidls/XRProjectionLayer.webidl
+++ b/components/script/dom/webidls/XRProjectionLayer.webidl
@@ -8,7 +8,7 @@
// https://github.com/servo/servo/issues/27493
// https://immersive-web.github.io/layers/#xrprojectionlayer
-[SecureContext, Exposed=Window, Pref="dom.webxr.layers.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_layers_enabled"]
interface XRProjectionLayer : XRCompositionLayer {
// readonly attribute boolean ignoreDepthValues;
};
diff --git a/components/script/dom/webidls/XRQuadLayer.webidl b/components/script/dom/webidls/XRQuadLayer.webidl
index a4c43b0b62e..0b4afcac9be 100644
--- a/components/script/dom/webidls/XRQuadLayer.webidl
+++ b/components/script/dom/webidls/XRQuadLayer.webidl
@@ -8,7 +8,7 @@
// https://github.com/servo/servo/issues/27493
// https://immersive-web.github.io/layers/#xrquadlayer
-[SecureContext, Exposed=Window, Pref="dom.webxr.layers.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_layers_enabled"]
interface XRQuadLayer : XRCompositionLayer {
// attribute XRSpace space;
// attribute XRRigidTransform transform;
diff --git a/components/script/dom/webidls/XRRay.webidl b/components/script/dom/webidls/XRRay.webidl
index 748bd085147..b5fd7ed3494 100644
--- a/components/script/dom/webidls/XRRay.webidl
+++ b/components/script/dom/webidls/XRRay.webidl
@@ -13,7 +13,7 @@ dictionary XRRayDirectionInit {
double w = 0;
};
-[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_enabled"]
interface XRRay {
[Throws] constructor(optional DOMPointInit origin = {}, optional XRRayDirectionInit direction = {});
[Throws] constructor(XRRigidTransform transform);
diff --git a/components/script/dom/webidls/XRReferenceSpace.webidl b/components/script/dom/webidls/XRReferenceSpace.webidl
index ad9bd41659c..aad31702f01 100644
--- a/components/script/dom/webidls/XRReferenceSpace.webidl
+++ b/components/script/dom/webidls/XRReferenceSpace.webidl
@@ -14,7 +14,7 @@ enum XRReferenceSpaceType {
"unbounded"
};
-[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_enabled"]
interface XRReferenceSpace : XRSpace {
[NewObject] XRReferenceSpace getOffsetReferenceSpace(XRRigidTransform originOffset);
diff --git a/components/script/dom/webidls/XRReferenceSpaceEvent.webidl b/components/script/dom/webidls/XRReferenceSpaceEvent.webidl
index a15e7aba316..b9075294d1e 100644
--- a/components/script/dom/webidls/XRReferenceSpaceEvent.webidl
+++ b/components/script/dom/webidls/XRReferenceSpaceEvent.webidl
@@ -6,7 +6,7 @@
// https://immersive-web.github.io/webxr/#xrreferencespaceevent-interface
-[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_enabled"]
interface XRReferenceSpaceEvent : Event {
[Throws] constructor(DOMString type, XRReferenceSpaceEventInit eventInitDict);
[SameObject] readonly attribute XRReferenceSpace referenceSpace;
diff --git a/components/script/dom/webidls/XRRenderState.webidl b/components/script/dom/webidls/XRRenderState.webidl
index d02ab20646a..ff91e0d2fea 100644
--- a/components/script/dom/webidls/XRRenderState.webidl
+++ b/components/script/dom/webidls/XRRenderState.webidl
@@ -14,7 +14,7 @@ dictionary XRRenderStateInit {
sequence<XRLayer>? layers;
};
-[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"] interface XRRenderState {
+[SecureContext, Exposed=Window, Pref="dom_webxr_enabled"] interface XRRenderState {
readonly attribute double depthNear;
readonly attribute double depthFar;
readonly attribute double? inlineVerticalFieldOfView;
diff --git a/components/script/dom/webidls/XRRigidTransform.webidl b/components/script/dom/webidls/XRRigidTransform.webidl
index 85fb73509fe..11fbf9615b7 100644
--- a/components/script/dom/webidls/XRRigidTransform.webidl
+++ b/components/script/dom/webidls/XRRigidTransform.webidl
@@ -6,7 +6,7 @@
// https://immersive-web.github.io/webxr/#xrrigidtransform-interface
-[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_enabled"]
interface XRRigidTransform {
[Throws] constructor(optional DOMPointInit position = {}, optional DOMPointInit orientation = {});
readonly attribute DOMPointReadOnly position;
diff --git a/components/script/dom/webidls/XRSession.webidl b/components/script/dom/webidls/XRSession.webidl
index a214d6aa133..ccd72b187c6 100644
--- a/components/script/dom/webidls/XRSession.webidl
+++ b/components/script/dom/webidls/XRSession.webidl
@@ -25,7 +25,7 @@ enum XRInteractionMode {
callback XRFrameRequestCallback = undefined (DOMHighResTimeStamp time, XRFrame frame);
-[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_enabled"]
interface XRSession : EventTarget {
// Attributes
readonly attribute XRVisibilityState visibilityState;
diff --git a/components/script/dom/webidls/XRSessionEvent.webidl b/components/script/dom/webidls/XRSessionEvent.webidl
index 19ddd9e1b95..4e48f0c6c5c 100644
--- a/components/script/dom/webidls/XRSessionEvent.webidl
+++ b/components/script/dom/webidls/XRSessionEvent.webidl
@@ -6,7 +6,7 @@
// https://immersive-web.github.io/webxr/#xrsessionevent-interface
-[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_enabled"]
interface XRSessionEvent : Event {
[Throws] constructor(DOMString type, XRSessionEventInit eventInitDict);
[SameObject] readonly attribute XRSession session;
diff --git a/components/script/dom/webidls/XRSpace.webidl b/components/script/dom/webidls/XRSpace.webidl
index 3f85f4e4a52..236c9164402 100644
--- a/components/script/dom/webidls/XRSpace.webidl
+++ b/components/script/dom/webidls/XRSpace.webidl
@@ -6,7 +6,7 @@
// https://immersive-web.github.io/webxr/#xrspace-interface
-[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_enabled"]
interface XRSpace : EventTarget {
// XRRigidTransform? getTransformTo(XRSpace other);
};
diff --git a/components/script/dom/webidls/XRSubImage.webidl b/components/script/dom/webidls/XRSubImage.webidl
index 109ee39513b..3e8efdb24d7 100644
--- a/components/script/dom/webidls/XRSubImage.webidl
+++ b/components/script/dom/webidls/XRSubImage.webidl
@@ -5,7 +5,7 @@
// skip-unless CARGO_FEATURE_WEBXR
// https://immersive-web.github.io/layers/#xrsubimagetype
-[SecureContext, Exposed=Window, Pref="dom.webxr.layers.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_layers_enabled"]
interface XRSubImage {
[SameObject] readonly attribute XRViewport viewport;
};
diff --git a/components/script/dom/webidls/XRSystem.webidl b/components/script/dom/webidls/XRSystem.webidl
index 41682865cd4..ef5537ebdac 100644
--- a/components/script/dom/webidls/XRSystem.webidl
+++ b/components/script/dom/webidls/XRSystem.webidl
@@ -5,7 +5,7 @@
// skip-unless CARGO_FEATURE_WEBXR
// https://immersive-web.github.io/webxr/#xrsystem-interface
-[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_enabled"]
interface XRSystem: EventTarget {
// Methods
Promise<boolean> isSessionSupported(XRSessionMode mode);
@@ -17,7 +17,7 @@ interface XRSystem: EventTarget {
[SecureContext]
partial interface Navigator {
- [SameObject, Pref="dom.webxr.enabled"] readonly attribute XRSystem xr;
+ [SameObject, Pref="dom_webxr_enabled"] readonly attribute XRSystem xr;
};
enum XRSessionMode {
@@ -33,5 +33,5 @@ dictionary XRSessionInit {
partial interface XRSystem {
// https://github.com/immersive-web/webxr-test-api/
- [SameObject, Pref="dom.webxr.test"] readonly attribute XRTest test;
+ [SameObject, Pref="dom_webxr_test"] readonly attribute XRTest test;
};
diff --git a/components/script/dom/webidls/XRTest.webidl b/components/script/dom/webidls/XRTest.webidl
index 2421f873976..710d3520249 100644
--- a/components/script/dom/webidls/XRTest.webidl
+++ b/components/script/dom/webidls/XRTest.webidl
@@ -6,7 +6,7 @@
// https://github.com/immersive-web/webxr-test-api/
-[Exposed=Window, Pref="dom.webxr.test"]
+[Exposed=Window, Pref="dom_webxr_test"]
interface XRTest {
// Simulates connecting a device to the system.
// Used to instantiate a fake device for use in tests.
diff --git a/components/script/dom/webidls/XRView.webidl b/components/script/dom/webidls/XRView.webidl
index 2050afe028a..235eb5a6b2b 100644
--- a/components/script/dom/webidls/XRView.webidl
+++ b/components/script/dom/webidls/XRView.webidl
@@ -12,7 +12,7 @@ enum XREye {
"none",
};
-[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_enabled"]
interface XRView {
readonly attribute XREye eye;
readonly attribute Float32Array projectionMatrix;
diff --git a/components/script/dom/webidls/XRViewerPose.webidl b/components/script/dom/webidls/XRViewerPose.webidl
index 06274c3dfeb..82f57571f8f 100644
--- a/components/script/dom/webidls/XRViewerPose.webidl
+++ b/components/script/dom/webidls/XRViewerPose.webidl
@@ -6,7 +6,7 @@
// https://immersive-web.github.io/webxr/#xrviewerpose-interface
-[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_enabled"]
interface XRViewerPose : XRPose {
// readonly attribute FrozenArray<XRView> views;
// workaround until we have FrozenArray
diff --git a/components/script/dom/webidls/XRViewport.webidl b/components/script/dom/webidls/XRViewport.webidl
index 079c2d11e2d..4fc6c7afd86 100644
--- a/components/script/dom/webidls/XRViewport.webidl
+++ b/components/script/dom/webidls/XRViewport.webidl
@@ -6,7 +6,7 @@
// https://immersive-web.github.io/webxr/#xrviewport-interface
-[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_enabled"]
interface XRViewport {
readonly attribute long x;
readonly attribute long y;
diff --git a/components/script/dom/webidls/XRWebGLBinding.webidl b/components/script/dom/webidls/XRWebGLBinding.webidl
index 5bcb4b381fa..121c2c1db86 100644
--- a/components/script/dom/webidls/XRWebGLBinding.webidl
+++ b/components/script/dom/webidls/XRWebGLBinding.webidl
@@ -5,7 +5,7 @@
// skip-unless CARGO_FEATURE_WEBXR
// https://immersive-web.github.io/layers/#XRWebGLBindingtype
-[SecureContext, Exposed=Window, Pref="dom.webxr.layers.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_layers_enabled"]
interface XRWebGLBinding {
[Throws] constructor(XRSession session, XRWebGLRenderingContext context);
diff --git a/components/script/dom/webidls/XRWebGLLayer.webidl b/components/script/dom/webidls/XRWebGLLayer.webidl
index c3bd54b3d03..e69033fcd2a 100644
--- a/components/script/dom/webidls/XRWebGLLayer.webidl
+++ b/components/script/dom/webidls/XRWebGLLayer.webidl
@@ -18,7 +18,7 @@ dictionary XRWebGLLayerInit {
double framebufferScaleFactor = 1.0;
};
-[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_enabled"]
interface XRWebGLLayer: XRLayer {
[Throws] constructor(XRSession session,
XRWebGLRenderingContext context,
@@ -40,5 +40,5 @@ interface XRWebGLLayer: XRLayer {
};
partial interface mixin WebGLRenderingContextBase {
- [Pref="dom.webxr.enabled"] Promise<undefined> makeXRCompatible();
+ [Pref="dom_webxr_enabled"] Promise<undefined> makeXRCompatible();
};
diff --git a/components/script/dom/webidls/XRWebGLSubImage.webidl b/components/script/dom/webidls/XRWebGLSubImage.webidl
index d93f12ff4c5..83ccdd91166 100644
--- a/components/script/dom/webidls/XRWebGLSubImage.webidl
+++ b/components/script/dom/webidls/XRWebGLSubImage.webidl
@@ -5,7 +5,7 @@
// skip-unless CARGO_FEATURE_WEBXR
// https://immersive-web.github.io/layers/#xrwebglsubimagetype
-[SecureContext, Exposed=Window, Pref="dom.webxr.layers.enabled"]
+[SecureContext, Exposed=Window, Pref="dom_webxr_layers_enabled"]
interface XRWebGLSubImage : XRSubImage {
[SameObject] readonly attribute WebGLTexture colorTexture;
[SameObject] readonly attribute WebGLTexture? depthStencilTexture;
diff --git a/components/script/dom/webxr/xrsystem.rs b/components/script/dom/webxr/xrsystem.rs
index 82736d540e9..f5f50ab93f1 100644
--- a/components/script/dom/webxr/xrsystem.rs
+++ b/components/script/dom/webxr/xrsystem.rs
@@ -168,7 +168,7 @@ impl XRSystemMethods<crate::DomTypeHolder> for XRSystem {
if mode != XRSessionMode::Inline {
if !ScriptThread::is_user_interacting() {
- if pref!(dom.webxr.unsafe_assume_user_intent) {
+ if pref!(dom_webxr_unsafe_assume_user_intent) {
warn!("The dom.webxr.unsafe-assume-user-intent preference assumes user intent to enter WebXR.");
} else {
promise.reject_error(Error::Security);
@@ -232,7 +232,7 @@ impl XRSystemMethods<crate::DomTypeHolder> for XRSystem {
let init = SessionInit {
required_features,
optional_features,
- first_person_observer_view: pref!(dom.webxr.first_person_observer_view),
+ first_person_observer_view: pref!(dom_webxr_first_person_observer_view),
};
let mut trusted = Some(TrustedPromise::new(promise.clone()));
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs
index 2b79e923590..41fd03f3996 100644
--- a/components/script/dom/window.rs
+++ b/components/script/dom/window.rs
@@ -802,7 +802,7 @@ impl WindowMethods<crate::DomTypeHolder> for Window {
// https://html.spec.whatwg.org/multipage/#script-closable
let is_script_closable = (self.is_top_level() && history_length == 1) ||
is_auxiliary ||
- pref!(dom.allow_scripts_to_close_windows);
+ pref!(dom_allow_scripts_to_close_windows);
// TODO: rest of Step 3:
// Is the incumbent settings object's responsible browsing context familiar with current?
diff --git a/components/script/init.rs b/components/script/init.rs
index 324714a3831..f2e88f6ea1a 100644
--- a/components/script/init.rs
+++ b/components/script/init.rs
@@ -62,7 +62,7 @@ unsafe extern "C" fn is_dom_object(obj: *mut JSObject) -> bool {
#[allow(unsafe_code)]
pub fn init() -> JSEngineSetup {
unsafe {
- if pref!(js.disable_jit) {
+ if pref!(js_disable_jit) {
js::jsapi::DisableJitBackend();
}
proxyhandler::init();
diff --git a/components/script/script_runtime.rs b/components/script/script_runtime.rs
index 5f084685445..910e1ba0ef7 100644
--- a/components/script/script_runtime.rs
+++ b/components/script/script_runtime.rs
@@ -615,24 +615,24 @@ impl Runtime {
JS_SetGlobalJitCompilerOption(
cx,
JSJitCompilerOption::JSJITCOMPILER_BASELINE_INTERPRETER_ENABLE,
- pref!(js.baseline_interpreter.enabled) as u32,
+ pref!(js_baseline_interpreter_enabled) as u32,
);
JS_SetGlobalJitCompilerOption(
cx,
JSJitCompilerOption::JSJITCOMPILER_BASELINE_ENABLE,
- pref!(js.baseline_jit.enabled) as u32,
+ pref!(js_baseline_jit_enabled) as u32,
);
JS_SetGlobalJitCompilerOption(
cx,
JSJitCompilerOption::JSJITCOMPILER_ION_ENABLE,
- pref!(js.ion.enabled) as u32,
+ pref!(js_ion_enabled) as u32,
);
- cx_opts.compileOptions_.asmJSOption_ = if pref!(js.asmjs.enabled) {
+ cx_opts.compileOptions_.asmJSOption_ = if pref!(js_asmjs_enabled) {
AsmJSOption::Enabled
} else {
AsmJSOption::DisabledByAsmJSPref
};
- let wasm_enabled = pref!(js.wasm.enabled);
+ let wasm_enabled = pref!(js_wasm_enabled);
cx_opts.set_wasm_(wasm_enabled);
if wasm_enabled {
// If WASM is enabled without setting the buildIdOp,
@@ -640,20 +640,20 @@ impl Runtime {
// https://dxr.mozilla.org/mozilla-central/source/js/src/wasm/WasmTypes.cpp#458
SetProcessBuildIdOp(Some(servo_build_id));
}
- cx_opts.set_wasmBaseline_(pref!(js.wasm.baseline.enabled));
- cx_opts.set_wasmIon_(pref!(js.wasm.ion.enabled));
+ cx_opts.set_wasmBaseline_(pref!(js_wasm_baseline_enabled));
+ cx_opts.set_wasmIon_(pref!(js_wasm_ion_enabled));
// TODO: handle js.throw_on_asmjs_validation_failure (needs new Spidermonkey)
JS_SetGlobalJitCompilerOption(
cx,
JSJitCompilerOption::JSJITCOMPILER_NATIVE_REGEXP_ENABLE,
- pref!(js.native_regex.enabled) as u32,
+ pref!(js_native_regex_enabled) as u32,
);
- JS_SetParallelParsingEnabled(cx, pref!(js.parallel_parsing.enabled));
- JS_SetOffthreadIonCompilationEnabled(cx, pref!(js.offthread_compilation.enabled));
+ JS_SetParallelParsingEnabled(cx, pref!(js_parallel_parsing_enabled));
+ JS_SetOffthreadIonCompilationEnabled(cx, pref!(js_offthread_compilation_enabled));
JS_SetGlobalJitCompilerOption(
cx,
JSJitCompilerOption::JSJITCOMPILER_BASELINE_WARMUP_TRIGGER,
- if pref!(js.baseline_jit.unsafe_eager_compilation.enabled) {
+ if pref!(js_baseline_jit_unsafe_eager_compilation_enabled) {
0
} else {
u32::MAX
@@ -662,7 +662,7 @@ impl Runtime {
JS_SetGlobalJitCompilerOption(
cx,
JSJitCompilerOption::JSJITCOMPILER_ION_NORMAL_WARMUP_TRIGGER,
- if pref!(js.ion.unsafe_eager_compilation.enabled) {
+ if pref!(js_ion_unsafe_eager_compilation_enabled) {
0
} else {
u32::MAX
@@ -676,7 +676,7 @@ impl Runtime {
JS_SetGCParameter(
cx,
JSGCParamKey::JSGC_MAX_BYTES,
- in_range(pref!(js.mem.max), 1, 0x100)
+ in_range(pref!(js_mem_max), 1, 0x100)
.map(|val| (val * 1024 * 1024) as u32)
.unwrap_or(u32::MAX),
);
@@ -684,49 +684,49 @@ impl Runtime {
JS_SetGCParameter(
cx,
JSGCParamKey::JSGC_INCREMENTAL_GC_ENABLED,
- pref!(js.mem.gc.incremental.enabled) as u32,
+ pref!(js_mem_gc_incremental_enabled) as u32,
);
JS_SetGCParameter(
cx,
JSGCParamKey::JSGC_PER_ZONE_GC_ENABLED,
- pref!(js.mem.gc.per_zone.enabled) as u32,
+ pref!(js_mem_gc_per_zone_enabled) as u32,
);
- if let Some(val) = in_range(pref!(js.mem.gc.incremental.slice_ms), 0, 100_000) {
+ if let Some(val) = in_range(pref!(js_mem_gc_incremental_slice_ms), 0, 100_000) {
JS_SetGCParameter(cx, JSGCParamKey::JSGC_SLICE_TIME_BUDGET_MS, val as u32);
}
JS_SetGCParameter(
cx,
JSGCParamKey::JSGC_COMPACTING_ENABLED,
- pref!(js.mem.gc.compacting.enabled) as u32,
+ pref!(js_mem_gc_compacting_enabled) as u32,
);
- if let Some(val) = in_range(pref!(js.mem.gc.high_frequency_time_limit_ms), 0, 10_000) {
+ if let Some(val) = in_range(pref!(js_mem_gc_high_frequency_time_limit_ms), 0, 10_000) {
JS_SetGCParameter(cx, JSGCParamKey::JSGC_HIGH_FREQUENCY_TIME_LIMIT, val as u32);
}
- if let Some(val) = in_range(pref!(js.mem.gc.low_frequency_heap_growth), 0, 10_000) {
+ if let Some(val) = in_range(pref!(js_mem_gc_low_frequency_heap_growth), 0, 10_000) {
JS_SetGCParameter(cx, JSGCParamKey::JSGC_LOW_FREQUENCY_HEAP_GROWTH, val as u32);
}
- if let Some(val) = in_range(pref!(js.mem.gc.high_frequency_heap_growth_min), 0, 10_000) {
+ if let Some(val) = in_range(pref!(js_mem_gc_high_frequency_heap_growth_min), 0, 10_000) {
JS_SetGCParameter(
cx,
JSGCParamKey::JSGC_HIGH_FREQUENCY_LARGE_HEAP_GROWTH,
val as u32,
);
}
- if let Some(val) = in_range(pref!(js.mem.gc.high_frequency_heap_growth_max), 0, 10_000) {
+ if let Some(val) = in_range(pref!(js_mem_gc_high_frequency_heap_growth_max), 0, 10_000) {
JS_SetGCParameter(
cx,
JSGCParamKey::JSGC_HIGH_FREQUENCY_SMALL_HEAP_GROWTH,
val as u32,
);
}
- if let Some(val) = in_range(pref!(js.mem.gc.high_frequency_low_limit_mb), 0, 10_000) {
+ if let Some(val) = in_range(pref!(js_mem_gc_high_frequency_low_limit_mb), 0, 10_000) {
JS_SetGCParameter(cx, JSGCParamKey::JSGC_SMALL_HEAP_SIZE_MAX, val as u32);
}
- if let Some(val) = in_range(pref!(js.mem.gc.high_frequency_high_limit_mb), 0, 10_000) {
+ if let Some(val) = in_range(pref!(js_mem_gc_high_frequency_high_limit_mb), 0, 10_000) {
JS_SetGCParameter(cx, JSGCParamKey::JSGC_LARGE_HEAP_SIZE_MIN, val as u32);
}
- /*if let Some(val) = in_range(pref!(js.mem.gc.allocation_threshold_factor), 0, 10_000) {
+ /*if let Some(val) = in_range(pref!(js_mem_gc_allocation_threshold_factor), 0, 10_000) {
JS_SetGCParameter(cx, JSGCParamKey::JSGC_NON_INCREMENTAL_FACTOR, val as u32);
}*/
/*
@@ -736,10 +736,10 @@ impl Runtime {
// JSGC_LARGE_HEAP_INCREMENTAL_LIMIT
pref("javascript.options.mem.gc_large_heap_incremental_limit", 110);
*/
- if let Some(val) = in_range(pref!(js.mem.gc.empty_chunk_count_min), 0, 10_000) {
+ if let Some(val) = in_range(pref!(js_mem_gc_empty_chunk_count_min), 0, 10_000) {
JS_SetGCParameter(cx, JSGCParamKey::JSGC_MIN_EMPTY_CHUNK_COUNT, val as u32);
}
- if let Some(val) = in_range(pref!(js.mem.gc.empty_chunk_count_max), 0, 10_000) {
+ if let Some(val) = in_range(pref!(js_mem_gc_empty_chunk_count_max), 0, 10_000) {
JS_SetGCParameter(cx, JSGCParamKey::JSGC_MAX_EMPTY_CHUNK_COUNT, val as u32);
}
@@ -911,11 +911,11 @@ unsafe extern "C" fn servo_build_id(build_id: *mut BuildIdCharVector) -> bool {
unsafe fn set_gc_zeal_options(cx: *mut RawJSContext) {
use js::jsapi::SetGCZeal;
- let level = match pref!(js.mem.gc.zeal.level) {
+ let level = match pref!(js_mem_gc_zeal_level) {
level @ 0..=14 => level as u8,
_ => return,
};
- let frequency = match pref!(js.mem.gc.zeal.frequency) {
+ let frequency = match pref!(js_mem_gc_zeal_frequency) {
frequency if frequency >= 0 => frequency as u32,
// https://searchfox.org/mozilla-esr128/source/js/public/GCAPI.h#1392
_ => 5000,
diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs
index a4704cb2b42..0cf14937c4c 100644
--- a/components/script/script_thread.rs
+++ b/components/script/script_thread.rs
@@ -2794,7 +2794,7 @@ impl ScriptThread {
self.background_hang_monitor.unregister();
// If we're in multiprocess mode, shut-down the IPC router for this process.
- if opts::multiprocess() {
+ if opts::get().multiprocess {
debug!("Exiting IPC router thread in script thread.");
ROUTER.shutdown();
}
diff --git a/components/script/serviceworker_manager.rs b/components/script/serviceworker_manager.rs
index 9f1ad777110..23723ca39df 100644
--- a/components/script/serviceworker_manager.rs
+++ b/components/script/serviceworker_manager.rs
@@ -517,5 +517,5 @@ impl ServiceWorkerManagerFactory for ServiceWorkerManager {
}
pub(crate) fn serviceworker_enabled() -> bool {
- pref!(dom.serviceworker.enabled)
+ pref!(dom_serviceworker_enabled)
}
diff --git a/components/script/timers.rs b/components/script/timers.rs
index 9999dac01d7..60b079ebcf8 100644
--- a/components/script/timers.rs
+++ b/components/script/timers.rs
@@ -237,7 +237,7 @@ impl OneshotTimers {
}
pub(crate) fn slow_down(&self) {
- let min_duration_ms = pref!(js.timers.minimum_duration) as u64;
+ let min_duration_ms = pref!(js_timers_minimum_duration) as u64;
self.js_timers
.set_min_duration(Duration::from_millis(min_duration_ms));
}
diff --git a/components/servo/lib.rs b/components/servo/lib.rs
index 93f51c318eb..d9b2e560fba 100644
--- a/components/servo/lib.rs
+++ b/components/servo/lib.rs
@@ -78,6 +78,8 @@ use profile_traits::{mem, time};
use script::{JSEngineSetup, ServiceWorkerManager};
use script_layout_interface::LayoutFactory;
use script_traits::{ScriptToConstellationChan, WindowSizeData};
+use servo_config::opts::Opts;
+use servo_config::prefs::Preferences;
use servo_config::{opts, pref, prefs};
use servo_media::player::context::GlContext;
use servo_media::ServoMedia;
@@ -232,6 +234,8 @@ where
)]
#[allow(clippy::new_ret_no_self)]
pub fn new(
+ opts: Opts,
+ preferences: Preferences,
rendering_context: RenderingContext,
mut embedder: Box<dyn EmbedderMethods>,
window: Rc<Window>,
@@ -239,8 +243,13 @@ where
composite_target: CompositeTarget,
) -> Servo<Window> {
// Global configuration options, parsed from the command line.
+ opts::set_options(opts);
let opts = opts::get();
+ // Set the preferences globally.
+ // TODO: It would be better to make these private to a particular Servo instance.
+ servo_config::prefs::set(preferences);
+
use std::sync::atomic::Ordering;
style::context::DEFAULT_DISABLE_STYLE_SHARING_CACHE
@@ -309,9 +318,9 @@ where
);
let mem_profiler_chan = profile_mem::Profiler::create(opts.mem_profiler_period);
- let devtools_sender = if opts.devtools_server_enabled {
+ let devtools_sender = if pref!(devtools_server_enabled) {
Some(devtools::start_server(
- opts.devtools_port,
+ pref!(devtools_server_port) as u16,
embedder_proxy.clone(),
))
} else {
@@ -330,7 +339,7 @@ where
);
let render_notifier = Box::new(RenderNotifier::new(compositor_proxy.clone()));
- let clear_color = servo_config::pref!(shell.background_color.rgba);
+ let clear_color = servo_config::pref!(shell_background_color_rgba);
let clear_color = ColorF::new(
clear_color[0] as f32,
clear_color[1] as f32,
@@ -346,8 +355,8 @@ where
};
let worker_threads = thread::available_parallelism()
.map(|i| i.get())
- .unwrap_or(pref!(threadpools.fallback_worker_num) as usize)
- .min(pref!(threadpools.webrender_workers.max).max(1) as usize);
+ .unwrap_or(pref!(threadpools_fallback_worker_num) as usize)
+ .min(pref!(threadpools_webrender_workers_max).max(1) as usize);
let workers = Some(Arc::new(
rayon::ThreadPoolBuilder::new()
.num_threads(worker_threads)
@@ -372,9 +381,9 @@ where
} else {
ShaderPrecacheFlags::empty()
},
- enable_subpixel_aa: pref!(gfx.subpixel_text_antialiasing.enabled) &&
+ enable_subpixel_aa: pref!(gfx_subpixel_text_antialiasing_enabled) &&
!opts.debug.disable_subpixel_text_antialiasing,
- allow_texture_swizzling: pref!(gfx.texture_swizzling.enabled),
+ allow_texture_swizzling: pref!(gfx_texture_swizzling_enabled),
clear_color,
upload_method,
workers,
@@ -427,7 +436,7 @@ where
webxr::MainThreadRegistry::new(event_loop_waker, webxr_layer_grand_manager)
.expect("Failed to create WebXR device registry");
#[cfg(feature = "webxr")]
- if pref!(dom.webxr.enabled) {
+ if pref!(dom_webxr_enabled) {
embedder.register_webxr(&mut webxr_main_thread, embedder_proxy.clone());
}
@@ -587,7 +596,7 @@ where
external_images: Arc<Mutex<WebrenderExternalImageRegistry>>,
rendering_context: &RenderingContext,
) -> (WindowGLContext, Option<GLPlayerThreads>) {
- if !pref!(media.glvideo.enabled) {
+ if !pref!(media_glvideo_enabled) {
return (
WindowGLContext {
gl_context: GlContext::Unknown,
@@ -1192,7 +1201,7 @@ pub fn run_content_process(token: String) {
let unprivileged_content = unprivileged_content_receiver.recv().unwrap();
opts::set_options(unprivileged_content.opts());
- prefs::add_user_prefs(unprivileged_content.prefs());
+ prefs::set(unprivileged_content.prefs().clone());
// Enter the sandbox if necessary.
if opts::get().sandbox {
diff --git a/components/shared/canvas/webgl.rs b/components/shared/canvas/webgl.rs
index 4fb5691fd58..8bd1d9cd440 100644
--- a/components/shared/canvas/webgl.rs
+++ b/components/shared/canvas/webgl.rs
@@ -33,7 +33,7 @@ pub fn webgl_channel<T>() -> Option<(WebGLSender<T>, WebGLReceiver<T>)>
where
T: for<'de> Deserialize<'de> + Serialize,
{
- base::generic_channel::channel(servo_config::opts::multiprocess())
+ base::generic_channel::channel(servo_config::opts::get().multiprocess)
}
/// Entry point channel type used for sending WebGLMsg messages to the WebGL renderer.
diff --git a/components/shared/embedder/resources.rs b/components/shared/embedder/resources.rs
index 9fdb8548135..a29abf5328b 100644
--- a/components/shared/embedder/resources.rs
+++ b/components/shared/embedder/resources.rs
@@ -55,9 +55,6 @@ pub fn sandbox_access_files_dirs() -> Vec<PathBuf> {
}
pub enum Resource {
- /// A json file of `servo_config::pref_util::Preferences` configuration.
- /// It can be empty but lots of features will be disabled.
- Preferences,
/// A list of GATT services that are blocked from being used by web bluetooth.
/// The format of the file is a list of UUIDs, one per line, with an optional second word to specify the
/// type of blocklist.
@@ -121,7 +118,6 @@ pub enum Resource {
impl Resource {
pub fn filename(&self) -> &'static str {
match self {
- Resource::Preferences => "prefs.json",
Resource::BluetoothBlocklist => "gatt_blocklist.txt",
Resource::DomainList => "public_domains.txt",
Resource::HstsPreloadList => "hsts_preload.json",
@@ -164,7 +160,6 @@ fn resources_for_tests() -> Box<dyn ResourceReaderMethods + Sync + Send> {
}
fn read(&self, file: Resource) -> Vec<u8> {
match file {
- Resource::Preferences => &include_bytes!("../../../resources/prefs.json")[..],
Resource::BluetoothBlocklist => {
&include_bytes!("../../../resources/gatt_blocklist.txt")[..]
},
diff --git a/components/webdriver_server/lib.rs b/components/webdriver_server/lib.rs
index 74b0a0b8f23..c99cd726275 100644
--- a/components/webdriver_server/lib.rs
+++ b/components/webdriver_server/lib.rs
@@ -41,8 +41,7 @@ use serde::de::{Deserializer, MapAccess, Visitor};
use serde::ser::Serializer;
use serde::{Deserialize, Serialize};
use serde_json::{json, Value};
-use servo_config::prefs;
-use servo_config::prefs::PrefValue;
+use servo_config::prefs::{self, PrefValue, Preferences};
use servo_url::ServoUrl;
use style_traits::CSSPixel;
use uuid::Uuid;
@@ -295,7 +294,6 @@ impl Serialize for WebDriverPrefValue {
PrefValue::Str(ref s) => serializer.serialize_str(s),
PrefValue::Float(f) => serializer.serialize_f64(f),
PrefValue::Int(i) => serializer.serialize_i64(i),
- PrefValue::Missing => serializer.serialize_unit(),
PrefValue::Array(ref v) => v
.iter()
.map(|value| WebDriverPrefValue(value.clone()))
@@ -1759,7 +1757,7 @@ impl Handler {
.map(|item| {
(
item.clone(),
- serde_json::to_value(prefs::pref_map().get(item)).unwrap(),
+ serde_json::to_value(prefs::get().get_value(item)).unwrap(),
)
})
.collect::<BTreeMap<_, _>>();
@@ -1773,12 +1771,12 @@ impl Handler {
&self,
parameters: &SetPrefsParameters,
) -> WebDriverResult<WebDriverResponse> {
+ let mut current_preferences = prefs::get().clone();
for (key, value) in parameters.prefs.iter() {
- prefs::set_stylo_pref(key, value.0.clone());
- prefs::pref_map()
- .set(key, value.0.clone())
- .expect("Failed to set preference");
+ current_preferences.set_value(key, value.0.clone());
}
+ prefs::set(current_preferences);
+
Ok(WebDriverResponse::Void)
}
@@ -1786,27 +1784,29 @@ impl Handler {
&self,
parameters: &GetPrefsParameters,
) -> WebDriverResult<WebDriverResponse> {
- let prefs = if parameters.prefs.is_empty() {
- //TODO: support resetting stylo preferences
- prefs::pref_map().reset_all();
- BTreeMap::new()
+ let (new_preferences, map) = if parameters.prefs.is_empty() {
+ (Preferences::default(), BTreeMap::new())
} else {
- parameters
+ // If we only want to reset some of the preferences.
+ let mut new_preferences = prefs::get().clone();
+ let default_preferences = Preferences::default();
+ for key in parameters.prefs.iter() {
+ new_preferences.set_value(key, default_preferences.get_value(key))
+ }
+
+ let map = parameters
.prefs
.iter()
- .map(|item| {
- (
- item.clone(),
- serde_json::to_value(
- prefs::pref_map().reset(item).unwrap_or(PrefValue::Missing),
- )
- .unwrap(),
- )
- })
- .collect::<BTreeMap<_, _>>()
+ .map(|item| (item.clone(), new_preferences.get_value(item)))
+ .collect::<BTreeMap<_, _>>();
+
+ (new_preferences, map)
};
+
+ prefs::set(new_preferences);
+
Ok(WebDriverResponse::Generic(ValueResponse(
- serde_json::to_value(prefs)?,
+ serde_json::to_value(map)?,
)))
}
}
diff --git a/components/webgpu/lib.rs b/components/webgpu/lib.rs
index 7d953d0ca6c..f67c55ab02e 100644
--- a/components/webgpu/lib.rs
+++ b/components/webgpu/lib.rs
@@ -44,7 +44,7 @@ impl WebGPU {
external_images: Arc<Mutex<WebrenderExternalImageRegistry>>,
wgpu_image_map: WGPUImageMap,
) -> Option<(Self, IpcReceiver<WebGPUMsg>)> {
- if !pref!(dom.webgpu.enabled) {
+ if !pref!(dom_webgpu_enabled) {
return None;
}
let (sender, receiver) = match ipc::channel() {
diff --git a/components/webgpu/wgpu_thread.rs b/components/webgpu/wgpu_thread.rs
index b2aa784754a..374fe2e8265 100644
--- a/components/webgpu/wgpu_thread.rs
+++ b/components/webgpu/wgpu_thread.rs
@@ -127,7 +127,7 @@ impl WGPU {
external_images: Arc<Mutex<WebrenderExternalImageRegistry>>,
wgpu_image_map: WGPUImageMap,
) -> Self {
- let backend_pref = pref!(dom.webgpu.wgpu_backend);
+ let backend_pref = pref!(dom_webgpu_wgpu_backend);
let backends = if backend_pref.is_empty() {
wgt::Backends::PRIMARY
} else {
diff --git a/ports/servoshell/Cargo.toml b/ports/servoshell/Cargo.toml
index af50b5ebc6f..835c854ecfd 100644
--- a/ports/servoshell/Cargo.toml
+++ b/ports/servoshell/Cargo.toml
@@ -56,6 +56,7 @@ webxr = ["dep:webxr", "libservo/webxr"]
webgpu = ["libservo/webgpu"]
[dependencies]
+euclid = { workspace = true }
libc = { workspace = true }
libservo = { path = "../../components/servo" }
cfg-if = { workspace = true }
@@ -104,10 +105,10 @@ webxr = { workspace = true, optional = true }
# For optional feature servo_allocator/use-system-allocator
servo_allocator = { path = "../../components/allocator" }
arboard = { version = "3" }
+dirs = "5.0"
egui = { version = "0.30.0" }
egui_glow = { version = "0.30.0", features = ["winit"] }
egui-winit = { version = "0.30.0", default-features = false, features = ["clipboard", "wayland"] }
-euclid = { workspace = true }
gilrs = "0.11.0"
gleam = { workspace = true }
glow = "0.16.0"
@@ -116,6 +117,7 @@ http = { workspace = true }
net = { path = "../../components/net" }
net_traits = { workspace = true }
raw-window-handle = "0.6"
+serde_json = { workspace = true }
shellwords = "1.0.0"
surfman = { workspace = true, features = ["sm-x11", "sm-raw-window-handle-06"] }
tinyfiledialogs = "3.0"
diff --git a/ports/servoshell/desktop/app.rs b/ports/servoshell/desktop/app.rs
index b65d495ee50..8014b48cba3 100644
--- a/ports/servoshell/desktop/app.rs
+++ b/ports/servoshell/desktop/app.rs
@@ -15,7 +15,8 @@ use raw_window_handle::HasDisplayHandle;
use servo::base::id::WebViewId;
use servo::compositing::windowing::EmbedderEvent;
use servo::compositing::CompositeTarget;
-use servo::config::opts;
+use servo::config::opts::Opts;
+use servo::config::prefs::Preferences;
use servo::embedder_traits::EventLoopWaker;
use servo::servo_config::pref;
use servo::url::ServoUrl;
@@ -38,21 +39,22 @@ use crate::desktop::embedder::{EmbedderCallbacks, XrDiscovery};
use crate::desktop::tracing::trace_winit_event;
use crate::desktop::window_trait::WindowPortsMethods;
use crate::parser::get_default_url;
+use crate::prefs::ServoShellPreferences;
pub struct App {
+ opts: Opts,
+ preferences: Preferences,
+ servo_shell_preferences: ServoShellPreferences,
servo: Option<Servo<dyn WindowPortsMethods>>,
webviews: Option<WebViewManager<dyn WindowPortsMethods>>,
event_queue: Vec<EmbedderEvent>,
suspended: Cell<bool>,
windows: HashMap<WindowId, Rc<dyn WindowPortsMethods>>,
minibrowser: Option<Minibrowser>,
- user_agent: Option<String>,
waker: Box<dyn EventLoopWaker>,
initial_url: ServoUrl,
t_start: Instant,
t: Instant,
- do_not_use_native_titlebar: bool,
- device_pixel_ratio_override: Option<f32>,
}
enum Present {
@@ -73,38 +75,40 @@ enum PumpResult {
impl App {
pub fn new(
+ opts: Opts,
+ preferences: Preferences,
+ servo_shell_preferences: ServoShellPreferences,
events_loop: &EventsLoop,
- user_agent: Option<String>,
- url: Option<String>,
- do_not_use_native_titlebar: bool,
- device_pixel_ratio_override: Option<f32>,
) -> Self {
- // Handle browser state.
- let initial_url = get_default_url(url.as_deref(), env::current_dir().unwrap(), |path| {
- fs::metadata(path).is_ok()
- });
+ let initial_url = get_default_url(
+ servo_shell_preferences.url.as_deref(),
+ env::current_dir().unwrap(),
+ |path| fs::metadata(path).is_ok(),
+ &servo_shell_preferences,
+ );
+
let t = Instant::now();
App {
+ opts,
+ preferences,
+ servo_shell_preferences,
event_queue: vec![],
webviews: None,
servo: None,
suspended: Cell::new(false),
windows: HashMap::new(),
minibrowser: None,
- user_agent,
waker: events_loop.create_event_loop_waker(),
initial_url: initial_url.clone(),
t_start: t,
t,
- do_not_use_native_titlebar,
- device_pixel_ratio_override,
}
}
/// Initialize Application once event loop start running.
pub fn init(&mut self, event_loop: Option<&ActiveEventLoop>) {
// Create rendering context
- let rendering_context = if opts::get().headless {
+ let rendering_context = if self.opts.headless {
let connection = Connection::new().expect("Failed to create connection");
let adapter = connection
.create_software_adapter()
@@ -112,7 +116,7 @@ impl App {
RenderingContext::create(
&connection,
&adapter,
- Some(opts::get().initial_window_size.to_untyped().to_i32()),
+ Some(self.opts.initial_window_size.to_untyped().to_i32()),
)
.expect("Failed to create WR surfman")
} else {
@@ -129,18 +133,20 @@ impl App {
.expect("Failed to create WR surfman")
};
- let window = if opts::get().headless {
+ let window = if self.opts.headless {
headless_window::Window::new(
- opts::get().initial_window_size,
- self.device_pixel_ratio_override,
+ self.opts.initial_window_size,
+ self.servo_shell_preferences.device_pixel_ratio_override,
+ self.opts.screen_size_override,
)
} else {
Rc::new(headed_window::Window::new(
+ &self.opts,
&rendering_context,
- opts::get().initial_window_size,
+ self.opts.initial_window_size,
event_loop.unwrap(),
- self.do_not_use_native_titlebar,
- self.device_pixel_ratio_override,
+ self.servo_shell_preferences.no_native_titlebar,
+ self.servo_shell_preferences.device_pixel_ratio_override,
))
};
@@ -171,7 +177,7 @@ impl App {
self.event_queue.push(EmbedderEvent::Idle);
let (_, window) = self.windows.iter().next().unwrap();
- let xr_discovery = if pref!(dom.webxr.openxr.enabled) && !opts::get().headless {
+ let xr_discovery = if pref!(dom_webxr_openxr_enabled) && !self.opts.headless {
#[cfg(target_os = "windows")]
let openxr = {
let app_info = AppInfo::new("Servoshell", 0, "Servo", 0);
@@ -181,7 +187,7 @@ impl App {
let openxr = None;
openxr
- } else if pref!(dom.webxr.glwindow.enabled) && !opts::get().headless {
+ } else if pref!(dom_webxr_glwindow_enabled) && !self.opts.headless {
let window = window.new_glwindow(event_loop.unwrap());
Some(XrDiscovery::GlWindow(GlWindowDiscovery::new(window)))
} else {
@@ -198,10 +204,12 @@ impl App {
CompositeTarget::Window
};
let mut servo = Servo::new(
+ self.opts.clone(),
+ self.preferences.clone(),
rendering_context,
embedder,
window.clone(),
- self.user_agent.clone(),
+ self.servo_shell_preferences.user_agent.clone(),
composite_target,
);
@@ -243,7 +251,7 @@ impl App {
// If the Gamepad API is enabled, handle gamepad events from GilRs.
// Checking for focused_webview_id should ensure we'll have a valid browsing context.
- if pref!(dom.gamepad.enabled) && webviews.focused_webview_id().is_some() {
+ if pref!(dom_gamepad_enabled) && webviews.focused_webview_id().is_some() {
webviews.handle_gamepad_events();
}
@@ -254,7 +262,7 @@ impl App {
let mut need_update = false;
loop {
// Consume and handle those embedder messages.
- let servo_event_response = webviews.handle_servo_events(embedder_messages);
+ let servo_event_response = webviews.handle_servo_events(&self.opts, embedder_messages);
need_present |= servo_event_response.need_present;
need_update |= servo_event_response.need_update;
@@ -524,7 +532,11 @@ impl ApplicationHandler<WakerEvent> for App {
if let Some(ref minibrowser) = self.minibrowser {
let webviews = &mut self.webviews.as_mut().unwrap();
let app_event_queue = &mut self.event_queue;
- minibrowser.queue_embedder_events_for_minibrowser_events(webviews, app_event_queue);
+ minibrowser.queue_embedder_events_for_minibrowser_events(
+ webviews,
+ app_event_queue,
+ &self.servo_shell_preferences,
+ );
}
self.handle_events_with_winit(event_loop, window);
@@ -565,7 +577,11 @@ impl ApplicationHandler<WakerEvent> for App {
if let Some(ref minibrowser) = self.minibrowser {
let webviews = &mut self.webviews.as_mut().unwrap();
let app_event_queue = &mut self.event_queue;
- minibrowser.queue_embedder_events_for_minibrowser_events(webviews, app_event_queue);
+ minibrowser.queue_embedder_events_for_minibrowser_events(
+ webviews,
+ app_event_queue,
+ &self.servo_shell_preferences,
+ );
}
self.handle_events_with_winit(event_loop, window);
diff --git a/ports/servoshell/desktop/cli.rs b/ports/servoshell/desktop/cli.rs
index ff9315a4bb9..1241e4e2af3 100644
--- a/ports/servoshell/desktop/cli.rs
+++ b/ports/servoshell/desktop/cli.rs
@@ -2,16 +2,12 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-use std::{env, panic, process};
-
-use getopts::Options;
-use log::error;
-use servo::config::opts::{self, ArgumentParsingResult};
-use servo::servo_config::pref;
+use std::{env, panic};
use crate::desktop::app::App;
use crate::desktop::events_loop::EventsLoop;
use crate::panic_hook;
+use crate::prefs::{parse_command_line_arguments, ArgumentParsingResult};
pub fn main() {
crate::crash_handler::install();
@@ -19,98 +15,23 @@ pub fn main() {
crate::init_crypto();
crate::resources::init();
- // Parse the command line options and store them globally
- let args: Vec<String> = env::args().collect();
- let mut opts = Options::new();
- opts.optflag(
- "",
- "clean-shutdown",
- "Do not shutdown until all threads have finished (macos only)",
- );
- opts.optflag("b", "no-native-titlebar", "Do not use native titlebar");
- opts.optopt("", "device-pixel-ratio", "Device pixels per px", "");
- opts.optopt(
- "u",
- "user-agent",
- "Set custom user agent string (or ios / android / desktop for platform default)",
- "NCSA Mosaic/1.0 (X11;SunOS 4.1.4 sun4m)",
- );
- opts.optmulti(
- "",
- "pref",
- "A preference to set to enable",
- "dom.bluetooth.enabled",
- );
- opts.optmulti(
- "",
- "pref",
- "A preference to set to disable",
- "dom.webgpu.enabled=false",
- );
- opts.optmulti(
- "",
- "prefs-file",
- "Load in additional prefs from a file.",
- "--prefs-file /path/to/prefs.json",
- );
-
- let opts_matches;
- let content_process_token;
-
- match opts::from_cmdline_args(opts, &args) {
- ArgumentParsingResult::ContentProcess(matches, token) => {
- opts_matches = matches;
- content_process_token = Some(token);
- },
- ArgumentParsingResult::ChromeProcess(matches) => {
- opts_matches = matches;
- content_process_token = None;
- },
- };
-
- crate::prefs::register_user_prefs(&opts_matches);
-
// TODO: once log-panics is released, can this be replaced by
// log_panics::init()?
panic::set_hook(Box::new(panic_hook::panic_hook));
- if let Some(token) = content_process_token {
- return servo::run_content_process(token);
- }
-
- if opts::get().is_printing_version {
- println!("{}", crate::servo_version());
- process::exit(0);
- }
-
- let clean_shutdown = opts_matches.opt_present("clean-shutdown");
- let do_not_use_native_titlebar =
- opts_matches.opt_present("no-native-titlebar") || !(pref!(shell.native_titlebar.enabled));
- let device_pixel_ratio_override = opts_matches.opt_str("device-pixel-ratio").map(|dppx_str| {
- dppx_str.parse().unwrap_or_else(|err| {
- error!("Error parsing option: --device-pixel-ratio ({})", err);
- process::exit(1);
- })
- });
-
- let user_agent = opts_matches.opt_str("u");
-
- let url_opt = if !opts_matches.free.is_empty() {
- Some(&opts_matches.free[0][..])
- } else {
- None
+ let args = env::args().collect();
+ let (opts, preferences, servoshell_preferences) = match parse_command_line_arguments(args) {
+ ArgumentParsingResult::ContentProcess(token) => return servo::run_content_process(token),
+ ArgumentParsingResult::ChromeProcess(opts, preferences, servoshell_preferences) => {
+ (opts, preferences, servoshell_preferences)
+ },
};
- let event_loop = EventsLoop::new(opts::get().headless, opts::get().output_file.is_some())
+ let clean_shutdown = servoshell_preferences.clean_shutdown;
+ let event_loop = EventsLoop::new(opts.headless, opts.output_file.is_some())
.expect("Failed to create events loop");
- let mut app = App::new(
- &event_loop,
- user_agent,
- url_opt.map(|s| s.to_string()),
- do_not_use_native_titlebar,
- device_pixel_ratio_override,
- );
+ let mut app = App::new(opts, preferences, servoshell_preferences, &event_loop);
event_loop.run_app(&mut app);
diff --git a/ports/servoshell/desktop/embedder.rs b/ports/servoshell/desktop/embedder.rs
index 16164ac199a..7d4d7d4a47d 100644
--- a/ports/servoshell/desktop/embedder.rs
+++ b/ports/servoshell/desktop/embedder.rs
@@ -48,7 +48,7 @@ impl EmbedderMethods for EmbedderCallbacks {
xr: &mut webxr::MainThreadRegistry,
_embedder_proxy: EmbedderProxy,
) {
- if pref!(dom.webxr.test) {
+ if pref!(dom_webxr_test) {
xr.register_mock(webxr::headless::HeadlessMockDiscovery::new());
} else if let Some(xr_discovery) = self.xr_discovery.take() {
match xr_discovery {
diff --git a/ports/servoshell/desktop/events_loop.rs b/ports/servoshell/desktop/events_loop.rs
index 7dc7b803f56..1ebaf42dc67 100644
--- a/ports/servoshell/desktop/events_loop.rs
+++ b/ports/servoshell/desktop/events_loop.rs
@@ -8,7 +8,6 @@ use std::sync::{Arc, Condvar, Mutex};
use std::time;
use log::warn;
-use servo::config::{pref, set_pref};
use servo::embedder_traits::EventLoopWaker;
use winit::error::EventLoopError;
use winit::event_loop::EventLoop as WinitEventLoop;
@@ -90,10 +89,6 @@ impl EventsLoop {
},
EventLoop::Headless(ref data) => {
let (flag, condvar) = &**data;
- if pref!(media.glvideo.enabled) {
- warn!("GL video rendering is not supported on headless windows.");
- set_pref!(media.glvideo.enabled, false);
- }
app.init(None);
loop {
diff --git a/ports/servoshell/desktop/headed_window.rs b/ports/servoshell/desktop/headed_window.rs
index 14f322d67a5..e0214997c2f 100644
--- a/ports/servoshell/desktop/headed_window.rs
+++ b/ports/servoshell/desktop/headed_window.rs
@@ -14,10 +14,11 @@ use raw_window_handle::{HasDisplayHandle, HasWindowHandle};
use servo::compositing::windowing::{
AnimationState, EmbedderCoordinates, EmbedderEvent, MouseWindowEvent, WindowMethods,
};
+use servo::config::opts::Opts;
use servo::embedder_traits::Cursor;
use servo::keyboard_types::{Key, KeyState, KeyboardEvent};
use servo::script_traits::{TouchEventType, WheelDelta, WheelMode};
-use servo::servo_config::{opts, pref};
+use servo::servo_config::pref;
use servo::servo_geometry::DeviceIndependentPixel;
use servo::webrender_api::units::{DeviceIntPoint, DeviceIntRect, DeviceIntSize, DevicePixel};
use servo::webrender_api::ScrollLocation;
@@ -57,14 +58,13 @@ pub struct Window {
impl Window {
pub fn new(
+ opts: &Opts,
rendering_context: &RenderingContext,
window_size: Size2D<u32, DeviceIndependentPixel>,
event_loop: &ActiveEventLoop,
no_native_titlebar: bool,
device_pixel_ratio_override: Option<f32>,
) -> Window {
- let opts = opts::get();
-
// If there's no chrome, start off with the window invisible. It will be set to visible in
// `load_end()`. This avoids an ugly flash of unstyled content (especially important since
// unstyled content is white and chrome often has a transparent background). See issue
@@ -625,13 +625,13 @@ impl webxr::glwindow::GlWindow for XRWindow {
}
fn get_mode(&self) -> webxr::glwindow::GlWindowMode {
- if pref!(dom.webxr.glwindow.red_cyan) {
+ if pref!(dom_webxr_glwindow_red_cyan) {
webxr::glwindow::GlWindowMode::StereoRedCyan
- } else if pref!(dom.webxr.glwindow.left_right) {
+ } else if pref!(dom_webxr_glwindow_left_right) {
webxr::glwindow::GlWindowMode::StereoLeftRight
- } else if pref!(dom.webxr.glwindow.spherical) {
+ } else if pref!(dom_webxr_glwindow_spherical) {
webxr::glwindow::GlWindowMode::Spherical
- } else if pref!(dom.webxr.glwindow.cubemap) {
+ } else if pref!(dom_webxr_glwindow_cubemap) {
webxr::glwindow::GlWindowMode::Cubemap
} else {
webxr::glwindow::GlWindowMode::Blit
diff --git a/ports/servoshell/desktop/headless_window.rs b/ports/servoshell/desktop/headless_window.rs
index cb9aecb909d..06dbaa5983b 100644
--- a/ports/servoshell/desktop/headless_window.rs
+++ b/ports/servoshell/desktop/headless_window.rs
@@ -13,7 +13,6 @@ use euclid::{Box2D, Length, Point2D, Scale, Size2D};
use servo::compositing::windowing::{
AnimationState, EmbedderCoordinates, EmbedderEvent, WindowMethods,
};
-use servo::config::opts;
use servo::servo_geometry::DeviceIndependentPixel;
use servo::webrender_api::units::{DeviceIntSize, DevicePixel};
@@ -34,6 +33,7 @@ impl Window {
pub fn new(
size: Size2D<u32, DeviceIndependentPixel>,
device_pixel_ratio_override: Option<f32>,
+ screen_size_override: Option<Size2D<u32, DeviceIndependentPixel>>,
) -> Rc<dyn WindowPortsMethods> {
let device_pixel_ratio_override: Option<Scale<f32, DeviceIndependentPixel, DevicePixel>> =
device_pixel_ratio_override.map(Scale::new);
@@ -43,7 +43,7 @@ impl Window {
let inner_size = Cell::new((size.to_f32() * hidpi_factor).to_i32());
let window_rect = Box2D::from_origin_and_size(Point2D::zero(), size);
- let screen_size = opts::get().screen_size_override.map_or_else(
+ let screen_size = screen_size_override.map_or_else(
|| window_rect.size(),
|screen_size_override| screen_size_override.to_i32(),
);
diff --git a/ports/servoshell/desktop/minibrowser.rs b/ports/servoshell/desktop/minibrowser.rs
index 51bfbb76ecc..8d4345a27a1 100644
--- a/ports/servoshell/desktop/minibrowser.rs
+++ b/ports/servoshell/desktop/minibrowser.rs
@@ -36,6 +36,7 @@ use super::geometry::winit_position_to_euclid_point;
use super::webview::{LoadStatus, WebViewManager};
use super::window_trait::WindowPortsMethods;
use crate::parser::location_bar_input_to_url;
+use crate::prefs::ServoShellPreferences;
pub struct Minibrowser {
pub context: EguiGlow,
@@ -497,18 +498,20 @@ impl Minibrowser {
&self,
browser: &WebViewManager<dyn WindowPortsMethods>,
app_event_queue: &mut Vec<EmbedderEvent>,
+ preferences: &ServoShellPreferences,
) {
for event in self.event_queue.borrow_mut().drain(..) {
let browser_id = browser.focused_webview_id().unwrap();
match event {
MinibrowserEvent::Go => {
let location = self.location.borrow();
- if let Some(url) = location_bar_input_to_url(&location.clone()) {
- app_event_queue.push(EmbedderEvent::LoadUrl(browser_id, url));
- } else {
+ let Some(url) =
+ location_bar_input_to_url(&location.clone(), &preferences.searchpage)
+ else {
warn!("failed to parse location");
break;
- }
+ };
+ app_event_queue.push(EmbedderEvent::LoadUrl(browser_id, url));
},
MinibrowserEvent::Back => {
app_event_queue.push(EmbedderEvent::Navigation(
diff --git a/ports/servoshell/desktop/webview.rs b/ports/servoshell/desktop/webview.rs
index 43e4007d77d..8a08ac2ec45 100644
--- a/ports/servoshell/desktop/webview.rs
+++ b/ports/servoshell/desktop/webview.rs
@@ -19,6 +19,7 @@ use keyboard_types::{Key, KeyboardEvent, Modifiers, ShortcutMatcher};
use log::{debug, error, info, trace, warn};
use servo::base::id::TopLevelBrowsingContextId as WebViewId;
use servo::compositing::windowing::{EmbedderEvent, WebRenderDebugOption};
+use servo::config::opts::Opts;
use servo::embedder_traits::{
CompositorEventVariant, ContextMenuResult, DualRumbleEffectParams, EmbedderMsg, FilterPattern,
GamepadHapticEffectType, PermissionPrompt, PermissionRequest, PromptCredentialsInput,
@@ -29,7 +30,6 @@ use servo::script_traits::{
GamepadEvent, GamepadIndex, GamepadInputBounds, GamepadSupportedHapticEffects,
GamepadUpdateType, TouchEventType, TraversalDirection,
};
-use servo::servo_config::opts;
use servo::servo_url::ServoUrl;
use servo::webrender_api::units::DeviceRect;
use servo::webrender_api::ScrollLocation;
@@ -630,6 +630,7 @@ where
/// Returns true if the caller needs to manually present a new frame.
pub fn handle_servo_events(
&mut self,
+ opts: &Opts,
events: Drain<'_, (Option<WebViewId>, EmbedderMsg)>,
) -> ServoEventResponse {
let mut need_present = self.load_status() != LoadStatus::LoadComplete;
@@ -685,7 +686,7 @@ where
self.window.request_inner_size(size);
},
EmbedderMsg::Prompt(definition, origin) => {
- let res = if opts::get().headless {
+ let res = if opts.headless {
match definition {
PromptDefinition::Alert(_message, sender) => sender.send(()),
PromptDefinition::YesNo(_message, sender) => {
@@ -927,10 +928,7 @@ where
};
},
EmbedderMsg::SelectFiles(patterns, multiple_files, sender) => {
- let res = match (
- opts::get().headless,
- get_selected_files(patterns, multiple_files),
- ) {
+ let res = match (opts.headless, get_selected_files(patterns, multiple_files)) {
(true, _) | (false, None) => sender.send(None),
(false, Some(files)) => sender.send(Some(files)),
};
@@ -941,8 +939,10 @@ where
};
},
EmbedderMsg::PromptPermission(prompt, sender) => {
- let permission_state = prompt_user(prompt);
- let _ = sender.send(permission_state);
+ let _ = sender.send(match opts.headless {
+ true => PermissionRequest::Denied,
+ false => prompt_user(prompt),
+ });
},
EmbedderMsg::ShowIME(_kind, _text, _multiline, _rect) => {
debug!("ShowIME received");
@@ -1007,10 +1007,6 @@ where
#[cfg(target_os = "linux")]
fn prompt_user(prompt: PermissionPrompt) -> PermissionRequest {
- if opts::get().headless {
- return PermissionRequest::Denied;
- }
-
let message = match prompt {
PermissionPrompt::Request(permission_name) => {
format!("Do you want to grant permission for {:?}?", permission_name)
diff --git a/ports/servoshell/desktop/window_trait.rs b/ports/servoshell/desktop/window_trait.rs
index 030fa112056..356230feeb3 100644
--- a/ports/servoshell/desktop/window_trait.rs
+++ b/ports/servoshell/desktop/window_trait.rs
@@ -9,7 +9,6 @@ use std::rc::Rc;
use euclid::{Length, Scale};
use servo::compositing::windowing::{EmbedderEvent, WindowMethods};
-use servo::config::opts;
use servo::embedder_traits::Cursor;
use servo::servo_geometry::DeviceIndependentPixel;
use servo::webrender_api::units::{DeviceIntPoint, DeviceIntSize, DevicePixel};
@@ -22,10 +21,7 @@ pub trait WindowPortsMethods: WindowMethods {
fn id(&self) -> winit::window::WindowId;
fn hidpi_factor(&self) -> Scale<f32, DeviceIndependentPixel, DevicePixel> {
self.device_pixel_ratio_override()
- .unwrap_or_else(|| match opts::get().output_file {
- Some(_) => Scale::new(1.0),
- None => self.device_hidpi_factor(),
- })
+ .unwrap_or_else(|| self.device_hidpi_factor())
}
fn device_hidpi_factor(&self) -> Scale<f32, DeviceIndependentPixel, DevicePixel>;
fn device_pixel_ratio_override(
diff --git a/ports/servoshell/egl/android.rs b/ports/servoshell/egl/android.rs
index 02eb9640e18..8845e43af85 100644
--- a/ports/servoshell/egl/android.rs
+++ b/ports/servoshell/egl/android.rs
@@ -7,7 +7,6 @@
mod resources;
mod simpleservo;
-use std::collections::HashMap;
use std::os::raw::{c_char, c_int, c_void};
use std::sync::Arc;
@@ -830,17 +829,6 @@ fn get_options<'local>(
let native_window =
unsafe { ANativeWindow_fromSurface(env.get_native_interface(), surface.as_raw()) };
- // FIXME: enable JIT compilation on 32-bit Android after the startup crash issue (#31134) is fixed.
- let prefs = if cfg!(target_pointer_width = "32") {
- let mut prefs = HashMap::new();
- prefs.insert("js.baseline_interpreter.enabled".to_string(), false.into());
- prefs.insert("js.baseline_jit.enabled".to_string(), false.into());
- prefs.insert("js.ion.enabled".to_string(), false.into());
- Some(prefs)
- } else {
- None
- };
-
let opts = InitOptions {
args: args.unwrap_or(vec![]),
url,
@@ -848,7 +836,6 @@ fn get_options<'local>(
density,
xr_discovery: None,
surfman_integration: simpleservo::SurfmanIntegration::Widget(native_window),
- prefs,
};
Ok((opts, log, log_str, gst_debug_str))
diff --git a/ports/servoshell/egl/android/resources.rs b/ports/servoshell/egl/android/resources.rs
index fb9d837aeb6..227d97742a6 100644
--- a/ports/servoshell/egl/android/resources.rs
+++ b/ports/servoshell/egl/android/resources.rs
@@ -16,7 +16,6 @@ impl ResourceReaderInstance {
impl ResourceReaderMethods for ResourceReaderInstance {
fn read(&self, res: Resource) -> Vec<u8> {
Vec::from(match res {
- Resource::Preferences => &include_bytes!("../../../../resources/prefs.json")[..],
Resource::HstsPreloadList => {
&include_bytes!("../../../../resources/hsts_preload.json")[..]
},
diff --git a/ports/servoshell/egl/android/simpleservo.rs b/ports/servoshell/egl/android/simpleservo.rs
index 4d249e844d1..2e0b4786a11 100644
--- a/ports/servoshell/egl/android/simpleservo.rs
+++ b/ports/servoshell/egl/android/simpleservo.rs
@@ -3,23 +3,19 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use std::cell::RefCell;
-use std::collections::HashMap;
use std::mem;
use std::os::raw::c_void;
use std::rc::Rc;
-use getopts::Options;
use servo::base::id::WebViewId;
use servo::compositing::windowing::EmbedderEvent;
use servo::compositing::CompositeTarget;
-pub use servo::config::prefs::{add_user_prefs, PrefValue};
use servo::embedder_traits::resources;
/// The EventLoopWaker::wake function will be called from any thread.
/// It will be called to notify embedder that some events are available,
/// and that perform_updates need to be called
pub use servo::embedder_traits::EventLoopWaker;
pub use servo::embedder_traits::{InputMethodType, MediaSessionPlaybackState, PromptResult};
-use servo::servo_config::{opts, pref};
use servo::servo_url::ServoUrl;
pub use servo::webrender_api::units::DeviceIntRect;
use servo::webrender_traits::RenderingContext;
@@ -31,6 +27,7 @@ use crate::egl::host_trait::HostTrait;
use crate::egl::servo_glue::{
Coordinates, ServoEmbedderCallbacks, ServoGlue, ServoWindowCallbacks,
};
+use crate::prefs::{parse_command_line_arguments, ArgumentParsingResult};
thread_local! {
pub static SERVO: RefCell<Option<ServoGlue>> = RefCell::new(None);
@@ -44,7 +41,6 @@ pub struct InitOptions {
#[cfg(feature = "webxr")]
pub xr_discovery: Option<webxr::Discovery>,
pub surfman_integration: SurfmanIntegration,
- pub prefs: Option<HashMap<String, PrefValue>>,
}
/// Controls how this embedding's rendering will integrate with the embedder.
@@ -64,17 +60,24 @@ pub fn init(
crate::init_crypto();
resources::set(Box::new(ResourceReaderInstance::new()));
- if let Some(prefs) = init_opts.prefs {
- add_user_prefs(prefs);
- }
-
+ // `parse_command_line_arguments` expects the first argument to be the binary name.
let mut args = mem::replace(&mut init_opts.args, vec![]);
- // opts::from_cmdline_args expects the first argument to be the binary name.
args.insert(0, "servo".to_string());
- opts::from_cmdline_args(Options::new(), &args);
+
+ let (opts, preferences, servoshell_preferences) = match parse_command_line_arguments(args) {
+ ArgumentParsingResult::ContentProcess(..) => {
+ unreachable!("Android does not have support for multiprocess yet.")
+ },
+ ArgumentParsingResult::ChromeProcess(opts, preferences, servoshell_preferences) => {
+ (opts, preferences, servoshell_preferences)
+ },
+ };
let embedder_url = init_opts.url.as_ref().and_then(|s| ServoUrl::parse(s).ok());
- let pref_url = ServoUrl::parse(&pref!(shell.homepage)).ok();
+ let pref_url = servoshell_preferences
+ .url
+ .as_ref()
+ .and_then(|s| ServoUrl::parse(s).ok());
let blank_url = ServoUrl::parse("about:blank").ok();
let url = embedder_url.or(pref_url).or(blank_url).unwrap();
@@ -117,6 +120,8 @@ pub fn init(
));
let servo = Servo::new(
+ opts,
+ preferences,
rendering_context.clone(),
embedder_callbacks,
window_callbacks.clone(),
@@ -125,7 +130,12 @@ pub fn init(
);
SERVO.with(|s| {
- let mut servo_glue = ServoGlue::new(rendering_context, servo, window_callbacks, None);
+ let mut servo_glue = ServoGlue::new(
+ rendering_context,
+ servo,
+ window_callbacks,
+ servoshell_preferences,
+ );
let _ = servo_glue.process_event(EmbedderEvent::NewWebView(url, WebViewId::new()));
*s.borrow_mut() = Some(servo_glue);
});
diff --git a/ports/servoshell/egl/ohos/simpleservo.rs b/ports/servoshell/egl/ohos/simpleservo.rs
index d1c153ac2e6..d642db4718f 100644
--- a/ports/servoshell/egl/ohos/simpleservo.rs
+++ b/ports/servoshell/egl/ohos/simpleservo.rs
@@ -17,8 +17,6 @@ use servo::embedder_traits::resources;
/// and that perform_updates need to be called
pub use servo::embedder_traits::EventLoopWaker;
use servo::euclid::Size2D;
-use servo::servo_config::opts;
-use servo::servo_config::opts::ArgumentParsingResult;
use servo::servo_url::ServoUrl;
use servo::webrender_traits::RenderingContext;
use servo::{self, Servo};
@@ -31,6 +29,7 @@ use crate::egl::ohos::InitOpts;
use crate::egl::servo_glue::{
Coordinates, ServoEmbedderCallbacks, ServoGlue, ServoWindowCallbacks,
};
+use crate::prefs::{parse_command_line_arguments, ArgumentParsingResult};
/// Initialize Servo. At that point, we need a valid GL context.
/// In the future, this will be done in multiple steps.
@@ -46,53 +45,27 @@ pub fn init(
crate::init_crypto();
let resource_dir = PathBuf::from(&options.resource_dir).join("servo");
resources::set(Box::new(ResourceReaderInstance::new(resource_dir)));
- let mut args = vec!["servoshell".to_string()];
+
// It would be nice if `from_cmdline_args()` could accept str slices, to avoid allocations here.
// Then again, this code could and maybe even should be disabled in production builds.
- let split_args: Vec<String> = options
- .commandline_args
- .split("\u{1f}")
- .map(|arg| arg.to_string())
- .collect();
- args.extend(split_args);
- debug!("Servo commandline args: {:?}", args);
-
- let mut opts = getopts::Options::new();
- opts.optopt(
- "u",
- "user-agent",
- "Set custom user agent string (or ios / android / desktop for platform default)",
- "NCSA Mosaic/1.0 (X11;SunOS 4.1.4 sun4m)",
- );
- opts.optmulti(
- "",
- "pref",
- "A preference to set to enable",
- "dom.bluetooth.enabled",
- );
- opts.optmulti(
- "",
- "pref",
- "A preference to set to disable",
- "dom.webgpu.enabled=false",
- );
- opts.optmulti(
- "",
- "prefs-file",
- "Load in additional prefs from a file.",
- "--prefs-file /path/to/prefs.json",
+ let mut args = vec!["servoshell".to_string()];
+ args.extend(
+ options
+ .commandline_args
+ .split("\u{1f}")
+ .map(|arg| arg.to_string()),
);
+ debug!("Servo commandline args: {:?}", args);
- let opts_matches = match opts::from_cmdline_args(opts, &args) {
- ArgumentParsingResult::ContentProcess(matches, _token) => {
- error!("Content Process mode not supported / tested yet on OpenHarmony!");
- matches
+ let (opts, preferences, servoshell_preferences) = match parse_command_line_arguments(args) {
+ ArgumentParsingResult::ContentProcess(..) => {
+ unreachable!("OHOS does not have support for multiprocess yet.")
+ },
+ ArgumentParsingResult::ChromeProcess(opts, preferences, servoshell_preferences) => {
+ (opts, preferences, servoshell_preferences)
},
- ArgumentParsingResult::ChromeProcess(matches) => matches,
};
- crate::prefs::register_user_prefs(&opts_matches);
-
// Initialize surfman
let connection = Connection::new().or(Err("Failed to create connection"))?;
let adapter = connection
@@ -144,11 +117,12 @@ pub fn init(
));
let servo = Servo::new(
+ opts,
+ preferences,
rendering_context.clone(),
embedder_callbacks,
window_callbacks.clone(),
- // User agent: Mozilla/5.0 (<Phone|PC|Tablet>; HarmonyOS 5.0) bla bla
- None,
+ None, /* user_agent */
CompositeTarget::Window,
);
@@ -156,7 +130,7 @@ pub fn init(
rendering_context,
servo,
window_callbacks,
- Some(options.resource_dir),
+ servoshell_preferences,
);
let initial_url = ServoUrl::parse(options.url.as_str())
diff --git a/ports/servoshell/egl/servo_glue.rs b/ports/servoshell/egl/servo_glue.rs
index 042bff8c957..ed3f4ae02a3 100644
--- a/ports/servoshell/egl/servo_glue.rs
+++ b/ports/servoshell/egl/servo_glue.rs
@@ -31,6 +31,7 @@ use servo::webrender_traits::RenderingContext;
use servo::{Servo, TopLevelBrowsingContextId};
use crate::egl::host_trait::HostTrait;
+use crate::prefs::ServoShellPreferences;
#[derive(Clone, Debug)]
pub struct Coordinates {
@@ -84,7 +85,6 @@ pub struct ServoGlue {
need_present: bool,
callbacks: Rc<ServoWindowCallbacks>,
events: Vec<EmbedderEvent>,
- resource_dir: Option<String>,
context_menu_sender: Option<IpcSender<ContextMenuResult>>,
/// List of top-level browsing contexts.
@@ -98,6 +98,9 @@ pub struct ServoGlue {
/// The webview that is currently focused.
/// Modified by EmbedderMsg::WebViewFocused and EmbedderMsg::WebViewBlurred.
focused_webview_id: Option<WebViewId>,
+
+ /// servoshell specific preferences created during startup of the application.
+ servoshell_preferences: ServoShellPreferences,
}
#[allow(unused)]
@@ -106,7 +109,7 @@ impl ServoGlue {
rendering_context: RenderingContext,
servo: Servo<ServoWindowCallbacks>,
callbacks: Rc<ServoWindowCallbacks>,
- resource_dir: Option<String>,
+ servoshell_preferences: ServoShellPreferences,
) -> Self {
Self {
rendering_context,
@@ -115,11 +118,11 @@ impl ServoGlue {
need_present: false,
callbacks,
events: vec![],
- resource_dir,
context_menu_sender: None,
webviews: HashMap::default(),
creation_order: vec![],
focused_webview_id: None,
+ servoshell_preferences,
}
}
@@ -173,7 +176,7 @@ impl ServoGlue {
/// Load an URL.
pub fn load_uri(&mut self, url: &str) -> Result<(), &'static str> {
info!("load_uri: {}", url);
- crate::parser::location_bar_input_to_url(url)
+ crate::parser::location_bar_input_to_url(url, &self.servoshell_preferences.searchpage)
.ok_or("Can't parse URL")
.and_then(|url| {
let browser_id = self.get_browser_id()?;
diff --git a/ports/servoshell/panic_hook.rs b/ports/servoshell/panic_hook.rs
index bb904493beb..7cbf24302af 100644
--- a/ports/servoshell/panic_hook.rs
+++ b/ports/servoshell/panic_hook.rs
@@ -41,6 +41,8 @@ pub(crate) fn panic_hook(info: &PanicHookInfo) {
}
drop(stderr);
+ // TODO: This shouldn't be using internal Servo options here. Perhaps this functionality should
+ // move into libservo itself.
if opts::get().hard_fail && !opts::get().multiprocess {
// When we are exiting due to a hard-failure mode, we trigger a segfault so that crash
// tests detect that we crashed. If we exit normally it just looks like a non-crash exit.
diff --git a/ports/servoshell/parser.rs b/ports/servoshell/parser.rs
index e1635b0f8fc..d52fc64bead 100644
--- a/ports/servoshell/parser.rs
+++ b/ports/servoshell/parser.rs
@@ -6,7 +6,6 @@
use std::path::{Path, PathBuf};
use servo::net_traits::pub_domains::is_reg_domain;
-use servo::servo_config::pref;
use servo::servo_url::ServoUrl;
#[cfg(not(any(target_os = "android", target_env = "ohos")))]
@@ -25,6 +24,7 @@ pub fn get_default_url(
url_opt: Option<&str>,
cwd: impl AsRef<Path>,
exists: impl FnOnce(&PathBuf) -> bool,
+ preferences: &crate::prefs::ServoShellPreferences,
) -> ServoUrl {
// If the url is not provided, we fallback to the homepage in prefs,
// or a blank page in case the homepage is not set either.
@@ -48,13 +48,10 @@ pub fn get_default_url(
}
if new_url.is_none() && url_opt.is_some() {
- new_url = location_bar_input_to_url(url_opt.unwrap());
+ new_url = location_bar_input_to_url(url_opt.unwrap(), &preferences.searchpage);
}
- let pref_url = {
- let homepage_url = pref!(shell.homepage);
- parse_url_or_filename(cwd.as_ref(), &homepage_url).ok()
- };
+ let pref_url = parse_url_or_filename(cwd.as_ref(), &preferences.homepage).ok();
let blank_url = ServoUrl::parse("about:blank").ok();
new_url.or(pref_url).or(blank_url).unwrap()
@@ -64,21 +61,15 @@ pub fn get_default_url(
///
/// If this is not a valid URL, try to "fix" it by adding a scheme or if all else fails,
/// interpret the string as a search term.
-pub fn location_bar_input_to_url(request: &str) -> Option<ServoUrl> {
+pub(crate) fn location_bar_input_to_url(request: &str, searchpage: &str) -> Option<ServoUrl> {
let request = request.trim();
- ServoUrl::parse(request)
- .ok()
- .or_else(|| {
- if request.starts_with('/') {
- ServoUrl::parse(&format!("file://{}", request)).ok()
- } else if request.contains('/') || is_reg_domain(request) {
- ServoUrl::parse(&format!("https://{}", request)).ok()
- } else {
- None
- }
- })
- .or_else(|| {
- let url = pref!(shell.searchpage).replace("%s", request);
- ServoUrl::parse(&url).ok()
- })
+ ServoUrl::parse(request).ok().or_else(|| {
+ if request.starts_with('/') {
+ ServoUrl::parse(&format!("file://{}", request)).ok()
+ } else if request.contains('/') || is_reg_domain(request) {
+ ServoUrl::parse(&format!("https://{}", request)).ok()
+ } else {
+ ServoUrl::parse(&searchpage.replace("%s", request)).ok()
+ }
+ })
}
diff --git a/ports/servoshell/prefs.rs b/ports/servoshell/prefs.rs
index 100fa80c4fd..79e7d8540ae 100644
--- a/ports/servoshell/prefs.rs
+++ b/ports/servoshell/prefs.rs
@@ -3,123 +3,737 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use std::collections::HashMap;
-use std::fs::File;
+use std::fs::{read_to_string, File};
use std::io::Read;
+use std::path::{Path, PathBuf};
+use std::{env, fs, process};
-use getopts::Matches;
-use servo::config::opts;
-use servo::config::prefs::{self, PrefValue};
-use servo::servo_config::basedir;
+use euclid::Size2D;
+use getopts::{Matches, Options};
+use log::{error, warn};
+use serde_json::Value;
+use servo::config::opts::{DebugOptions, Opts, OutputOptions};
+use servo::config::prefs::{PrefValue, Preferences};
+use servo::url::ServoUrl;
+use url::Url;
-pub fn register_user_prefs(opts_matches: &Matches) {
- // Read user's prefs.json and then parse --pref command line args.
+pub(crate) struct ServoShellPreferences {
+ /// The user agent to use for servoshell.
+ pub user_agent: Option<String>,
+ /// A URL to load when starting servoshell.
+ pub url: Option<String>,
+ /// An override value for the device pixel ratio.
+ pub device_pixel_ratio_override: Option<f32>,
+ /// Whether or not to attempt clean shutdown.
+ pub clean_shutdown: bool,
+ /// Enable native window's titlebar and decorations.
+ pub no_native_titlebar: bool,
+ /// URL string of the homepage.
+ pub homepage: String,
+ /// URL string of the search engine page with '%s' standing in for the search term.
+ /// For example <https://duckduckgo.com/html/?q=%s>.
+ pub searchpage: String,
+}
+
+impl Default for ServoShellPreferences {
+ fn default() -> Self {
+ Self {
+ user_agent: None,
+ url: None,
+ device_pixel_ratio_override: None,
+ clean_shutdown: false,
+ homepage: "https://servo.org".into(),
+ no_native_titlebar: true,
+ searchpage: "https://duckduckgo.com/html/?q=%s".into(),
+ }
+ }
+}
+
+#[cfg(all(
+ unix,
+ not(target_os = "macos"),
+ not(target_os = "ios"),
+ not(target_os = "android"),
+ not(target_env = "ohos")
+))]
+pub fn default_config_dir() -> Option<PathBuf> {
+ let mut config_dir = ::dirs::config_dir().unwrap();
+ config_dir.push("servo");
+ config_dir.push("default");
+ Some(config_dir)
+}
+
+#[cfg(any(target_os = "android", target_env = "ohos"))]
+pub fn default_config_dir() -> Option<PathBuf> {
+ None
+}
+
+#[cfg(target_os = "macos")]
+pub fn default_config_dir() -> Option<PathBuf> {
+ // FIXME: use `config_dir()` ($HOME/Library/Preferences)
+ // instead of `data_dir()` ($HOME/Library/Application Support) ?
+ let mut config_dir = ::dirs::data_dir().unwrap();
+ config_dir.push("Servo");
+ Some(config_dir)
+}
- let user_prefs_path = opts::get()
- .config_dir
+#[cfg(target_os = "windows")]
+pub fn default_config_dir() -> Option<PathBuf> {
+ let mut config_dir = ::dirs::config_dir().unwrap();
+ config_dir.push("Servo");
+ Some(config_dir)
+}
+
+/// Get a Servo [`Preferences`] to use when initializing Servo by first reading the user
+/// preferences file and then overriding these preferences with the ones from the `--prefs-file`
+/// command-line argument, if given.
+fn get_preferences(opts_matches: &Matches, config_dir: &Option<PathBuf>) -> Preferences {
+ // Do not read any preferences files from the disk when testing as we do not want it
+ // to throw off test results.
+ if cfg!(test) {
+ return Preferences::default();
+ }
+
+ let user_prefs_path = config_dir
.clone()
- .or_else(basedir::default_config_dir)
+ .or_else(default_config_dir)
.map(|path| path.join("prefs.json"))
.filter(|path| path.exists());
+ let user_prefs_hash = user_prefs_path.map(read_prefs_file).unwrap_or_default();
+
+ let apply_preferences =
+ |preferences: &mut Preferences, preferences_hash: HashMap<String, PrefValue>| {
+ for (key, value) in preferences_hash.iter() {
+ preferences.set_value(key, value.clone());
+ }
+ };
- let mut userprefs = if let Some(path) = user_prefs_path {
- read_prefs_file(path.to_str().expect("Failed to read user prefs"))
+ let mut preferences = Preferences::default();
+ apply_preferences(&mut preferences, user_prefs_hash);
+ for pref_file_path in opts_matches.opt_strs("prefs-file").iter() {
+ apply_preferences(&mut preferences, read_prefs_file(pref_file_path))
+ }
+
+ preferences
+}
+
+fn read_prefs_file<P: AsRef<Path>>(path: P) -> HashMap<String, PrefValue> {
+ read_prefs_map(&read_to_string(path).expect("Error opening user prefs"))
+}
+
+pub fn read_prefs_map(txt: &str) -> HashMap<String, PrefValue> {
+ let prefs: HashMap<String, Value> = serde_json::from_str(txt)
+ .map_err(|_| panic!("Could not parse preferences JSON"))
+ .unwrap();
+ prefs
+ .into_iter()
+ .map(|(key, value)| {
+ let value = (&value)
+ .try_into()
+ .map_err(|error| panic!("{error}"))
+ .unwrap();
+ (key, value)
+ })
+ .collect()
+}
+
+#[allow(clippy::large_enum_variant)]
+pub(crate) enum ArgumentParsingResult {
+ ChromeProcess(Opts, Preferences, ServoShellPreferences),
+ ContentProcess(String),
+}
+
+pub(crate) fn parse_command_line_arguments(args: Vec<String>) -> ArgumentParsingResult {
+ let (app_name, args) = args.split_first().unwrap();
+
+ let mut opts = Options::new();
+ opts.optflag("", "legacy-layout", "Use the legacy layout engine");
+ opts.optopt("o", "output", "Output file", "output.png");
+ opts.optopt("s", "size", "Size of tiles", "512");
+ opts.optflagopt(
+ "p",
+ "profile",
+ "Time profiler flag and either a TSV output filename \
+ OR an interval for output to Stdout (blank for Stdout with interval of 5s)",
+ "10 \
+ OR time.tsv",
+ );
+ opts.optflagopt(
+ "",
+ "profiler-trace-path",
+ "Path to dump a self-contained HTML timeline of profiler traces",
+ "",
+ );
+ opts.optflagopt(
+ "m",
+ "memory-profile",
+ "Memory profiler flag and output interval",
+ "10",
+ );
+ opts.optflag("x", "exit", "Exit after load flag");
+ opts.optopt(
+ "y",
+ "layout-threads",
+ "Number of threads to use for layout",
+ "1",
+ );
+ opts.optflag(
+ "i",
+ "nonincremental-layout",
+ "Enable to turn off incremental layout.",
+ );
+ opts.optflagopt(
+ "",
+ "userscripts",
+ "Uses userscripts in resources/user-agent-js, or a specified full path",
+ "",
+ );
+ opts.optmulti(
+ "",
+ "user-stylesheet",
+ "A user stylesheet to be added to every document",
+ "file.css",
+ );
+ opts.optopt(
+ "",
+ "shaders",
+ "Shaders will be loaded from the specified directory instead of using the builtin ones.",
+ "",
+ );
+ opts.optflag("z", "headless", "Headless mode");
+ opts.optflag(
+ "f",
+ "hard-fail",
+ "Exit on thread failure instead of displaying about:failure",
+ );
+ opts.optflag(
+ "F",
+ "soft-fail",
+ "Display about:failure on thread failure instead of exiting",
+ );
+ opts.optflagopt("", "devtools", "Start remote devtools server on port", "0");
+ opts.optflagopt(
+ "",
+ "webdriver",
+ "Start remote WebDriver server on port",
+ "7000",
+ );
+ opts.optopt(
+ "",
+ "window-size",
+ "Set the initial window size in logical (device independenrt) pixels",
+ "1024x740",
+ );
+ opts.optopt(
+ "",
+ "screen-size",
+ "Override the screen resolution in logical (device independent) pixels",
+ "1024x768",
+ );
+ opts.optflag("M", "multiprocess", "Run in multiprocess mode");
+ opts.optflag("B", "bhm", "Background Hang Monitor enabled");
+ opts.optflag("S", "sandbox", "Run in a sandbox if multiprocess");
+ opts.optopt(
+ "",
+ "random-pipeline-closure-probability",
+ "Probability of randomly closing a pipeline (for testing constellation hardening).",
+ "0.0",
+ );
+ opts.optopt(
+ "",
+ "random-pipeline-closure-seed",
+ "A fixed seed for repeatbility of random pipeline closure.",
+ "",
+ );
+ opts.optmulti(
+ "Z",
+ "debug",
+ "A comma-separated string of debug options. Pass help to show available options.",
+ "",
+ );
+ opts.optflag("h", "help", "Print this message");
+ opts.optopt(
+ "",
+ "resources-path",
+ "Path to find static resources",
+ "/home/servo/resources",
+ );
+ opts.optopt(
+ "",
+ "certificate-path",
+ "Path to find SSL certificates",
+ "/home/servo/resources/certs",
+ );
+ opts.optflag(
+ "",
+ "ignore-certificate-errors",
+ "Whether or not to completely ignore certificate errors",
+ );
+ opts.optopt(
+ "",
+ "content-process",
+ "Run as a content process and connect to the given pipe",
+ "servo-ipc-channel.abcdefg",
+ );
+ opts.optopt(
+ "",
+ "config-dir",
+ "config directory following xdg spec on linux platform",
+ "",
+ );
+ opts.optflag("v", "version", "Display servo version information");
+ opts.optflag("", "unminify-js", "Unminify Javascript");
+ opts.optflag("", "print-pwm", "Print Progressive Web Metrics");
+ opts.optopt(
+ "",
+ "local-script-source",
+ "Directory root with unminified scripts",
+ "",
+ );
+ opts.optflag("", "unminify-css", "Unminify Css");
+
+ opts.optflag(
+ "",
+ "clean-shutdown",
+ "Do not shutdown until all threads have finished (macos only)",
+ );
+ opts.optflag("b", "no-native-titlebar", "Do not use native titlebar");
+ opts.optopt("", "device-pixel-ratio", "Device pixels per px", "");
+ opts.optopt(
+ "u",
+ "user-agent",
+ "Set custom user agent string (or ios / android / desktop for platform default)",
+ "NCSA Mosaic/1.0 (X11;SunOS 4.1.4 sun4m)",
+ );
+ opts.optmulti(
+ "",
+ "pref",
+ "A preference to set to enable",
+ "dom.bluetooth.enabled",
+ );
+ opts.optmulti(
+ "",
+ "pref",
+ "A preference to set to disable",
+ "dom.webgpu.enabled=false",
+ );
+ opts.optmulti(
+ "",
+ "prefs-file",
+ "Load in additional prefs from a file.",
+ "--prefs-file /path/to/prefs.json",
+ );
+
+ let opt_match = match opts.parse(args) {
+ Ok(m) => m,
+ Err(f) => args_fail(&f.to_string()),
+ };
+
+ if opt_match.opt_present("v") || opt_match.opt_present("version") {
+ println!("{}", crate::servo_version());
+ process::exit(0);
+ }
+
+ if opt_match.opt_present("h") || opt_match.opt_present("help") {
+ print_usage(app_name, &opts);
+ process::exit(0);
+ };
+
+ let config_dir = opt_match.opt_str("config-dir").map(Into::into);
+ let mut preferences = get_preferences(&opt_match, &config_dir);
+
+ // If this is the content process, we'll receive the real options over IPC. So just fill in
+ // some dummy options for now.
+ if let Some(content_process) = opt_match.opt_str("content-process") {
+ return ArgumentParsingResult::ContentProcess(content_process);
+ }
+
+ let mut debug_options = DebugOptions::default();
+ for debug_string in opt_match.opt_strs("Z") {
+ if let Err(e) = debug_options.extend(debug_string) {
+ args_fail(&format!("error: unrecognized debug option: {}", e));
+ }
+ }
+
+ if debug_options.help {
+ print_debug_options_usage(app_name);
+ }
+
+ let tile_size: usize = match opt_match.opt_str("s") {
+ Some(tile_size_str) => tile_size_str
+ .parse()
+ .unwrap_or_else(|err| args_fail(&format!("Error parsing option: -s ({})", err))),
+ None => 512,
+ };
+
+ // If only the flag is present, default to a 5 second period for both profilers
+ let time_profiling = if opt_match.opt_present("p") {
+ match opt_match.opt_str("p") {
+ Some(argument) => match argument.parse::<f64>() {
+ Ok(interval) => Some(OutputOptions::Stdout(interval)),
+ Err(_) => match ServoUrl::parse(&argument) {
+ Ok(_) => panic!("influxDB isn't supported anymore"),
+ Err(_) => Some(OutputOptions::FileName(argument)),
+ },
+ },
+ None => Some(OutputOptions::Stdout(5.0)),
+ }
} else {
- HashMap::new()
+ // if the p option doesn't exist:
+ None
};
- let prefs_from_files: Vec<HashMap<String, PrefValue>> = opts_matches
- .opt_strs("prefs-file")
- .iter()
- .map(|path| read_prefs_file(path))
- .collect();
+ if let Some(ref time_profiler_trace_path) = opt_match.opt_str("profiler-trace-path") {
+ let mut path = PathBuf::from(time_profiler_trace_path);
+ path.pop();
+ if let Err(why) = fs::create_dir_all(&path) {
+ error!(
+ "Couldn't create/open {:?}: {:?}",
+ Path::new(time_profiler_trace_path).to_string_lossy(),
+ why
+ );
+ }
+ }
+
+ let mem_profiler_period = opt_match.opt_default("m", "5").map(|period| {
+ period
+ .parse()
+ .unwrap_or_else(|err| args_fail(&format!("Error parsing option: -m ({})", err)))
+ });
- let argprefs: HashMap<String, PrefValue> = opts_matches
- .opt_strs("pref")
+ let mut layout_threads: Option<usize> = opt_match.opt_str("y").map(|layout_threads_str| {
+ layout_threads_str
+ .parse()
+ .unwrap_or_else(|err| args_fail(&format!("Error parsing option: -y ({})", err)))
+ });
+
+ let nonincremental_layout = opt_match.opt_present("i");
+
+ let random_pipeline_closure_probability = opt_match
+ .opt_str("random-pipeline-closure-probability")
+ .map(|prob| {
+ prob.parse().unwrap_or_else(|err| {
+ args_fail(&format!(
+ "Error parsing option: --random-pipeline-closure-probability ({})",
+ err
+ ))
+ })
+ });
+
+ let random_pipeline_closure_seed =
+ opt_match
+ .opt_str("random-pipeline-closure-seed")
+ .map(|seed| {
+ seed.parse().unwrap_or_else(|err| {
+ args_fail(&format!(
+ "Error parsing option: --random-pipeline-closure-seed ({})",
+ err
+ ))
+ })
+ });
+
+ if debug_options.trace_layout {
+ layout_threads = Some(1);
+ }
+
+ if opt_match.opt_present("devtools") {
+ let port = opt_match
+ .opt_str("devtools")
+ .map(|port| {
+ port.parse().unwrap_or_else(|err| {
+ args_fail(&format!("Error parsing option: --devtools ({})", err))
+ })
+ })
+ .unwrap_or(preferences.devtools_server_port);
+ preferences.devtools_server_enabled = true;
+ preferences.devtools_server_port = port;
+ }
+
+ let webdriver_port = opt_match.opt_default("webdriver", "7000").map(|port| {
+ port.parse().unwrap_or_else(|err| {
+ args_fail(&format!("Error parsing option: --webdriver ({})", err))
+ })
+ });
+
+ let parse_resolution_string = |string: String| {
+ let components: Vec<u32> = string
+ .split('x')
+ .map(|component| {
+ component.parse().unwrap_or_else(|error| {
+ args_fail(&format!("Error parsing resolution '{string}': {error}"));
+ })
+ })
+ .collect();
+ Size2D::new(components[0], components[1])
+ };
+
+ let screen_size_override = opt_match
+ .opt_str("screen-size")
+ .map(parse_resolution_string);
+
+ // Make sure the default window size is not larger than any provided screen size.
+ let default_window_size = Size2D::new(1024, 740);
+ let default_window_size = screen_size_override
+ .map_or(default_window_size, |screen_size_override| {
+ default_window_size.min(screen_size_override)
+ });
+
+ let initial_window_size = opt_match
+ .opt_str("window-size")
+ .map_or(default_window_size, parse_resolution_string);
+
+ let user_stylesheets = opt_match
+ .opt_strs("user-stylesheet")
.iter()
- .map(|pref| {
- let split: Vec<&str> = pref.splitn(2, '=').collect();
- let pref_name = split[0];
- let pref_value = match split.get(1).cloned() {
- Some("true") | None => PrefValue::Bool(true),
- Some("false") => PrefValue::Bool(false),
- Some(string) => {
- if let Ok(int) = string.parse::<i64>() {
- PrefValue::Int(int)
- } else if let Ok(float) = string.parse::<f64>() {
- PrefValue::Float(float)
- } else {
- PrefValue::from(string)
- }
- },
- };
- (pref_name.to_string(), pref_value)
+ .map(|filename| {
+ let cwd = env::current_dir().unwrap();
+ let path = cwd.join(filename);
+ let url = ServoUrl::from_url(Url::from_file_path(&path).unwrap());
+ let mut contents = Vec::new();
+ File::open(path)
+ .unwrap_or_else(|err| args_fail(&format!("Couldn't open {}: {}", filename, err)))
+ .read_to_end(&mut contents)
+ .unwrap_or_else(|err| args_fail(&format!("Couldn't read {}: {}", filename, err)));
+ (contents, url)
})
.collect();
- // Apply --prefs-file prefs first
- for prefs in prefs_from_files {
- userprefs.extend(prefs);
+ // Handle all command-line preferences overrides.
+ for pref in opt_match.opt_strs("pref") {
+ let split: Vec<&str> = pref.splitn(2, '=').collect();
+ let pref_name = split[0];
+ let pref_value = PrefValue::from_booleanish_str(split.get(1).copied().unwrap_or("true"));
+ preferences.set_value(pref_name, pref_value);
}
- // Then apply individually passed prefs from --pref
- userprefs.extend(argprefs);
+ let legacy_layout = opt_match.opt_present("legacy-layout");
+ if legacy_layout {
+ preferences.layout_legacy_layout = true;
+ }
- prefs::add_user_prefs(userprefs);
+ if let Some(layout_threads) = layout_threads {
+ preferences.layout_threads = layout_threads as i64;
+ }
+
+ let no_native_titlebar = opt_match.opt_present("no-native-titlebar");
+ let mut device_pixel_ratio_override = opt_match.opt_str("device-pixel-ratio").map(|dppx_str| {
+ dppx_str.parse().unwrap_or_else(|err| {
+ error!("Error parsing option: --device-pixel-ratio ({})", err);
+ process::exit(1);
+ })
+ });
+
+ // If an output file is specified the device pixel ratio is always 1.
+ let output_file = opt_match.opt_str("o");
+ if output_file.is_some() {
+ device_pixel_ratio_override = Some(1.0);
+ }
+
+ let url = if !opt_match.free.is_empty() {
+ Some(opt_match.free[0][..].into())
+ } else {
+ None
+ };
+
+ // FIXME: enable JIT compilation on 32-bit Android after the startup crash issue (#31134) is fixed.
+ if cfg!(target_os = "android") && cfg!(target_pointer_width = "32") {
+ preferences.js_baseline_interpreter_enabled = false;
+ preferences.js_baseline_jit_enabled = false;
+ preferences.js_ion_enabled = false;
+ }
+
+ let servoshell_preferences = ServoShellPreferences {
+ user_agent: opt_match.opt_str("u"),
+ url,
+ no_native_titlebar,
+ device_pixel_ratio_override,
+ clean_shutdown: opt_match.opt_present("clean-shutdown"),
+ ..Default::default()
+ };
+
+ let headless = opt_match.opt_present("z");
+ if headless && preferences.media_glvideo_enabled {
+ warn!("GL video rendering is not supported on headless windows.");
+ preferences.media_glvideo_enabled = false;
+ }
+
+ let opts = Opts {
+ debug: debug_options.clone(),
+ legacy_layout,
+ tile_size,
+ time_profiling,
+ time_profiler_trace_path: opt_match.opt_str("profiler-trace-path"),
+ mem_profiler_period,
+ nonincremental_layout,
+ userscripts: opt_match.opt_default("userscripts", ""),
+ user_stylesheets,
+ output_file,
+ headless,
+ hard_fail: opt_match.opt_present("f") && !opt_match.opt_present("F"),
+ webdriver_port,
+ initial_window_size,
+ screen_size_override,
+ multiprocess: opt_match.opt_present("M"),
+ background_hang_monitor: opt_match.opt_present("B"),
+ sandbox: opt_match.opt_present("S"),
+ random_pipeline_closure_probability,
+ random_pipeline_closure_seed,
+ exit_after_load: opt_match.opt_present("x"),
+ config_dir,
+ shaders_dir: opt_match.opt_str("shaders").map(Into::into),
+ certificate_path: opt_match.opt_str("certificate-path"),
+ ignore_certificate_errors: opt_match.opt_present("ignore-certificate-errors"),
+ unminify_js: opt_match.opt_present("unminify-js"),
+ local_script_source: opt_match.opt_str("local-script-source"),
+ unminify_css: opt_match.opt_present("unminify-css"),
+ print_pwm: opt_match.opt_present("print-pwm"),
+ };
+
+ ArgumentParsingResult::ChromeProcess(opts, preferences, servoshell_preferences)
}
-fn read_prefs_file(path: &str) -> HashMap<String, PrefValue> {
- let mut file = File::open(path).expect("Error opening user prefs");
- let mut txt = String::new();
- file.read_to_string(&mut txt)
- .expect("Can't read user prefs file");
- prefs::read_prefs_map(&txt).expect("Can't parse user prefs file")
+fn args_fail(msg: &str) -> ! {
+ eprintln!("{}", msg);
+ process::exit(1)
+}
+
+fn print_usage(app: &str, opts: &Options) {
+ let message = format!(
+ "Usage: {} [ options ... ] [URL]\n\twhere options include",
+ app
+ );
+ println!("{}", opts.usage(&message));
+}
+
+fn print_debug_options_usage(app: &str) {
+ fn print_option(name: &str, description: &str) {
+ println!("\t{:<35} {}", name, description);
+ }
+
+ println!(
+ "Usage: {} debug option,[options,...]\n\twhere options include\n\nOptions:",
+ app
+ );
+
+ print_option(
+ "bubble-inline-sizes-separately",
+ "Bubble intrinsic widths separately like other engines.",
+ );
+ print_option(
+ "convert-mouse-to-touch",
+ "Send touch events instead of mouse events",
+ );
+ print_option(
+ "disable-canvas-aa",
+ "Disable antialiasing on the HTML canvas element.",
+ );
+ print_option(
+ "disable-share-style-cache",
+ "Disable the style sharing cache.",
+ );
+ print_option(
+ "disable-subpixel-aa",
+ "Disable subpixel text antialiasing overriding preference.",
+ );
+ print_option("disable-text-aa", "Disable antialiasing of rendered text.");
+ print_option(
+ "dump-stacking-context-tree",
+ "Print the stacking context tree after each layout.",
+ );
+ print_option(
+ "dump-display-list",
+ "Print the display list after each layout.",
+ );
+ print_option(
+ "dump-display-list-json",
+ "Print the display list in JSON form.",
+ );
+ print_option(
+ "dump-flow-tree",
+ "Print the flow tree (Layout 2013) or fragment tree (Layout 2020) after each layout.",
+ );
+ print_option(
+ "dump-rule-tree",
+ "Print the style rule tree after each layout.",
+ );
+ print_option(
+ "dump-style-tree",
+ "Print the DOM with computed styles after each restyle.",
+ );
+ print_option("dump-style-stats", "Print style statistics each restyle.");
+ print_option("gc-profile", "Log GC passes and their durations.");
+ print_option(
+ "load-webfonts-synchronously",
+ "Load web fonts synchronously to avoid non-deterministic network-driven reflows",
+ );
+ print_option(
+ "parallel-display-list-building",
+ "Build display lists in parallel.",
+ );
+ print_option("precache-shaders", "Compile all shaders during init.");
+ print_option(
+ "profile-script-events",
+ "Enable profiling of script-related events.",
+ );
+ print_option(
+ "relayout-event",
+ "Print notifications when there is a relayout.",
+ );
+ print_option("replace-surrogates", "Replace unpaires surrogates in DOM strings with U+FFFD. See https://github.com/servo/servo/issues/6564");
+ print_option(
+ "show-fragment-borders",
+ "Paint borders along fragment boundaries.",
+ );
+ print_option(
+ "show-parallel-layout",
+ "Mark which thread laid each flow out with colors.",
+ );
+ print_option(
+ "signpost",
+ "Emit native OS signposts for profile events (currently macOS only)",
+ );
+ print_option(
+ "trace-layout",
+ "Write layout trace to an external file for debugging.",
+ );
+ print_option("wr-stats", "Show WebRender profiler on screen.");
+
+ println!();
+
+ process::exit(0)
}
#[cfg(test)]
-fn test_parse_pref(arg: &str) {
- let mut opts = getopts::Options::new();
- opts.optmulti("", "pref", "", "");
- opts.optmulti("", "prefs-file", "", "");
+fn test_parse_pref(arg: &str) -> Preferences {
let args = vec!["servo".to_string(), "--pref".to_string(), arg.to_string()];
- let matches = match opts::from_cmdline_args(opts, &args) {
- opts::ArgumentParsingResult::ContentProcess(m, _) => m,
- opts::ArgumentParsingResult::ChromeProcess(m) => m,
- };
- register_user_prefs(&matches);
+ match parse_command_line_arguments(args) {
+ ArgumentParsingResult::ContentProcess(..) => {
+ unreachable!("No preferences for content process")
+ },
+ ArgumentParsingResult::ChromeProcess(_, preferences, _) => preferences,
+ }
}
#[test]
fn test_parse_pref_from_command_line() {
- use servo::servo_config::pref;
// Test with boolean values.
- test_parse_pref("dom.bluetooth.enabled=true");
- assert_eq!(
- prefs::pref_map().get("dom.bluetooth.enabled"),
- PrefValue::Bool(true)
- );
- assert!(pref!(dom.bluetooth.enabled));
+ let preferences = test_parse_pref("dom_bluetooth_enabled=true");
+ assert!(preferences.dom_bluetooth_enabled);
- test_parse_pref("dom.bluetooth.enabled=false");
- assert_eq!(
- prefs::pref_map().get("dom.bluetooth.enabled"),
- PrefValue::Bool(false)
- );
- assert_eq!(pref!(dom.bluetooth.enabled), false);
+ let preferences = test_parse_pref("dom_bluetooth_enabled=false");
+ assert!(!preferences.dom_bluetooth_enabled);
// Test with numbers
- test_parse_pref("layout.threads=42");
- assert_eq!(pref!(layout.threads), 42);
+ let preferences = test_parse_pref("layout_threads=42");
+ assert_eq!(preferences.layout_threads, 42);
// Test string.
- test_parse_pref("shell.homepage=str");
- assert_eq!(pref!(shell.homepage), "str");
+ let preferences = test_parse_pref("fonts_default=Lucida");
+ assert_eq!(preferences.fonts_default, "Lucida");
// Test with no value (defaults to true).
- prefs::pref_map()
- .set("dom.bluetooth.enabled", false)
- .unwrap();
- test_parse_pref("dom.bluetooth.enabled");
- assert!(pref!(dom.bluetooth.enabled));
+ let preferences = test_parse_pref("dom_bluetooth_enabled");
+ assert!(preferences.dom_bluetooth_enabled);
}
#[test]
@@ -130,12 +744,18 @@ fn test_invalid_prefs_from_command_line_panics() {
.err()
.and_then(|a| a.downcast_ref::<String>().cloned())
.expect("Should panic");
- assert!(
- err_msg.starts_with("Error setting preference"),
+ assert_eq!(
+ err_msg, "Unknown preference: \"doesntexist\"",
"Message should describe the problem"
- );
- assert!(
- err_msg.contains("doesntexist"),
- "Message should mention the name of the preference"
- );
+ )
+}
+
+#[test]
+fn test_create_prefs_map() {
+ let json_str = "{
+ \"layout.writing-mode.enabled\": true,
+ \"network.mime.sniff\": false,
+ \"shell.homepage\": \"https://servo.org\"
+ }";
+ assert_eq!(read_prefs_map(json_str).len(), 3);
}
diff --git a/ports/servoshell/test.rs b/ports/servoshell/test.rs
index 0ee94d44829..0ff470f8b90 100644
--- a/ports/servoshell/test.rs
+++ b/ports/servoshell/test.rs
@@ -89,15 +89,17 @@ fn test_argument_parsing_special() {
// Helper function to test url
fn test_url(input: &str, location: &str, cmdline_if_exists: &str, cmdline_otherwise: &str) {
assert_eq!(
- location_bar_input_to_url(input).unwrap().into_string(),
+ location_bar_input_to_url(input, "https://duckduckgo.com/html/?q=%s")
+ .unwrap()
+ .into_string(),
location
);
assert_eq!(
- get_default_url(Some(input), FAKE_CWD, |_| true).into_string(),
+ get_default_url(Some(input), FAKE_CWD, |_| true, &Default::default()).into_string(),
cmdline_if_exists
);
assert_eq!(
- get_default_url(Some(input), FAKE_CWD, |_| false).into_string(),
+ get_default_url(Some(input), FAKE_CWD, |_| false, &Default::default()).into_string(),
cmdline_otherwise
);
}
diff --git a/resources/prefs.json b/resources/prefs.json
index d831ccf4d6a..3ae80ab9da7 100644
--- a/resources/prefs.json
+++ b/resources/prefs.json
@@ -1,135 +1,135 @@
{
- "devtools.server.enabled": false,
- "devtools.server.port": 0,
- "dom.abort_controller.enabled": false,
- "dom.allow_scripts_to_close_windows": false,
- "dom.bluetooth.enabled": false,
- "dom.bluetooth.testing.enabled": false,
- "dom.canvas_capture.enabled": false,
- "dom.canvas_text.enabled": true,
- "dom.compositionevent.enabled": false,
- "dom.crypto.subtle.enabled": true,
- "dom.customelements.enabled": true,
- "dom.document.dblclick_dist": 1,
- "dom.document.dblclick_timeout": 300,
- "dom.forcetouch.enabled": false,
- "dom.fullscreen.test": false,
- "dom.gamepad.enabled": true,
- "dom.imagebitmap.enabled": false,
- "dom.intersection_observer.enabled": false,
- "dom.microdata.enabled": false,
- "dom.microdata.testing.enabled": false,
- "dom.mouseevent.which.enabled": false,
- "dom.mutation_observer.enabled": true,
- "dom.offscreen_canvas.enabled": false,
- "dom.permissions.enabled": false,
- "dom.permissions.testing.allowed_in_nonsecure_contexts": false,
- "dom.resize_observer.enabled": false,
- "dom.script.asynch": true,
- "dom.serviceworker.enabled": false,
- "dom.serviceworker.timeout_seconds": 60,
- "dom.servo_helpers.enabled": false,
- "dom.servoparser.async_html_tokenizer.enabled": false,
- "dom.shadowdom.enabled": false,
- "dom.svg.enabled": false,
- "dom.testable_crash.enabled": false,
- "dom.testbinding.enabled": false,
- "dom.testing.htmlinputelement.select_files.enabled": false,
- "dom.webgl2.enabled": false,
- "dom.webgpu.enabled": false,
- "dom.webgpu.wgpu_backend": "",
- "dom.webrtc.enabled": false,
- "dom.webrtc.transceiver.enabled": false,
- "dom.webvtt.enabled": false,
- "dom.webxr.enabled": true,
- "dom.webxr.first_person_observer_view": false,
- "dom.webxr.glwindow.cubemap": false,
- "dom.webxr.glwindow.enabled": true,
- "dom.webxr.glwindow.left-right": false,
- "dom.webxr.glwindow.red-cyan": false,
- "dom.webxr.glwindow.spherical": false,
- "dom.webxr.hands.enabled": true,
- "dom.webxr.layers.enabled": false,
- "dom.webxr.openxr.enabled": true,
- "dom.webxr.sessionavailable": false,
- "dom.webxr.test": false,
- "dom.webxr.unsafe-assume-user-intent": false,
- "dom.worklet.timeout_ms": 10,
- "dom.xpath.enabled": false,
- "gfx.subpixel-text-antialiasing.enabled": true,
- "gfx.texture-swizzling.enabled": true,
- "js.asmjs.enabled": true,
- "js.asyncstack.enabled": false,
- "js.baseline_interpreter.enabled": true,
- "js.baseline_jit.enabled": true,
- "js.baseline_jit.unsafe_eager_compilation.enabled": false,
- "js.disable_jit": false,
- "js.discard_system_source.enabled": false,
- "js.dump_stack_on_debuggee_would_run.enabled": false,
- "js.ion.enabled": true,
- "js.ion.offthread_compilation.enabled": true,
- "js.ion.unsafe_eager_compilation.enabled": false,
- "js.mem.gc.allocation_threshold_avoid_interrupt_factor": 100,
- "js.mem.gc.allocation_threshold_factor": 100,
- "js.mem.gc.allocation_threshold_mb": 30,
- "js.mem.gc.compacting.enabled": true,
- "js.mem.gc.decommit_threshold_mb": 32,
- "js.mem.gc.dynamic_heap_growth.enabled": true,
- "js.mem.gc.dynamic_mark_slice.enabled": true,
- "js.mem.gc.empty_chunk_count_max": 30,
- "js.mem.gc.empty_chunk_count_min": 1,
- "js.mem.gc.high_frequency_heap_growth_max": 300,
- "js.mem.gc.high_frequency_heap_growth_min": 150,
- "js.mem.gc.high_frequency_high_limit_mb": 500,
- "js.mem.gc.high_frequency_low_limit_mb": 100,
- "js.mem.gc.high_frequency_time_limit_ms": 1000,
- "js.mem.gc.incremental.enabled": true,
- "js.mem.gc.incremental.slice_ms": 10,
- "js.mem.gc.low_frequency_heap_growth": 150,
- "js.mem.gc.per_zone.enabled": false,
- "js.mem.gc.zeal.frequency": 100,
- "js.mem.gc.zeal.level": 0,
- "js.mem.max": -1,
- "js.native_regex.enabled": true,
- "js.offthread_compilation.enabled": true,
- "js.parallel_parsing.enabled": true,
- "js.shared_memory.enabled": true,
- "js.throw_on_asmjs_validation_failure.enabled": false,
- "js.throw_on_debuggee_would_run.enabled": false,
- "js.timers.minimum_duration": 1000,
- "js.wasm.baseline.enabled": true,
- "js.wasm.enabled": true,
- "js.wasm.ion.enabled": true,
- "js.werror.enabled": false,
- "layout.animations.test.enabled": false,
- "layout.columns.enabled": false,
- "layout.css.transition-behavior.enabled": true,
- "layout.flexbox.enabled": true,
- "layout.grid.enabled": false,
- "layout.legacy_layout": false,
- "layout.threads": 3,
- "layout.writing-mode.enabled": false,
- "media.glvideo.enabled": false,
- "media.testing.enabled": false,
- "network.enforce_tls.enabled": false,
- "network.enforce_tls.localhost": false,
- "network.enforce_tls.onion": false,
- "network.http-cache.disabled": false,
- "network.local_directory_listing.enabled": false,
- "network.mime.sniff": false,
- "network.tls.ignore_unexpected_eof": false,
- "session-history.max-length": 20,
- "shell.background-color.rgba": [1.0, 1.0, 1.0, 1.0],
- "shell.crash_reporter.enabled": false,
- "shell.homepage": "https://servo.org",
- "shell.keep_screen_on.enabled": false,
- "shell.native-orientation": "both",
- "shell.native-titlebar.enabled": true,
- "shell.searchpage": "https://duckduckgo.com/html/?q=%s",
- "threadpools.async_runtime_workers.max": 6,
- "threadpools.fallback_worker_num": 3,
- "threadpools.image_cache_workers.max": 4,
- "threadpools.resource_workers.max": 4,
- "threadpools.webrender_workers.max": 4,
- "webgl.testing.context_creation_error": false
+ "devtools_server_enabled": false,
+ "devtools_server_port": 0,
+ "dom_abort_controller_enabled": false,
+ "dom_allow_scripts_to_close_windows": false,
+ "dom_bluetooth_enabled": false,
+ "dom_bluetooth_testing_enabled": false,
+ "dom_canvas_capture_enabled": false,
+ "dom_canvas_text_enabled": true,
+ "dom_compositionevent_enabled": false,
+ "dom_crypto_subtle_enabled": true,
+ "dom_customelements_enabled": true,
+ "dom_document_dblclick_dist": 1,
+ "dom_document_dblclick_timeout": 300,
+ "dom_forcetouch_enabled": false,
+ "dom_fullscreen_test": false,
+ "dom_gamepad_enabled": true,
+ "dom_imagebitmap_enabled": false,
+ "dom_intersection_observer_enabled": false,
+ "dom_microdata_enabled": false,
+ "dom_microdata_testing_enabled": false,
+ "dom_mouse_event_which_enabled": false,
+ "dom_mutation_observer_enabled": true,
+ "dom_offscreen_canvas_enabled": false,
+ "dom_permissions_enabled": false,
+ "dom_permissions_testing_allowed_in_nonsecure_contexts": false,
+ "dom_resize_observer_enabled": false,
+ "dom_script_asynch": true,
+ "dom_serviceworker_enabled": false,
+ "dom_serviceworker_timeout_seconds": 60,
+ "dom_servo_helpers_enabled": false,
+ "dom_servoparser_async_html_tokenizer_enabled": false,
+ "dom_shadowdom_enabled": false,
+ "dom_svg_enabled": false,
+ "dom_testable_crash_enabled": false,
+ "dom_testbinding_enabled": false,
+ "dom_testing_html_input_element_select_files_enabled": false,
+ "dom_webgl2_enabled": false,
+ "dom_webgpu_enabled": false,
+ "dom_webgpu_wgpu_backend": "",
+ "dom_webrtc_enabled": false,
+ "dom_webrtc_transceiver_enabled": false,
+ "dom_webvtt_enabled": false,
+ "dom_webxr_enabled": true,
+ "dom_webxr_first_person_observer_view": false,
+ "dom_webxr_glwindow_cubemap": false,
+ "dom_webxr_glwindow_enabled": true,
+ "dom_webxr_glwindow_left-right": false,
+ "dom_webxr_glwindow_red-cyan": false,
+ "dom_webxr_glwindow_spherical": false,
+ "dom_webxr_hands_enabled": true,
+ "dom_webxr_layers_enabled": false,
+ "dom_webxr_openxr_enabled": true,
+ "dom_webxr_sessionavailable": false,
+ "dom_webxr_test": false,
+ "dom_webxr_unsafe-assume-user-intent": false,
+ "dom_worklet_timeout_ms": 10,
+ "dom_xpath_enabled": false,
+ "gfx_subpixel-text-antialiasing_enabled": true,
+ "gfx_texture-swizzling_enabled": true,
+ "js_asmjs_enabled": true,
+ "js_asyncstack_enabled": false,
+ "js_baseline_interpreter_enabled": true,
+ "js_baseline_jit_enabled": true,
+ "js_baseline_jit_unsafe_eager_compilation_enabled": false,
+ "js_disable_jit": false,
+ "js_discard_system_source_enabled": false,
+ "js_dump_stack_on_debuggee_would_run_enabled": false,
+ "js_ion_enabled": true,
+ "js_ion_offthread_compilation_enabled": true,
+ "js_ion_unsafe_eager_compilation_enabled": false,
+ "js_mem_gc_allocation_threshold_avoid_interrupt_factor": 100,
+ "js_mem_gc_allocation_threshold_factor": 100,
+ "js_mem_gc_allocation_threshold_mb": 30,
+ "js_mem_gc_compacting_enabled": true,
+ "js_mem_gc_decommit_threshold_mb": 32,
+ "js_mem_gc_dynamic_heap_growth_enabled": true,
+ "js_mem_gc_dynamic_mark_slice_enabled": true,
+ "js_mem_gc_empty_chunk_count_max": 30,
+ "js_mem_gc_empty_chunk_count_min": 1,
+ "js_mem_gc_high_frequency_heap_growth_max": 300,
+ "js_mem_gc_high_frequency_heap_growth_min": 150,
+ "js_mem_gc_high_frequency_high_limit_mb": 500,
+ "js_mem_gc_high_frequency_low_limit_mb": 100,
+ "js_mem_gc_high_frequency_time_limit_ms": 1000,
+ "js_mem_gc_incremental_enabled": true,
+ "js_mem_gc_incremental_slice_ms": 10,
+ "js_mem_gc_low_frequency_heap_growth": 150,
+ "js_mem_gc_per_zone_enabled": false,
+ "js_mem_gc_zeal_frequency": 100,
+ "js_mem_gc_zeal_level": 0,
+ "js_mem_max": -1,
+ "js_native_regex_enabled": true,
+ "js_offthread_compilation_enabled": true,
+ "js_parallel_parsing_enabled": true,
+ "js_shared_memory_enabled": true,
+ "js_throw_on_asmjs_validation_failure_enabled": false,
+ "js_throw_on_debuggee_would_run_enabled": false,
+ "js_timers_minimum_duration": 1000,
+ "js_wasm_baseline_enabled": true,
+ "js_wasm_enabled": true,
+ "js_wasm_ion_enabled": true,
+ "js_werror_enabled": false,
+ "layout_animations_test_enabled": false,
+ "layout_columns_enabled": false,
+ "layout_css_transition-behavior_enabled": true,
+ "layout_flexbox_enabled": true,
+ "layout_grid_enabled": false,
+ "layout_legacy_layout": false,
+ "layout_threads": 3,
+ "layout_writing-mode_enabled": false,
+ "media_glvideo_enabled": false,
+ "media_testing_enabled": false,
+ "network_enforce_tls_enabled": false,
+ "network_enforce_tls_localhost": false,
+ "network_enforce_tls_onion": false,
+ "network_http-cache_disabled": false,
+ "network_local_directory_listing_enabled": false,
+ "network_mime_sniff": false,
+ "network_tls_ignore_unexpected_eof": false,
+ "session-history_max-length": 20,
+ "shell_background-color_rgba": [1.0, 1.0, 1.0, 1.0],
+ "shell_crash_reporter_enabled": false,
+ "shell_homepage": "https://servo_org",
+ "shell_keep_screen_on_enabled": false,
+ "shell_native-orientation": "both",
+ "shell_native-titlebar_enabled": true,
+ "shell_searchpage": "https://duckduckgo_com/html/?q=%s",
+ "threadpools_async_runtime_workers_max": 6,
+ "threadpools_fallback_worker_num": 3,
+ "threadpools_image_cache_workers_max": 4,
+ "threadpools_resource_workers_max": 4,
+ "threadpools_webrender_workers_max": 4,
+ "webgl_testing_context_creation_error": false
}
diff --git a/resources/wpt-prefs.json b/resources/wpt-prefs.json
index bb3185e2630..6de7b9efbf1 100644
--- a/resources/wpt-prefs.json
+++ b/resources/wpt-prefs.json
@@ -1,4 +1,4 @@
{
- "dom.webxr.test": true,
- "network.tls.ignore_unexpected_eof": true
+ "dom_webxr_test": true,
+ "network_tls_ignore_unexpected_eof": true
}
diff --git a/tests/wpt/meta-legacy-layout/WebCryptoAPI/__dir__.ini b/tests/wpt/meta-legacy-layout/WebCryptoAPI/__dir__.ini
index 71feefa5fb7..67f689a6cde 100644
--- a/tests/wpt/meta-legacy-layout/WebCryptoAPI/__dir__.ini
+++ b/tests/wpt/meta-legacy-layout/WebCryptoAPI/__dir__.ini
@@ -1 +1 @@
-prefs: [dom.crypto.subtle.enabled: true] \ No newline at end of file
+prefs: [dom_crypto_subtle_enabled: true] \ No newline at end of file
diff --git a/tests/wpt/meta-legacy-layout/__dir__.ini b/tests/wpt/meta-legacy-layout/__dir__.ini
index 60a490fc6ff..c512e4494a3 100644
--- a/tests/wpt/meta-legacy-layout/__dir__.ini
+++ b/tests/wpt/meta-legacy-layout/__dir__.ini
@@ -1 +1 @@
-prefs: ["dom.imagebitmap.enabled:true"]
+prefs: ["dom_imagebitmap_enabled:true"]
diff --git a/tests/wpt/meta-legacy-layout/bluetooth/__dir__.ini b/tests/wpt/meta-legacy-layout/bluetooth/__dir__.ini
index dfe57e6fd66..bc634adeb33 100644
--- a/tests/wpt/meta-legacy-layout/bluetooth/__dir__.ini
+++ b/tests/wpt/meta-legacy-layout/bluetooth/__dir__.ini
@@ -1 +1 @@
-prefs: ["dom.bluetooth.enabled:true"]
+prefs: ["dom_bluetooth_enabled:true"]
diff --git a/tests/wpt/meta-legacy-layout/bluetooth/requestDevice/canonicalizeFilter/__dir__.ini b/tests/wpt/meta-legacy-layout/bluetooth/requestDevice/canonicalizeFilter/__dir__.ini
index 22af3fbe970..bb4133833c8 100644
--- a/tests/wpt/meta-legacy-layout/bluetooth/requestDevice/canonicalizeFilter/__dir__.ini
+++ b/tests/wpt/meta-legacy-layout/bluetooth/requestDevice/canonicalizeFilter/__dir__.ini
@@ -1,2 +1,2 @@
-prefs: ["dom.bluetooth.enabled:true"]
+prefs: ["dom_bluetooth_enabled:true"]
disabled: "#23066"
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/__dir__.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/__dir__.ini
index e4af70583e1..bd1bf899085 100644
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/__dir__.ini
+++ b/tests/wpt/meta-legacy-layout/css/css-flexbox/__dir__.ini
@@ -1 +1 @@
-prefs: ["layout.columns.enabled:true", "layout.flexbox.enabled:true"]
+prefs: ["layout_columns_enabled:true", "layout_flexbox_enabled:true"]
diff --git a/tests/wpt/meta-legacy-layout/css/css-multicol/__dir__.ini b/tests/wpt/meta-legacy-layout/css/css-multicol/__dir__.ini
index 383f96c4de9..892701f1faa 100644
--- a/tests/wpt/meta-legacy-layout/css/css-multicol/__dir__.ini
+++ b/tests/wpt/meta-legacy-layout/css/css-multicol/__dir__.ini
@@ -1 +1 @@
-prefs: ["layout.columns.enabled:true"]
+prefs: ["layout_columns_enabled:true"]
diff --git a/tests/wpt/meta-legacy-layout/css/css-paint-api/__dir__.ini b/tests/wpt/meta-legacy-layout/css/css-paint-api/__dir__.ini
index 40806a19f49..ae295782025 100644
--- a/tests/wpt/meta-legacy-layout/css/css-paint-api/__dir__.ini
+++ b/tests/wpt/meta-legacy-layout/css/css-paint-api/__dir__.ini
@@ -1 +1 @@
-prefs: [dom.worklet.enabled:true, dom.worklet.timeout_ms:5000]
+prefs: [dom_worklet_enabled:true, dom_worklet_timeout_ms:5000]
diff --git a/tests/wpt/meta-legacy-layout/dom/nodes/__dir__.ini b/tests/wpt/meta-legacy-layout/dom/nodes/__dir__.ini
index 9aec2255c10..9743a9a6251 100644
--- a/tests/wpt/meta-legacy-layout/dom/nodes/__dir__.ini
+++ b/tests/wpt/meta-legacy-layout/dom/nodes/__dir__.ini
@@ -1,2 +1,2 @@
-prefs: ["dom.mutation_observer.enabled:true"]
+prefs: ["dom_mutation_observer_enabled:true"]
diff --git a/tests/wpt/meta-legacy-layout/gamepad/__dir__.ini b/tests/wpt/meta-legacy-layout/gamepad/__dir__.ini
index 7c5c7c7dd57..f10d7d4f48e 100644
--- a/tests/wpt/meta-legacy-layout/gamepad/__dir__.ini
+++ b/tests/wpt/meta-legacy-layout/gamepad/__dir__.ini
@@ -1 +1 @@
-prefs: [dom.gamepad.enabled:true]
+prefs: [dom_gamepad_enabled:true]
diff --git a/tests/wpt/meta-legacy-layout/html/canvas/__dir__.ini b/tests/wpt/meta-legacy-layout/html/canvas/__dir__.ini
index 03004f6efd7..e0b3c7bf146 100644
--- a/tests/wpt/meta-legacy-layout/html/canvas/__dir__.ini
+++ b/tests/wpt/meta-legacy-layout/html/canvas/__dir__.ini
@@ -1 +1 @@
-prefs: ["dom.offscreen_canvas.enabled:true"]
+prefs: ["dom_offscreen_canvas_enabled:true"]
diff --git a/tests/wpt/meta-legacy-layout/permissions/__dir__.ini b/tests/wpt/meta-legacy-layout/permissions/__dir__.ini
index dbc555f5fe3..6e0ca3e9bce 100644
--- a/tests/wpt/meta-legacy-layout/permissions/__dir__.ini
+++ b/tests/wpt/meta-legacy-layout/permissions/__dir__.ini
@@ -1 +1 @@
-prefs: ["dom.permissions.enabled:true"]
+prefs: ["dom_permissions_enabled:true"]
diff --git a/tests/wpt/meta-legacy-layout/service-workers/__dir__.ini b/tests/wpt/meta-legacy-layout/service-workers/__dir__.ini
index 263f9e73533..188c43180a1 100644
--- a/tests/wpt/meta-legacy-layout/service-workers/__dir__.ini
+++ b/tests/wpt/meta-legacy-layout/service-workers/__dir__.ini
@@ -1,2 +1,2 @@
-prefs: ["dom.serviceworker.enabled:true"]
+prefs: ["dom_serviceworker_enabled:true"]
diff --git a/tests/wpt/meta-legacy-layout/webvtt/__dir__.ini b/tests/wpt/meta-legacy-layout/webvtt/__dir__.ini
index a1f438d013a..69d02fac171 100644
--- a/tests/wpt/meta-legacy-layout/webvtt/__dir__.ini
+++ b/tests/wpt/meta-legacy-layout/webvtt/__dir__.ini
@@ -1,2 +1,2 @@
-prefs: ["dom.webvtt.enabled:true"]
+prefs: ["dom_webvtt_enabled:true"]
diff --git a/tests/wpt/meta-legacy-layout/webxr/__dir__.ini b/tests/wpt/meta-legacy-layout/webxr/__dir__.ini
index 828dff7605a..361edc79149 100644
--- a/tests/wpt/meta-legacy-layout/webxr/__dir__.ini
+++ b/tests/wpt/meta-legacy-layout/webxr/__dir__.ini
@@ -1 +1 @@
-prefs: [dom.webxr.test:true, dom.webgl2.enabled: true]
+prefs: [dom_webxr_test:true, dom_webgl2_enabled: true]
diff --git a/tests/wpt/meta/WebCryptoAPI/__dir__.ini b/tests/wpt/meta/WebCryptoAPI/__dir__.ini
index 71feefa5fb7..67f689a6cde 100644
--- a/tests/wpt/meta/WebCryptoAPI/__dir__.ini
+++ b/tests/wpt/meta/WebCryptoAPI/__dir__.ini
@@ -1 +1 @@
-prefs: [dom.crypto.subtle.enabled: true] \ No newline at end of file
+prefs: [dom_crypto_subtle_enabled: true] \ No newline at end of file
diff --git a/tests/wpt/meta/__dir__.ini b/tests/wpt/meta/__dir__.ini
index bb3e3d73f05..b78ab9506b3 100644
--- a/tests/wpt/meta/__dir__.ini
+++ b/tests/wpt/meta/__dir__.ini
@@ -1 +1 @@
-prefs: ["dom.imagebitmap.enabled:true", "dom.offscreen_canvas.enabled:true", "dom.shadowdom.enabled:true", "dom.xpath.enabled:true"]
+prefs: ["dom_imagebitmap_enabled:true", "dom_offscreen_canvas_enabled:true", "dom_shadowdom_enabled:true", "dom_xpath_enabled:true"]
diff --git a/tests/wpt/meta/css/css-align/__dir__.ini b/tests/wpt/meta/css/css-align/__dir__.ini
index e4af70583e1..bd1bf899085 100644
--- a/tests/wpt/meta/css/css-align/__dir__.ini
+++ b/tests/wpt/meta/css/css-align/__dir__.ini
@@ -1 +1 @@
-prefs: ["layout.columns.enabled:true", "layout.flexbox.enabled:true"]
+prefs: ["layout_columns_enabled:true", "layout_flexbox_enabled:true"]
diff --git a/tests/wpt/meta/css/css-flexbox/__dir__.ini b/tests/wpt/meta/css/css-flexbox/__dir__.ini
index e4af70583e1..bd1bf899085 100644
--- a/tests/wpt/meta/css/css-flexbox/__dir__.ini
+++ b/tests/wpt/meta/css/css-flexbox/__dir__.ini
@@ -1 +1 @@
-prefs: ["layout.columns.enabled:true", "layout.flexbox.enabled:true"]
+prefs: ["layout_columns_enabled:true", "layout_flexbox_enabled:true"]
diff --git a/tests/wpt/meta/css/css-grid/__dir__.ini b/tests/wpt/meta/css/css-grid/__dir__.ini
index 7d65365a765..745da0bac0a 100644
--- a/tests/wpt/meta/css/css-grid/__dir__.ini
+++ b/tests/wpt/meta/css/css-grid/__dir__.ini
@@ -1 +1 @@
-prefs: ["layout.columns.enabled:true", "layout.flexbox.enabled:true", "layout.grid.enabled:true"]
+prefs: ["layout_columns_enabled:true", "layout_flexbox_enabled:true", "layout_grid_enabled:true"]
diff --git a/tests/wpt/meta/gamepad/__dir__.ini b/tests/wpt/meta/gamepad/__dir__.ini
index 18827c1dbe2..925bd35d947 100644
--- a/tests/wpt/meta/gamepad/__dir__.ini
+++ b/tests/wpt/meta/gamepad/__dir__.ini
@@ -1 +1 @@
-prefs: [dom.gamepad.enabled: true] \ No newline at end of file
+prefs: [dom_gamepad_enabled: true] \ No newline at end of file
diff --git a/tests/wpt/meta/resize-observer/__dir__.ini b/tests/wpt/meta/resize-observer/__dir__.ini
index 4d4f1e646b2..19c126482f0 100644
--- a/tests/wpt/meta/resize-observer/__dir__.ini
+++ b/tests/wpt/meta/resize-observer/__dir__.ini
@@ -1 +1 @@
-prefs: ["dom.resize_observer.enabled:true"]
+prefs: ["dom_resize_observer_enabled:true"]
diff --git a/tests/wpt/meta/webxr/__dir__.ini b/tests/wpt/meta/webxr/__dir__.ini
index 16c2a8593c1..2e3a5cdb659 100644
--- a/tests/wpt/meta/webxr/__dir__.ini
+++ b/tests/wpt/meta/webxr/__dir__.ini
@@ -1 +1 @@
-prefs: [dom.webxr.test: true, dom.webgl2.enabled: true, dom.webxr.layers.enabled: true] \ No newline at end of file
+prefs: [dom_webxr_test: true, dom_webgl2_enabled: true, dom_webxr_layers_enabled: true] \ No newline at end of file
diff --git a/tests/wpt/mozilla/meta-legacy-layout/bluetooth/__dir__.ini b/tests/wpt/mozilla/meta-legacy-layout/bluetooth/__dir__.ini
index c95b7c11c1d..1afc2794872 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/bluetooth/__dir__.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/bluetooth/__dir__.ini
@@ -1 +1 @@
-prefs: [dom.bluetooth.enabled:true, dom.bluetooth.testing.enabled:true, dom.permissions.testing.allowed_in_nonsecure_contexts:true]
+prefs: [dom_bluetooth_enabled:true, dom_bluetooth_testing_enabled:true, dom_permissions_testing_allowed_in_nonsecure_contexts:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/css/animations/__dir__.ini b/tests/wpt/mozilla/meta-legacy-layout/css/animations/__dir__.ini
index 696581b4a4a..f66ed2ce1a5 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/css/animations/__dir__.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/css/animations/__dir__.ini
@@ -1,2 +1,2 @@
-prefs: ["layout.animations.test.enabled:true",
- "dom.testbinding.enabled:true"]
+prefs: ["layout_animations_test_enabled:true",
+ "dom_testbinding_enabled:true"]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/css/animations/animation-events.html.ini b/tests/wpt/mozilla/meta-legacy-layout/css/animations/animation-events.html.ini
index 33f08914f30..e0b3b5f6997 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/css/animations/animation-events.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/css/animations/animation-events.html.ini
@@ -1,2 +1,2 @@
-prefs: ["layout.animations.test.enabled:false",
- "dom.testbinding.enabled:false"]
+prefs: ["layout_animations_test_enabled:false",
+ "dom_testbinding_enabled:false"]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/css/animations/transition-events.html.ini b/tests/wpt/mozilla/meta-legacy-layout/css/animations/transition-events.html.ini
index f53fd6a5050..3e398039c00 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/css/animations/transition-events.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/css/animations/transition-events.html.ini
@@ -1,3 +1,3 @@
-prefs: ["layout.animations.test.enabled:false",
- "dom.testbinding.enabled:false"]
+prefs: ["layout_animations_test_enabled:false",
+ "dom_testbinding_enabled:false"]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/css/direction_style_caching.html.ini b/tests/wpt/mozilla/meta-legacy-layout/css/direction_style_caching.html.ini
index b04e9dc858f..02119ac9454 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/css/direction_style_caching.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/css/direction_style_caching.html.ini
@@ -1,3 +1,3 @@
-prefs: [layout.threads:1]
+prefs: [layout_threads:1]
[direction_style_caching.html]
type: reftest
diff --git a/tests/wpt/mozilla/meta-legacy-layout/css/iframe/size_attributes_vertical_writing_mode.html.ini b/tests/wpt/mozilla/meta-legacy-layout/css/iframe/size_attributes_vertical_writing_mode.html.ini
index b7fd0e36dd6..52fb0568645 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/css/iframe/size_attributes_vertical_writing_mode.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/css/iframe/size_attributes_vertical_writing_mode.html.ini
@@ -1,3 +1,3 @@
-prefs: [layout.writing-mode.enabled:true]
+prefs: [layout_writing_mode_enabled:true]
[size_attributes_vertical_writing_mode.html]
type: reftest
diff --git a/tests/wpt/mozilla/meta-legacy-layout/css/vertical-lr-blocks.html.ini b/tests/wpt/mozilla/meta-legacy-layout/css/vertical-lr-blocks.html.ini
index 2858c27f6ed..4710d41093f 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/css/vertical-lr-blocks.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/css/vertical-lr-blocks.html.ini
@@ -1,4 +1,4 @@
-prefs: [layout.writing-mode.enabled:true]
+prefs: [layout_writing_mode_enabled:true]
[vertical-lr-blocks.html]
type: reftest
expected: FAIL
diff --git a/tests/wpt/mozilla/meta-legacy-layout/css/writing-mode_change_display.html.ini b/tests/wpt/mozilla/meta-legacy-layout/css/writing-mode_change_display.html.ini
index 15717811207..a1b4bf67748 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/css/writing-mode_change_display.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/css/writing-mode_change_display.html.ini
@@ -1,3 +1,3 @@
-prefs: [layout.writing-mode.enabled:true]
+prefs: [layout_writing_mode_enabled:true]
[writing-mode_change_display.html]
type: testharness
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/FileAPI/blob_url_upload.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/FileAPI/blob_url_upload.html.ini
index 6ad257ede65..bc735bc38a2 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/FileAPI/blob_url_upload.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/FileAPI/blob_url_upload.html.ini
@@ -1,3 +1,3 @@
[blob_url_upload.html]
type: reftest
- prefs: [dom.testing.htmlinputelement.select_files.enabled:true]
+ prefs: [dom_testing_html_input_element_select_files_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/FileAPI/file-select.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/FileAPI/file-select.html.ini
index b047e230d99..318e272941d 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/FileAPI/file-select.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/FileAPI/file-select.html.ini
@@ -1,3 +1,3 @@
[file-select.html]
type: testharness
- prefs: [dom.testing.htmlinputelement.select_files.enabled:true]
+ prefs: [dom_testing_html_input_element_select_files_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/FileAPI/file-upload.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/FileAPI/file-upload.html.ini
index f3715f47bf9..26ffa70324d 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/FileAPI/file-upload.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/FileAPI/file-upload.html.ini
@@ -1,3 +1,3 @@
[file-upload.html]
type: testharness
- prefs: [dom.testing.htmlinputelement.select_files.enabled:true]
+ prefs: [dom_testing_html_input_element_select_files_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/activation.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/activation.html.ini
index e7b9f2349c3..96bb5bc6f86 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/activation.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/activation.html.ini
@@ -1,3 +1,3 @@
[activation.html]
type: testharness
- prefs: [dom.testing.element.activation.enabled:true]
+ prefs: [dom_testing_element_activation_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/binding_keyword.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/binding_keyword.html.ini
index 4b7bda760f0..2f27eb85244 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/binding_keyword.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/binding_keyword.html.ini
@@ -1,3 +1,3 @@
[binding_keyword.html]
type: testharness
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/calc.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/calc.html.ini
index e962fd6bbd5..c69d9c8e4ff 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/calc.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/calc.html.ini
@@ -1,3 +1,3 @@
[calc.html]
type: testharness
- prefs: [layout.columns.enabled:true]
+ prefs: [layout_columns_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/codegen_unions.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/codegen_unions.html.ini
index 6a8744c375d..1466ea82c0d 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/codegen_unions.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/codegen_unions.html.ini
@@ -1,3 +1,3 @@
[codegen_unions.html]
type: testharness
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/custom_auto_rooter.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/custom_auto_rooter.html.ini
index def641a83ba..4d3562b0c1c 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/custom_auto_rooter.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/custom_auto_rooter.html.ini
@@ -1,3 +1,3 @@
[custom_auto_rooter.html]
type: testharness
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/dictionary_to_jsval.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/dictionary_to_jsval.html.ini
index 850a38abfbc..ff7a331d22b 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/dictionary_to_jsval.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/dictionary_to_jsval.html.ini
@@ -1,2 +1,2 @@
[dictionary_to_jsval.html]
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/exceptionToRejection.any.js.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/exceptionToRejection.any.js.ini
index 7d7e4d9cdc7..ee2780a9a5a 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/exceptionToRejection.any.js.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/exceptionToRejection.any.js.ini
@@ -1,7 +1,7 @@
[exceptionToRejection.any.html]
type: testharness
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
[exceptionToRejection.any.worker.html]
type: testharness
- prefs: [dom.testbinding.enabled:true] \ No newline at end of file
+ prefs: [dom_testbinding_enabled:true] \ No newline at end of file
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/fullscreen/reftests/__dir__.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/fullscreen/reftests/__dir__.ini
index d2259b78e4e..91f58deb0c0 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/fullscreen/reftests/__dir__.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/fullscreen/reftests/__dir__.ini
@@ -1 +1 @@
-prefs: ["dom.fullscreen.test:true"]
+prefs: ["dom_fullscreen_test:true"]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/globals/entry.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/globals/entry.html.ini
index 52b122bc295..fe0c41210ac 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/globals/entry.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/globals/entry.html.ini
@@ -1,3 +1,3 @@
[entry.html]
type: testharness
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/globals/entry.worker.js.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/globals/entry.worker.js.ini
index 2205984347e..29638929d3f 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/globals/entry.worker.js.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/globals/entry.worker.js.ini
@@ -1,3 +1,3 @@
[entry.worker.html]
type: testharness
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/http-cache.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/http-cache.html.ini
index d52addb7abc..e14018c7235 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/http-cache.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/http-cache.html.ini
@@ -1,6 +1,6 @@
[http-cache.html]
type: testharness
- prefs: [network.http-cache.disabled:true]
+ prefs: [network_http_cache_disabled:true]
[HTTP cache, when disabled, does not cache a 200 response.]
expected: FAIL
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/interface_member_exposed.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/interface_member_exposed.html.ini
index cb010511bf7..cfd83349642 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/interface_member_exposed.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/interface_member_exposed.html.ini
@@ -1,3 +1,3 @@
[interface_member_exposed.html]
type: testharness
- prefs: [dom.testbinding.enabled:true, dom.testbinding.prefcontrolled2.enabled:true]
+ prefs: [dom_testbinding_enabled:true, dom_testbinding_prefcontrolled2_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/interfaces.https.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/interfaces.https.html.ini
index 32a9f966eeb..605489ac6bc 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/interfaces.https.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/interfaces.https.html.ini
@@ -1 +1 @@
-prefs: [dom.webxr.test: false] \ No newline at end of file
+prefs: [dom_webxr_test: false] \ No newline at end of file
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/iterable.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/iterable.html.ini
index 2316a8b3984..23e8bef9480 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/iterable.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/iterable.html.ini
@@ -1,3 +1,3 @@
[iterable.html]
type: testharness
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/like.any.js.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/like.any.js.ini
index 626c7c904f2..a4040cad82c 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/like.any.js.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/like.any.js.ini
@@ -1,6 +1,6 @@
[like.any.html]
type: testharness
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
[Test defaulting arguments on setlike to undefined]
expected: FAIL
@@ -12,7 +12,7 @@
[like.any.worker.html]
type: testharness
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
[Test defaulting arguments on setlike to undefined]
expected: FAIL
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/media_query_list_gc.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/media_query_list_gc.html.ini
index e30744b586d..f4ee735be13 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/media_query_list_gc.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/media_query_list_gc.html.ini
@@ -1 +1 @@
-prefs: ["dom.servo_helpers.enabled:true"]
+prefs: ["dom_servo_helpers_enabled:true"]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/microdata/__dir__.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/microdata/__dir__.ini
index f199618497d..b68814a2034 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/microdata/__dir__.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/microdata/__dir__.ini
@@ -1 +1 @@
-prefs: ["dom.microdata.testing.enabled:true"]
+prefs: ["dom_microdata_testing_enabled:true"]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/ns.any.js.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/ns.any.js.ini
index 1028c1162dd..749cda0d24e 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/ns.any.js.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/ns.any.js.ini
@@ -1,7 +1,7 @@
[ns.any.html]
type: testharness
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
[ns.any.worker.html]
type: testharness
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/overload_dict.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/overload_dict.html.ini
index 646813bf83c..12d91fea367 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/overload_dict.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/overload_dict.html.ini
@@ -1,3 +1,3 @@
[overload_dict.html]
type: testharness
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/partial_shadow_dom.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/partial_shadow_dom.html.ini
index 570ed139ec1..5e99741dc6f 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/partial_shadow_dom.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/partial_shadow_dom.html.ini
@@ -1,4 +1,4 @@
[partial_shadow_dom.html]
- prefs: [dom.shadowdom.enabled:true]
+ prefs: [dom_shadowdom_enabled:true]
[partial_shadow_dom]
expected: FAIL
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/partial_shadow_dom_layout_style.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/partial_shadow_dom_layout_style.html.ini
index 6612e2fb467..ebc51a2e59d 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/partial_shadow_dom_layout_style.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/partial_shadow_dom_layout_style.html.ini
@@ -1,2 +1,2 @@
[partial_shadow_dom_layout_style.html]
- prefs: [dom.shadowdom.enabled:true]
+ prefs: [dom_shadowdom_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/preferences.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/preferences.html.ini
index 83de4dd69cd..986d3d09917 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/preferences.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/preferences.html.ini
@@ -1,3 +1,3 @@
[preferences.html]
type: testharness
- prefs: [dom.testbinding.enabled:true, dom.testbinding.preference_value.falsy:false, dom.testbinding.preference_value.truthy:true, dom.testbinding.preference_value.string_empty:, dom.testbinding.preference_value.string_test:test, dom.testbinding.preference_value.space_string_test:test1 test2, dom.testbinding.preference_value.quote_string_test:"test1 test2"]
+ prefs: [dom_testbinding_enabled:true, dom_testbinding_preference_value_falsy:false, dom_testbinding_preference_value_truthy:true, dom_testbinding_preference_value_string_empty:, dom_testbinding_preference_value_string_test:test, dom_testbinding_preference_value_space_string_test:test1 test2, dom_testbinding_preference_value_quote_string_test:"test1 test2"]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/promise.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/promise.html.ini
index e5ac0e78cd9..85f32f8d2a1 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/promise.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/promise.html.ini
@@ -1,6 +1,6 @@
[promise.html]
type: testharness
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
[Native promise from async callback can be resolved]
expected: FAIL
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/prototypes.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/prototypes.html.ini
index e30744b586d..f4ee735be13 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/prototypes.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/prototypes.html.ini
@@ -1 +1 @@
-prefs: ["dom.servo_helpers.enabled:true"]
+prefs: ["dom_servo_helpers_enabled:true"]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/sequence-hole.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/sequence-hole.html.ini
index e3da43f8d3b..3e1cd2169c8 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/sequence-hole.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/sequence-hole.html.ini
@@ -1,3 +1,3 @@
[sequence-hole.html]
type: testharness
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/service-workers/__dir__.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/service-workers/__dir__.ini
index e4456cb4756..5baa980a233 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/service-workers/__dir__.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/service-workers/__dir__.ini
@@ -1 +1 @@
-prefs: ["dom.serviceworker.enabled:true"]
+prefs: ["dom_serviceworker_enabled:true"]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/sigsegv.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/sigsegv.html.ini
index 63ad264be81..4f116d7c3f8 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/sigsegv.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/sigsegv.html.ini
@@ -1,4 +1,4 @@
[sigsegv.html]
type: testharness
- prefs: [dom.testbinding.enabled:true, dom.testable_crash.enabled:true]
+ prefs: [dom_testbinding_enabled:true, dom_testable_crash_enabled:true]
expected: CRASH
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/svg/svg.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/svg/svg.html.ini
index 2f440fde23f..6d1a5d0b3ee 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/svg/svg.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/svg/svg.html.ini
@@ -1,3 +1,3 @@
[svg.html]
type: reftest
- prefs: [dom.svg.enabled:true]
+ prefs: [dom_svg_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/trace_null.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/trace_null.html.ini
index e30744b586d..f4ee735be13 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/trace_null.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/trace_null.html.ini
@@ -1 +1 @@
-prefs: ["dom.servo_helpers.enabled:true"]
+prefs: ["dom_servo_helpers_enabled:true"]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/transitionend_safety.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/transitionend_safety.html.ini
index e30744b586d..f4ee735be13 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/transitionend_safety.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/transitionend_safety.html.ini
@@ -1 +1 @@
-prefs: ["dom.servo_helpers.enabled:true"]
+prefs: ["dom_servo_helpers_enabled:true"]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/variadic-interface.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/variadic-interface.html.ini
index f21720b9363..ac12007d5e1 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/variadic-interface.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/variadic-interface.html.ini
@@ -1,3 +1,3 @@
[variadic-interface.html]
type: testharness
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/video_poster_frame.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/video_poster_frame.html.ini
index 300efbf7350..7594b72f4c4 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/video_poster_frame.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/video_poster_frame.html.ini
@@ -1,2 +1,2 @@
[video_poster_frame.html]
- prefs: [media.testing.enabled:true]
+ prefs: [media_testing_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/weakref.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/weakref.html.ini
index 8faf1a9b047..17ca8b55091 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/weakref.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/weakref.html.ini
@@ -1,3 +1,3 @@
[weakref.html]
type: testharness
- prefs: ["dom.testbinding.enabled:true", "dom.servo_helpers.enabled:true"]
+ prefs: ["dom_testbinding_enabled:true", "dom_servo_helpers_enabled:true"]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/webgl/context_creation_error.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/webgl/context_creation_error.html.ini
index cce1d7c3a5f..67020650ae9 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/webgl/context_creation_error.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/webgl/context_creation_error.html.ini
@@ -1,3 +1,3 @@
[context_creation_error.html]
type: testharness
- prefs: [webgl.testing.context_creation_error:true]
+ prefs: [webgl_testing_context_creation_error:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/window_performance_topLevelDomComplete.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/window_performance_topLevelDomComplete.html.ini
index ac65905cb3d..5beb7dc6158 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/window_performance_topLevelDomComplete.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/window_performance_topLevelDomComplete.html.ini
@@ -1,3 +1,3 @@
[window_performance_topLevelDomComplete.html]
type: testharness
- prefs: [dom.testperf.enabled:true]
+ prefs: [dom_testperf_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/worklets/__dir__.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/worklets/__dir__.ini
index c000a50cb3b..1d33f917a21 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/worklets/__dir__.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/worklets/__dir__.ini
@@ -1 +1 @@
-prefs: [dom.worklet.enabled:true,dom.worklet.blockingsleep.enabled:true,dom.worklet.timeout_ms:5000]
+prefs: [dom_worklet_enabled:true,dom_worklet_blockingsleep_enabled:true,dom_worklet_timeout_ms:5000]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/worklets/test_paint_worklet_timeout.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/worklets/test_paint_worklet_timeout.html.ini
index bc2b728c300..d2b3d5537ff 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/worklets/test_paint_worklet_timeout.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/worklets/test_paint_worklet_timeout.html.ini
@@ -1,4 +1,4 @@
[test_paint_worklet_timeout.html]
type: testharness
- prefs: [dom.worklet.timeout_ms:10]
+ prefs: [dom_worklet_timeout_ms:10]
expected: PASS
diff --git a/tests/wpt/mozilla/meta-legacy-layout/mozilla/worklets/test_worklet.html.ini b/tests/wpt/mozilla/meta-legacy-layout/mozilla/worklets/test_worklet.html.ini
index 37762a513dd..45a182aece1 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/mozilla/worklets/test_worklet.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/mozilla/worklets/test_worklet.html.ini
@@ -1,3 +1,3 @@
[test_worklet.html]
type: testharness
- prefs: [dom.worklet.testing.enabled:true]
+ prefs: [dom_worklet_testing_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/webxr/__dir__.ini b/tests/wpt/mozilla/meta-legacy-layout/webxr/__dir__.ini
index fe96a649902..a36827bd1d6 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/webxr/__dir__.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/webxr/__dir__.ini
@@ -1,2 +1,2 @@
-prefs: [dom.webxr.enabled:true, dom.webxr.test:true]
+prefs: [dom_webxr_enabled:true, dom_webxr_test:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/webxr/layerevents.https.html.ini b/tests/wpt/mozilla/meta-legacy-layout/webxr/layerevents.https.html.ini
index 72e1e4fc0b2..dde4edb26a1 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/webxr/layerevents.https.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/webxr/layerevents.https.html.ini
@@ -1 +1 @@
-prefs: [dom.webxr.layers.enabled:true]
+prefs: [dom_webxr_layers_enabled:true]
diff --git a/tests/wpt/mozilla/meta-legacy-layout/webxr/layers.https.html.ini b/tests/wpt/mozilla/meta-legacy-layout/webxr/layers.https.html.ini
index 86b374c7e4b..3ebe90ed370 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/webxr/layers.https.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/webxr/layers.https.html.ini
@@ -1,4 +1,4 @@
-prefs: [dom.webxr.layers.enabled:true]
+prefs: [dom_webxr_layers_enabled:true]
[layers.https.html]
[layers]
expected: FAIL
diff --git a/tests/wpt/mozilla/meta-legacy-layout/webxr/sessionavailable.https.html.ini b/tests/wpt/mozilla/meta-legacy-layout/webxr/sessionavailable.https.html.ini
index 8bf6ba72fd8..53c832736b7 100644
--- a/tests/wpt/mozilla/meta-legacy-layout/webxr/sessionavailable.https.html.ini
+++ b/tests/wpt/mozilla/meta-legacy-layout/webxr/sessionavailable.https.html.ini
@@ -1,2 +1,2 @@
-prefs: [dom.webxr.sessionavailable:true]
+prefs: [dom_webxr_sessionavailable:true]
diff --git a/tests/wpt/mozilla/meta/css/animations/__dir__.ini b/tests/wpt/mozilla/meta/css/animations/__dir__.ini
index 696581b4a4a..f66ed2ce1a5 100644
--- a/tests/wpt/mozilla/meta/css/animations/__dir__.ini
+++ b/tests/wpt/mozilla/meta/css/animations/__dir__.ini
@@ -1,2 +1,2 @@
-prefs: ["layout.animations.test.enabled:true",
- "dom.testbinding.enabled:true"]
+prefs: ["layout_animations_test_enabled:true",
+ "dom_testbinding_enabled:true"]
diff --git a/tests/wpt/mozilla/meta/css/animations/animation-events.html.ini b/tests/wpt/mozilla/meta/css/animations/animation-events.html.ini
index 33f08914f30..e0b3b5f6997 100644
--- a/tests/wpt/mozilla/meta/css/animations/animation-events.html.ini
+++ b/tests/wpt/mozilla/meta/css/animations/animation-events.html.ini
@@ -1,2 +1,2 @@
-prefs: ["layout.animations.test.enabled:false",
- "dom.testbinding.enabled:false"]
+prefs: ["layout_animations_test_enabled:false",
+ "dom_testbinding_enabled:false"]
diff --git a/tests/wpt/mozilla/meta/css/animations/transition-events.html.ini b/tests/wpt/mozilla/meta/css/animations/transition-events.html.ini
index f53fd6a5050..3e398039c00 100644
--- a/tests/wpt/mozilla/meta/css/animations/transition-events.html.ini
+++ b/tests/wpt/mozilla/meta/css/animations/transition-events.html.ini
@@ -1,3 +1,3 @@
-prefs: ["layout.animations.test.enabled:false",
- "dom.testbinding.enabled:false"]
+prefs: ["layout_animations_test_enabled:false",
+ "dom_testbinding_enabled:false"]
diff --git a/tests/wpt/mozilla/meta/css/flex_align_content_stretch_subpixel.html.ini b/tests/wpt/mozilla/meta/css/flex_align_content_stretch_subpixel.html.ini
index 9984b470f38..7a21695e3d5 100644
--- a/tests/wpt/mozilla/meta/css/flex_align_content_stretch_subpixel.html.ini
+++ b/tests/wpt/mozilla/meta/css/flex_align_content_stretch_subpixel.html.ini
@@ -1,2 +1,2 @@
[flex_align_content_stretch_subpixel.html]
- prefs: ["layout.flexbox.enabled:true"]
+ prefs: ["layout_flexbox_enabled:true"]
diff --git a/tests/wpt/mozilla/meta/mozilla/DOMParser-parseFromString.html.ini b/tests/wpt/mozilla/meta/mozilla/DOMParser-parseFromString.html.ini
index 6fb710b0407..4ea07616469 100644
--- a/tests/wpt/mozilla/meta/mozilla/DOMParser-parseFromString.html.ini
+++ b/tests/wpt/mozilla/meta/mozilla/DOMParser-parseFromString.html.ini
@@ -1,2 +1,2 @@
[DOMParser-parseFromString.html]
- prefs: ["dom.servoparser.async_html_tokenizer.enabled:true"]
+ prefs: ["dom_servoparser_async_html_tokenizer_enabled:true"]
diff --git a/tests/wpt/mozilla/meta/mozilla/dictionary_to_jsval.html.ini b/tests/wpt/mozilla/meta/mozilla/dictionary_to_jsval.html.ini
index 850a38abfbc..ff7a331d22b 100644
--- a/tests/wpt/mozilla/meta/mozilla/dictionary_to_jsval.html.ini
+++ b/tests/wpt/mozilla/meta/mozilla/dictionary_to_jsval.html.ini
@@ -1,2 +1,2 @@
[dictionary_to_jsval.html]
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
diff --git a/tests/wpt/mozilla/meta/mozilla/exceptionToRejection.any.js.ini b/tests/wpt/mozilla/meta/mozilla/exceptionToRejection.any.js.ini
index 7d7e4d9cdc7..ee2780a9a5a 100644
--- a/tests/wpt/mozilla/meta/mozilla/exceptionToRejection.any.js.ini
+++ b/tests/wpt/mozilla/meta/mozilla/exceptionToRejection.any.js.ini
@@ -1,7 +1,7 @@
[exceptionToRejection.any.html]
type: testharness
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
[exceptionToRejection.any.worker.html]
type: testharness
- prefs: [dom.testbinding.enabled:true] \ No newline at end of file
+ prefs: [dom_testbinding_enabled:true] \ No newline at end of file
diff --git a/tests/wpt/mozilla/meta/mozilla/interfaces.https.html.ini b/tests/wpt/mozilla/meta/mozilla/interfaces.https.html.ini
index 32a9f966eeb..605489ac6bc 100644
--- a/tests/wpt/mozilla/meta/mozilla/interfaces.https.html.ini
+++ b/tests/wpt/mozilla/meta/mozilla/interfaces.https.html.ini
@@ -1 +1 @@
-prefs: [dom.webxr.test: false] \ No newline at end of file
+prefs: [dom_webxr_test: false] \ No newline at end of file
diff --git a/tests/wpt/mozilla/meta/mozilla/like.any.js.ini b/tests/wpt/mozilla/meta/mozilla/like.any.js.ini
index 626c7c904f2..a4040cad82c 100644
--- a/tests/wpt/mozilla/meta/mozilla/like.any.js.ini
+++ b/tests/wpt/mozilla/meta/mozilla/like.any.js.ini
@@ -1,6 +1,6 @@
[like.any.html]
type: testharness
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
[Test defaulting arguments on setlike to undefined]
expected: FAIL
@@ -12,7 +12,7 @@
[like.any.worker.html]
type: testharness
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
[Test defaulting arguments on setlike to undefined]
expected: FAIL
diff --git a/tests/wpt/mozilla/meta/mozilla/media_query_list_gc.html.ini b/tests/wpt/mozilla/meta/mozilla/media_query_list_gc.html.ini
index e30744b586d..f4ee735be13 100644
--- a/tests/wpt/mozilla/meta/mozilla/media_query_list_gc.html.ini
+++ b/tests/wpt/mozilla/meta/mozilla/media_query_list_gc.html.ini
@@ -1 +1 @@
-prefs: ["dom.servo_helpers.enabled:true"]
+prefs: ["dom_servo_helpers_enabled:true"]
diff --git a/tests/wpt/mozilla/meta/mozilla/ns.any.js.ini b/tests/wpt/mozilla/meta/mozilla/ns.any.js.ini
index 1028c1162dd..749cda0d24e 100644
--- a/tests/wpt/mozilla/meta/mozilla/ns.any.js.ini
+++ b/tests/wpt/mozilla/meta/mozilla/ns.any.js.ini
@@ -1,7 +1,7 @@
[ns.any.html]
type: testharness
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
[ns.any.worker.html]
type: testharness
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
diff --git a/tests/wpt/mozilla/meta/mozilla/overload_dict.html.ini b/tests/wpt/mozilla/meta/mozilla/overload_dict.html.ini
index 646813bf83c..12d91fea367 100644
--- a/tests/wpt/mozilla/meta/mozilla/overload_dict.html.ini
+++ b/tests/wpt/mozilla/meta/mozilla/overload_dict.html.ini
@@ -1,3 +1,3 @@
[overload_dict.html]
type: testharness
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
diff --git a/tests/wpt/mozilla/meta/mozilla/prototypes.html.ini b/tests/wpt/mozilla/meta/mozilla/prototypes.html.ini
index e30744b586d..f4ee735be13 100644
--- a/tests/wpt/mozilla/meta/mozilla/prototypes.html.ini
+++ b/tests/wpt/mozilla/meta/mozilla/prototypes.html.ini
@@ -1 +1 @@
-prefs: ["dom.servo_helpers.enabled:true"]
+prefs: ["dom_servo_helpers_enabled:true"]
diff --git a/tests/wpt/mozilla/meta/mozilla/sequence-hole.html.ini b/tests/wpt/mozilla/meta/mozilla/sequence-hole.html.ini
index a7798c9c3c3..27e9f2f853f 100644
--- a/tests/wpt/mozilla/meta/mozilla/sequence-hole.html.ini
+++ b/tests/wpt/mozilla/meta/mozilla/sequence-hole.html.ini
@@ -1,2 +1,2 @@
[sequence-hole.html]
- prefs: [dom.testbinding.enabled:true]
+ prefs: [dom_testbinding_enabled:true]
diff --git a/tests/wpt/mozilla/meta/mozilla/trace_null.html.ini b/tests/wpt/mozilla/meta/mozilla/trace_null.html.ini
index e30744b586d..f4ee735be13 100644
--- a/tests/wpt/mozilla/meta/mozilla/trace_null.html.ini
+++ b/tests/wpt/mozilla/meta/mozilla/trace_null.html.ini
@@ -1 +1 @@
-prefs: ["dom.servo_helpers.enabled:true"]
+prefs: ["dom_servo_helpers_enabled:true"]
diff --git a/tests/wpt/mozilla/meta/mozilla/transitionend_safety.html.ini b/tests/wpt/mozilla/meta/mozilla/transitionend_safety.html.ini
index e30744b586d..f4ee735be13 100644
--- a/tests/wpt/mozilla/meta/mozilla/transitionend_safety.html.ini
+++ b/tests/wpt/mozilla/meta/mozilla/transitionend_safety.html.ini
@@ -1 +1 @@
-prefs: ["dom.servo_helpers.enabled:true"]
+prefs: ["dom_servo_helpers_enabled:true"]
diff --git a/tests/wpt/mozilla/meta/mozilla/weakref.html.ini b/tests/wpt/mozilla/meta/mozilla/weakref.html.ini
index 8faf1a9b047..17ca8b55091 100644
--- a/tests/wpt/mozilla/meta/mozilla/weakref.html.ini
+++ b/tests/wpt/mozilla/meta/mozilla/weakref.html.ini
@@ -1,3 +1,3 @@
[weakref.html]
type: testharness
- prefs: ["dom.testbinding.enabled:true", "dom.servo_helpers.enabled:true"]
+ prefs: ["dom_testbinding_enabled:true", "dom_servo_helpers_enabled:true"]
diff --git a/tests/wpt/webgl/meta-legacy-layout/conformance/__dir__.ini b/tests/wpt/webgl/meta-legacy-layout/conformance/__dir__.ini
index 268ced65042..b1c646726d8 100644
--- a/tests/wpt/webgl/meta-legacy-layout/conformance/__dir__.ini
+++ b/tests/wpt/webgl/meta-legacy-layout/conformance/__dir__.ini
@@ -1 +1 @@
-prefs: ["dom.offscreen_canvas.enabled:true","dom.imagebitmap.enabled:true"]
+prefs: ["dom_offscreen_canvas_enabled:true","dom_imagebitmap_enabled:true"]
diff --git a/tests/wpt/webgl/meta-legacy-layout/conformance2/__dir__.ini b/tests/wpt/webgl/meta-legacy-layout/conformance2/__dir__.ini
index 2540f857c82..148295a0104 100644
--- a/tests/wpt/webgl/meta-legacy-layout/conformance2/__dir__.ini
+++ b/tests/wpt/webgl/meta-legacy-layout/conformance2/__dir__.ini
@@ -1,2 +1,2 @@
-prefs: ["dom.webgl2.enabled:true","dom.offscreen_canvas.enabled:true","dom.imagebitmap.enabled:true"]
+prefs: ["dom_webgl2_enabled:true","dom_offscreen_canvas_enabled:true","dom_imagebitmap_enabled:true"]
diff --git a/tests/wpt/webgl/meta-legacy-layout/conformance2/offscreencanvas/__dir__.ini b/tests/wpt/webgl/meta-legacy-layout/conformance2/offscreencanvas/__dir__.ini
index 03004f6efd7..e0b3c7bf146 100644
--- a/tests/wpt/webgl/meta-legacy-layout/conformance2/offscreencanvas/__dir__.ini
+++ b/tests/wpt/webgl/meta-legacy-layout/conformance2/offscreencanvas/__dir__.ini
@@ -1 +1 @@
-prefs: ["dom.offscreen_canvas.enabled:true"]
+prefs: ["dom_offscreen_canvas_enabled:true"]
diff --git a/tests/wpt/webgl/meta/__dir__.ini b/tests/wpt/webgl/meta/__dir__.ini
index 8ff113eb2cb..f2f09393f27 100644
--- a/tests/wpt/webgl/meta/__dir__.ini
+++ b/tests/wpt/webgl/meta/__dir__.ini
@@ -1 +1 @@
-prefs: ["dom.offscreen_canvas.enabled:true", "dom.imagebitmap.enabled:true", "dom.webgl2.enabled:true"]
+prefs: ["dom_offscreen_canvas_enabled:true", "dom_imagebitmap_enabled:true", "dom_webgl2_enabled:true"]
diff --git a/tests/wpt/webgl/meta/conformance2/offscreencanvas/__dir__.ini b/tests/wpt/webgl/meta/conformance2/offscreencanvas/__dir__.ini
index 03004f6efd7..e0b3c7bf146 100644
--- a/tests/wpt/webgl/meta/conformance2/offscreencanvas/__dir__.ini
+++ b/tests/wpt/webgl/meta/conformance2/offscreencanvas/__dir__.ini
@@ -1 +1 @@
-prefs: ["dom.offscreen_canvas.enabled:true"]
+prefs: ["dom_offscreen_canvas_enabled:true"]
diff --git a/tests/wpt/webgpu/meta/__dir__.ini b/tests/wpt/webgpu/meta/__dir__.ini
index bb05019d943..7992a6f4879 100644
--- a/tests/wpt/webgpu/meta/__dir__.ini
+++ b/tests/wpt/webgpu/meta/__dir__.ini
@@ -1 +1 @@
-prefs: ["dom.webgpu.enabled:true"]
+prefs: ["dom_webgpu_enabled:true"]