Modern IDB (Workers): Enable INDEXED_DATABASE_IN_WORKERS compile time flag, but disab...
[WebKit-https.git] / Source / WebCore / bindings / generic / RuntimeEnabledFeatures.h
1 /*
2  * Copyright (C) 2009 Google Inc. All rights reserved.
3  * Copyright (C) 2013-2016 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 setLocalStorageEnabled(bool isEnabled) { m_isLocalStorageEnabled = isEnabled; }
47     bool localStorageEnabled() const { return m_isLocalStorageEnabled; }
48
49     void setSessionStorageEnabled(bool isEnabled) { m_isSessionStorageEnabled = isEnabled; }
50     bool sessionStorageEnabled() const { return m_isSessionStorageEnabled; }
51
52     void setWebkitNotificationsEnabled(bool isEnabled) { m_isWebkitNotificationsEnabled = isEnabled; }
53     bool webkitNotificationsEnabled() const { return m_isWebkitNotificationsEnabled; }
54
55     void setApplicationCacheEnabled(bool isEnabled) { m_isApplicationCacheEnabled = isEnabled; }
56     bool applicationCacheEnabled() const { return m_isApplicationCacheEnabled; }
57
58     void setDataTransferItemsEnabled(bool isEnabled) { m_isDataTransferItemsEnabled = isEnabled; }
59     bool dataTransferItemsEnabled() const { return m_isDataTransferItemsEnabled; }
60
61     void setGeolocationEnabled(bool isEnabled) { m_isGeolocationEnabled = isEnabled; }
62     bool geolocationEnabled() const { return m_isGeolocationEnabled; }
63
64 #if ENABLE(INDEXED_DATABASE)
65     void setWebkitIndexedDBEnabled(bool isEnabled) { m_isIndexedDBEnabled = isEnabled; }
66     bool webkitIndexedDBEnabled() const { return m_isIndexedDBEnabled; }
67     bool indexedDBEnabled() const { return m_isIndexedDBEnabled; }
68 #endif
69
70 #if ENABLE(INDEXED_DATABASE_IN_WORKERS)
71     void setIndexedDBWorkersEnabled(bool isEnabled) { m_isIndexedDBWorkersEnabled = isEnabled; }
72     bool indexedDBWorkersEnabled() const { return m_isIndexedDBWorkersEnabled; }
73 #endif
74
75 #if ENABLE(CSS_SHAPES)
76     void setCSSShapesEnabled(bool isEnabled) { m_isCSSShapesEnabled = isEnabled; }
77     bool cssShapesEnabled() const { return m_isCSSShapesEnabled; }
78 #else
79     void setCSSShapesEnabled(bool) { }
80     bool cssShapesEnabled() const { return false; }
81 #endif
82
83 #if ENABLE(CSS_REGIONS)
84     void setCSSRegionsEnabled(bool isEnabled) { m_isCSSRegionsEnabled = isEnabled; }
85     bool cssRegionsEnabled() const { return m_isCSSRegionsEnabled; }
86 #else
87     void setCSSRegionsEnabled(bool) { }
88     bool cssRegionsEnabled() const { return false; }
89 #endif
90
91     void setCSSCompositingEnabled(bool isEnabled) { m_isCSSCompositingEnabled = isEnabled; }
92     bool cssCompositingEnabled() const { return m_isCSSCompositingEnabled; }
93
94 #if ENABLE(FONT_LOAD_EVENTS)
95     void setFontLoadEventsEnabled(bool isEnabled) { m_isFontLoadEventsEnabled = isEnabled; }
96     bool fontLoadEventsEnabled() const { return m_isFontLoadEventsEnabled; }
97 #else
98     void setFontLoadEventsEnabled(bool) { }
99     bool fontLoadEventsEnabled() { return false; }
100 #endif
101
102 #if ENABLE(VIDEO)
103     bool audioEnabled() const;
104     bool htmlMediaElementEnabled() const;
105     bool htmlAudioElementEnabled() const;
106     bool htmlVideoElementEnabled() const;
107     bool htmlSourceElementEnabled() const;
108     bool mediaControllerEnabled() const;
109     bool mediaErrorEnabled() const;
110     bool timeRangesEnabled() const;
111 #endif
112
113 #if ENABLE(WEB_SOCKETS)
114     bool webSocketEnabled() const;
115 #endif
116
117 #if ENABLE(TOUCH_EVENTS)
118     bool touchEnabled() const { return m_isTouchEnabled; }
119     void setTouchEnabled(bool isEnabled) { m_isTouchEnabled = isEnabled; }
120 #endif
121
122     void setDeviceMotionEnabled(bool isEnabled) { m_isDeviceMotionEnabled = isEnabled; }
123     bool deviceMotionEnabled() const { return m_isDeviceMotionEnabled; }
124     bool deviceMotionEventEnabled() const { return m_isDeviceMotionEnabled; }
125     bool ondevicemotionEnabled() const { return m_isDeviceMotionEnabled; }
126
127     void setDeviceOrientationEnabled(bool isEnabled) { m_isDeviceOrientationEnabled = isEnabled; }
128     bool deviceOrientationEnabled() const { return m_isDeviceOrientationEnabled; }
129     bool deviceOrientationEventEnabled() const { return m_isDeviceOrientationEnabled; }
130     bool ondeviceorientationEnabled() const { return m_isDeviceOrientationEnabled; }
131
132     void setLinkPreloadEnabled(bool isEnabled) { m_isLinkPreloadEnabled = isEnabled; }
133     bool linkPreloadEnabled() const { return m_isLinkPreloadEnabled; }
134
135 #if ENABLE(JAVASCRIPT_I18N_API)
136     bool javaScriptI18NAPIEnabled() const;
137     void setJavaScriptI18NAPIEnabled(bool isEnabled) { m_isJavaScriptI18NAPIEnabled = isEnabled; }
138 #endif
139
140 #if ENABLE(MEDIA_STREAM)
141     bool mediaStreamEnabled() const { return m_isMediaStreamEnabled; }
142     void setMediaStreamEnabled(bool isEnabled) { m_isMediaStreamEnabled = isEnabled; }
143     bool webkitGetUserMediaEnabled() const { return m_isMediaStreamEnabled; }
144     bool webkitMediaStreamEnabled() const { return m_isMediaStreamEnabled; }
145 #endif
146 #if ENABLE(WEB_RTC)
147     bool peerConnectionEnabled() const { return m_isMediaStreamEnabled && m_isPeerConnectionEnabled; }
148     void setPeerConnectionEnabled(bool isEnabled) { m_isPeerConnectionEnabled = isEnabled; }
149     bool webkitRTCPeerConnectionEnabled() const { return peerConnectionEnabled(); }
150 #endif
151
152 #if ENABLE(LEGACY_CSS_VENDOR_PREFIXES)
153     void setLegacyCSSVendorPrefixesEnabled(bool isEnabled) { m_isLegacyCSSVendorPrefixesEnabled = isEnabled; }
154     bool legacyCSSVendorPrefixesEnabled() const { return m_isLegacyCSSVendorPrefixesEnabled; }
155 #endif
156
157 #if ENABLE(VIDEO_TRACK)
158     bool webkitVideoTrackEnabled() const { return m_isVideoTrackEnabled; }
159     void setWebkitVideoTrackEnabled(bool isEnabled) { m_isVideoTrackEnabled = isEnabled; }
160 #endif
161
162 #if ENABLE(INPUT_TYPE_DATE)
163     bool inputTypeDateEnabled() const { return m_isInputTypeDateEnabled; }
164     void setInputTypeDateEnabled(bool isEnabled) { m_isInputTypeDateEnabled = isEnabled; }
165 #endif
166
167 #if ENABLE(INPUT_TYPE_DATETIME_INCOMPLETE)
168     bool inputTypeDateTimeEnabled() const { return m_isInputTypeDateTimeEnabled; }
169     void setInputTypeDateTimeEnabled(bool isEnabled) { m_isInputTypeDateTimeEnabled = isEnabled; }
170 #endif
171
172 #if ENABLE(INPUT_TYPE_DATETIMELOCAL)
173     bool inputTypeDateTimeLocalEnabled() const { return m_isInputTypeDateTimeLocalEnabled; }
174     void setInputTypeDateTimeLocalEnabled(bool isEnabled) { m_isInputTypeDateTimeLocalEnabled = isEnabled; }
175 #endif
176
177 #if ENABLE(INPUT_TYPE_MONTH)
178     bool inputTypeMonthEnabled() const { return m_isInputTypeMonthEnabled; }
179     void setInputTypeMonthEnabled(bool isEnabled) { m_isInputTypeMonthEnabled = isEnabled; }
180 #endif
181
182 #if ENABLE(INPUT_TYPE_TIME)
183     bool inputTypeTimeEnabled() const { return m_isInputTypeTimeEnabled; }
184     void setInputTypeTimeEnabled(bool isEnabled) { m_isInputTypeTimeEnabled = isEnabled; }
185 #endif
186
187 #if ENABLE(INPUT_TYPE_WEEK)
188     bool inputTypeWeekEnabled() const { return m_isInputTypeWeekEnabled; }
189     void setInputTypeWeekEnabled(bool isEnabled) { m_isInputTypeWeekEnabled = isEnabled; }
190 #endif
191
192 #if ENABLE(CSP_NEXT)
193     bool experimentalContentSecurityPolicyFeaturesEnabled() const { return m_areExperimentalContentSecurityPolicyFeaturesEnabled; }
194     void setExperimentalContentSecurityPolicyFeaturesEnabled(bool isEnabled) { m_areExperimentalContentSecurityPolicyFeaturesEnabled = isEnabled; }
195 #endif
196
197     bool langAttributeAwareFormControlUIEnabled() const { return m_isLangAttributeAwareFormControlUIEnabled; }
198     // The lang attribute support is incomplete and should only be turned on for tests.
199     void setLangAttributeAwareFormControlUIEnabled(bool isEnabled) { m_isLangAttributeAwareFormControlUIEnabled = isEnabled; }
200
201     void setPluginReplacementEnabled(bool isEnabled) { m_isPluginReplacementEnabled = isEnabled; }
202     bool pluginReplacementEnabled() const { return m_isPluginReplacementEnabled; }
203
204 #if ENABLE(GAMEPAD)
205     void setGamepadsEnabled(bool areEnabled) { m_areGamepadsEnabled = areEnabled; }
206     bool gamepadsEnabled() const { return m_areGamepadsEnabled; }
207 #endif
208
209 #if ENABLE(CSS_ANIMATIONS_LEVEL_2)
210     void setAnimationTriggersEnabled(bool areEnabled) { m_areAnimationTriggersEnabled = areEnabled; }
211     bool animationTriggersEnabled() const { return m_areAnimationTriggersEnabled; }
212 #endif
213
214 #if ENABLE(WEB_ANIMATIONS)
215     void setWebAnimationsEnabled(bool areEnabled) { m_areWebAnimationsEnabled = areEnabled; }
216     bool webAnimationsEnabled() const { return m_areWebAnimationsEnabled; }
217 #endif
218
219 #if ENABLE(SHADOW_DOM)
220     void setShadowDOMEnabled(bool isEnabled) { m_isShadowDOMEnabled = isEnabled; }
221     bool shadowDOMEnabled() const { return m_isShadowDOMEnabled; }
222 #endif
223
224 #if ENABLE(CUSTOM_ELEMENTS)
225     void setCustomElementsEnabled(bool areEnabled) { m_areCustomElementsEnabled = areEnabled; }
226     bool customElementsEnabled() const { return m_areCustomElementsEnabled; }
227 #endif
228
229 #if ENABLE(WEBGL2)
230     void setWebGL2Enabled(bool isEnabled) { m_isWebGL2Enabled = isEnabled; }
231     bool webGL2Enabled() const { return m_isWebGL2Enabled; }
232 #endif
233
234 #if ENABLE(FETCH_API)
235     void setFetchAPIEnabled(bool isEnabled) { m_isFetchAPIEnabled = isEnabled; }
236     bool fetchAPIEnabled() const { return m_isFetchAPIEnabled; }
237 #endif
238
239 #if ENABLE(DOWNLOAD_ATTRIBUTE)
240     void setDownloadAttributeEnabled(bool isEnabled) { m_isDownloadAttributeEnabled = isEnabled; }
241     bool downloadAttributeEnabled() const { return m_isDownloadAttributeEnabled; }
242 #endif
243
244     WEBCORE_EXPORT static RuntimeEnabledFeatures& sharedFeatures();
245
246 private:
247     // Never instantiate.
248     RuntimeEnabledFeatures();
249
250     bool m_isLocalStorageEnabled;
251     bool m_isSessionStorageEnabled;
252     bool m_isWebkitNotificationsEnabled;
253     bool m_isApplicationCacheEnabled;
254     bool m_isDataTransferItemsEnabled;
255     bool m_isGeolocationEnabled;
256     bool m_isTouchEnabled;
257     bool m_isDeviceMotionEnabled;
258     bool m_isDeviceOrientationEnabled;
259     bool m_isLinkPreloadEnabled;
260     bool m_isCSSShapesEnabled;
261     bool m_isCSSRegionsEnabled;
262     bool m_isCSSCompositingEnabled;
263     bool m_isLangAttributeAwareFormControlUIEnabled;
264     bool m_isPluginReplacementEnabled;
265
266 #if ENABLE(INDEXED_DATABASE)
267     bool m_isIndexedDBEnabled;
268 #endif
269
270 #if ENABLE(INDEXED_DATABASE_IN_WORKERS)
271     bool m_isIndexedDBWorkersEnabled;
272 #endif
273
274 #if ENABLE(JAVASCRIPT_I18N_API)
275     bool m_isJavaScriptI18NAPIEnabled;
276 #endif
277
278 #if ENABLE(MEDIA_STREAM)
279     bool m_isMediaStreamEnabled;
280 #endif
281 #if ENABLE(WEB_RTC)
282     bool m_isPeerConnectionEnabled;
283 #endif
284
285 #if ENABLE(LEGACY_CSS_VENDOR_PREFIXES)
286     bool m_isLegacyCSSVendorPrefixesEnabled;
287 #endif
288
289 #if ENABLE(VIDEO_TRACK)
290     bool m_isVideoTrackEnabled;
291 #endif
292
293 #if ENABLE(INPUT_TYPE_DATE)
294     bool m_isInputTypeDateEnabled;
295 #endif
296
297 #if ENABLE(INPUT_TYPE_DATETIME_INCOMPLETE)
298     bool m_isInputTypeDateTimeEnabled;
299 #endif
300
301 #if ENABLE(INPUT_TYPE_DATETIMELOCAL)
302     bool m_isInputTypeDateTimeLocalEnabled;
303 #endif
304
305 #if ENABLE(INPUT_TYPE_MONTH)
306     bool m_isInputTypeMonthEnabled;
307 #endif
308
309 #if ENABLE(INPUT_TYPE_TIME)
310     bool m_isInputTypeTimeEnabled;
311 #endif
312
313 #if ENABLE(INPUT_TYPE_WEEK)
314     bool m_isInputTypeWeekEnabled;
315 #endif
316
317 #if ENABLE(CSP_NEXT)
318     bool m_areExperimentalContentSecurityPolicyFeaturesEnabled;
319 #endif
320
321 #if ENABLE(FONT_LOAD_EVENTS)
322     bool m_isFontLoadEventsEnabled;
323 #endif
324
325 #if ENABLE(GAMEPAD)
326     bool m_areGamepadsEnabled;
327 #endif
328
329 #if ENABLE(CSS_ANIMATIONS_LEVEL_2)
330     bool m_areAnimationTriggersEnabled;
331 #endif
332
333 #if ENABLE(WEB_ANIMATIONS)
334     bool m_areWebAnimationsEnabled;
335 #endif
336     
337 #if ENABLE(SHADOW_DOM)
338     bool m_isShadowDOMEnabled;
339 #endif
340
341 #if ENABLE(CUSTOM_ELEMENTS)
342     bool m_areCustomElementsEnabled;
343 #endif
344
345 #if ENABLE(WEBGL2)
346     bool m_isWebGL2Enabled;
347 #endif
348
349 #if ENABLE(FETCH_API)
350     bool m_isFetchAPIEnabled { false };
351 #endif
352
353 #if ENABLE(DOWNLOAD_ATTRIBUTE)
354     bool m_isDownloadAttributeEnabled { false };
355 #endif
356
357     friend class WTF::NeverDestroyed<RuntimeEnabledFeatures>;
358 };
359
360 } // namespace WebCore