93cb839118168c20ca4966ab9f5b07e6e36ea7a6
[WebKit-https.git] / Source / WebCore / bindings / generic / RuntimeEnabledFeatures.h
1 /*
2  * Copyright (C) 2009 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
8  *     * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *     * Redistributions in binary form must reproduce the above
11  * copyright notice, this list of conditions and the following disclaimer
12  * in the documentation and/or other materials provided with the
13  * distribution.
14  *     * Neither the name of Google Inc. nor the names of its
15  * contributors may be used to endorse or promote products derived from
16  * this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #ifndef RuntimeEnabledFeatures_h
32 #define RuntimeEnabledFeatures_h
33
34 #include "PlatformExportMacros.h"
35
36 namespace WebCore {
37
38 // A class that stores static enablers for all experimental features. Note that
39 // the method names must line up with the JavaScript method they enable for code
40 // generation to work properly.
41
42 class RuntimeEnabledFeatures {
43 public:
44     static void setLocalStorageEnabled(bool isEnabled) { isLocalStorageEnabled = isEnabled; }
45     static bool localStorageEnabled() { return isLocalStorageEnabled; }
46
47     static void setSessionStorageEnabled(bool isEnabled) { isSessionStorageEnabled = isEnabled; }
48     static bool sessionStorageEnabled() { return isSessionStorageEnabled; }
49
50     static void setWebkitNotificationsEnabled(bool isEnabled) { isWebkitNotificationsEnabled = isEnabled; }
51     static bool webkitNotificationsEnabled() { return isWebkitNotificationsEnabled; }
52
53     static void setApplicationCacheEnabled(bool isEnabled) { isApplicationCacheEnabled = isEnabled; }
54     static bool applicationCacheEnabled() { return isApplicationCacheEnabled; }
55
56     static void setDataTransferItemsEnabled(bool isEnabled) { isDataTransferItemsEnabled = isEnabled; }
57     static bool dataTransferItemsEnabled() { return isDataTransferItemsEnabled; }
58
59     static void setGeolocationEnabled(bool isEnabled) { isGeolocationEnabled = isEnabled; }
60     static bool geolocationEnabled() { return isGeolocationEnabled; }
61
62     static void setWebkitIndexedDBEnabled(bool isEnabled) { isIndexedDBEnabled = isEnabled; }
63     static bool webkitIndexedDBEnabled() { return isIndexedDBEnabled; }
64     static bool indexedDBEnabled() { return isIndexedDBEnabled; }
65
66 #if ENABLE(CSS_EXCLUSIONS)
67     static void setCSSExclusionsEnabled(bool isEnabled) { isCSSExclusionsEnabled = isEnabled; }
68     static bool cssExclusionsEnabled() { return isCSSExclusionsEnabled; }
69 #else
70     static void setCSSExclusionsEnabled(bool) { }
71     static bool cssExclusionsEnabled() { return false; }
72 #endif
73
74 #if ENABLE(CSS_REGIONS)
75     static void setCSSRegionsEnabled(bool isEnabled) { isCSSRegionsEnabled = isEnabled; }
76     static bool cssRegionsEnabled() { return isCSSRegionsEnabled; }
77 #else
78     static void setCSSRegionsEnabled(bool) { }
79     static bool cssRegionsEnabled() { return false; }
80 #endif
81
82 #if ENABLE(FULLSCREEN_API)
83     // Mozilla version
84     static bool webkitFullScreenAPIEnabled() { return isFullScreenAPIEnabled; }
85     static void setWebkitFullScreenAPIEnabled(bool isEnabled) { isFullScreenAPIEnabled = isEnabled; }
86     static bool webkitRequestFullScreenEnabled() { return isFullScreenAPIEnabled; }
87     static bool webkitIsFullScreenEnabled() { return isFullScreenAPIEnabled; }
88     static bool webkitFullScreenKeyboardInputAllowedEnabled() { return isFullScreenAPIEnabled; }
89     static bool webkitCurrentFullScreenElementEnabled() { return isFullScreenAPIEnabled; }
90     static bool webkitCancelFullScreenEnabled() { return isFullScreenAPIEnabled; }
91
92     // W3C version
93     static bool webkitFullscreenEnabledEnabled() { return isFullScreenAPIEnabled; }
94     static bool webkitFullscreenElementEnabled() { return isFullScreenAPIEnabled; }
95     static bool webkitExitFullscreenEnabled() { return isFullScreenAPIEnabled; }
96     static bool webkitRequestFullscreenEnabled() { return isFullScreenAPIEnabled; }
97 #endif
98
99 #if ENABLE(VIDEO)
100     static bool audioEnabled();
101     static bool htmlMediaElementEnabled();
102     static bool htmlAudioElementEnabled();
103     static bool htmlVideoElementEnabled();
104     static bool htmlSourceElementEnabled();
105     static bool mediaControllerEnabled();
106     static bool mediaErrorEnabled();
107     static bool timeRangesEnabled();
108 #endif
109
110 #if ENABLE(SHARED_WORKERS)
111     static bool sharedWorkerEnabled();
112 #endif
113
114 #if ENABLE(WEB_SOCKETS)
115     static bool webSocketEnabled();
116 #endif
117
118 #if ENABLE(SQL_DATABASE)
119     static bool openDatabaseEnabled();
120     static bool openDatabaseSyncEnabled();
121 #endif
122
123 #if ENABLE(WEB_AUDIO)
124     static void setWebkitAudioContextEnabled(bool isEnabled) { isWebAudioEnabled = isEnabled; }
125     static bool webkitAudioContextEnabled() { return isWebAudioEnabled; }
126 #endif
127
128 #if ENABLE(TOUCH_EVENTS)
129     static bool touchEnabled() { return isTouchEnabled; }
130     static void setTouchEnabled(bool isEnabled) { isTouchEnabled = isEnabled; }
131     static bool ontouchstartEnabled() { return isTouchEnabled; }
132     static bool ontouchmoveEnabled() { return isTouchEnabled; }
133     static bool ontouchendEnabled() { return isTouchEnabled; }
134     static bool ontouchcancelEnabled() { return isTouchEnabled; }
135     static bool createTouchEnabled() { return isTouchEnabled; }
136     static bool createTouchListEnabled() { return isTouchEnabled; }
137 #endif
138
139     static void setDeviceMotionEnabled(bool isEnabled) { isDeviceMotionEnabled = isEnabled; }
140     static bool deviceMotionEnabled() { return isDeviceMotionEnabled; }
141     static bool deviceMotionEventEnabled() { return isDeviceMotionEnabled; }
142     static bool ondevicemotionEnabled() { return isDeviceMotionEnabled; }
143
144     static void setDeviceOrientationEnabled(bool isEnabled) { isDeviceOrientationEnabled = isEnabled; }
145     static bool deviceOrientationEnabled() { return isDeviceOrientationEnabled; }
146     static bool deviceOrientationEventEnabled() { return isDeviceOrientationEnabled; }
147     static bool ondeviceorientationEnabled() { return isDeviceOrientationEnabled; }
148
149     static void setSpeechInputEnabled(bool isEnabled) { isSpeechInputEnabled = isEnabled; }
150     static bool speechInputEnabled() { return isSpeechInputEnabled; }
151     static bool webkitSpeechEnabled() { return isSpeechInputEnabled; }
152     static bool webkitGrammarEnabled() { return isSpeechInputEnabled; }
153
154 #if ENABLE(SCRIPTED_SPEECH)
155     static void setScriptedSpeechEnabled(bool isEnabled) { isScriptedSpeechEnabled = isEnabled; }
156     static bool scriptedSpeechEnabled() { return isScriptedSpeechEnabled; }
157     static bool webkitSpeechRecognitionEnabled() { return isScriptedSpeechEnabled; }
158     static bool webkitSpeechRecognitionErrorEnabled() { return isScriptedSpeechEnabled; }
159     static bool webkitSpeechRecognitionEventEnabled() { return isScriptedSpeechEnabled; }
160     static bool webkitSpeechGrammarEnabled() { return isScriptedSpeechEnabled; }
161     static bool webkitSpeechGrammarListEnabled() { return isScriptedSpeechEnabled; }
162 #endif
163
164 #if ENABLE(FILE_SYSTEM)
165     static bool fileSystemEnabled();
166     static void setFileSystemEnabled(bool isEnabled) { isFileSystemEnabled = isEnabled; }
167 #endif
168
169 #if ENABLE(JAVASCRIPT_I18N_API)
170     static bool javaScriptI18NAPIEnabled();
171     static void setJavaScriptI18NAPIEnabled(bool isEnabled) { isJavaScriptI18NAPIEnabled = isEnabled; }
172 #endif
173
174 #if ENABLE(MEDIA_STREAM)
175     static bool mediaStreamEnabled() { return isMediaStreamEnabled; }
176     static void setMediaStreamEnabled(bool isEnabled) { isMediaStreamEnabled = isEnabled; }
177     static bool webkitGetUserMediaEnabled() { return isMediaStreamEnabled; }
178     static bool webkitMediaStreamEnabled() { return isMediaStreamEnabled; }
179
180     static bool peerConnectionEnabled() { return isMediaStreamEnabled && isPeerConnectionEnabled; }
181     static void setPeerConnectionEnabled(bool isEnabled) { isPeerConnectionEnabled = isEnabled; }
182     static bool webkitRTCPeerConnectionEnabled() { return peerConnectionEnabled(); }
183 #endif
184
185 #if ENABLE(GAMEPAD)
186     static void setWebkitGetGamepadsEnabled(bool isEnabled) { isGamepadEnabled = isEnabled; }
187     static bool webkitGetGamepadsEnabled() { return isGamepadEnabled; }
188 #endif
189
190 #if ENABLE(QUOTA)
191     static bool quotaEnabled() { return isQuotaEnabled; }
192     static void setQuotaEnabled(bool isEnabled) { isQuotaEnabled = isEnabled; }
193 #endif
194
195 #if ENABLE(MEDIA_SOURCE)
196     static bool mediaSourceEnabled() { return isMediaSourceEnabled; }
197     static void setMediaSourceEnabled(bool isEnabled) { isMediaSourceEnabled = isEnabled; }
198 #endif
199
200 #if ENABLE(ENCRYPTED_MEDIA)
201     static bool encryptedMediaEnabled() { return isEncryptedMediaEnabled; }
202     static void setEncryptedMediaEnabled(bool isEnabled) { isEncryptedMediaEnabled = isEnabled; }
203 #endif
204
205 #if ENABLE(VIDEO_TRACK)
206     static bool webkitVideoTrackEnabled() { return isVideoTrackEnabled; }
207     static void setWebkitVideoTrackEnabled(bool isEnabled) { isVideoTrackEnabled = isEnabled; }
208 #endif
209
210 #if ENABLE(SHADOW_DOM)
211     static bool shadowDOMEnabled() { return isShadowDOMEnabled; }
212     static void setShadowDOMEnabled(bool isEnabled) { isShadowDOMEnabled = isEnabled; }
213
214     static bool authorShadowDOMForAnyElementEnabled() { return isAuthorShadowDOMForAnyElementEnabled; }
215     static void setAuthorShadowDOMForAnyElementEnabled(bool isEnabled) { isAuthorShadowDOMForAnyElementEnabled = isEnabled; }
216 #endif
217
218 #if ENABLE(STYLE_SCOPED)
219     static bool styleScopedEnabled() { return isStyleScopedEnabled; }
220     static void setStyleScopedEnabled(bool isEnabled) { isStyleScopedEnabled = isEnabled; }
221 #endif
222
223 #if ENABLE(INPUT_TYPE_DATE)
224     static bool inputTypeDateEnabled() { return isInputTypeDateEnabled; }
225     static void setInputTypeDateEnabled(bool isEnabled) { isInputTypeDateEnabled = isEnabled; }
226 #endif
227
228 #if ENABLE(INPUT_TYPE_DATETIME)
229     static bool inputTypeDateTimeEnabled() { return isInputTypeDateTimeEnabled; }
230     static void setInputTypeDateTimeEnabled(bool isEnabled) { isInputTypeDateTimeEnabled = isEnabled; }
231 #endif
232
233 #if ENABLE(INPUT_TYPE_DATETIMELOCAL)
234     static bool inputTypeDateTimeLocalEnabled() { return isInputTypeDateTimeLocalEnabled; }
235     static void setInputTypeDateTimeLocalEnabled(bool isEnabled) { isInputTypeDateTimeLocalEnabled = isEnabled; }
236 #endif
237
238 #if ENABLE(INPUT_TYPE_MONTH)
239     static bool inputTypeMonthEnabled() { return isInputTypeMonthEnabled; }
240     static void setInputTypeMonthEnabled(bool isEnabled) { isInputTypeMonthEnabled = isEnabled; }
241 #endif
242
243 #if ENABLE(INPUT_TYPE_TIME)
244     static bool inputTypeTimeEnabled() { return isInputTypeTimeEnabled; }
245     static void setInputTypeTimeEnabled(bool isEnabled) { isInputTypeTimeEnabled = isEnabled; }
246 #endif
247
248 #if ENABLE(INPUT_TYPE_WEEK)
249     static bool inputTypeWeekEnabled() { return isInputTypeWeekEnabled; }
250     static void setInputTypeWeekEnabled(bool isEnabled) { isInputTypeWeekEnabled = isEnabled; }
251 #endif
252
253 #if ENABLE(DIALOG_ELEMENT)
254     static bool dialogElementEnabled() { return isDialogElementEnabled; }
255     static void setDialogElementEnabled(bool isEnabled) { isDialogElementEnabled = isEnabled; }
256 #endif
257
258 #if ENABLE(CSP_NEXT)
259     static bool experimentalContentSecurityPolicyFeaturesEnabled() { return areExperimentalContentSecurityPolicyFeaturesEnabled; }
260     static void setExperimentalContentSecurityPolicyFeaturesEnabled(bool isEnabled) { areExperimentalContentSecurityPolicyFeaturesEnabled = isEnabled; }
261 #endif
262
263     static bool langAttributeAwareFormControlUIEnabled() { return isLangAttributeAwareFormControlUIEnabled; }
264     // The lang attribute support is incomplete and should only be turned on for tests.
265     static void setLangAttributeAwareFormControlUIEnabled(bool isEnabled) { isLangAttributeAwareFormControlUIEnabled = isEnabled; }
266
267 #if ENABLE(REQUEST_AUTOCOMPLETE)
268     static bool requestAutocompleteEnabled() { return isRequestAutocompleteEnabled; }
269     static void setRequestAutocompleteEnabled(bool isEnabled) { isRequestAutocompleteEnabled = isEnabled; }
270 #endif
271
272 #if ENABLE(WEB_INTENTS)
273     static bool webkitStartActivityEnabled() { return isWebIntentsEnabled; }
274     static bool webkitIntentEnabled() { return isWebIntentsEnabled; }
275     static bool webKitIntentEnabled() { return isWebIntentsEnabled; }
276     static void setWebIntentsEnabled(bool isEnabled) { isWebIntentsEnabled = isEnabled; }
277 #endif
278
279 private:
280     // Never instantiate.
281     RuntimeEnabledFeatures() { }
282
283     static bool isLocalStorageEnabled;
284     static bool isSessionStorageEnabled;
285     static bool isWebkitNotificationsEnabled;
286     static bool isApplicationCacheEnabled;
287     static bool isDataTransferItemsEnabled;
288     static bool isGeolocationEnabled;
289     static bool isIndexedDBEnabled;
290     static bool isWebAudioEnabled;
291     static bool isTouchEnabled;
292     static bool isDeviceMotionEnabled;
293     static bool isDeviceOrientationEnabled;
294     static bool isSpeechInputEnabled;
295     static bool isCSSExclusionsEnabled;
296     static bool isCSSRegionsEnabled;
297     WEBCORE_TESTING static bool isLangAttributeAwareFormControlUIEnabled;
298 #if ENABLE(SCRIPTED_SPEECH)
299     static bool isScriptedSpeechEnabled;
300 #endif
301 #if ENABLE(FILE_SYSTEM)
302     static bool isFileSystemEnabled;
303 #endif
304
305 #if ENABLE(JAVASCRIPT_I18N_API)
306     static bool isJavaScriptI18NAPIEnabled;
307 #endif
308
309 #if ENABLE(MEDIA_STREAM)
310     static bool isMediaStreamEnabled;
311     static bool isPeerConnectionEnabled;
312 #endif
313
314 #if ENABLE(GAMEPAD)
315     static bool isGamepadEnabled;
316 #endif
317
318 #if ENABLE(QUOTA)
319     static bool isQuotaEnabled;
320 #endif
321
322 #if ENABLE(FULLSCREEN_API)
323     static bool isFullScreenAPIEnabled;
324 #endif
325
326 #if ENABLE(MEDIA_SOURCE)
327     static bool isMediaSourceEnabled;
328 #endif
329
330 #if ENABLE(ENCRYPTED_MEDIA)
331     static bool isEncryptedMediaEnabled;
332 #endif
333
334 #if ENABLE(VIDEO_TRACK)
335     static bool isVideoTrackEnabled;
336 #endif
337
338 #if ENABLE(SHADOW_DOM)
339     static bool isShadowDOMEnabled;
340
341     static bool isAuthorShadowDOMForAnyElementEnabled;
342 #endif
343
344 #if ENABLE(STYLE_SCOPED)
345     static bool isStyleScopedEnabled;
346 #endif
347
348 #if ENABLE(INPUT_TYPE_DATE)
349     static bool isInputTypeDateEnabled;
350 #endif
351
352 #if ENABLE(INPUT_TYPE_DATETIME)
353     static bool isInputTypeDateTimeEnabled;
354 #endif
355
356 #if ENABLE(INPUT_TYPE_DATETIMELOCAL)
357     static bool isInputTypeDateTimeLocalEnabled;
358 #endif
359
360 #if ENABLE(INPUT_TYPE_MONTH)
361     static bool isInputTypeMonthEnabled;
362 #endif
363
364 #if ENABLE(INPUT_TYPE_TIME)
365     static bool isInputTypeTimeEnabled;
366 #endif
367
368 #if ENABLE(INPUT_TYPE_WEEK)
369     static bool isInputTypeWeekEnabled;
370 #endif
371
372 #if ENABLE(DIALOG_ELEMENT)
373     static bool isDialogElementEnabled;
374 #endif
375
376 #if ENABLE(REQUEST_AUTOCOMPLETE)
377     static bool isRequestAutocompleteEnabled;
378 #endif
379
380 #if ENABLE(CSP_NEXT)
381     static bool areExperimentalContentSecurityPolicyFeaturesEnabled;
382 #endif
383
384 #if ENABLE(WEB_INTENTS)
385     static bool isWebIntentsEnabled;
386 #endif
387
388 };
389
390 } // namespace WebCore
391
392 #endif // RuntimeEnabledFeatures_h