71e62e5e655c039c21a796969b34de7db8929b20
[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 setDisplayContentsEnabled(bool isEnabled) { m_isDisplayContentsEnabled = isEnabled; }
47     bool displayContentsEnabled() const { return m_isDisplayContentsEnabled; }
48
49     void setLinkPreloadEnabled(bool isEnabled) { m_isLinkPreloadEnabled = isEnabled; }
50     bool linkPreloadEnabled() const { return m_isLinkPreloadEnabled; }
51
52     void setLinkPrefetchEnabled(bool isEnabled) { m_isLinkPrefetchEnabled = isEnabled; }
53     bool linkPrefetchEnabled() const { return m_isLinkPrefetchEnabled; }
54
55     void setMediaPreloadingEnabled(bool isEnabled) { m_isMediaPreloadingEnabled = isEnabled; }
56     bool mediaPreloadingEnabled() const { return m_isMediaPreloadingEnabled; }
57
58     void setResourceTimingEnabled(bool isEnabled) { m_isResourceTimingEnabled = isEnabled; }
59     bool resourceTimingEnabled() const { return m_isResourceTimingEnabled; }
60
61     void setUserTimingEnabled(bool isEnabled) { m_isUserTimingEnabled = isEnabled; }
62     bool userTimingEnabled() const { return m_isUserTimingEnabled; }
63
64     bool performanceTimelineEnabled() const { return resourceTimingEnabled() || userTimingEnabled(); }
65
66     void setShadowDOMEnabled(bool isEnabled) { m_isShadowDOMEnabled = isEnabled; }
67     bool shadowDOMEnabled() const { return m_isShadowDOMEnabled; }
68
69     void setInputEventsEnabled(bool isEnabled) { m_inputEventsEnabled = isEnabled; }
70     bool inputEventsEnabled() const { return m_inputEventsEnabled; }
71
72     void setInteractiveFormValidationEnabled(bool isEnabled) { m_isInteractiveFormValidationEnabled = isEnabled; }
73     bool interactiveFormValidationEnabled() const { return m_isInteractiveFormValidationEnabled; }
74
75     void setCustomElementsEnabled(bool areEnabled) { m_areCustomElementsEnabled = areEnabled; }
76     bool customElementsEnabled() const { return m_areCustomElementsEnabled; }
77
78     void setMenuItemElementEnabled(bool isEnabled) { m_isMenuItemElementEnabled = isEnabled; }
79     bool menuItemElementEnabled() const { return m_isMenuItemElementEnabled; }
80     
81     void setDirectoryUploadEnabled(bool isEnabled) { m_isDirectoryUploadEnabled = isEnabled; }
82     bool directoryUploadEnabled() const { return m_isDirectoryUploadEnabled; }
83
84     void setDataTransferItemsEnabled(bool areEnabled) { m_areDataTransferItemsEnabled = areEnabled; }
85     bool dataTransferItemsEnabled() const { return m_areDataTransferItemsEnabled; }
86
87     void setCustomPasteboardDataEnabled(bool isEnabled) { m_isCustomPasteboardDataEnabled = isEnabled; }
88     bool customPasteboardDataEnabled() const { return m_isCustomPasteboardDataEnabled; }
89     
90     void setWebShareEnabled(bool isEnabled) { m_isWebShareEnabled = isEnabled; }
91     bool webShareEnabled() const { return m_isWebShareEnabled; }
92
93     void setModernMediaControlsEnabled(bool areEnabled) { m_areModernMediaControlsEnabled = areEnabled; }
94     bool modernMediaControlsEnabled() const { return m_areModernMediaControlsEnabled; }
95
96     void setWebAuthenticationEnabled(bool isEnabled) { m_isWebAuthenticationEnabled = isEnabled; }
97     bool webAuthenticationEnabled() const { return m_isWebAuthenticationEnabled; }
98
99     void setIsSecureContextAttributeEnabled(bool isEnabled) { m_isSecureContextAttributeEnabled = isEnabled; }
100     bool isSecureContextAttributeEnabled() const { return m_isSecureContextAttributeEnabled; }
101
102     void setWebAnimationsEnabled(bool areEnabled) { m_areWebAnimationsEnabled = areEnabled; }
103     bool webAnimationsEnabled() const { return m_areWebAnimationsEnabled; }
104
105     void setWebAnimationsCSSIntegrationEnabled(bool isEnabled) { m_isWebAnimationsCSSIntegrationEnabled = isEnabled; }
106     bool webAnimationsCSSIntegrationEnabled() const { return m_areWebAnimationsEnabled && m_isWebAnimationsCSSIntegrationEnabled; }
107
108     void setImageBitmapOffscreenCanvasEnabled(bool isEnabled) { m_isImageBitmapOffscreenCanvasEnabled = isEnabled; }
109     bool imageBitmapOffscreenCanvasEnabled() const { return m_isImageBitmapOffscreenCanvasEnabled; }
110
111     void setCacheAPIEnabled(bool isEnabled) { m_isCacheAPIEnabled = isEnabled; }
112     bool cacheAPIEnabled() const { return m_isCacheAPIEnabled; }
113
114     void setFetchAPIEnabled(bool isEnabled) { m_isFetchAPIEnabled = isEnabled; }
115     bool fetchAPIEnabled() const { return m_isFetchAPIEnabled; }
116
117     void setWebSocketEnabled(bool isEnabled) { m_isWebSocketEnabled = isEnabled; }
118     bool webSocketEnabled() const { return m_isWebSocketEnabled; }
119
120     bool fetchAPIKeepAliveEnabled() const { return m_fetchAPIKeepAliveEnabled; }
121     void setFetchAPIKeepAliveEnabled(bool isEnabled) { m_fetchAPIKeepAliveEnabled = isEnabled; }
122
123     bool spectreGadgetsEnabled() const;
124
125     void setInspectorAdditionsEnabled(bool isEnabled) { m_inspectorAdditionsEnabled = isEnabled; }
126     bool inspectorAdditionsEnabled() const { return m_inspectorAdditionsEnabled; }
127
128     void setWebVREnabled(bool isEnabled) { m_webVREnabled = isEnabled; }
129     bool webVREnabled() const { return m_webVREnabled; }
130
131     void setAccessibilityObjectModelEnabled(bool isEnabled) { m_accessibilityObjectModelEnabled = isEnabled; }
132     bool accessibilityObjectModelEnabled() const { return m_accessibilityObjectModelEnabled; }
133
134     void setAriaReflectionEnabled(bool isEnabled) { m_ariaReflectionEnabled = isEnabled; }
135     bool ariaReflectionEnabled() const { return m_ariaReflectionEnabled; }
136
137     void setResourceLoadStatisticsDebugMode(bool isEnabled) { m_resourceLoadStatisticsDebugMode = isEnabled; }
138     bool resourceLoadStatisticsDebugMode() const { return m_resourceLoadStatisticsDebugMode; }
139
140     void setRestrictedHTTPResponseAccess(bool isEnabled) { m_isRestrictedHTTPResponseAccess = isEnabled; }
141     bool restrictedHTTPResponseAccess() const { return m_isRestrictedHTTPResponseAccess; }
142
143     void setCrossOriginResourcePolicyEnabled(bool isEnabled) { m_crossOriginResourcePolicyEnabled = isEnabled; }
144     bool crossOriginResourcePolicyEnabled() const { return m_crossOriginResourcePolicyEnabled; }
145
146     void setWebGLCompressedTextureASTCSupportEnabled(bool isEnabled) { m_isWebGLCompressedTextureASTCSupportEnabled = isEnabled; }
147     bool webGLCompressedTextureASTCSupportEnabled() const { return m_isWebGLCompressedTextureASTCSupportEnabled; }
148
149     void setStorageAccessPromptsEnabled(bool isEnabled)  { m_promptForStorageAccessAPIEnabled = isEnabled; }
150     bool storageAccessPromptsEnabled() const { return m_promptForStorageAccessAPIEnabled; }
151
152     void setServerTimingEnabled(bool isEnabled) { m_isServerTimingEnabled = isEnabled; }
153     bool serverTimingEnabled() const { return m_isServerTimingEnabled; }
154
155     void setExperimentalPlugInSandboxProfilesEnabled(bool isEnabled) { m_experimentalPlugInSandboxProfilesEnabled = isEnabled; }
156     bool experimentalPlugInSandboxProfilesEnabled() const { return m_experimentalPlugInSandboxProfilesEnabled; }
157
158     void setDisabledAdaptationsMetaTagEnabled(bool isEnabled) { m_disabledAdaptationsMetaTagEnabled = isEnabled; }
159     bool disabledAdaptationsMetaTagEnabled() const { return m_disabledAdaptationsMetaTagEnabled; }
160
161     void setAttrStyleEnabled(bool isEnabled) { m_attrStyleEnabled = isEnabled; }
162     bool attrStyleEnabled() const { return m_attrStyleEnabled; }
163
164     void setWebAPIStatisticsEnabled(bool isEnabled) { m_webAPIStatisticsEnabled = isEnabled; }
165     bool webAPIStatisticsEnabled() const { return m_webAPIStatisticsEnabled; }
166
167     void setCSSCustomPropertiesAndValuesEnabled(bool isEnabled) { m_CSSCustomPropertiesAndValuesEnabled = isEnabled; }
168     bool cssCustomPropertiesAndValuesEnabled() const { return m_CSSCustomPropertiesAndValuesEnabled; }
169
170     void setPointerEventsEnabled(bool isEnabled) { m_pointerEventsEnabled = isEnabled; }
171     bool pointerEventsEnabled() const { return m_pointerEventsEnabled; }
172
173 #if ENABLE(ATTACHMENT_ELEMENT)
174     void setAttachmentElementEnabled(bool areEnabled) { m_isAttachmentElementEnabled = areEnabled; }
175     bool attachmentElementEnabled() const { return m_isAttachmentElementEnabled; }
176 #endif
177
178 #if ENABLE(INDEXED_DATABASE_IN_WORKERS)
179     void setIndexedDBWorkersEnabled(bool isEnabled) { m_isIndexedDBWorkersEnabled = isEnabled; }
180     bool indexedDBWorkersEnabled() const { return m_isIndexedDBWorkersEnabled; }
181 #endif
182
183 #if ENABLE(MEDIA_STREAM)
184     bool mediaRecorderEnabled() const { return m_isMediaRecorderEnabled; }
185     void setMediaRecorderEnabled(bool isEnabled) { m_isMediaRecorderEnabled = isEnabled; }
186     bool mediaDevicesEnabled() const { return m_isMediaDevicesEnabled; }
187     void setMediaDevicesEnabled(bool isEnabled) { m_isMediaDevicesEnabled = isEnabled; }
188     bool mediaStreamEnabled() const { return m_isMediaStreamEnabled; }
189     void setMediaStreamEnabled(bool isEnabled) { m_isMediaStreamEnabled = isEnabled; }
190     bool screenCaptureEnabled() const { return m_isScreenCaptureEnabled; }
191     void setScreenCaptureEnabled(bool isEnabled) { m_isScreenCaptureEnabled = isEnabled; }
192 #endif
193
194 #if ENABLE(WEB_RTC)
195     bool webRTCVP8CodecEnabled() const { return m_isWebRTCVP8CodecEnabled; }
196     void setWebRTCVP8CodecEnabled(bool isEnabled) { m_isWebRTCVP8CodecEnabled = isEnabled; }
197     bool webRTCUnifiedPlanEnabled() const { return m_isWebRTCUnifiedPlanEnabled; }
198     void setWebRTCUnifiedPlanEnabled(bool isEnabled) { m_isWebRTCUnifiedPlanEnabled = isEnabled; }
199     bool peerConnectionEnabled() const { return m_isPeerConnectionEnabled; }
200     void setPeerConnectionEnabled(bool isEnabled) { m_isPeerConnectionEnabled = isEnabled; }
201     bool mdnsICECandidatesEnabled() const { return m_mdnsICECandidatesEnabled; }
202     void setMDNSICECandidatesEnabled(bool isEnabled) { m_mdnsICECandidatesEnabled = isEnabled; }
203 #endif
204
205 #if ENABLE(LEGACY_CSS_VENDOR_PREFIXES)
206     void setLegacyCSSVendorPrefixesEnabled(bool isEnabled) { m_isLegacyCSSVendorPrefixesEnabled = isEnabled; }
207     bool legacyCSSVendorPrefixesEnabled() const { return m_isLegacyCSSVendorPrefixesEnabled; }
208 #endif
209
210 #if ENABLE(INPUT_TYPE_DATE)
211     bool inputTypeDateEnabled() const { return m_isInputTypeDateEnabled; }
212     void setInputTypeDateEnabled(bool isEnabled) { m_isInputTypeDateEnabled = isEnabled; }
213 #endif
214
215 #if ENABLE(INPUT_TYPE_DATETIME_INCOMPLETE)
216     bool inputTypeDateTimeEnabled() const { return m_isInputTypeDateTimeEnabled; }
217     void setInputTypeDateTimeEnabled(bool isEnabled) { m_isInputTypeDateTimeEnabled = isEnabled; }
218 #endif
219
220 #if ENABLE(INPUT_TYPE_DATETIMELOCAL)
221     bool inputTypeDateTimeLocalEnabled() const { return m_isInputTypeDateTimeLocalEnabled; }
222     void setInputTypeDateTimeLocalEnabled(bool isEnabled) { m_isInputTypeDateTimeLocalEnabled = isEnabled; }
223 #endif
224
225 #if ENABLE(INPUT_TYPE_MONTH)
226     bool inputTypeMonthEnabled() const { return m_isInputTypeMonthEnabled; }
227     void setInputTypeMonthEnabled(bool isEnabled) { m_isInputTypeMonthEnabled = isEnabled; }
228 #endif
229
230 #if ENABLE(INPUT_TYPE_TIME)
231     bool inputTypeTimeEnabled() const { return m_isInputTypeTimeEnabled; }
232     void setInputTypeTimeEnabled(bool isEnabled) { m_isInputTypeTimeEnabled = isEnabled; }
233 #endif
234
235 #if ENABLE(INPUT_TYPE_WEEK)
236     bool inputTypeWeekEnabled() const { return m_isInputTypeWeekEnabled; }
237     void setInputTypeWeekEnabled(bool isEnabled) { m_isInputTypeWeekEnabled = isEnabled; }
238 #endif
239
240 #if ENABLE(GAMEPAD)
241     void setGamepadsEnabled(bool areEnabled) { m_areGamepadsEnabled = areEnabled; }
242     bool gamepadsEnabled() const { return m_areGamepadsEnabled; }
243 #endif
244
245 #if ENABLE(WEBGL2)
246     void setWebGL2Enabled(bool isEnabled) { m_isWebGL2Enabled = isEnabled; }
247     bool webGL2Enabled() const { return m_isWebGL2Enabled; }
248 #endif
249
250 #if ENABLE(WEBGPU)
251     void setWebGPUEnabled(bool isEnabled) { m_isWebGPUEnabled = isEnabled; }
252     bool webGPUEnabled() const { return m_isWebGPUEnabled; }
253 #endif
254
255 #if ENABLE(STREAMS_API)
256     void setReadableByteStreamAPIEnabled(bool isEnabled) { m_isReadableByteStreamAPIEnabled = isEnabled; }
257     bool readableByteStreamAPIEnabled() const { return m_isReadableByteStreamAPIEnabled; }
258     void setWritableStreamAPIEnabled(bool isEnabled) { m_isWritableStreamAPIEnabled = isEnabled; }
259     bool writableStreamAPIEnabled() const { return m_isWritableStreamAPIEnabled; }
260 #endif
261     
262 #if ENABLE(DOWNLOAD_ATTRIBUTE)
263     void setDownloadAttributeEnabled(bool isEnabled) { m_isDownloadAttributeEnabled = isEnabled; }
264     bool downloadAttributeEnabled() const { return m_isDownloadAttributeEnabled; }
265 #endif
266
267 #if ENABLE(INTERSECTION_OBSERVER)
268     void setIntersectionObserverEnabled(bool isEnabled) { m_intersectionObserverEnabled = isEnabled; }
269     bool intersectionObserverEnabled() const { return m_intersectionObserverEnabled; }
270 #endif
271
272 #if ENABLE(ENCRYPTED_MEDIA)
273     void setEncryptedMediaAPIEnabled(bool isEnabled) { m_encryptedMediaAPIEnabled = isEnabled; }
274     bool encryptedMediaAPIEnabled() const { return m_encryptedMediaAPIEnabled; }
275 #endif
276
277 #if ENABLE(LEGACY_ENCRYPTED_MEDIA)
278     void setLegacyEncryptedMediaAPIEnabled(bool isEnabled) { m_legacyEncryptedMediaAPIEnabled = isEnabled; }
279     bool legacyEncryptedMediaAPIEnabled() const { return m_legacyEncryptedMediaAPIEnabled; }
280 #endif
281
282 #if ENABLE(SERVICE_WORKER)
283     bool serviceWorkerEnabled() const { return m_serviceWorkerEnabled; }
284     void setServiceWorkerEnabled(bool isEnabled) { m_serviceWorkerEnabled = isEnabled; }
285 #endif
286
287 #if USE(SYSTEM_PREVIEW)
288     void setSystemPreviewEnabled(bool isEnabled) { m_systemPreviewEnabled = isEnabled; }
289     bool systemPreviewEnabled() const { return m_systemPreviewEnabled; }
290 #endif
291
292     WEBCORE_EXPORT static RuntimeEnabledFeatures& sharedFeatures();
293
294 private:
295     // Never instantiate.
296     RuntimeEnabledFeatures();
297
298     bool m_areModernMediaControlsEnabled { false };
299     bool m_isLinkPreloadEnabled { true };
300     bool m_isLinkPrefetchEnabled { false };
301     bool m_isMediaPreloadingEnabled { false };
302     bool m_isResourceTimingEnabled { false };
303     bool m_isUserTimingEnabled { false };
304     bool m_isInteractiveFormValidationEnabled { false };
305     bool m_isWebAuthenticationEnabled { false };
306     bool m_isSecureContextAttributeEnabled { false };
307     bool m_isDisplayContentsEnabled { true };
308     bool m_isShadowDOMEnabled { true };
309     bool m_areCustomElementsEnabled { true };
310     bool m_isMenuItemElementEnabled { false };
311     bool m_isDirectoryUploadEnabled { false };
312     bool m_areDataTransferItemsEnabled { false };
313     bool m_isCustomPasteboardDataEnabled { false };
314     bool m_isWebShareEnabled { false };
315     bool m_inputEventsEnabled { true };
316     bool m_areWebAnimationsEnabled { true };
317     bool m_isWebAnimationsCSSIntegrationEnabled { true };
318     bool m_isImageBitmapOffscreenCanvasEnabled { true };
319     bool m_isCacheAPIEnabled { false };
320     bool m_isFetchAPIEnabled { true };
321     bool m_isWebSocketEnabled { true };
322     bool m_fetchAPIKeepAliveEnabled { false };
323     bool m_inspectorAdditionsEnabled { false };
324     bool m_webVREnabled { false };
325     bool m_accessibilityObjectModelEnabled { false };
326     bool m_ariaReflectionEnabled { true };
327     bool m_resourceLoadStatisticsDebugMode { false };
328     bool m_isRestrictedHTTPResponseAccess { true };
329     bool m_crossOriginResourcePolicyEnabled { true };
330     bool m_isWebGLCompressedTextureASTCSupportEnabled { false };
331     bool m_promptForStorageAccessAPIEnabled { false };
332     bool m_isServerTimingEnabled { false };
333     bool m_experimentalPlugInSandboxProfilesEnabled { false };
334     bool m_disabledAdaptationsMetaTagEnabled { false };
335     bool m_attrStyleEnabled { false };
336     bool m_webAPIStatisticsEnabled { false };
337     bool m_CSSCustomPropertiesAndValuesEnabled { false };
338     bool m_pointerEventsEnabled { false };
339
340 #if ENABLE(ATTACHMENT_ELEMENT)
341     bool m_isAttachmentElementEnabled { false };
342 #endif
343
344 #if ENABLE(INDEXED_DATABASE_IN_WORKERS)
345     bool m_isIndexedDBWorkersEnabled { true };
346 #endif
347
348 #if ENABLE(MEDIA_STREAM)
349     bool m_isMediaRecorderEnabled { false };
350     bool m_isMediaDevicesEnabled { false };
351     bool m_isMediaStreamEnabled { true };
352     bool m_isScreenCaptureEnabled { false };
353 #endif
354
355 #if ENABLE(WEB_RTC)
356     bool m_isWebRTCVP8CodecEnabled { false };
357     bool m_isWebRTCUnifiedPlanEnabled { true };
358     bool m_isPeerConnectionEnabled { true };
359     bool m_mdnsICECandidatesEnabled { false };
360 #endif
361
362 #if ENABLE(LEGACY_CSS_VENDOR_PREFIXES)
363     bool m_isLegacyCSSVendorPrefixesEnabled { false };
364 #endif
365
366 #if ENABLE(INPUT_TYPE_DATE)
367     bool m_isInputTypeDateEnabled { true };
368 #endif
369
370 #if ENABLE(INPUT_TYPE_DATETIME_INCOMPLETE)
371     bool m_isInputTypeDateTimeEnabled { false };
372 #endif
373
374 #if ENABLE(INPUT_TYPE_DATETIMELOCAL)
375     bool m_isInputTypeDateTimeLocalEnabled { true };
376 #endif
377
378 #if ENABLE(INPUT_TYPE_MONTH)
379     bool m_isInputTypeMonthEnabled { true };
380 #endif
381
382 #if ENABLE(INPUT_TYPE_TIME)
383     bool m_isInputTypeTimeEnabled { true };
384 #endif
385
386 #if ENABLE(INPUT_TYPE_WEEK)
387     bool m_isInputTypeWeekEnabled { true };
388 #endif
389
390 #if ENABLE(GAMEPAD)
391     bool m_areGamepadsEnabled { false };
392 #endif
393
394 #if ENABLE(STREAMS_API)
395     bool m_isReadableByteStreamAPIEnabled { false };
396     bool m_isWritableStreamAPIEnabled { false };
397 #endif
398
399 #if ENABLE(WEBGL2)
400     bool m_isWebGL2Enabled { false };
401 #endif
402
403 #if ENABLE(WEBGPU)
404     bool m_isWebGPUEnabled { false };
405 #endif
406
407 #if ENABLE(DOWNLOAD_ATTRIBUTE)
408     bool m_isDownloadAttributeEnabled { false };
409 #endif
410
411 #if ENABLE(ENCRYPTED_MEDIA)
412     bool m_encryptedMediaAPIEnabled { false };
413 #endif
414
415 #if ENABLE(LEGACY_ENCRYPTED_MEDIA)
416     bool m_legacyEncryptedMediaAPIEnabled { false };
417 #endif
418
419 #if ENABLE(INTERSECTION_OBSERVER)
420     bool m_intersectionObserverEnabled { false };
421 #endif
422
423 #if ENABLE(SERVICE_WORKER)
424     bool m_serviceWorkerEnabled { false };
425 #endif
426
427 #if USE(SYSTEM_PREVIEW)
428     bool m_systemPreviewEnabled { false };
429 #endif
430
431     friend class WTF::NeverDestroyed<RuntimeEnabledFeatures>;
432 };
433
434 } // namespace WebCore