summaryrefslogtreecommitdiff
path: root/Source/WebCore/page/RuntimeEnabledFeatures.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/page/RuntimeEnabledFeatures.h
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/page/RuntimeEnabledFeatures.h')
-rw-r--r--Source/WebCore/page/RuntimeEnabledFeatures.h300
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