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

Side by Side Diff: components/variations/variations_seed_processor.h

Issue 59103009: Refactor VariationsSeedProcessor to add ProcessedStudy struct. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 1 month 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 #ifndef COMPONENTS_VARIATIONS_VARIATIONS_SEED_PROCESSOR_H_ 5 #ifndef COMPONENTS_VARIATIONS_VARIATIONS_SEED_PROCESSOR_H_
6 #define COMPONENTS_VARIATIONS_VARIATIONS_SEED_PROCESSOR_H_ 6 #define COMPONENTS_VARIATIONS_VARIATIONS_SEED_PROCESSOR_H_
7 7
8 #include <string> 8 #include <string>
9 #include <vector>
9 10
10 #include "base/compiler_specific.h" 11 #include "base/compiler_specific.h"
11 #include "base/gtest_prod_util.h" 12 #include "base/gtest_prod_util.h"
12 #include "base/metrics/field_trial.h" 13 #include "base/metrics/field_trial.h"
13 #include "base/time/time.h" 14 #include "base/time/time.h"
14 #include "base/version.h" 15 #include "base/version.h"
15 #include "components/variations/proto/study.pb.h" 16 #include "components/variations/proto/study.pb.h"
16 #include "components/variations/proto/variations_seed.pb.h" 17 #include "components/variations/proto/variations_seed.pb.h"
17 18
18 namespace chrome_variations { 19 namespace chrome_variations {
19 20
21 struct ProcessedStudy;
22
20 // Helper class to instantiate field trials from a variations seed. 23 // Helper class to instantiate field trials from a variations seed.
21 class VariationsSeedProcessor { 24 class VariationsSeedProcessor {
22 public: 25 public:
23 VariationsSeedProcessor(); 26 VariationsSeedProcessor();
24 virtual ~VariationsSeedProcessor(); 27 virtual ~VariationsSeedProcessor();
25 28
26 // Creates field trials from the specified variations |seed|, based on the 29 // Creates field trials from the specified variations |seed|, based on the
27 // specified configuration (locale, current date, version and channel). 30 // specified configuration (locale, current date, version and channel).
28 void CreateTrialsFromSeed(const VariationsSeed& seed, 31 void CreateTrialsFromSeed(const VariationsSeed& seed,
29 const std::string& locale, 32 const std::string& locale,
30 const base::Time& reference_date, 33 const base::Time& reference_date,
31 const base::Version& version, 34 const base::Version& version,
32 Study_Channel channel); 35 Study_Channel channel);
33 36
34 private: 37 private:
35 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, CheckStudyChannel); 38 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, CheckStudyChannel);
36 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, CheckStudyLocale); 39 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, CheckStudyLocale);
37 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, CheckStudyPlatform); 40 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, CheckStudyPlatform);
38 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, CheckStudyStartDate); 41 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, CheckStudyStartDate);
39 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, CheckStudyVersion); 42 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, CheckStudyVersion);
40 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, 43 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest,
41 CheckStudyVersionWildcards); 44 FilterAndValidateStudies);
42 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, ForceGroupWithFlag1); 45 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, ForceGroupWithFlag1);
43 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, ForceGroupWithFlag2); 46 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, ForceGroupWithFlag2);
44 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, 47 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest,
45 ForceGroup_ChooseFirstGroupWithFlag); 48 ForceGroup_ChooseFirstGroupWithFlag);
46 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, 49 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest,
47 ForceGroup_DontChooseGroupWithFlag); 50 ForceGroup_DontChooseGroupWithFlag);
48 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, IsStudyExpired); 51 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, IsStudyExpired);
49 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, ValidateStudy); 52 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, ValidateStudy);
50 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, VariationParams); 53 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, VariationParams);
51 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, 54 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest,
52 VariationParamsWithForcingFlag); 55 VariationParamsWithForcingFlag);
53 56
57 // Filters the list of studies in |seed| and validates and pre-processes them,
58 // adding any kept studies to |filtered_studies| list. Ensures that the
59 // resulting list will not have more than one study with the same name.
60 void FilterAndValidateStudies(const VariationsSeed& seed,
61 const std::string& locale,
62 const base::Time& reference_date,
63 const base::Version& version,
64 Study_Channel channel,
65 std::vector<ProcessedStudy>* filtered_studies);
66
67 // Validates |study| and if valid, adds it to |filtered_studies| as a
68 // ProcessedStudy object.
69 void ValidateAndAddStudy(const Study& study,
70 bool is_expired,
71 std::vector<ProcessedStudy>* filtered_studies);
72
54 // Checks whether a study is applicable for the given |channel| per |filter|. 73 // Checks whether a study is applicable for the given |channel| per |filter|.
55 bool CheckStudyChannel(const Study_Filter& filter, Study_Channel channel); 74 bool CheckStudyChannel(const Study_Filter& filter, Study_Channel channel);
56 75
57 // Checks whether a study is applicable for the given |locale| per |filter|. 76 // Checks whether a study is applicable for the given |locale| per |filter|.
58 bool CheckStudyLocale(const Study_Filter& filter, const std::string& locale); 77 bool CheckStudyLocale(const Study_Filter& filter, const std::string& locale);
59 78
60 // Checks whether a study is applicable for the given |platform| per |filter|. 79 // Checks whether a study is applicable for the given |platform| per |filter|.
61 bool CheckStudyPlatform(const Study_Filter& filter, Study_Platform platform); 80 bool CheckStudyPlatform(const Study_Filter& filter, Study_Platform platform);
62 81
63 // Checks whether a study is applicable for the given date/time per |filter|. 82 // Checks whether a study is applicable for the given date/time per |filter|.
64 bool CheckStudyStartDate(const Study_Filter& filter, 83 bool CheckStudyStartDate(const Study_Filter& filter,
65 const base::Time& date_time); 84 const base::Time& date_time);
66 85
67 // Checks whether a study is applicable for the given version per |filter|. 86 // Checks whether a study is applicable for the given version per |filter|.
68 bool CheckStudyVersion(const Study_Filter& filter, 87 bool CheckStudyVersion(const Study_Filter& filter,
69 const base::Version& version); 88 const base::Version& version);
70 89
71 // Creates and registers a field trial from the |study| data. Disables the 90 // Creates and registers a field trial from the |processed_study| data.
72 // trial if |is_expired| is true. 91 // Disables the trial if |processed_study.is_expired| is true.
73 void CreateTrialFromStudy(const Study& study, bool is_expired); 92 void CreateTrialFromStudy(const ProcessedStudy& processed_study);
74 93
75 // Checks whether |study| is expired using the given date/time. 94 // Checks whether |study| is expired using the given date/time.
76 bool IsStudyExpired(const Study& study, const base::Time& date_time); 95 bool IsStudyExpired(const Study& study, const base::Time& date_time);
77 96
78 // Returns whether |study| should be disabled according to its restriction 97 // Returns whether |study| should be disabled according to its restriction
79 // parameters. Uses |version_info| for min / max version checks, 98 // parameters. Uses |version_info| for min / max version checks,
80 // |reference_date| for the start date check and |channel| for channel 99 // |reference_date| for the start date check and |channel| for channel
81 // checks. 100 // checks.
82 bool ShouldAddStudy(const Study& study, 101 bool ShouldAddStudy(const Study& study,
83 const std::string& locale, 102 const std::string& locale,
84 const base::Time& reference_date, 103 const base::Time& reference_date,
85 const base::Version& version, 104 const base::Version& version,
86 Study_Channel channel); 105 Study_Channel channel);
87 106
88 // Validates the sanity of |study| and computes the total probability. 107 // Validates the sanity of |study| and computes the total probability.
89 bool ValidateStudyAndComputeTotalProbability( 108 bool ValidateStudyAndComputeTotalProbability(
90 const Study& study, 109 const Study& study,
91 base::FieldTrial::Probability* total_probability); 110 base::FieldTrial::Probability* total_probability);
92 111
93 DISALLOW_COPY_AND_ASSIGN(VariationsSeedProcessor); 112 DISALLOW_COPY_AND_ASSIGN(VariationsSeedProcessor);
94 }; 113 };
95 114
96 } // namespace chrome_variations 115 } // namespace chrome_variations
97 116
98 #endif // COMPONENTS_VARIATIONS_VARIATIONS_SEED_PROCESSOR_H_ 117 #endif // COMPONENTS_VARIATIONS_VARIATIONS_SEED_PROCESSOR_H_
OLDNEW
« no previous file with comments | « components/variations/processed_study.cc ('k') | components/variations/variations_seed_processor.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698