Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(126)

Side by Side Diff: components/ntp_snippets/features.cc

Issue 2804633003: Add base::FeatureParam<> struct (Closed)
Patch Set: Remove windows-incompatible constexpr Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/ntp_snippets/features.h" 5 #include "components/ntp_snippets/features.h"
6 6
7 #include "base/feature_list.h" 7 #include "base/feature_list.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/time/clock.h" 9 #include "base/time/clock.h"
10 #include "components/ntp_snippets/category_rankers/click_based_category_ranker.h " 10 #include "components/ntp_snippets/category_rankers/click_based_category_ranker.h "
11 #include "components/ntp_snippets/category_rankers/constant_category_ranker.h" 11 #include "components/ntp_snippets/category_rankers/constant_category_ranker.h"
12 #include "components/variations/variations_associated_data.h"
13 12
14 namespace ntp_snippets { 13 namespace ntp_snippets {
15 14
16 const base::Feature kArticleSuggestionsFeature{ 15 const base::Feature kArticleSuggestionsFeature{
17 "NTPArticleSuggestions", base::FEATURE_ENABLED_BY_DEFAULT}; 16 "NTPArticleSuggestions", base::FEATURE_ENABLED_BY_DEFAULT};
18 17
19 const base::Feature kBookmarkSuggestionsFeature{ 18 const base::Feature kBookmarkSuggestionsFeature{
20 "NTPBookmarkSuggestions", base::FEATURE_ENABLED_BY_DEFAULT}; 19 "NTPBookmarkSuggestions", base::FEATURE_ENABLED_BY_DEFAULT};
21 20
22 const base::Feature kRecentOfflineTabSuggestionsFeature{ 21 const base::Feature kRecentOfflineTabSuggestionsFeature{
(...skipping 11 matching lines...) Expand all
34 const base::Feature kPreferAmpUrlsFeature{"NTPPreferAmpUrls", 33 const base::Feature kPreferAmpUrlsFeature{"NTPPreferAmpUrls",
35 base::FEATURE_ENABLED_BY_DEFAULT}; 34 base::FEATURE_ENABLED_BY_DEFAULT};
36 35
37 const base::Feature kCategoryRanker{"ContentSuggestionsCategoryRanker", 36 const base::Feature kCategoryRanker{"ContentSuggestionsCategoryRanker",
38 base::FEATURE_ENABLED_BY_DEFAULT}; 37 base::FEATURE_ENABLED_BY_DEFAULT};
39 38
40 const base::Feature kPublisherFaviconsFromNewServerFeature{ 39 const base::Feature kPublisherFaviconsFromNewServerFeature{
41 "ContentSuggestionsFaviconsFromNewServer", 40 "ContentSuggestionsFaviconsFromNewServer",
42 base::FEATURE_DISABLED_BY_DEFAULT}; 41 base::FEATURE_DISABLED_BY_DEFAULT};
43 42
44 const char kCategoryRankerParameter[] = "category_ranker";
45 const char kCategoryRankerConstantRanker[] = "constant"; 43 const char kCategoryRankerConstantRanker[] = "constant";
46 const char kCategoryRankerClickBasedRanker[] = "click_based"; 44 const char kCategoryRankerClickBasedRanker[] = "click_based";
47 45
48 CategoryRankerChoice GetSelectedCategoryRanker() { 46 constexpr base::FeatureParam<CategoryRankerChoice>::Option
49 std::string category_ranker_value = 47 kCategoryRankerParameterOptions[] = {
50 variations::GetVariationParamValueByFeature(kCategoryRanker, 48 {CategoryRankerChoice::CONSTANT, kCategoryRankerConstantRanker},
51 kCategoryRankerParameter); 49 {CategoryRankerChoice::CLICK_BASED, kCategoryRankerClickBasedRanker}};
52 50 const base::FeatureParam<CategoryRankerChoice> kCategoryRankerParameter{
53 if (category_ranker_value.empty()) { 51 &kCategoryRanker, "category_ranker", CategoryRankerChoice::CONSTANT,
54 // Default, Enabled or Disabled. 52 &kCategoryRankerParameterOptions};
55 return CategoryRankerChoice::CONSTANT;
56 }
57 if (category_ranker_value == kCategoryRankerConstantRanker) {
58 return CategoryRankerChoice::CONSTANT;
59 }
60 if (category_ranker_value == kCategoryRankerClickBasedRanker) {
61 return CategoryRankerChoice::CLICK_BASED;
62 }
63
64 LOG(DFATAL) << "The " << kCategoryRankerParameter << " parameter value is '"
65 << category_ranker_value << "'";
66 return CategoryRankerChoice::CONSTANT;
67 }
68 53
69 std::unique_ptr<CategoryRanker> BuildSelectedCategoryRanker( 54 std::unique_ptr<CategoryRanker> BuildSelectedCategoryRanker(
70 PrefService* pref_service, 55 PrefService* pref_service,
71 std::unique_ptr<base::Clock> clock) { 56 std::unique_ptr<base::Clock> clock) {
72 CategoryRankerChoice choice = ntp_snippets::GetSelectedCategoryRanker(); 57 CategoryRankerChoice choice = kCategoryRankerParameter.Get();
73 switch (choice) { 58 switch (choice) {
74 case CategoryRankerChoice::CONSTANT: 59 case CategoryRankerChoice::CONSTANT:
75 return base::MakeUnique<ConstantCategoryRanker>(); 60 return base::MakeUnique<ConstantCategoryRanker>();
76 case CategoryRankerChoice::CLICK_BASED: 61 case CategoryRankerChoice::CLICK_BASED:
77 return base::MakeUnique<ClickBasedCategoryRanker>(pref_service, 62 return base::MakeUnique<ClickBasedCategoryRanker>(pref_service,
78 std::move(clock)); 63 std::move(clock));
79 } 64 }
80 return nullptr; 65 return nullptr;
81 } 66 }
82 67
83 const base::Feature kCategoryOrder{"ContentSuggestionsCategoryOrder", 68 const base::Feature kCategoryOrder{"ContentSuggestionsCategoryOrder",
84 base::FEATURE_DISABLED_BY_DEFAULT}; 69 base::FEATURE_DISABLED_BY_DEFAULT};
85 70
86 const char kCategoryOrderParameter[] = "category_order"; 71 constexpr base::FeatureParam<CategoryOrderChoice>::Option
72 kCategoryOrderParameterOptions[] = {
73 {CategoryOrderChoice::GENERAL, kCategoryOrderGeneral},
74 {CategoryOrderChoice::EMERGING_MARKETS_ORIENTED,
75 kCategoryOrderEmergingMarketsOriented}};
76 const base::FeatureParam<CategoryOrderChoice> kCategoryOrderParameter{
77 &kCategoryOrder, "category_order", CategoryOrderChoice::GENERAL,
78 &kCategoryOrderParameterOptions};
79
87 const char kCategoryOrderGeneral[] = "general"; 80 const char kCategoryOrderGeneral[] = "general";
88 const char kCategoryOrderEmergingMarketsOriented[] = 81 const char kCategoryOrderEmergingMarketsOriented[] =
89 "emerging_markets_oriented"; 82 "emerging_markets_oriented";
90 83
91 CategoryOrderChoice GetSelectedCategoryOrder() { 84 CategoryOrderChoice GetSelectedCategoryOrder() {
92 if (!base::FeatureList::IsEnabled(kCategoryOrder)) { 85 return kCategoryOrderParameter.Get();
93 return CategoryOrderChoice::GENERAL;
94 }
95
96 std::string category_order_value =
97 variations::GetVariationParamValueByFeature(kCategoryOrder,
98 kCategoryOrderParameter);
99
100 if (category_order_value.empty()) {
101 // Enabled with no parameters.
102 return CategoryOrderChoice::GENERAL;
103 }
104 if (category_order_value == kCategoryOrderGeneral) {
105 return CategoryOrderChoice::GENERAL;
106 }
107 if (category_order_value == kCategoryOrderEmergingMarketsOriented) {
108 return CategoryOrderChoice::EMERGING_MARKETS_ORIENTED;
109 }
110
111 LOG(DFATAL) << "The " << kCategoryOrderParameter << " parameter value is '"
112 << category_order_value << "'";
113 return CategoryOrderChoice::GENERAL;
114 } 86 }
115 87
116 } // namespace ntp_snippets 88 } // namespace ntp_snippets
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698