BindingSecurity::shouldAllowAccessToNode shouldn't detour through Frame to find the...
[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 namespace WebCore {
35
36 // A class that stores static enablers for all experimental features. Note that
37 // the method names must line up with the JavaScript method they enable for code
38 // generation to work properly.
39
40 class RuntimeEnabledFeatures {
41 public:
42     static void setLocalStorageEnabled(bool isEnabled) { isLocalStorageEnabled = isEnabled; }
43     static bool localStorageEnabled() { return isLocalStorageEnabled; }
44
45     static void setSessionStorageEnabled(bool isEnabled) { isSessionStorageEnabled = isEnabled; }
46     static bool sessionStorageEnabled() { return isSessionStorageEnabled; }
47
48     static void setWebkitNotificationsEnabled(bool isEnabled) { isWebkitNotificationsEnabled = isEnabled; }
49     static bool webkitNotificationsEnabled() { return isWebkitNotificationsEnabled; }
50
51     static void setApplicationCacheEnabled(bool isEnabled) { isApplicationCacheEnabled = isEnabled; }
52     static bool applicationCacheEnabled() { return isApplicationCacheEnabled; }
53
54     static void setDataTransferItemsEnabled(bool isEnabled) { isDataTransferItemsEnabled = isEnabled; }
55     static bool dataTransferItemsEnabled() { return isDataTransferItemsEnabled; }
56
57     static void setGeolocationEnabled(bool isEnabled) { isGeolocationEnabled = isEnabled; }
58     static bool geolocationEnabled() { return isGeolocationEnabled; }
59
60     static void setWebkitIndexedDBEnabled(bool isEnabled) { isIndexedDBEnabled = isEnabled; }
61     static bool webkitIndexedDBEnabled() { return isIndexedDBEnabled; }
62     static bool webkitIDBCursorEnabled() { return isIndexedDBEnabled; }
63     static bool webkitIDBDatabaseEnabled() { return isIndexedDBEnabled; }
64     static bool webkitIDBDatabaseErrorEnabled() { return isIndexedDBEnabled; }
65     static bool webkitIDBDatabaseExceptionEnabled() { return isIndexedDBEnabled; }
66     static bool webkitIDBFactoryEnabled() { return isIndexedDBEnabled; }
67     static bool webkitIDBIndexEnabled() { return isIndexedDBEnabled; }
68     static bool webkitIDBKeyRangeEnabled() { return isIndexedDBEnabled; }
69     static bool webkitIDBObjectStoreEnabled() { return isIndexedDBEnabled; }
70     static bool webkitIDBRequestEnabled() { return isIndexedDBEnabled; }
71     static bool webkitIDBTransactionEnabled() { return isIndexedDBEnabled; }
72
73 #if ENABLE(CSS_EXCLUSIONS)
74     static void setCSSExclusionsEnabled(bool isEnabled) { isCSSExclusionsEnabled = isEnabled; }
75     static bool cssExclusionsEnabled() { return isCSSExclusionsEnabled; }
76 #else
77     static void setCSSExclusionsEnabled(bool) { }
78     static bool cssExclusionsEnabled() { return false; }
79 #endif
80
81 #if ENABLE(FULLSCREEN_API)
82     // Mozilla version
83     static bool webkitFullScreenAPIEnabled() { return isFullScreenAPIEnabled; }
84     static void setWebkitFullScreenAPIEnabled(bool isEnabled) { isFullScreenAPIEnabled = isEnabled; }
85     static bool webkitRequestFullScreenEnabled() { return isFullScreenAPIEnabled; }
86     static bool webkitIsFullScreenEnabled() { return isFullScreenAPIEnabled; }
87     static bool webkitFullScreenKeyboardInputAllowedEnabled() { return isFullScreenAPIEnabled; }
88     static bool webkitCurrentFullScreenElementEnabled() { return isFullScreenAPIEnabled; }
89     static bool webkitCancelFullScreenEnabled() { return isFullScreenAPIEnabled; }
90
91     // W3C version
92     static bool webkitFullscreenEnabledEnabled() { return isFullScreenAPIEnabled; }
93     static bool webkitFullscreenElementEnabled() { return isFullScreenAPIEnabled; }
94     static bool webkitExitFullscreenEnabled() { return isFullScreenAPIEnabled; }
95     static bool webkitRequestFullscreenEnabled() { return isFullScreenAPIEnabled; }
96 #endif
97
98 #if ENABLE(POINTER_LOCK)
99     static bool pointerLockEnabled() { return isPointerLockEnabled; }
100     static void setPointerLockEnabled(bool isEnabled) { isPointerLockEnabled = isEnabled; }
101 #endif
102
103 #if ENABLE(VIDEO)
104     static bool audioEnabled();
105     static bool htmlMediaElementEnabled();
106     static bool htmlAudioElementEnabled();
107     static bool htmlVideoElementEnabled();
108     static bool htmlSourceElementEnabled();
109     static bool mediaControllerEnabled();
110     static bool mediaErrorEnabled();
111     static bool timeRangesEnabled();
112 #endif
113
114 #if ENABLE(SHARED_WORKERS)
115     static bool sharedWorkerEnabled();
116 #endif
117
118 #if ENABLE(WEB_SOCKETS)
119     static bool webSocketEnabled();
120 #endif
121
122 #if ENABLE(SQL_DATABASE)
123     static bool openDatabaseEnabled();
124     static bool openDatabaseSyncEnabled();
125 #endif
126
127 #if ENABLE(WEB_AUDIO)
128     static void setWebkitAudioContextEnabled(bool isEnabled) { isWebAudioEnabled = isEnabled; }
129     static bool webkitAudioContextEnabled() { return isWebAudioEnabled; }
130 #endif
131
132     static void setPushStateEnabled(bool isEnabled) { isPushStateEnabled = isEnabled; }
133     static bool pushStateEnabled() { return isPushStateEnabled; }
134     static bool replaceStateEnabled() { return isPushStateEnabled; }
135
136 #if ENABLE(TOUCH_EVENTS)
137     static bool touchEnabled() { return isTouchEnabled; }
138     static void setTouchEnabled(bool isEnabled) { isTouchEnabled = isEnabled; }
139     static bool ontouchstartEnabled() { return isTouchEnabled; }
140     static bool ontouchmoveEnabled() { return isTouchEnabled; }
141     static bool ontouchendEnabled() { return isTouchEnabled; }
142     static bool ontouchcancelEnabled() { return isTouchEnabled; }
143     static bool createTouchEnabled() { return isTouchEnabled; }
144     static bool createTouchListEnabled() { return isTouchEnabled; }
145 #endif
146
147     static void setDeviceMotionEnabled(bool isEnabled) { isDeviceMotionEnabled = isEnabled; }
148     static bool deviceMotionEnabled() { return isDeviceMotionEnabled; }
149     static bool deviceMotionEventEnabled() { return isDeviceMotionEnabled; }
150     static bool ondevicemotionEnabled() { return isDeviceMotionEnabled; }
151
152     static void setDeviceOrientationEnabled(bool isEnabled) { isDeviceOrientationEnabled = isEnabled; }
153     static bool deviceOrientationEnabled() { return isDeviceOrientationEnabled; }
154     static bool deviceOrientationEventEnabled() { return isDeviceOrientationEnabled; }
155     static bool ondeviceorientationEnabled() { return isDeviceOrientationEnabled; }
156
157     static void setSpeechInputEnabled(bool isEnabled) { isSpeechInputEnabled = isEnabled; }
158     static bool speechInputEnabled() { return isSpeechInputEnabled; }
159     static bool webkitSpeechEnabled() { return isSpeechInputEnabled; }
160     static bool webkitGrammarEnabled() { return isSpeechInputEnabled; }
161
162 #if ENABLE(SCRIPTED_SPEECH)
163     static void setScriptedSpeechEnabled(bool isEnabled) { isScriptedSpeechEnabled = isEnabled; }
164     static bool scriptedSpeechEnabled() { return isScriptedSpeechEnabled; }
165     static bool webkitSpeechRecognitionEnabled() { return isScriptedSpeechEnabled; }
166     static bool webkitSpeechRecognitionErrorEnabled() { return isScriptedSpeechEnabled; }
167     static bool webkitSpeechRecognitionEventEnabled() { return isScriptedSpeechEnabled; }
168     static bool webkitSpeechGrammarEnabled() { return isScriptedSpeechEnabled; }
169     static bool webkitSpeechGrammarListEnabled() { return isScriptedSpeechEnabled; }
170 #endif
171
172 #if ENABLE(FILE_SYSTEM)
173     static bool fileSystemEnabled();
174     static void setFileSystemEnabled(bool isEnabled) { isFileSystemEnabled = isEnabled; }
175 #endif
176
177 #if ENABLE(JAVASCRIPT_I18N_API)
178     static bool javaScriptI18NAPIEnabled();
179     static void setJavaScriptI18NAPIEnabled(bool isEnabled) { isJavaScriptI18NAPIEnabled = isEnabled; }
180 #endif
181
182 #if ENABLE(MEDIA_STREAM)
183     static bool mediaStreamEnabled() { return isMediaStreamEnabled; }
184     static void setMediaStreamEnabled(bool isEnabled) { isMediaStreamEnabled = isEnabled; }
185     static bool webkitGetUserMediaEnabled() { return isMediaStreamEnabled; }
186     static bool webkitMediaStreamEnabled() { return isMediaStreamEnabled; }
187
188     static bool peerConnectionEnabled() { return isMediaStreamEnabled && isPeerConnectionEnabled; }
189     static void setPeerConnectionEnabled(bool isEnabled) { isPeerConnectionEnabled = isEnabled; }
190     static bool webkitPeerConnection00Enabled() { return peerConnectionEnabled(); }
191     static bool webkitRTCPeerConnectionEnabled() { return peerConnectionEnabled(); }
192 #endif
193
194 #if ENABLE(GAMEPAD)
195     static void setWebkitGetGamepadsEnabled(bool isEnabled) { isGamepadEnabled = isEnabled; }
196     static bool webkitGetGamepadsEnabled() { return isGamepadEnabled; }
197 #endif
198
199 #if ENABLE(QUOTA)
200     static bool quotaEnabled() { return isQuotaEnabled; }
201     static void setQuotaEnabled(bool isEnabled) { isQuotaEnabled = isEnabled; }
202 #endif
203
204 #if ENABLE(MEDIA_SOURCE)
205     static bool mediaSourceEnabled() { return isMediaSourceEnabled; }
206     static void setMediaSourceEnabled(bool isEnabled) { isMediaSourceEnabled = isEnabled; }
207 #endif
208
209 #if ENABLE(ENCRYPTED_MEDIA)
210     static bool encryptedMediaEnabled() { return isEncryptedMediaEnabled; }
211     static void setEncryptedMediaEnabled(bool isEnabled) { isEncryptedMediaEnabled = isEnabled; }
212 #endif
213
214 #if ENABLE(VIDEO_TRACK)
215     static bool webkitVideoTrackEnabled() { return isVideoTrackEnabled; }
216     static void setWebkitVideoTrackEnabled(bool isEnabled) { isVideoTrackEnabled = isEnabled; }
217 #endif
218
219 #if ENABLE(SHADOW_DOM)
220     static bool shadowDOMEnabled() { return isShadowDOMEnabled; }
221     static void setShadowDOMEnabled(bool isEnabled) { isShadowDOMEnabled = isEnabled; }
222
223     static bool authorShadowDOMForAnyElementEnabled() { return isAuthorShadowDOMForAnyElementEnabled; }
224     static void setAuthorShadowDOMForAnyElementEnabled(bool isEnabled) { isAuthorShadowDOMForAnyElementEnabled = isEnabled; }
225 #endif
226
227 #if ENABLE(STYLE_SCOPED)
228     static bool styleScopedEnabled() { return isStyleScopedEnabled; }
229     static void setStyleScopedEnabled(bool isEnabled) { isStyleScopedEnabled = isEnabled; }
230 #endif
231
232 #if ENABLE(INPUT_TYPE_DATE)
233     static bool inputTypeDateEnabled() { return isInputTypeDateEnabled; }
234     static void setInputTypeDateEnabled(bool isEnabled) { isInputTypeDateEnabled = isEnabled; }
235 #endif
236
237 #if ENABLE(INPUT_TYPE_DATETIME)
238     static bool inputTypeDateTimeEnabled() { return isInputTypeDateTimeEnabled; }
239     static void setInputTypeDateTimeEnabled(bool isEnabled) { isInputTypeDateTimeEnabled = isEnabled; }
240 #endif
241
242 #if ENABLE(INPUT_TYPE_DATETIMELOCAL)
243     static bool inputTypeDateTimeLocalEnabled() { return isInputTypeDateTimeLocalEnabled; }
244     static void setInputTypeDateTimeLocalEnabled(bool isEnabled) { isInputTypeDateTimeLocalEnabled = isEnabled; }
245 #endif
246
247 #if ENABLE(INPUT_TYPE_MONTH)
248     static bool inputTypeMonthEnabled() { return isInputTypeMonthEnabled; }
249     static void setInputTypeMonthEnabled(bool isEnabled) { isInputTypeMonthEnabled = isEnabled; }
250 #endif
251
252 #if ENABLE(INPUT_TYPE_TIME)
253     static bool inputTypeTimeEnabled() { return isInputTypeTimeEnabled; }
254     static void setInputTypeTimeEnabled(bool isEnabled) { isInputTypeTimeEnabled = isEnabled; }
255 #endif
256
257 #if ENABLE(INPUT_TYPE_WEEK)
258     static bool inputTypeWeekEnabled() { return isInputTypeWeekEnabled; }
259     static void setInputTypeWeekEnabled(bool isEnabled) { isInputTypeWeekEnabled = isEnabled; }
260 #endif
261
262 #if ENABLE(DIALOG_ELEMENT)
263     static bool dialogElementEnabled() { return isDialogElementEnabled; }
264     static void setDialogElementEnabled(bool isEnabled) { isDialogElementEnabled = isEnabled; }
265 #endif
266
267 private:
268     // Never instantiate.
269     RuntimeEnabledFeatures() { }
270
271     static bool isLocalStorageEnabled;
272     static bool isSessionStorageEnabled;
273     static bool isWebkitNotificationsEnabled;
274     static bool isApplicationCacheEnabled;
275     static bool isDataTransferItemsEnabled;
276     static bool isGeolocationEnabled;
277     static bool isIndexedDBEnabled;
278     static bool isWebAudioEnabled;
279     static bool isPushStateEnabled;
280     static bool isTouchEnabled;
281     static bool isDeviceMotionEnabled;
282     static bool isDeviceOrientationEnabled;
283     static bool isSpeechInputEnabled;
284     static bool isCSSExclusionsEnabled;
285 #if ENABLE(SCRIPTED_SPEECH)
286     static bool isScriptedSpeechEnabled;
287 #endif
288 #if ENABLE(FILE_SYSTEM)
289     static bool isFileSystemEnabled;
290 #endif
291
292 #if ENABLE(JAVASCRIPT_I18N_API)
293     static bool isJavaScriptI18NAPIEnabled;
294 #endif
295
296 #if ENABLE(MEDIA_STREAM)
297     static bool isMediaStreamEnabled;
298     static bool isPeerConnectionEnabled;
299 #endif
300
301 #if ENABLE(GAMEPAD)
302     static bool isGamepadEnabled;
303 #endif
304
305 #if ENABLE(QUOTA)
306     static bool isQuotaEnabled;
307 #endif
308
309 #if ENABLE(FULLSCREEN_API)
310     static bool isFullScreenAPIEnabled;
311 #endif
312
313 #if ENABLE(POINTER_LOCK)
314     static bool isPointerLockEnabled;
315 #endif
316
317 #if ENABLE(MEDIA_SOURCE)
318     static bool isMediaSourceEnabled;
319 #endif
320
321 #if ENABLE(ENCRYPTED_MEDIA)
322     static bool isEncryptedMediaEnabled;
323 #endif
324
325 #if ENABLE(VIDEO_TRACK)
326     static bool isVideoTrackEnabled;
327 #endif
328
329 #if ENABLE(SHADOW_DOM)
330     static bool isShadowDOMEnabled;
331
332     static bool isAuthorShadowDOMForAnyElementEnabled;
333 #endif
334
335 #if ENABLE(STYLE_SCOPED)
336     static bool isStyleScopedEnabled;
337 #endif
338
339 #if ENABLE(INPUT_TYPE_DATE)
340     static bool isInputTypeDateEnabled;
341 #endif
342
343 #if ENABLE(INPUT_TYPE_DATETIME)
344     static bool isInputTypeDateTimeEnabled;
345 #endif
346
347 #if ENABLE(INPUT_TYPE_DATETIMELOCAL)
348     static bool isInputTypeDateTimeLocalEnabled;
349 #endif
350
351 #if ENABLE(INPUT_TYPE_MONTH)
352     static bool isInputTypeMonthEnabled;
353 #endif
354
355 #if ENABLE(INPUT_TYPE_TIME)
356     static bool isInputTypeTimeEnabled;
357 #endif
358
359 #if ENABLE(INPUT_TYPE_WEEK)
360     static bool isInputTypeWeekEnabled;
361 #endif
362
363 #if ENABLE(DIALOG_ELEMENT)
364     static bool isDialogElementEnabled;
365 #endif
366 };
367
368 } // namespace WebCore
369
370 #endif // RuntimeEnabledFeatures_h