| // Copyright 2021 The Chromium Authors |
| // 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 <set> |
| |
| #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<std::string> RegisterEnabledFeatureEntries( |
| base::FeatureList* feature_list) { |
| std::set<std::string> 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 |