aw_feature_entries_unittest.cc 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "android_webview/browser/aw_feature_entries.h"
  5. #include "base/feature_list.h"
  6. #include "base/metrics/field_trial.h"
  7. #include "base/metrics/field_trial_params.h"
  8. #include "base/test/scoped_feature_list.h"
  9. #include "components/flags_ui/feature_entry.h"
  10. #include "components/flags_ui/feature_entry_macros.h"
  11. #include "components/flags_ui/flags_state.h"
  12. #include "testing/gtest/include/gtest/gtest.h"
  13. namespace android_webview {
  14. namespace {
  15. const base::Feature kTestFeature{"AwFeatureEntriesTest",
  16. base::FEATURE_DISABLED_BY_DEFAULT};
  17. const base::Feature kTestFeature2{"AwFeatureEntriesTest2",
  18. base::FEATURE_DISABLED_BY_DEFAULT};
  19. const flags_ui::FeatureEntry::FeatureParam kForceDark_SimpleHsl[] = {
  20. {"inversion_method", "hsl_based"},
  21. {"image_behavior", "none"},
  22. {"foreground_lightness_threshold", "255"},
  23. {"background_lightness_threshold", "0"}};
  24. const flags_ui::FeatureEntry::FeatureParam kForceDark_SimpleCielab[] = {
  25. {"inversion_method", "cielab_based"},
  26. {"image_behavior", "none"},
  27. {"foreground_lightness_threshold", "255"},
  28. {"background_lightness_threshold", "0"}};
  29. const flags_ui::FeatureEntry::FeatureParam kForceDark_SimpleRgb[] = {
  30. {"inversion_method", "rgb_based"},
  31. {"image_behavior", "none"},
  32. {"foreground_lightness_threshold", "255"},
  33. {"background_lightness_threshold", "0"}};
  34. const flags_ui::FeatureEntry::FeatureVariation kForceDarkVariations[] = {
  35. {"with simple HSL-based inversion", kForceDark_SimpleHsl,
  36. std::size(kForceDark_SimpleHsl), nullptr},
  37. {"with simple CIELAB-based inversion", kForceDark_SimpleCielab,
  38. std::size(kForceDark_SimpleCielab), nullptr},
  39. {"with simple RGB-based inversion", kForceDark_SimpleRgb,
  40. std::size(kForceDark_SimpleRgb), nullptr}};
  41. // Not for display, set the descriptions to empty.
  42. flags_ui::FeatureEntry kForceDark = {
  43. "enable-force-dark", "", "", flags_ui::kOsWebView,
  44. FEATURE_WITH_PARAMS_VALUE_TYPE(kTestFeature,
  45. kForceDarkVariations,
  46. "ForceDarkVariations")};
  47. flags_ui::FeatureEntry kForceDarkDisabled = {
  48. "enable-force-dark2", "", "", flags_ui::kOsWebView,
  49. FEATURE_WITH_PARAMS_VALUE_TYPE(kTestFeature2,
  50. kForceDarkVariations,
  51. "ForceDarkVariations")};
  52. flags_ui::FeatureEntry kWebViewTestFeatureEntries[] = {
  53. kForceDark,
  54. kForceDarkDisabled,
  55. };
  56. void VerifyFeatureParameters(
  57. const flags_ui::FeatureEntry::FeatureVariation& variation) {
  58. for (int i = 0; i < variation.num_params; i++) {
  59. base::FeatureParam<std::string> param{
  60. &kTestFeature, variation.params[i].param_name, nullptr};
  61. EXPECT_EQ(variation.params[i].param_value, param.Get());
  62. }
  63. }
  64. } // namespace
  65. TEST(AwFeatureEntriesTest, ToEnabledEntry) {
  66. EXPECT_EQ("enable-force-dark@2",
  67. aw_feature_entries::internal::ToEnabledEntry(kForceDark, 0));
  68. EXPECT_EQ("enable-force-dark@4",
  69. aw_feature_entries::internal::ToEnabledEntry(kForceDark, 2));
  70. }
  71. TEST(AwFeatureEntriesTest, RegisterEnabledFeatureEntries) {
  72. std::set<std::string> enabled_entries;
  73. enabled_entries.insert(
  74. aw_feature_entries::internal::ToEnabledEntry(kForceDark, 2));
  75. auto feature_list = std::make_unique<base::FeatureList>();
  76. flags_ui::FlagsState::RegisterEnabledFeatureVariationParameters(
  77. kWebViewTestFeatureEntries, enabled_entries, "webview_dev_ui",
  78. feature_list.get());
  79. EXPECT_FALSE(feature_list->IsFeatureOverridden(kTestFeature2.name));
  80. EXPECT_TRUE(feature_list->IsFeatureOverridden(kTestFeature.name));
  81. // FeatureList can only be queried when the initialization is done, replaces
  82. // the global one to set the initialization being finished.
  83. base::test::ScopedFeatureList scoped_feature_list;
  84. scoped_feature_list.InitWithFeatureList(std::move(feature_list));
  85. base::FieldTrial* field_trial =
  86. base::FeatureList::GetInstance()->GetEnabledFieldTrialByFeatureName(
  87. kForceDark.feature.feature->name);
  88. EXPECT_TRUE(field_trial);
  89. EXPECT_EQ("webview_dev_ui", field_trial->group_name());
  90. EXPECT_EQ("ForceDarkVariations", field_trial->trial_name());
  91. // Verify the enabled variation kForceDark_SimpleRgb (index = 2) setup
  92. // correctly.
  93. VerifyFeatureParameters(kForceDark.feature.feature_variations[2]);
  94. }
  95. } // namespace android_webview