Add Field Trial Support for Material Refresh
This change allows for the experimentation of Material Refresh versus
the previous Material Design UI.
BUG=865722
Change-Id: I1d6b18760433e5d286e282e54f370a074f375397
Reviewed-on: https://chromium-review.googlesource.com/1144627
Reviewed-by: Robert Liao <robliao@chromium.org>
Reviewed-by: Scott Violet <sky@chromium.org>
Reviewed-by: Alexei Svitkine <asvitkine@chromium.org>
Commit-Queue: Robert Liao <robliao@chromium.org>
Cr-Commit-Position: refs/heads/master@{#576966}
diff --git a/ui/base/material_design/material_design_controller.cc b/ui/base/material_design/material_design_controller.cc
index 286542d..c698b28 100644
--- a/ui/base/material_design/material_design_controller.cc
+++ b/ui/base/material_design/material_design_controller.cc
@@ -7,6 +7,7 @@
#include <string>
#include "base/command_line.h"
+#include "base/feature_list.h"
#include "base/logging.h"
#include "base/strings/string_number_conversions.h"
#include "base/trace_event/trace_event.h"
@@ -38,6 +39,19 @@
namespace ui {
namespace {
+#if defined(OS_CHROMEOS) || defined(OS_WIN) || defined(OS_LINUX)
+
+// Whether Material Refresh should be used by default.
+// Material refresh is controlled by both --top-chrome-md and this feature.
+// --top-chrome-md should take precedence over what this feature may indicate.
+bool IsMaterialRefreshEnabled() {
+ static constexpr base::Feature kMaterialRefreshEnabledFeature = {
+ "MaterialRefresh", base::FEATURE_ENABLED_BY_DEFAULT};
+ return base::FeatureList::IsEnabled(kMaterialRefreshEnabledFeature);
+}
+
+#endif
+
#if defined(OS_CHROMEOS)
// Whether to use MATERIAL_TOUCH_OPTIMIZED when a touch device is detected.
@@ -46,9 +60,18 @@
base::FEATURE_ENABLED_BY_DEFAULT};
MaterialDesignController::Mode GetDefaultTouchDeviceMode() {
- return base::FeatureList::IsEnabled(kTouchOptimizedUi)
- ? MaterialDesignController::MATERIAL_TOUCH_REFRESH
- : MaterialDesignController::MATERIAL_REFRESH;
+ bool material_refresh_enabled = IsMaterialRefreshEnabled();
+ bool touch_optimized_ui_enabled =
+ base::FeatureList::IsEnabled(kTouchOptimizedUi);
+ if (material_refresh_enabled) {
+ return touch_optimized_ui_enabled
+ ? MaterialDesignController::MATERIAL_TOUCH_REFRESH
+ : MaterialDesignController::MATERIAL_REFRESH;
+ }
+
+ return touch_optimized_ui_enabled
+ ? MaterialDesignController::MATERIAL_TOUCH_OPTIMIZED
+ : MaterialDesignController::MATERIAL_HYBRID;
}
bool HasTouchscreen() {
@@ -178,11 +201,11 @@
if (HasTouchscreen())
return GetDefaultTouchDeviceMode();
- return MATERIAL_REFRESH;
+ return IsMaterialRefreshEnabled() ? MATERIAL_REFRESH : MATERIAL_NORMAL;
#endif // defined(OS_CHROMEOS)
#if defined(OS_WIN) || defined(OS_LINUX)
- return MATERIAL_REFRESH;
+ return IsMaterialRefreshEnabled() ? MATERIAL_REFRESH : MATERIAL_NORMAL;
#elif defined(OS_MACOSX) && BUILDFLAG(MAC_VIEWS_BROWSER)
return features::IsViewsBrowserCocoa() ? MATERIAL_NORMAL : MATERIAL_REFRESH;
#else