Add runtime and compile time flags for enabling Web Animations API and model.
[WebKit-https.git] / Source / WebCore / bindings / generic / RuntimeEnabledFeatures.h
1 /*
2  * Copyright (C) 2009 Google Inc. All rights reserved.
3  * Copyright (C) 2013 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 #ifndef RuntimeEnabledFeatures_h
33 #define RuntimeEnabledFeatures_h
34
35 #include "PlatformExportMacros.h"
36 #include <wtf/NeverDestroyed.h>
37
38 namespace WebCore {
39
40 // A class that stores static enablers for all experimental features. Note that
41 // the method names must line up with the JavaScript method they enable for code
42 // generation to work properly.
43
44 class RuntimeEnabledFeatures {
45     WTF_MAKE_NONCOPYABLE(RuntimeEnabledFeatures);
46 public:
47     void setLocalStorageEnabled(bool isEnabled) { m_isLocalStorageEnabled = isEnabled; }
48     bool localStorageEnabled() const { return m_isLocalStorageEnabled; }
49
50     void setSessionStorageEnabled(bool isEnabled) { m_isSessionStorageEnabled = isEnabled; }
51     bool sessionStorageEnabled() const { return m_isSessionStorageEnabled; }
52
53     void setWebkitNotificationsEnabled(bool isEnabled) { m_isWebkitNotificationsEnabled = isEnabled; }
54     bool webkitNotificationsEnabled() const { return m_isWebkitNotificationsEnabled; }
55
56     void setApplicationCacheEnabled(bool isEnabled) { m_isApplicationCacheEnabled = isEnabled; }
57     bool applicationCacheEnabled() const { return m_isApplicationCacheEnabled; }
58
59     void setDataTransferItemsEnabled(bool isEnabled) { m_isDataTransferItemsEnabled = isEnabled; }
60     bool dataTransferItemsEnabled() const { return m_isDataTransferItemsEnabled; }
61
62     void setGeolocationEnabled(bool isEnabled) { m_isGeolocationEnabled = isEnabled; }
63     bool geolocationEnabled() const { return m_isGeolocationEnabled; }
64
65     void setWebkitIndexedDBEnabled(bool isEnabled) { m_isIndexedDBEnabled = isEnabled; }
66     bool webkitIndexedDBEnabled() const { return m_isIndexedDBEnabled; }
67     bool indexedDBEnabled() const { return m_isIndexedDBEnabled; }
68
69 #if ENABLE(CSS_SHAPES)
70     void setCSSShapesEnabled(bool isEnabled) { m_isCSSShapesEnabled = isEnabled; }
71     bool cssShapesEnabled() const { return m_isCSSShapesEnabled; }
72 #else
73     void setCSSShapesEnabled(bool) { }
74     bool cssShapesEnabled() const { return false; }
75 #endif
76
77 #if ENABLE(CSS_REGIONS)
78     void setCSSRegionsEnabled(bool isEnabled) { m_isCSSRegionsEnabled = isEnabled; }
79     bool cssRegionsEnabled() const { return m_isCSSRegionsEnabled; }
80 #else
81     void setCSSRegionsEnabled(bool) { }
82     bool cssRegionsEnabled() const { return false; }
83 #endif
84
85     void setCSSCompositingEnabled(bool isEnabled) { m_isCSSCompositingEnabled = isEnabled; }
86     bool cssCompositingEnabled() const { return m_isCSSCompositingEnabled; }
87
88 #if ENABLE(FONT_LOAD_EVENTS)
89     void setFontLoadEventsEnabled(bool isEnabled) { m_isFontLoadEventsEnabled = isEnabled; }
90     bool fontLoadEventsEnabled() const { return m_isFontLoadEventsEnabled; }
91 #else
92     void setFontLoadEventsEnabled(bool) { }
93     bool fontLoadEventsEnabled() { return false; }
94 #endif
95
96 #if ENABLE(VIDEO)
97     bool audioEnabled() const;
98     bool htmlMediaElementEnabled() const;
99     bool htmlAudioElementEnabled() const;
100     bool htmlVideoElementEnabled() const;
101     bool htmlSourceElementEnabled() const;
102     bool mediaControllerEnabled() const;
103     bool mediaErrorEnabled() const;
104     bool timeRangesEnabled() const;
105 #endif
106
107 #if ENABLE(WEB_SOCKETS)
108     bool webSocketEnabled() const;
109 #endif
110
111 #if ENABLE(TOUCH_EVENTS)
112     bool touchEnabled() const { return m_isTouchEnabled; }
113     void setTouchEnabled(bool isEnabled) { m_isTouchEnabled = isEnabled; }
114 #endif
115
116     void setDeviceMotionEnabled(bool isEnabled) { m_isDeviceMotionEnabled = isEnabled; }
117     bool deviceMotionEnabled() const { return m_isDeviceMotionEnabled; }
118     bool deviceMotionEventEnabled() const { return m_isDeviceMotionEnabled; }
119     bool ondevicemotionEnabled() const { return m_isDeviceMotionEnabled; }
120
121     void setDeviceOrientationEnabled(bool isEnabled) { m_isDeviceOrientationEnabled = isEnabled; }
122     bool deviceOrientationEnabled() const { return m_isDeviceOrientationEnabled; }
123     bool deviceOrientationEventEnabled() const { return m_isDeviceOrientationEnabled; }
124     bool ondeviceorientationEnabled() const { return m_isDeviceOrientationEnabled; }
125
126 #if ENABLE(JAVASCRIPT_I18N_API)
127     bool javaScriptI18NAPIEnabled() const;
128     void setJavaScriptI18NAPIEnabled(bool isEnabled) { m_isJavaScriptI18NAPIEnabled = isEnabled; }
129 #endif
130
131 #if ENABLE(MEDIA_STREAM)
132     bool mediaStreamEnabled() const { return m_isMediaStreamEnabled; }
133     void setMediaStreamEnabled(bool isEnabled) { m_isMediaStreamEnabled = isEnabled; }
134     bool webkitGetUserMediaEnabled() const { return m_isMediaStreamEnabled; }
135     bool webkitMediaStreamEnabled() const { return m_isMediaStreamEnabled; }
136
137     bool peerConnectionEnabled() const { return m_isMediaStreamEnabled && m_isPeerConnectionEnabled; }
138     void setPeerConnectionEnabled(bool isEnabled) { m_isPeerConnectionEnabled = isEnabled; }
139     bool webkitRTCPeerConnectionEnabled() const { return peerConnectionEnabled(); }
140 #endif
141
142 #if ENABLE(LEGACY_CSS_VENDOR_PREFIXES)
143     void setLegacyCSSVendorPrefixesEnabled(bool isEnabled) { m_isLegacyCSSVendorPrefixesEnabled = isEnabled; }
144     bool legacyCSSVendorPrefixesEnabled() const { return m_isLegacyCSSVendorPrefixesEnabled; }
145 #endif
146
147 #if ENABLE(VIDEO_TRACK)
148     bool webkitVideoTrackEnabled() const { return m_isVideoTrackEnabled; }
149     void setWebkitVideoTrackEnabled(bool isEnabled) { m_isVideoTrackEnabled = isEnabled; }
150 #endif
151
152 #if ENABLE(INPUT_TYPE_DATE)
153     bool inputTypeDateEnabled() const { return m_isInputTypeDateEnabled; }
154     void setInputTypeDateEnabled(bool isEnabled) { m_isInputTypeDateEnabled = isEnabled; }
155 #endif
156
157 #if ENABLE(INPUT_TYPE_DATETIME_INCOMPLETE)
158     bool inputTypeDateTimeEnabled() const { return m_isInputTypeDateTimeEnabled; }
159     void setInputTypeDateTimeEnabled(bool isEnabled) { m_isInputTypeDateTimeEnabled = isEnabled; }
160 #endif
161
162 #if ENABLE(INPUT_TYPE_DATETIMELOCAL)
163     bool inputTypeDateTimeLocalEnabled() const { return m_isInputTypeDateTimeLocalEnabled; }
164     void setInputTypeDateTimeLocalEnabled(bool isEnabled) { m_isInputTypeDateTimeLocalEnabled = isEnabled; }
165 #endif
166
167 #if ENABLE(INPUT_TYPE_MONTH)
168     bool inputTypeMonthEnabled() const { return m_isInputTypeMonthEnabled; }
169     void setInputTypeMonthEnabled(bool isEnabled) { m_isInputTypeMonthEnabled = isEnabled; }
170 #endif
171
172 #if ENABLE(INPUT_TYPE_TIME)
173     bool inputTypeTimeEnabled() const { return m_isInputTypeTimeEnabled; }
174     void setInputTypeTimeEnabled(bool isEnabled) { m_isInputTypeTimeEnabled = isEnabled; }
175 #endif
176
177 #if ENABLE(INPUT_TYPE_WEEK)
178     bool inputTypeWeekEnabled() const { return m_isInputTypeWeekEnabled; }
179     void setInputTypeWeekEnabled(bool isEnabled) { m_isInputTypeWeekEnabled = isEnabled; }
180 #endif
181
182 #if ENABLE(CSP_NEXT)
183     bool experimentalContentSecurityPolicyFeaturesEnabled() const { return m_areExperimentalContentSecurityPolicyFeaturesEnabled; }
184     void setExperimentalContentSecurityPolicyFeaturesEnabled(bool isEnabled) { m_areExperimentalContentSecurityPolicyFeaturesEnabled = isEnabled; }
185 #endif
186
187     bool langAttributeAwareFormControlUIEnabled() const { return m_isLangAttributeAwareFormControlUIEnabled; }
188     // The lang attribute support is incomplete and should only be turned on for tests.
189     void setLangAttributeAwareFormControlUIEnabled(bool isEnabled) { m_isLangAttributeAwareFormControlUIEnabled = isEnabled; }
190
191     void setPluginReplacementEnabled(bool isEnabled) { m_isPluginReplacementEnabled = isEnabled; }
192     bool pluginReplacementEnabled() const { return m_isPluginReplacementEnabled; }
193
194 #if ENABLE(GAMEPAD)
195     void setGamepadsEnabled(bool areEnabled) { m_areGamepadsEnabled = areEnabled; }
196     bool gamepadsEnabled() const { return m_areGamepadsEnabled; }
197 #endif
198
199 #if ENABLE(CSS_ANIMATIONS_LEVEL_2)
200     void setAnimationTriggersEnabled(bool areEnabled) { m_areAnimationTriggersEnabled = areEnabled; }
201     bool animationTriggersEnabled() const { return m_areAnimationTriggersEnabled; }
202 #endif
203
204 #if ENABLE(WEB_ANIMATIONS)
205     void setWebAnimationsEnabled(bool areEnabled) { m_areWebAnimationsEnabled = areEnabled; }
206     bool webAnimationsEnabled() const { return m_areWebAnimationsEnabled; }
207 #endif
208
209     WEBCORE_EXPORT static RuntimeEnabledFeatures& sharedFeatures();
210
211 private:
212     // Never instantiate.
213     RuntimeEnabledFeatures();
214
215     bool m_isLocalStorageEnabled;
216     bool m_isSessionStorageEnabled;
217     bool m_isWebkitNotificationsEnabled;
218     bool m_isApplicationCacheEnabled;
219     bool m_isDataTransferItemsEnabled;
220     bool m_isGeolocationEnabled;
221     bool m_isIndexedDBEnabled;
222     bool m_isTouchEnabled;
223     bool m_isDeviceMotionEnabled;
224     bool m_isDeviceOrientationEnabled;
225     bool m_isCSSShapesEnabled;
226     bool m_isCSSRegionsEnabled;
227     bool m_isCSSCompositingEnabled;
228     bool m_isLangAttributeAwareFormControlUIEnabled;
229     bool m_isPluginReplacementEnabled;
230
231 #if ENABLE(JAVASCRIPT_I18N_API)
232     bool m_isJavaScriptI18NAPIEnabled;
233 #endif
234
235 #if ENABLE(MEDIA_STREAM)
236     bool m_isMediaStreamEnabled;
237     bool m_isPeerConnectionEnabled;
238 #endif
239
240 #if ENABLE(LEGACY_CSS_VENDOR_PREFIXES)
241     bool m_isLegacyCSSVendorPrefixesEnabled;
242 #endif
243
244 #if ENABLE(VIDEO_TRACK)
245     bool m_isVideoTrackEnabled;
246 #endif
247
248 #if ENABLE(INPUT_TYPE_DATE)
249     bool m_isInputTypeDateEnabled;
250 #endif
251
252 #if ENABLE(INPUT_TYPE_DATETIME_INCOMPLETE)
253     bool m_isInputTypeDateTimeEnabled;
254 #endif
255
256 #if ENABLE(INPUT_TYPE_DATETIMELOCAL)
257     bool m_isInputTypeDateTimeLocalEnabled;
258 #endif
259
260 #if ENABLE(INPUT_TYPE_MONTH)
261     bool m_isInputTypeMonthEnabled;
262 #endif
263
264 #if ENABLE(INPUT_TYPE_TIME)
265     bool m_isInputTypeTimeEnabled;
266 #endif
267
268 #if ENABLE(INPUT_TYPE_WEEK)
269     bool m_isInputTypeWeekEnabled;
270 #endif
271
272 #if ENABLE(CSP_NEXT)
273     bool m_areExperimentalContentSecurityPolicyFeaturesEnabled;
274 #endif
275
276 #if ENABLE(FONT_LOAD_EVENTS)
277     bool m_isFontLoadEventsEnabled;
278 #endif
279
280 #if ENABLE(GAMEPAD)
281     bool m_areGamepadsEnabled;
282 #endif
283
284 #if ENABLE(CSS_ANIMATIONS_LEVEL_2)
285     bool m_areAnimationTriggersEnabled;
286 #endif
287
288 #if ENABLE(WEB_ANIMATIONS)
289     bool m_areWebAnimationsEnabled;
290 #endif
291
292     friend class WTF::NeverDestroyed<RuntimeEnabledFeatures>;
293 };
294
295 } // namespace WebCore
296
297 #endif // RuntimeEnabledFeatures_h