diff options
Diffstat (limited to 'Source/WebCore/page/RuntimeEnabledFeatures.h')
-rw-r--r-- | Source/WebCore/page/RuntimeEnabledFeatures.h | 300 |
1 files changed, 300 insertions, 0 deletions
diff --git a/Source/WebCore/page/RuntimeEnabledFeatures.h b/Source/WebCore/page/RuntimeEnabledFeatures.h new file mode 100644 index 000000000..6c695c495 --- /dev/null +++ b/Source/WebCore/page/RuntimeEnabledFeatures.h @@ -0,0 +1,300 @@ +/* + * Copyright (C) 2009 Google Inc. All rights reserved. + * Copyright (C) 2013-2017 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once + +#include "PlatformExportMacros.h" +#include <wtf/NeverDestroyed.h> + +namespace WebCore { + +// A class that stores static enablers for all experimental features. Note that +// the method names must line up with the JavaScript method they enable for code +// generation to work properly. + +class RuntimeEnabledFeatures { + WTF_MAKE_NONCOPYABLE(RuntimeEnabledFeatures); +public: + void setDOMIteratorEnabled(bool isEnabled) { m_isDOMIteratorEnabled = isEnabled; } + bool domIteratorEnabled() const { return m_isDOMIteratorEnabled; } + + void setGeolocationEnabled(bool isEnabled) { m_isGeolocationEnabled = isEnabled; } + bool geolocationEnabled() const { return m_isGeolocationEnabled; } + + void setLinkPreloadEnabled(bool isEnabled) { m_isLinkPreloadEnabled = isEnabled; } + bool linkPreloadEnabled() const { return m_isLinkPreloadEnabled; } + + void setResourceTimingEnabled(bool isEnabled) { m_isResourceTimingEnabled = isEnabled; } + bool resourceTimingEnabled() const { return m_isResourceTimingEnabled; } + + void setUserTimingEnabled(bool isEnabled) { m_isUserTimingEnabled = isEnabled; } + bool userTimingEnabled() const { return m_isUserTimingEnabled; } + + bool performanceTimelineEnabled() const { return resourceTimingEnabled() || userTimingEnabled(); } + + void setShadowDOMEnabled(bool isEnabled) { m_isShadowDOMEnabled = isEnabled; } + bool shadowDOMEnabled() const { return m_isShadowDOMEnabled; } + + void setInputEventsEnabled(bool isEnabled) { m_inputEventsEnabled = isEnabled; } + bool inputEventsEnabled() const { return m_inputEventsEnabled; } + + void setInteractiveFormValidationEnabled(bool isEnabled) { m_isInteractiveFormValidationEnabled = isEnabled; } + bool interactiveFormValidationEnabled() const { return m_isInteractiveFormValidationEnabled; } + + void setCustomElementsEnabled(bool areEnabled) { m_areCustomElementsEnabled = areEnabled; } + bool customElementsEnabled() const { return m_areCustomElementsEnabled; } + + void setModernMediaControlsEnabled(bool areEnabled) { m_areModernMediaControlsEnabled = areEnabled; } + bool modernMediaControlsEnabled() const { return m_areModernMediaControlsEnabled; } + +#if ENABLE(INDEXED_DATABASE_IN_WORKERS) + void setIndexedDBWorkersEnabled(bool isEnabled) { m_isIndexedDBWorkersEnabled = isEnabled; } + bool indexedDBWorkersEnabled() const { return m_isIndexedDBWorkersEnabled; } +#endif + +#if ENABLE(FONT_LOAD_EVENTS) + void setFontLoadEventsEnabled(bool isEnabled) { m_isFontLoadEventsEnabled = isEnabled; } + bool fontLoadEventsEnabled() const { return m_isFontLoadEventsEnabled; } +#endif + +#if ENABLE(MEDIA_STREAM) + bool mediaStreamEnabled() const { return m_isMediaStreamEnabled; } + void setMediaStreamEnabled(bool isEnabled) { m_isMediaStreamEnabled = isEnabled; } +#endif + +#if ENABLE(WEB_RTC) + bool peerConnectionEnabled() const { return m_isMediaStreamEnabled && m_isPeerConnectionEnabled; } + void setPeerConnectionEnabled(bool isEnabled) { m_isPeerConnectionEnabled = isEnabled; } +#endif + +#if ENABLE(LEGACY_CSS_VENDOR_PREFIXES) + void setLegacyCSSVendorPrefixesEnabled(bool isEnabled) { m_isLegacyCSSVendorPrefixesEnabled = isEnabled; } + bool legacyCSSVendorPrefixesEnabled() const { return m_isLegacyCSSVendorPrefixesEnabled; } +#endif + +#if ENABLE(INPUT_TYPE_DATE) + bool inputTypeDateEnabled() const { return m_isInputTypeDateEnabled; } + void setInputTypeDateEnabled(bool isEnabled) { m_isInputTypeDateEnabled = isEnabled; } +#endif + +#if ENABLE(INPUT_TYPE_DATETIME_INCOMPLETE) + bool inputTypeDateTimeEnabled() const { return m_isInputTypeDateTimeEnabled; } + void setInputTypeDateTimeEnabled(bool isEnabled) { m_isInputTypeDateTimeEnabled = isEnabled; } +#endif + +#if ENABLE(INPUT_TYPE_DATETIMELOCAL) + bool inputTypeDateTimeLocalEnabled() const { return m_isInputTypeDateTimeLocalEnabled; } + void setInputTypeDateTimeLocalEnabled(bool isEnabled) { m_isInputTypeDateTimeLocalEnabled = isEnabled; } +#endif + +#if ENABLE(INPUT_TYPE_MONTH) + bool inputTypeMonthEnabled() const { return m_isInputTypeMonthEnabled; } + void setInputTypeMonthEnabled(bool isEnabled) { m_isInputTypeMonthEnabled = isEnabled; } +#endif + +#if ENABLE(INPUT_TYPE_TIME) + bool inputTypeTimeEnabled() const { return m_isInputTypeTimeEnabled; } + void setInputTypeTimeEnabled(bool isEnabled) { m_isInputTypeTimeEnabled = isEnabled; } +#endif + +#if ENABLE(INPUT_TYPE_WEEK) + bool inputTypeWeekEnabled() const { return m_isInputTypeWeekEnabled; } + void setInputTypeWeekEnabled(bool isEnabled) { m_isInputTypeWeekEnabled = isEnabled; } +#endif + +#if ENABLE(GAMEPAD) + void setGamepadsEnabled(bool areEnabled) { m_areGamepadsEnabled = areEnabled; } + bool gamepadsEnabled() const { return m_areGamepadsEnabled; } +#endif + +#if ENABLE(CSS_ANIMATIONS_LEVEL_2) + // FIXME: This is not used. + void setAnimationTriggersEnabled(bool areEnabled) { m_areAnimationTriggersEnabled = areEnabled; } + bool animationTriggersEnabled() const { return m_areAnimationTriggersEnabled; } +#endif + +#if ENABLE(WEB_ANIMATIONS) + void setWebAnimationsEnabled(bool areEnabled) { m_areWebAnimationsEnabled = areEnabled; } + bool webAnimationsEnabled() const { return m_areWebAnimationsEnabled; } +#endif + +#if ENABLE(WEBGL2) + void setWebGL2Enabled(bool isEnabled) { m_isWebGL2Enabled = isEnabled; } + bool webGL2Enabled() const { return m_isWebGL2Enabled; } +#endif + +#if ENABLE(FETCH_API) + void setFetchAPIEnabled(bool isEnabled) { m_isFetchAPIEnabled = isEnabled; } + bool fetchAPIEnabled() const { return m_isFetchAPIEnabled; } +#endif + +#if ENABLE(DOWNLOAD_ATTRIBUTE) + void setDownloadAttributeEnabled(bool isEnabled) { m_isDownloadAttributeEnabled = isEnabled; } + bool downloadAttributeEnabled() const { return m_isDownloadAttributeEnabled; } +#endif + + void setCSSGridLayoutEnabled(bool isEnabled) { m_cssGridLayoutEnabled = isEnabled; } + bool isCSSGridLayoutEnabled() const { return m_cssGridLayoutEnabled; } + +#if ENABLE(INTERSECTION_OBSERVER) + void setIntersectionObserverEnabled(bool isEnabled) { m_intersectionObserverEnabled = isEnabled; } + bool intersectionObserverEnabled() const { return m_intersectionObserverEnabled; } +#endif + +#if ENABLE(ENCRYPTED_MEDIA) + void setEncryptedMediaAPIEnabled(bool isEnabled) { m_encryptedMediaAPIEnabled = isEnabled; } + bool encryptedMediaAPIEnabled() const { return m_encryptedMediaAPIEnabled; } +#endif + +#if ENABLE(SUBTLE_CRYPTO) + void setSubtleCryptoEnabled(bool isEnabled) { m_isSubtleCryptoEnabled = isEnabled; } + bool subtleCryptoEnabled() const { return m_isSubtleCryptoEnabled; } +#endif + +#if ENABLE(VIDEO) + bool audioEnabled() const; + bool htmlMediaElementEnabled() const; + bool htmlAudioElementEnabled() const; + bool htmlVideoElementEnabled() const; + bool htmlSourceElementEnabled() const; + bool mediaControllerEnabled() const; + bool mediaErrorEnabled() const; + bool timeRangesEnabled() const; +#endif + +#if ENABLE(WEB_SOCKETS) + bool webSocketEnabled() const; +#endif + + WEBCORE_EXPORT static RuntimeEnabledFeatures& sharedFeatures(); + +private: + // Never instantiate. + RuntimeEnabledFeatures(); + + bool m_areModernMediaControlsEnabled { false }; + bool m_isLinkPreloadEnabled { false }; + bool m_isResourceTimingEnabled { false }; + bool m_isUserTimingEnabled { false }; + bool m_isInteractiveFormValidationEnabled { false }; + + bool m_isDOMIteratorEnabled { true }; + bool m_isGeolocationEnabled { true }; + bool m_isShadowDOMEnabled { true }; + bool m_areCustomElementsEnabled { true }; + bool m_inputEventsEnabled { true }; + +#if ENABLE(INDEXED_DATABASE_IN_WORKERS) + bool m_isIndexedDBWorkersEnabled { true }; +#endif + +#if ENABLE(MEDIA_STREAM) + bool m_isMediaStreamEnabled { true }; +#endif + +#if ENABLE(WEB_RTC) + bool m_isPeerConnectionEnabled { true }; +#endif + +#if ENABLE(LEGACY_CSS_VENDOR_PREFIXES) + bool m_isLegacyCSSVendorPrefixesEnabled { false }; +#endif + +#if ENABLE(INPUT_TYPE_DATE) + bool m_isInputTypeDateEnabled { true }; +#endif + +#if ENABLE(INPUT_TYPE_DATETIME_INCOMPLETE) + bool m_isInputTypeDateTimeEnabled { false }; +#endif + +#if ENABLE(INPUT_TYPE_DATETIMELOCAL) + bool m_isInputTypeDateTimeLocalEnabled { true }; +#endif + +#if ENABLE(INPUT_TYPE_MONTH) + bool m_isInputTypeMonthEnabled { true }; +#endif + +#if ENABLE(INPUT_TYPE_TIME) + bool m_isInputTypeTimeEnabled { true }; +#endif + +#if ENABLE(INPUT_TYPE_WEEK) + bool m_isInputTypeWeekEnabled { true }; +#endif + +#if ENABLE(FONT_LOAD_EVENTS) + bool m_isFontLoadEventsEnabled { true }; +#endif + +#if ENABLE(GAMEPAD) + bool m_areGamepadsEnabled { false }; +#endif + +#if ENABLE(CSS_ANIMATIONS_LEVEL_2) + bool m_areAnimationTriggersEnabled { false }; +#endif + +#if ENABLE(WEB_ANIMATIONS) + bool m_areWebAnimationsEnabled { false }; +#endif + +#if ENABLE(WEBGL2) + bool m_isWebGL2Enabled { false }; +#endif + +#if ENABLE(FETCH_API) + bool m_isFetchAPIEnabled { true }; +#endif + +#if ENABLE(DOWNLOAD_ATTRIBUTE) + bool m_isDownloadAttributeEnabled { false }; +#endif + + bool m_cssGridLayoutEnabled { true }; + +#if ENABLE(ENCRYPTED_MEDIA) + bool m_encryptedMediaAPIEnabled { false }; +#endif + +#if ENABLE(INTERSECTION_OBSERVER) + bool m_intersectionObserverEnabled { false }; +#endif + +#if ENABLE(SUBTLE_CRYPTO) + bool m_isSubtleCryptoEnabled { true }; +#endif + + friend class WTF::NeverDestroyed<RuntimeEnabledFeatures>; +}; + +} // namespace WebCore |