Add a RuntimeEnabledFeature for display: contents, defaulted to false.
[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 "PlatformExportMacros.h"
35 #include <wtf/NeverDestroyed.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 setResourceTimingEnabled(bool isEnabled) { m_isResourceTimingEnabled = isEnabled; }
53     bool resourceTimingEnabled() const { return m_isResourceTimingEnabled; }
54
55     void setUserTimingEnabled(bool isEnabled) { m_isUserTimingEnabled = isEnabled; }
56     bool userTimingEnabled() const { return m_isUserTimingEnabled; }
57
58     bool performanceTimelineEnabled() const { return resourceTimingEnabled() || userTimingEnabled(); }
59
60     void setShadowDOMEnabled(bool isEnabled) { m_isShadowDOMEnabled = isEnabled; }
61     bool shadowDOMEnabled() const { return m_isShadowDOMEnabled; }
62
63     void setInputEventsEnabled(bool isEnabled) { m_inputEventsEnabled = isEnabled; }
64     bool inputEventsEnabled() const { return m_inputEventsEnabled; }
65
66     void setInteractiveFormValidationEnabled(bool isEnabled) { m_isInteractiveFormValidationEnabled = isEnabled; }
67     bool interactiveFormValidationEnabled() const { return m_isInteractiveFormValidationEnabled; }
68
69     void setCustomElementsEnabled(bool areEnabled) { m_areCustomElementsEnabled = areEnabled; }
70     bool customElementsEnabled() const { return m_areCustomElementsEnabled; }
71
72     void setModernMediaControlsEnabled(bool areEnabled) { m_areModernMediaControlsEnabled = areEnabled; }
73     bool modernMediaControlsEnabled() const { return m_areModernMediaControlsEnabled; }
74
75     void setCredentialManagementEnabled(bool isEnabled) { m_isCredentialManagementEnabled = isEnabled; }
76     bool credentialManagementEnabled() const { return m_isCredentialManagementEnabled; }
77
78 #if ENABLE(INDEXED_DATABASE_IN_WORKERS)
79     void setIndexedDBWorkersEnabled(bool isEnabled) { m_isIndexedDBWorkersEnabled = isEnabled; }
80     bool indexedDBWorkersEnabled() const { return m_isIndexedDBWorkersEnabled; }
81 #endif
82
83 #if ENABLE(FONT_LOAD_EVENTS)
84     void setFontLoadEventsEnabled(bool isEnabled) { m_isFontLoadEventsEnabled = isEnabled; }
85     bool fontLoadEventsEnabled() const { return m_isFontLoadEventsEnabled; }
86 #endif
87
88 #if ENABLE(MEDIA_STREAM)
89     bool mediaDevicesEnabled() const { return m_isMediaDevicesEnabled; }
90     void setMediaDevicesEnabled(bool isEnabled) { m_isMediaDevicesEnabled = isEnabled; }
91     bool mediaStreamEnabled() const { return m_isMediaStreamEnabled; }
92     void setMediaStreamEnabled(bool isEnabled) { m_isMediaStreamEnabled = isEnabled; }
93 #endif
94
95 #if ENABLE(WEB_RTC)
96     bool peerConnectionEnabled() const { return m_isPeerConnectionEnabled; }
97     void setPeerConnectionEnabled(bool isEnabled) { m_isPeerConnectionEnabled = isEnabled; }
98     bool webRTCLegacyAPIEnabled() const { return m_webRTCLegacyAPIEnabled; }
99     void setWebRTCLegacyAPIEnabled(bool isEnabled) { m_webRTCLegacyAPIEnabled = isEnabled; }
100 #endif
101
102 #if ENABLE(LEGACY_CSS_VENDOR_PREFIXES)
103     void setLegacyCSSVendorPrefixesEnabled(bool isEnabled) { m_isLegacyCSSVendorPrefixesEnabled = isEnabled; }
104     bool legacyCSSVendorPrefixesEnabled() const { return m_isLegacyCSSVendorPrefixesEnabled; }
105 #endif
106
107 #if ENABLE(INPUT_TYPE_DATE)
108     bool inputTypeDateEnabled() const { return m_isInputTypeDateEnabled; }
109     void setInputTypeDateEnabled(bool isEnabled) { m_isInputTypeDateEnabled = isEnabled; }
110 #endif
111
112 #if ENABLE(INPUT_TYPE_DATETIME_INCOMPLETE)
113     bool inputTypeDateTimeEnabled() const { return m_isInputTypeDateTimeEnabled; }
114     void setInputTypeDateTimeEnabled(bool isEnabled) { m_isInputTypeDateTimeEnabled = isEnabled; }
115 #endif
116
117 #if ENABLE(INPUT_TYPE_DATETIMELOCAL)
118     bool inputTypeDateTimeLocalEnabled() const { return m_isInputTypeDateTimeLocalEnabled; }
119     void setInputTypeDateTimeLocalEnabled(bool isEnabled) { m_isInputTypeDateTimeLocalEnabled = isEnabled; }
120 #endif
121
122 #if ENABLE(INPUT_TYPE_MONTH)
123     bool inputTypeMonthEnabled() const { return m_isInputTypeMonthEnabled; }
124     void setInputTypeMonthEnabled(bool isEnabled) { m_isInputTypeMonthEnabled = isEnabled; }
125 #endif
126
127 #if ENABLE(INPUT_TYPE_TIME)
128     bool inputTypeTimeEnabled() const { return m_isInputTypeTimeEnabled; }
129     void setInputTypeTimeEnabled(bool isEnabled) { m_isInputTypeTimeEnabled = isEnabled; }
130 #endif
131
132 #if ENABLE(INPUT_TYPE_WEEK)
133     bool inputTypeWeekEnabled() const { return m_isInputTypeWeekEnabled; }
134     void setInputTypeWeekEnabled(bool isEnabled) { m_isInputTypeWeekEnabled = isEnabled; }
135 #endif
136
137 #if ENABLE(GAMEPAD)
138     void setGamepadsEnabled(bool areEnabled) { m_areGamepadsEnabled = areEnabled; }
139     bool gamepadsEnabled() const { return m_areGamepadsEnabled; }
140 #endif
141
142 #if ENABLE(CSS_ANIMATIONS_LEVEL_2)
143     // FIXME: This is not used.
144     void setAnimationTriggersEnabled(bool areEnabled) { m_areAnimationTriggersEnabled = areEnabled; }
145     bool animationTriggersEnabled() const { return m_areAnimationTriggersEnabled; }
146 #endif
147
148 #if ENABLE(WEB_ANIMATIONS)
149     void setWebAnimationsEnabled(bool areEnabled) { m_areWebAnimationsEnabled = areEnabled; }
150     bool webAnimationsEnabled() const { return m_areWebAnimationsEnabled; }
151 #endif
152
153 #if ENABLE(WEBGL2)
154     void setWebGL2Enabled(bool isEnabled) { m_isWebGL2Enabled = isEnabled; }
155     bool webGL2Enabled() const { return m_isWebGL2Enabled; }
156 #endif
157
158 #if ENABLE(WEBGPU)
159     void setWebGPUEnabled(bool isEnabled) { m_isWebGPUEnabled = isEnabled; }
160     bool webGPUEnabled() const { return m_isWebGPUEnabled; }
161 #endif
162
163 #if ENABLE(FETCH_API)
164     void setFetchAPIEnabled(bool isEnabled) { m_isFetchAPIEnabled = isEnabled; }
165     bool fetchAPIEnabled() const { return m_isFetchAPIEnabled; }
166 #endif
167     
168 #if ENABLE(STREAMS_API)
169     void setReadableByteStreamAPIEnabled(bool isEnabled) { m_isReadableByteStreamAPIEnabled = isEnabled; }
170     bool readableByteStreamAPIEnabled() const { return m_isReadableByteStreamAPIEnabled; }
171     void setWritableStreamAPIEnabled(bool isEnabled) { m_isWritableStreamAPIEnabled = isEnabled; }
172     bool writableStreamAPIEnabled() const { return m_isWritableStreamAPIEnabled; }
173 #endif
174     
175 #if ENABLE(DOWNLOAD_ATTRIBUTE)
176     void setDownloadAttributeEnabled(bool isEnabled) { m_isDownloadAttributeEnabled = isEnabled; }
177     bool downloadAttributeEnabled() const { return m_isDownloadAttributeEnabled; }
178 #endif
179
180     void setCSSGridLayoutEnabled(bool isEnabled) { m_cssGridLayoutEnabled = isEnabled; }
181     bool isCSSGridLayoutEnabled() const { return m_cssGridLayoutEnabled; }
182
183 #if ENABLE(INTERSECTION_OBSERVER)
184     void setIntersectionObserverEnabled(bool isEnabled) { m_intersectionObserverEnabled = isEnabled; }
185     bool intersectionObserverEnabled() const { return m_intersectionObserverEnabled; }
186 #endif
187
188 #if ENABLE(ENCRYPTED_MEDIA)
189     void setEncryptedMediaAPIEnabled(bool isEnabled) { m_encryptedMediaAPIEnabled = isEnabled; }
190     bool encryptedMediaAPIEnabled() const { return m_encryptedMediaAPIEnabled; }
191 #endif
192
193 #if ENABLE(SUBTLE_CRYPTO)
194     void setSubtleCryptoEnabled(bool isEnabled) { m_isSubtleCryptoEnabled = isEnabled; }
195     bool subtleCryptoEnabled() const { return m_isSubtleCryptoEnabled; }
196 #endif
197
198 #if ENABLE(VIDEO)
199     bool audioEnabled() const;
200 #endif
201
202 #if ENABLE(WEB_SOCKETS)
203     bool webSocketEnabled() const;
204 #endif
205
206     WEBCORE_EXPORT static RuntimeEnabledFeatures& sharedFeatures();
207
208 private:
209     // Never instantiate.
210     RuntimeEnabledFeatures();
211
212     bool m_areModernMediaControlsEnabled { false };
213     bool m_isLinkPreloadEnabled { false };
214     bool m_isResourceTimingEnabled { false };
215     bool m_isUserTimingEnabled { false };
216     bool m_isInteractiveFormValidationEnabled { false };
217     bool m_isCredentialManagementEnabled { false };
218
219     bool m_isDisplayContentsEnabled { false };
220     bool m_isShadowDOMEnabled { true };
221     bool m_areCustomElementsEnabled { true };
222     bool m_inputEventsEnabled { true };
223
224 #if ENABLE(INDEXED_DATABASE_IN_WORKERS)
225     bool m_isIndexedDBWorkersEnabled { true };
226 #endif
227
228 #if ENABLE(MEDIA_STREAM)
229     bool m_isMediaDevicesEnabled { false };
230     bool m_isMediaStreamEnabled { true };
231 #endif
232
233 #if ENABLE(WEB_RTC)
234     bool m_isPeerConnectionEnabled { true };
235     bool m_webRTCLegacyAPIEnabled { true };
236 #endif
237
238 #if ENABLE(LEGACY_CSS_VENDOR_PREFIXES)
239     bool m_isLegacyCSSVendorPrefixesEnabled { false };
240 #endif
241
242 #if ENABLE(INPUT_TYPE_DATE)
243     bool m_isInputTypeDateEnabled { true };
244 #endif
245
246 #if ENABLE(INPUT_TYPE_DATETIME_INCOMPLETE)
247     bool m_isInputTypeDateTimeEnabled { false };
248 #endif
249
250 #if ENABLE(INPUT_TYPE_DATETIMELOCAL)
251     bool m_isInputTypeDateTimeLocalEnabled { true };
252 #endif
253
254 #if ENABLE(INPUT_TYPE_MONTH)
255     bool m_isInputTypeMonthEnabled { true };
256 #endif
257
258 #if ENABLE(INPUT_TYPE_TIME)
259     bool m_isInputTypeTimeEnabled { true };
260 #endif
261
262 #if ENABLE(INPUT_TYPE_WEEK)
263     bool m_isInputTypeWeekEnabled { true };
264 #endif
265
266 #if ENABLE(FONT_LOAD_EVENTS)
267     bool m_isFontLoadEventsEnabled { true };
268 #endif
269
270 #if ENABLE(GAMEPAD)
271     bool m_areGamepadsEnabled { false };
272 #endif
273
274 #if ENABLE(CSS_ANIMATIONS_LEVEL_2)
275     bool m_areAnimationTriggersEnabled { false };
276 #endif
277
278 #if ENABLE(STREAMS_API)
279     bool m_isReadableByteStreamAPIEnabled { false };
280     bool m_isWritableStreamAPIEnabled { false };
281 #endif
282
283 #if ENABLE(WEB_ANIMATIONS)
284     bool m_areWebAnimationsEnabled { false };
285 #endif
286
287 #if ENABLE(WEBGL2)
288     bool m_isWebGL2Enabled { false };
289 #endif
290
291 #if ENABLE(WEBGPU)
292     bool m_isWebGPUEnabled { false };
293 #endif
294
295 #if ENABLE(FETCH_API)
296     bool m_isFetchAPIEnabled { true };
297 #endif
298
299 #if ENABLE(DOWNLOAD_ATTRIBUTE)
300     bool m_isDownloadAttributeEnabled { false };
301 #endif
302
303     bool m_cssGridLayoutEnabled { true };
304
305 #if ENABLE(ENCRYPTED_MEDIA)
306     bool m_encryptedMediaAPIEnabled { false };
307 #endif
308
309 #if ENABLE(INTERSECTION_OBSERVER)
310     bool m_intersectionObserverEnabled { false };
311 #endif
312
313 #if ENABLE(SUBTLE_CRYPTO)
314     bool m_isSubtleCryptoEnabled { true };
315 #endif
316
317     friend class WTF::NeverDestroyed<RuntimeEnabledFeatures>;
318 };
319
320 } // namespace WebCore