// Copyright 2017 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ui/base/ui_base_features.h" #if defined(OS_WIN) #include "base/win/windows_version.h" #endif namespace features { #if defined(OS_WIN) // If enabled, calculate native window occlusion - Windows-only. const base::Feature kCalculateNativeWinOcclusion{ "CalculateNativeWinOcclusion", base::FEATURE_DISABLED_BY_DEFAULT}; #endif // OW_WIN // Whether or not to delegate color queries to the color provider. const base::Feature kColorProviderRedirection = { "ColorProviderRedirection", base::FEATURE_DISABLED_BY_DEFAULT}; #if defined(OS_CHROMEOS) // Integrate input method specific settings to Chrome OS settings page. // https://crbug.com/895886. const base::Feature kSettingsShowsPerKeyboardSettings = { "InputMethodIntegratedSettings", base::FEATURE_DISABLED_BY_DEFAULT}; // Experimental shortcut handling and mapping to address i18n issues. // https://crbug.com/1067269 const base::Feature kNewShortcutMapping = {"NewShortcutMapping", base::FEATURE_DISABLED_BY_DEFAULT}; bool IsNewShortcutMappingEnabled() { return base::FeatureList::IsEnabled(kNewShortcutMapping); } #endif // defined(OS_CHROMEOS) // Update of the virtual keyboard settings UI as described in // https://crbug.com/876901. const base::Feature kInputMethodSettingsUiUpdate = { "InputMethodSettingsUiUpdate", base::FEATURE_DISABLED_BY_DEFAULT}; // Enables percent-based scrolling for mousewheel and keyboard initiated // scrolls. const base::Feature kPercentBasedScrolling = { "PercentBasedScrolling", base::FEATURE_DISABLED_BY_DEFAULT}; // Allows requesting unadjusted movement when entering pointerlock. const base::Feature kPointerLockOptions = {"PointerLockOptions", base::FEATURE_DISABLED_BY_DEFAULT}; // Allows system caption style for WebVTT Captions. const base::Feature kSystemCaptionStyle{"SystemCaptionStyle", base::FEATURE_ENABLED_BY_DEFAULT}; // Allows system keyboard event capture via the keyboard lock API. const base::Feature kSystemKeyboardLock{"SystemKeyboardLock", base::FEATURE_ENABLED_BY_DEFAULT}; const base::Feature kNotificationIndicator = { "EnableNotificationIndicator", base::FEATURE_DISABLED_BY_DEFAULT}; bool IsNotificationIndicatorEnabled() { return base::FeatureList::IsEnabled(kNotificationIndicator); } // Enables GPU rasterization for all UI drawing (where not blacklisted). const base::Feature kUiGpuRasterization = {"UiGpuRasterization", #if defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_FUCHSIA) base::FEATURE_ENABLED_BY_DEFAULT #else base::FEATURE_DISABLED_BY_DEFAULT #endif }; bool IsUiGpuRasterizationEnabled() { return base::FeatureList::IsEnabled(kUiGpuRasterization); } // Enables scrolling with layers under ui using the ui::Compositor. const base::Feature kUiCompositorScrollWithLayers = { "UiCompositorScrollWithLayers", // TODO(https://crbug.com/615948): Use composited scrolling on all platforms. #if defined(OS_MACOSX) base::FEATURE_ENABLED_BY_DEFAULT #else base::FEATURE_DISABLED_BY_DEFAULT #endif }; // Enables compositor threaded scrollbar scrolling by mapping pointer events to // gesture events. const base::Feature kCompositorThreadedScrollbarScrolling = { "CompositorThreadedScrollbarScrolling", base::FEATURE_ENABLED_BY_DEFAULT}; // Enables the use of a touch fling curve that is based on the behavior of // native apps on Windows. const base::Feature kExperimentalFlingAnimation { "ExperimentalFlingAnimation", #if defined(OS_WIN) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) base::FEATURE_ENABLED_BY_DEFAULT #else base::FEATURE_DISABLED_BY_DEFAULT #endif }; #if defined(OS_WIN) const base::Feature kElasticOverscrollWin = {"ElasticOverscrollWin", base::FEATURE_DISABLED_BY_DEFAULT}; // Enables InputPane API for controlling on screen keyboard. const base::Feature kInputPaneOnScreenKeyboard = { "InputPaneOnScreenKeyboard", base::FEATURE_ENABLED_BY_DEFAULT}; // Enables using WM_POINTER instead of WM_TOUCH for touch events. const base::Feature kPointerEventsForTouch = {"PointerEventsForTouch", base::FEATURE_ENABLED_BY_DEFAULT}; // Enables using TSF (over IMM32) for IME. const base::Feature kTSFImeSupport = {"TSFImeSupport", base::FEATURE_ENABLED_BY_DEFAULT}; bool IsUsingWMPointerForTouch() { return base::win::GetVersion() >= base::win::Version::WIN8 && base::FeatureList::IsEnabled(kPointerEventsForTouch); } // Enables Logging for DirectManipulation. const base::Feature kPrecisionTouchpadLogging{ "PrecisionTouchpadLogging", base::FEATURE_DISABLED_BY_DEFAULT}; #endif // defined(OS_WIN) #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) // Enables stylus appearing as touch when in contact with digitizer. const base::Feature kDirectManipulationStylus = { "DirectManipulationStylus", #if defined(OS_WIN) base::FEATURE_ENABLED_BY_DEFAULT #else base::FEATURE_DISABLED_BY_DEFAULT #endif }; #endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) // Enables forced colors mode for web content. const base::Feature kForcedColors{"ForcedColors", base::FEATURE_DISABLED_BY_DEFAULT}; bool IsForcedColorsEnabled() { static const bool forced_colors_enabled = base::FeatureList::IsEnabled(features::kForcedColors); return forced_colors_enabled; } // Enables the eye-dropper in the refresh color-picker. const base::Feature kEyeDropper{"EyeDropper", base::FEATURE_DISABLED_BY_DEFAULT}; bool IsEyeDropperEnabled() { return IsFormControlsRefreshEnabled() && base::FeatureList::IsEnabled(features::kEyeDropper); } // Enable the CSSColorSchemeUARendering feature for Windows, ChromeOS, Linux, // and Mac. This feature will be released for Android in later milestones. See // crbug.com/1086530 for the Desktop launch bug. const base::Feature kCSSColorSchemeUARendering = { "CSSColorSchemeUARendering", base::FEATURE_DISABLED_BY_DEFAULT}; bool IsCSSColorSchemeUARenderingEnabled() { static const bool css_color_scheme_ua_rendering_enabled = base::FeatureList::IsEnabled(features::kCSSColorSchemeUARendering); return css_color_scheme_ua_rendering_enabled; } // Enable the FormControlsRefresh feature for Windows, ChromeOS, Linux, and Mac. // This feature will be released for Android in later milestones. See // crbug.com/1012106 for the Windows launch bug, and crbug.com/1012108 for the // Mac launch bug. const base::Feature kFormControlsRefresh = {"FormControlsRefresh", #if defined(OS_WIN) || defined(OS_CHROMEOS) || defined(OS_LINUX) || \ defined(OS_MACOSX) base::FEATURE_ENABLED_BY_DEFAULT #else base::FEATURE_DISABLED_BY_DEFAULT #endif }; bool IsFormControlsRefreshEnabled() { static const bool form_controls_refresh_enabled = base::FeatureList::IsEnabled(features::kFormControlsRefresh); return form_controls_refresh_enabled; } // Enable the common select popup. const base::Feature kUseCommonSelectPopup = {"UseCommonSelectPopup", base::FEATURE_DISABLED_BY_DEFAULT}; bool IsUseCommonSelectPopupEnabled() { return base::FeatureList::IsEnabled(features::kUseCommonSelectPopup); } #if defined(OS_CHROMEOS) const base::Feature kHandwritingGesture = {"HandwritingGesture", base::FEATURE_ENABLED_BY_DEFAULT}; #endif const base::Feature kSynchronousPageFlipTesting{ "SynchronousPageFlipTesting", base::FEATURE_DISABLED_BY_DEFAULT}; bool IsSynchronousPageFlipTestingEnabled() { return base::FeatureList::IsEnabled(kSynchronousPageFlipTesting); } #if defined(USE_X11) || defined(USE_OZONE) const base::Feature kUseOzonePlatform { "UseOzonePlatform", #if defined(USE_X11) base::FEATURE_DISABLED_BY_DEFAULT }; #else base::FEATURE_ENABLED_BY_DEFAULT }; #endif bool IsUsingOzonePlatform() { // Only allow enabling and disabling the OzonePlatform on USE_X11 && USE_OZONE // builds. #if defined(USE_X11) && defined(USE_OZONE) return base::FeatureList::IsEnabled(kUseOzonePlatform); #elif defined(USE_X11) && !defined(USE_OZONE) // This shouldn't be switchable for pure X11 builds. return false; #else // All the other platforms must use Ozone by default and can't disable that. return true; #endif } #endif // defined(USE_X11) || defined(USE_OZONE) } // namespace features