Add Ad Click Attribution as an internal/experimental feature
[WebKit-https.git] / Source / WebCore / page / RuntimeEnabledFeatures.h
1 /*
2  * Copyright (C) 2009 Google Inc. All rights reserved.
3  * Copyright (C) 2013-2017 Apple Inc. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met:
8  *
9  *     * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *     * Redistributions in binary form must reproduce the above
12  * copyright notice, this list of conditions and the following disclaimer
13  * in the documentation and/or other materials provided with the
14  * distribution.
15  *     * Neither the name of Google Inc. nor the names of its
16  * contributors may be used to endorse or promote products derived from
17  * this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31
32 #pragma once
33
34 #include <wtf/Forward.h>
35 #include <wtf/Noncopyable.h>
36
37 namespace WebCore {
38
39 // A class that stores static enablers for all experimental features. Note that
40 // the method names must line up with the JavaScript method they enable for code
41 // generation to work properly.
42
43 class RuntimeEnabledFeatures {
44     WTF_MAKE_NONCOPYABLE(RuntimeEnabledFeatures);
45 public:
46     void setBlankAnchorTargetImpliesNoOpenerEnabled(bool isEnabled) { m_blankAnchorTargetImpliesNoOpenerEnabled = isEnabled; }
47     bool blankAnchorTargetImpliesNoOpenerEnabled() const { return m_blankAnchorTargetImpliesNoOpenerEnabled; }
48
49     void setDisplayContentsEnabled(bool isEnabled) { m_isDisplayContentsEnabled = isEnabled; }
50     bool displayContentsEnabled() const { return m_isDisplayContentsEnabled; }
51
52     void setLinkPreloadEnabled(bool isEnabled) { m_isLinkPreloadEnabled = isEnabled; }
53     bool linkPreloadEnabled() const { return m_isLinkPreloadEnabled; }
54
55     void setLinkPrefetchEnabled(bool isEnabled) { m_isLinkPrefetchEnabled = isEnabled; }
56     bool linkPrefetchEnabled() const { return m_isLinkPrefetchEnabled; }
57
58     void setMediaPreloadingEnabled(bool isEnabled) { m_isMediaPreloadingEnabled = isEnabled; }
59     bool mediaPreloadingEnabled() const { return m_isMediaPreloadingEnabled; }
60
61     void setResourceTimingEnabled(bool isEnabled) { m_isResourceTimingEnabled = isEnabled; }
62     bool resourceTimingEnabled() const { return m_isResourceTimingEnabled; }
63
64     void setUserTimingEnabled(bool isEnabled) { m_isUserTimingEnabled = isEnabled; }
65     bool userTimingEnabled() const { return m_isUserTimingEnabled; }
66
67     bool performanceTimelineEnabled() const { return resourceTimingEnabled() || userTimingEnabled(); }
68
69     void setShadowDOMEnabled(bool isEnabled) { m_isShadowDOMEnabled = isEnabled; }
70     bool shadowDOMEnabled() const { return m_isShadowDOMEnabled; }
71
72     void setInputEventsEnabled(bool isEnabled) { m_inputEventsEnabled = isEnabled; }
73     bool inputEventsEnabled() const { return m_inputEventsEnabled; }
74
75     void setInteractiveFormValidationEnabled(bool isEnabled) { m_isInteractiveFormValidationEnabled = isEnabled; }
76     bool interactiveFormValidationEnabled() const { return m_isInteractiveFormValidationEnabled; }
77
78     void setCustomElementsEnabled(bool areEnabled) { m_areCustomElementsEnabled = areEnabled; }
79     bool customElementsEnabled() const { return m_areCustomElementsEnabled; }
80
81     void setMenuItemElementEnabled(bool isEnabled) { m_isMenuItemElementEnabled = isEnabled; }
82     bool menuItemElementEnabled() const { return m_isMenuItemElementEnabled; }
83     
84     void setDirectoryUploadEnabled(bool isEnabled) { m_isDirectoryUploadEnabled = isEnabled; }
85     bool directoryUploadEnabled() const { return m_isDirectoryUploadEnabled; }
86
87 #if ENABLE(DARK_MODE_CSS)
88     void setDarkModeCSSEnabled(bool isEnabled) { m_isDarkModeCSSEnabled = isEnabled; }
89     bool darkModeCSSEnabled() const { return m_isDarkModeCSSEnabled; }
90 #endif
91
92     void setDataTransferItemsEnabled(bool areEnabled) { m_areDataTransferItemsEnabled = areEnabled; }
93     bool dataTransferItemsEnabled() const { return m_areDataTransferItemsEnabled; }
94
95     void setCustomPasteboardDataEnabled(bool isEnabled) { m_isCustomPasteboardDataEnabled = isEnabled; }
96     bool customPasteboardDataEnabled() const { return m_isCustomPasteboardDataEnabled; }
97     
98     void setWebShareEnabled(bool isEnabled) { m_isWebShareEnabled = isEnabled; }
99     bool webShareEnabled() const { return m_isWebShareEnabled; }
100
101     void setModernMediaControlsEnabled(bool areEnabled) { m_areModernMediaControlsEnabled = areEnabled; }
102     bool modernMediaControlsEnabled() const { return m_areModernMediaControlsEnabled; }
103
104     void setWebAuthenticationEnabled(bool isEnabled) { m_isWebAuthenticationEnabled = isEnabled; }
105     bool webAuthenticationEnabled() const { return m_isWebAuthenticationEnabled; }
106
107     void setWebAuthenticationLocalAuthenticatorEnabled(bool isEnabled) { m_isWebAuthenticationLocalAuthenticatorEnabled = isEnabled; }
108     bool webAuthenticationLocalAuthenticatorEnabled() const { return m_isWebAuthenticationLocalAuthenticatorEnabled; }
109
110     void setIsSecureContextAttributeEnabled(bool isEnabled) { m_isSecureContextAttributeEnabled = isEnabled; }
111     bool isSecureContextAttributeEnabled() const { return m_isSecureContextAttributeEnabled; }
112
113     void setWebAnimationsEnabled(bool areEnabled) { m_areWebAnimationsEnabled = areEnabled; }
114     bool webAnimationsEnabled() const { return m_areWebAnimationsEnabled; }
115
116     void setWebAnimationsCSSIntegrationEnabled(bool isEnabled) { m_isWebAnimationsCSSIntegrationEnabled = isEnabled; }
117     bool webAnimationsCSSIntegrationEnabled() const { return m_areWebAnimationsEnabled && m_isWebAnimationsCSSIntegrationEnabled; }
118
119     void setImageBitmapOffscreenCanvasEnabled(bool isEnabled) { m_isImageBitmapOffscreenCanvasEnabled = isEnabled; }
120     bool imageBitmapOffscreenCanvasEnabled() const { return m_isImageBitmapOffscreenCanvasEnabled; }
121
122     void setCacheAPIEnabled(bool isEnabled) { m_isCacheAPIEnabled = isEnabled; }
123     bool cacheAPIEnabled() const { return m_isCacheAPIEnabled; }
124
125     void setFetchAPIEnabled(bool isEnabled) { m_isFetchAPIEnabled = isEnabled; }
126     bool fetchAPIEnabled() const { return m_isFetchAPIEnabled; }
127
128     void setWebSocketEnabled(bool isEnabled) { m_isWebSocketEnabled = isEnabled; }
129     bool webSocketEnabled() const { return m_isWebSocketEnabled; }
130
131     bool fetchAPIKeepAliveEnabled() const { return m_fetchAPIKeepAliveEnabled; }
132     void setFetchAPIKeepAliveEnabled(bool isEnabled) { m_fetchAPIKeepAliveEnabled = isEnabled; }
133
134     bool spectreGadgetsEnabled() const;
135
136     void setInspectorAdditionsEnabled(bool isEnabled) { m_inspectorAdditionsEnabled = isEnabled; }
137     bool inspectorAdditionsEnabled() const { return m_inspectorAdditionsEnabled; }
138
139     void setWebVREnabled(bool isEnabled) { m_webVREnabled = isEnabled; }
140     bool webVREnabled() const { return m_webVREnabled; }
141
142     void setAccessibilityObjectModelEnabled(bool isEnabled) { m_accessibilityObjectModelEnabled = isEnabled; }
143     bool accessibilityObjectModelEnabled() const { return m_accessibilityObjectModelEnabled; }
144
145     void setAriaReflectionEnabled(bool isEnabled) { m_ariaReflectionEnabled = isEnabled; }
146     bool ariaReflectionEnabled() const { return m_ariaReflectionEnabled; }
147
148     void setItpDebugModeEnabled(bool isEnabled) { m_itpDebugMode = isEnabled; }
149     bool itpDebugModeEnabled() const { return m_itpDebugMode; }
150
151     void setRestrictedHTTPResponseAccess(bool isEnabled) { m_isRestrictedHTTPResponseAccess = isEnabled; }
152     bool restrictedHTTPResponseAccess() const { return m_isRestrictedHTTPResponseAccess; }
153
154     void setCrossOriginResourcePolicyEnabled(bool isEnabled) { m_crossOriginResourcePolicyEnabled = isEnabled; }
155     bool crossOriginResourcePolicyEnabled() const { return m_crossOriginResourcePolicyEnabled; }
156
157     void setWebGLCompressedTextureASTCSupportEnabled(bool isEnabled) { m_isWebGLCompressedTextureASTCSupportEnabled = isEnabled; }
158     bool webGLCompressedTextureASTCSupportEnabled() const { return m_isWebGLCompressedTextureASTCSupportEnabled; }
159
160     void setStorageAccessPromptsEnabled(bool isEnabled)  { m_promptForStorageAccessAPIEnabled = isEnabled; }
161     bool storageAccessPromptsEnabled() const { return m_promptForStorageAccessAPIEnabled; }
162
163     void setServerTimingEnabled(bool isEnabled) { m_isServerTimingEnabled = isEnabled; }
164     bool serverTimingEnabled() const { return m_isServerTimingEnabled; }
165
166     void setExperimentalPlugInSandboxProfilesEnabled(bool isEnabled) { m_experimentalPlugInSandboxProfilesEnabled = isEnabled; }
167     bool experimentalPlugInSandboxProfilesEnabled() const { return m_experimentalPlugInSandboxProfilesEnabled; }
168
169     void setDisabledAdaptationsMetaTagEnabled(bool isEnabled) { m_disabledAdaptationsMetaTagEnabled = isEnabled; }
170     bool disabledAdaptationsMetaTagEnabled() const { return m_disabledAdaptationsMetaTagEnabled; }
171
172     void setAttrStyleEnabled(bool isEnabled) { m_attrStyleEnabled = isEnabled; }
173     bool attrStyleEnabled() const { return m_attrStyleEnabled; }
174
175     void setWebAPIStatisticsEnabled(bool isEnabled) { m_webAPIStatisticsEnabled = isEnabled; }
176     bool webAPIStatisticsEnabled() const { return m_webAPIStatisticsEnabled; }
177
178     void setCSSCustomPropertiesAndValuesEnabled(bool isEnabled) { m_CSSCustomPropertiesAndValuesEnabled = isEnabled; }
179     bool cssCustomPropertiesAndValuesEnabled() const { return m_CSSCustomPropertiesAndValuesEnabled; }
180
181     void setPointerEventsEnabled(bool isEnabled) { m_pointerEventsEnabled = isEnabled; }
182     bool pointerEventsEnabled() const { return m_pointerEventsEnabled; }
183
184 #if ENABLE(LAYOUT_FORMATTING_CONTEXT)
185     void setLayoutFormattingContextEnabled(bool isEnabled) { m_layoutFormattingContextEnabled = isEnabled; }
186     bool layoutFormattingContextEnabled() const { return m_layoutFormattingContextEnabled; }
187 #endif
188
189 #if ENABLE(CSS_PAINTING_API)
190     void setCSSPaintingAPIEnabled(bool isEnabled) { m_CSSPaintingAPIEnabled = isEnabled; }
191     bool cssPaintingAPIEnabled() const { return m_CSSPaintingAPIEnabled; }
192 #endif
193
194 #if ENABLE(CSS_TYPED_OM)
195     void setCSSTypedOMEnabled(bool isEnabled) { m_CSSTypedOMEnabled = isEnabled; }
196     bool cssTypedOMEnabled() const { return m_CSSTypedOMEnabled; }
197 #endif
198
199     void setWebSQLDisabled(bool isDisabled) { m_webSQLEnabled = !isDisabled; }
200     bool webSQLEnabled() const { return m_webSQLEnabled; }
201
202 #if ENABLE(ATTACHMENT_ELEMENT)
203     void setAttachmentElementEnabled(bool areEnabled) { m_isAttachmentElementEnabled = areEnabled; }
204     bool attachmentElementEnabled() const { return m_isAttachmentElementEnabled; }
205 #endif
206
207 #if ENABLE(INDEXED_DATABASE_IN_WORKERS)
208     void setIndexedDBWorkersEnabled(bool isEnabled) { m_isIndexedDBWorkersEnabled = isEnabled; }
209     bool indexedDBWorkersEnabled() const { return m_isIndexedDBWorkersEnabled; }
210 #endif
211
212 #if ENABLE(MEDIA_STREAM)
213     bool mediaRecorderEnabled() const { return m_isMediaRecorderEnabled; }
214     void setMediaRecorderEnabled(bool isEnabled) { m_isMediaRecorderEnabled = isEnabled; }
215     bool mediaDevicesEnabled() const { return m_isMediaDevicesEnabled; }
216     void setMediaDevicesEnabled(bool isEnabled) { m_isMediaDevicesEnabled = isEnabled; }
217     bool mediaStreamEnabled() const { return m_isMediaStreamEnabled; }
218     void setMediaStreamEnabled(bool isEnabled) { m_isMediaStreamEnabled = isEnabled; }
219     bool screenCaptureEnabled() const { return m_isScreenCaptureEnabled; }
220     void setScreenCaptureEnabled(bool isEnabled) { m_isScreenCaptureEnabled = isEnabled; }
221 #endif
222
223 #if ENABLE(WEB_RTC)
224     bool webRTCVP8CodecEnabled() const { return m_isWebRTCVP8CodecEnabled; }
225     void setWebRTCVP8CodecEnabled(bool isEnabled) { m_isWebRTCVP8CodecEnabled = isEnabled; }
226     bool webRTCUnifiedPlanEnabled() const { return m_isWebRTCUnifiedPlanEnabled; }
227     void setWebRTCUnifiedPlanEnabled(bool isEnabled) { m_isWebRTCUnifiedPlanEnabled = isEnabled; }
228     bool peerConnectionEnabled() const { return m_isPeerConnectionEnabled; }
229     void setPeerConnectionEnabled(bool isEnabled) { m_isPeerConnectionEnabled = isEnabled; }
230     bool webRTCMDNSICECandidatesEnabled() const { return m_isWebRTCMDNSICECandidatesEnabled; }
231     void setWebRTCMDNSICECandidatesEnabled(bool isEnabled) { m_isWebRTCMDNSICECandidatesEnabled = isEnabled; }
232     bool webRTCH264SimulcastEnabled() const { return m_isWebRTCH264SimulcastEnabled; }
233     void setWebRTCH264SimulcastEnabled(bool isEnabled) { m_isWebRTCH264SimulcastEnabled = isEnabled; }
234 #endif
235
236 #if ENABLE(LEGACY_CSS_VENDOR_PREFIXES)
237     void setLegacyCSSVendorPrefixesEnabled(bool isEnabled) { m_isLegacyCSSVendorPrefixesEnabled = isEnabled; }
238     bool legacyCSSVendorPrefixesEnabled() const { return m_isLegacyCSSVendorPrefixesEnabled; }
239 #endif
240
241 #if ENABLE(INPUT_TYPE_COLOR)
242     bool inputTypeColorEnabled() const { return m_isInputTypeColorEnabled; }
243     void setInputTypeColorEnabled(bool isEnabled) { m_isInputTypeColorEnabled = isEnabled; }
244 #endif
245
246 #if ENABLE(DATALIST_ELEMENT)
247     bool dataListElementEnabled() const { return m_isDataListElementEnabled; }
248     void setDataListElementEnabled(bool isEnabled) { m_isDataListElementEnabled = isEnabled; }
249 #endif
250
251 #if ENABLE(INPUT_TYPE_DATE)
252     bool inputTypeDateEnabled() const { return m_isInputTypeDateEnabled; }
253     void setInputTypeDateEnabled(bool isEnabled) { m_isInputTypeDateEnabled = isEnabled; }
254 #endif
255
256 #if ENABLE(INPUT_TYPE_DATETIME_INCOMPLETE)
257     bool inputTypeDateTimeEnabled() const { return m_isInputTypeDateTimeEnabled; }
258     void setInputTypeDateTimeEnabled(bool isEnabled) { m_isInputTypeDateTimeEnabled = isEnabled; }
259 #endif
260
261 #if ENABLE(INPUT_TYPE_DATETIMELOCAL)
262     bool inputTypeDateTimeLocalEnabled() const { return m_isInputTypeDateTimeLocalEnabled; }
263     void setInputTypeDateTimeLocalEnabled(bool isEnabled) { m_isInputTypeDateTimeLocalEnabled = isEnabled; }
264 #endif
265
266 #if ENABLE(INPUT_TYPE_MONTH)
267     bool inputTypeMonthEnabled() const { return m_isInputTypeMonthEnabled; }
268     void setInputTypeMonthEnabled(bool isEnabled) { m_isInputTypeMonthEnabled = isEnabled; }
269 #endif
270
271 #if ENABLE(INPUT_TYPE_TIME)
272     bool inputTypeTimeEnabled() const { return m_isInputTypeTimeEnabled; }
273     void setInputTypeTimeEnabled(bool isEnabled) { m_isInputTypeTimeEnabled = isEnabled; }
274 #endif
275
276 #if ENABLE(INPUT_TYPE_WEEK)
277     bool inputTypeWeekEnabled() const { return m_isInputTypeWeekEnabled; }
278     void setInputTypeWeekEnabled(bool isEnabled) { m_isInputTypeWeekEnabled = isEnabled; }
279 #endif
280
281 #if ENABLE(GAMEPAD)
282     void setGamepadsEnabled(bool areEnabled) { m_areGamepadsEnabled = areEnabled; }
283     bool gamepadsEnabled() const { return m_areGamepadsEnabled; }
284 #endif
285
286 #if ENABLE(WEBGL2)
287     void setWebGL2Enabled(bool isEnabled) { m_isWebGL2Enabled = isEnabled; }
288     bool webGL2Enabled() const { return m_isWebGL2Enabled; }
289 #endif
290     
291 #if ENABLE(WEBGPU)
292     void setWebGPUEnabled(bool isEnabled) { m_isWebGPUEnabled = isEnabled; }
293     bool webGPUEnabled() const { return m_isWebGPUEnabled; }
294 #endif
295
296 #if ENABLE(WEBMETAL)
297     void setWebMetalEnabled(bool isEnabled) { m_isWebMetalEnabled = isEnabled; }
298     bool webMetalEnabled() const { return m_isWebMetalEnabled; }
299 #endif
300
301 #if ENABLE(STREAMS_API)
302     void setReadableByteStreamAPIEnabled(bool isEnabled) { m_isReadableByteStreamAPIEnabled = isEnabled; }
303     bool readableByteStreamAPIEnabled() const { return m_isReadableByteStreamAPIEnabled; }
304     void setWritableStreamAPIEnabled(bool isEnabled) { m_isWritableStreamAPIEnabled = isEnabled; }
305     bool writableStreamAPIEnabled() const { return m_isWritableStreamAPIEnabled; }
306 #endif
307     
308 #if ENABLE(DOWNLOAD_ATTRIBUTE)
309     void setDownloadAttributeEnabled(bool isEnabled) { m_isDownloadAttributeEnabled = isEnabled; }
310     bool downloadAttributeEnabled() const { return m_isDownloadAttributeEnabled; }
311 #endif
312
313 #if ENABLE(INTERSECTION_OBSERVER)
314     void setIntersectionObserverEnabled(bool isEnabled) { m_intersectionObserverEnabled = isEnabled; }
315     bool intersectionObserverEnabled() const { return m_intersectionObserverEnabled; }
316 #endif
317
318     void setUndoManagerAPIEnabled(bool isEnabled) { m_undoManagerAPIEnabled = isEnabled; }
319     bool undoManagerAPIEnabled() const { return m_undoManagerAPIEnabled; }
320
321 #if ENABLE(ENCRYPTED_MEDIA)
322     void setEncryptedMediaAPIEnabled(bool isEnabled) { m_encryptedMediaAPIEnabled = isEnabled; }
323     bool encryptedMediaAPIEnabled() const { return m_encryptedMediaAPIEnabled; }
324 #endif
325
326 #if ENABLE(LEGACY_ENCRYPTED_MEDIA)
327     void setLegacyEncryptedMediaAPIEnabled(bool isEnabled) { m_legacyEncryptedMediaAPIEnabled = isEnabled; }
328     bool legacyEncryptedMediaAPIEnabled() const { return m_legacyEncryptedMediaAPIEnabled; }
329 #endif
330
331 #if ENABLE(SERVICE_WORKER)
332     bool serviceWorkerEnabled() const { return m_serviceWorkerEnabled; }
333     void setServiceWorkerEnabled(bool isEnabled) { m_serviceWorkerEnabled = isEnabled; }
334 #endif
335
336 #if USE(SYSTEM_PREVIEW)
337     void setSystemPreviewEnabled(bool isEnabled) { m_systemPreviewEnabled = isEnabled; }
338     bool systemPreviewEnabled() const { return m_systemPreviewEnabled; }
339 #endif
340
341     void setCSSLogicalEnabled(bool isEnabled) { m_CSSLogicalEnabled = isEnabled; }
342     bool cssLogicalEnabled() const { return m_CSSLogicalEnabled; }
343
344     bool adClickAttributionEnabled() const { return m_adClickAttributionEnabled; }
345     void setAdClickAttributionEnabled(bool isEnabled) { m_adClickAttributionEnabled = isEnabled; }
346
347     WEBCORE_EXPORT static RuntimeEnabledFeatures& sharedFeatures();
348
349 private:
350     // Never instantiate.
351     RuntimeEnabledFeatures();
352
353     bool m_blankAnchorTargetImpliesNoOpenerEnabled { true };
354     bool m_areModernMediaControlsEnabled { false };
355     bool m_isLinkPreloadEnabled { true };
356     bool m_isLinkPrefetchEnabled { false };
357     bool m_isMediaPreloadingEnabled { false };
358     bool m_isResourceTimingEnabled { false };
359     bool m_isUserTimingEnabled { false };
360     bool m_isInteractiveFormValidationEnabled { false };
361     bool m_isWebAuthenticationEnabled { false };
362     bool m_isWebAuthenticationLocalAuthenticatorEnabled { false };
363     bool m_isSecureContextAttributeEnabled { false };
364     bool m_isDisplayContentsEnabled { true };
365     bool m_isShadowDOMEnabled { true };
366     bool m_areCustomElementsEnabled { true };
367     bool m_isMenuItemElementEnabled { false };
368     bool m_isDirectoryUploadEnabled { false };
369     bool m_areDataTransferItemsEnabled { false };
370     bool m_isCustomPasteboardDataEnabled { false };
371     bool m_isWebShareEnabled { false };
372     bool m_inputEventsEnabled { true };
373     bool m_areWebAnimationsEnabled { false };
374     bool m_isWebAnimationsCSSIntegrationEnabled { false };
375     bool m_isImageBitmapOffscreenCanvasEnabled { true };
376     bool m_isCacheAPIEnabled { false };
377     bool m_isFetchAPIEnabled { true };
378     bool m_isWebSocketEnabled { true };
379     bool m_fetchAPIKeepAliveEnabled { false };
380     bool m_inspectorAdditionsEnabled { false };
381     bool m_webVREnabled { false };
382     bool m_accessibilityObjectModelEnabled { false };
383     bool m_ariaReflectionEnabled { true };
384     bool m_itpDebugMode { false };
385     bool m_isRestrictedHTTPResponseAccess { true };
386     bool m_crossOriginResourcePolicyEnabled { true };
387     bool m_isWebGLCompressedTextureASTCSupportEnabled { false };
388     bool m_promptForStorageAccessAPIEnabled { false };
389     bool m_isServerTimingEnabled { false };
390     bool m_experimentalPlugInSandboxProfilesEnabled { false };
391     bool m_disabledAdaptationsMetaTagEnabled { false };
392     bool m_attrStyleEnabled { false };
393     bool m_webAPIStatisticsEnabled { false };
394     bool m_CSSCustomPropertiesAndValuesEnabled { false };
395     bool m_pointerEventsEnabled { false };
396     bool m_webSQLEnabled { true };
397
398 #if ENABLE(LAYOUT_FORMATTING_CONTEXT)
399     bool m_layoutFormattingContextEnabled { false };
400 #endif
401
402 #if ENABLE(CSS_PAINTING_API)
403     bool m_CSSPaintingAPIEnabled { false };
404 #endif
405
406 #if ENABLE(CSS_TYPED_OM)
407     bool m_CSSTypedOMEnabled { false };
408 #endif
409
410 #if ENABLE(ATTACHMENT_ELEMENT)
411     bool m_isAttachmentElementEnabled { false };
412 #endif
413
414 #if ENABLE(DARK_MODE_CSS)
415     bool m_isDarkModeCSSEnabled { true };
416 #endif
417
418 #if ENABLE(INDEXED_DATABASE_IN_WORKERS)
419     bool m_isIndexedDBWorkersEnabled { true };
420 #endif
421
422 #if ENABLE(MEDIA_STREAM)
423     bool m_isMediaRecorderEnabled { false };
424     bool m_isMediaDevicesEnabled { false };
425     bool m_isMediaStreamEnabled { true };
426     bool m_isScreenCaptureEnabled { false };
427 #endif
428
429 #if ENABLE(WEB_RTC)
430     bool m_isWebRTCVP8CodecEnabled { true };
431     bool m_isWebRTCUnifiedPlanEnabled { true };
432     bool m_isPeerConnectionEnabled { true };
433     bool m_isWebRTCMDNSICECandidatesEnabled { false };
434     bool m_isWebRTCH264SimulcastEnabled { true };
435 #endif
436
437 #if ENABLE(LEGACY_CSS_VENDOR_PREFIXES)
438     bool m_isLegacyCSSVendorPrefixesEnabled { false };
439 #endif
440
441 #if ENABLE(INPUT_TYPE_COLOR)
442     bool m_isInputTypeColorEnabled { false };
443 #endif
444
445 #if ENABLE(DATALIST_ELEMENT)
446     bool m_isDataListElementEnabled { false };
447 #endif
448
449 #if ENABLE(INPUT_TYPE_DATE)
450     bool m_isInputTypeDateEnabled { true };
451 #endif
452
453 #if ENABLE(INPUT_TYPE_DATETIME_INCOMPLETE)
454     bool m_isInputTypeDateTimeEnabled { false };
455 #endif
456
457 #if ENABLE(INPUT_TYPE_DATETIMELOCAL)
458     bool m_isInputTypeDateTimeLocalEnabled { true };
459 #endif
460
461 #if ENABLE(INPUT_TYPE_MONTH)
462     bool m_isInputTypeMonthEnabled { true };
463 #endif
464
465 #if ENABLE(INPUT_TYPE_TIME)
466     bool m_isInputTypeTimeEnabled { true };
467 #endif
468
469 #if ENABLE(INPUT_TYPE_WEEK)
470     bool m_isInputTypeWeekEnabled { true };
471 #endif
472
473 #if ENABLE(GAMEPAD)
474     bool m_areGamepadsEnabled { false };
475 #endif
476
477 #if ENABLE(STREAMS_API)
478     bool m_isReadableByteStreamAPIEnabled { false };
479     bool m_isWritableStreamAPIEnabled { false };
480 #endif
481
482 #if ENABLE(WEBGL2)
483     bool m_isWebGL2Enabled { false };
484 #endif
485     
486 #if ENABLE(WEBGPU)
487     bool m_isWebGPUEnabled { false };
488 #endif
489
490 #if ENABLE(WEBMETAL)
491     bool m_isWebMetalEnabled { false };
492 #endif
493
494 #if ENABLE(DOWNLOAD_ATTRIBUTE)
495     bool m_isDownloadAttributeEnabled { false };
496 #endif
497
498 #if ENABLE(ENCRYPTED_MEDIA)
499     bool m_encryptedMediaAPIEnabled { false };
500 #endif
501
502 #if ENABLE(LEGACY_ENCRYPTED_MEDIA)
503     bool m_legacyEncryptedMediaAPIEnabled { false };
504 #endif
505
506 #if ENABLE(INTERSECTION_OBSERVER)
507     bool m_intersectionObserverEnabled { false };
508 #endif
509
510 #if ENABLE(SERVICE_WORKER)
511     bool m_serviceWorkerEnabled { false };
512 #endif
513
514 #if USE(SYSTEM_PREVIEW)
515     bool m_systemPreviewEnabled { false };
516 #endif
517
518     bool m_undoManagerAPIEnabled { false };
519
520     bool m_CSSLogicalEnabled { false };
521
522     bool m_adClickAttributionEnabled { false };
523
524     friend class WTF::NeverDestroyed<RuntimeEnabledFeatures>;
525 };
526
527 } // namespace WebCore