blob: b9e348cb381a47ab59f1b7e80c0c508085b50955 [file] [log] [blame]
// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/native_theme/features/native_theme_features.h"
#include "base/feature_list.h"
#include "build/build_config.h"
namespace features {
#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_FUCHSIA) || BUILDFLAG(IS_IOS)
constexpr base::FeatureState kOverlayScrollbarFeatureState =
base::FEATURE_ENABLED_BY_DEFAULT;
#else
constexpr base::FeatureState kOverlayScrollbarFeatureState =
base::FEATURE_DISABLED_BY_DEFAULT;
#endif
// Enables or disables overlay scrollbars in Blink (i.e. web content) on Aura
// or Linux. The status of native UI overlay scrollbars is determined in
// PlatformStyle::CreateScrollBar. Does nothing on Mac.
BASE_FEATURE(kOverlayScrollbar, kOverlayScrollbarFeatureState);
// Disable to keep scrollbars visible forever once shown, and immediately
// update scrollbar states instead of animating. This is used to ensure
// ref tests in WPT do not flake based on the time taken before the
// screenshot is captured.
BASE_FEATURE(kScrollbarAnimations, base::FEATURE_ENABLED_BY_DEFAULT);
// Fluent scrollbars aim to modernize the Chromium scrollbars (both overlay and
// non-overlay) to fit the Fluent design language. Currently only supported on
// Windows and Linux.
BASE_FEATURE(kFluentScrollbar, base::FEATURE_ENABLED_BY_DEFAULT);
// Makes all native scrollbars behave as overlay scrollbars styled to fit the
// Fluent design language.
// TODO(crbug.com/40280779): Right now this feature flag will force Fluent
// overlay scrollbars on. We have yet to decide how we will expose this feature
// once it is complete.
BASE_FEATURE(kFluentOverlayScrollbar, base::FEATURE_DISABLED_BY_DEFAULT);
// When enabled, scrollbars flash only once when a page is loaded or when they
// become visible on the viewport instead of flashing after every scroll update.
BASE_FEATURE(kOverlayScrollbarFlashOnlyOnceVisibleOnViewport,
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables will flash scrollbar when user move mouse enter a scrollable area.
BASE_FEATURE(kOverlayScrollbarFlashWhenMouseEnter,
base::FEATURE_ENABLED_BY_DEFAULT);
} // namespace features
namespace ui {
bool IsFluentOverlayScrollbarEnabled() {
// Fluent scrollbars are only used for some OSes due to UI design guidelines.
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX)
return base::FeatureList::IsEnabled(features::kFluentOverlayScrollbar);
#else
return false;
#endif
}
bool IsFluentScrollbarEnabled() {
// Fluent scrollbars are only used for some OSes due to UI design guidelines.
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX)
return base::FeatureList::IsEnabled(features::kFluentScrollbar) ||
IsFluentOverlayScrollbarEnabled();
#else
return false;
#endif
}
bool IsOverlayScrollbarEnabledByFeatureFlag() {
return base::FeatureList::IsEnabled(features::kOverlayScrollbar) ||
IsFluentOverlayScrollbarEnabled();
}
} // namespace ui