// Copyright 2021 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 "android_webview/browser/aw_feature_entries.h" #include #include "android_webview/common/aw_switches.h" #include "base/command_line.h" #include "base/metrics/field_trial.h" #include "components/flags_ui/feature_entry.h" #include "components/flags_ui/feature_entry_macros.h" #include "components/flags_ui/flags_state.h" #include "components/variations/variations_associated_data.h" #include "third_party/blink/public/common/features.h" namespace android_webview { namespace aw_feature_entries { namespace { constexpr flags_ui::FeatureEntry::FeatureParam kForceDark_SelectiveImageInversion[] = { {"inversion_method", "cielab_based"}, {"image_behavior", "selective"}, {"foreground_lightness_threshold", "150"}, {"background_lightness_threshold", "205"}}; // Not like Chrome, WebView only provides a switch in dev ui and uses the // preferred variation if it is turned on. constexpr flags_ui::FeatureEntry::FeatureVariation kForceDarkVariations[] = { {"with selective image inversion", kForceDark_SelectiveImageInversion, std::size(kForceDark_SelectiveImageInversion), nullptr}}; // Not for display, set the descriptions to empty. constexpr flags_ui::FeatureEntry kForceDark = { "enable-force-dark", "", "", flags_ui::kOsWebView, FEATURE_WITH_PARAMS_VALUE_TYPE(blink::features::kForceWebContentsDarkMode, kForceDarkVariations, "ForceDarkVariations")}; constexpr flags_ui::FeatureEntry kWebViewFeatureEntries[] = { kForceDark, }; } // namespace namespace internal { std::string ToEnabledEntry(const flags_ui::FeatureEntry& entry, int enabled_variation_index) { CHECK(entry.type == flags_ui::FeatureEntry::FEATURE_WITH_PARAMS_VALUE); // Index 0 is "Default" and 1 is "Enabled" inside FeatureEntry. return entry.NameForOption(enabled_variation_index + 2); } } // namespace internal std::vector RegisterEnabledFeatureEntries( base::FeatureList* feature_list) { std::set enabled_entries; if (base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kWebViewSelectiveImageInversionDarkening)) { enabled_entries.insert(internal::ToEnabledEntry(kForceDark, 0)); } return flags_ui::FlagsState::RegisterEnabledFeatureVariationParameters( kWebViewFeatureEntries, enabled_entries, /*trial_name=*/"webview_dev_ui", feature_list); } } // namespace aw_feature_entries } // namespace android_webview