| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef CHROME_BROWSER_METRICS_VARIATIONS_VARIATIONS_SEED_PROCESSOR_H_ | |
| 6 #define CHROME_BROWSER_METRICS_VARIATIONS_VARIATIONS_SEED_PROCESSOR_H_ | |
| 7 | |
| 8 #include <string> | |
| 9 | |
| 10 #include "base/compiler_specific.h" | |
| 11 #include "base/gtest_prod_util.h" | |
| 12 #include "base/metrics/field_trial.h" | |
| 13 #include "base/time/time.h" | |
| 14 #include "base/version.h" | |
| 15 #include "chrome/browser/metrics/proto/study.pb.h" | |
| 16 #include "chrome/browser/metrics/proto/trials_seed.pb.h" | |
| 17 | |
| 18 namespace chrome_variations { | |
| 19 | |
| 20 // Helper class to instantiate field trials from a variations seed. | |
| 21 class VariationsSeedProcessor { | |
| 22 public: | |
| 23 VariationsSeedProcessor(); | |
| 24 virtual ~VariationsSeedProcessor(); | |
| 25 | |
| 26 // Creates field trials from the specified variations |seed|, based on the | |
| 27 // specified configuration (locale, current date, version and channel). | |
| 28 void CreateTrialsFromSeed(const TrialsSeed& seed, | |
| 29 const std::string& locale, | |
| 30 const base::Time& reference_date, | |
| 31 const base::Version& version, | |
| 32 Study_Channel channel); | |
| 33 | |
| 34 private: | |
| 35 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, CheckStudyChannel); | |
| 36 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, CheckStudyLocale); | |
| 37 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, CheckStudyPlatform); | |
| 38 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, CheckStudyStartDate); | |
| 39 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, CheckStudyVersion); | |
| 40 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, | |
| 41 CheckStudyVersionWildcards); | |
| 42 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, ForceGroupWithFlag1); | |
| 43 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, ForceGroupWithFlag2); | |
| 44 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, | |
| 45 ForceGroup_ChooseFirstGroupWithFlag); | |
| 46 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, | |
| 47 ForceGroup_DontChooseGroupWithFlag); | |
| 48 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, IsStudyExpired); | |
| 49 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, ValidateStudy); | |
| 50 FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, VariationParams); | |
| 51 | |
| 52 // Checks whether a study is applicable for the given |channel| per |filter|. | |
| 53 bool CheckStudyChannel(const Study_Filter& filter, Study_Channel channel); | |
| 54 | |
| 55 // Checks whether a study is applicable for the given |locale| per |filter|. | |
| 56 bool CheckStudyLocale(const Study_Filter& filter, const std::string& locale); | |
| 57 | |
| 58 // Checks whether a study is applicable for the given |platform| per |filter|. | |
| 59 bool CheckStudyPlatform(const Study_Filter& filter, Study_Platform platform); | |
| 60 | |
| 61 // Checks whether a study is applicable for the given date/time per |filter|. | |
| 62 bool CheckStudyStartDate(const Study_Filter& filter, | |
| 63 const base::Time& date_time); | |
| 64 | |
| 65 // Checks whether a study is applicable for the given version per |filter|. | |
| 66 bool CheckStudyVersion(const Study_Filter& filter, | |
| 67 const base::Version& version); | |
| 68 | |
| 69 // Creates and registers a field trial from the |study| data. Disables the | |
| 70 // trial if |is_expired| is true. | |
| 71 void CreateTrialFromStudy(const Study& study, bool is_expired); | |
| 72 | |
| 73 // Checks whether |study| is expired using the given date/time. | |
| 74 bool IsStudyExpired(const Study& study, const base::Time& date_time); | |
| 75 | |
| 76 // Returns whether |study| should be disabled according to its restriction | |
| 77 // parameters. Uses |version_info| for min / max version checks, | |
| 78 // |reference_date| for the start date check and |channel| for channel | |
| 79 // checks. | |
| 80 bool ShouldAddStudy(const Study& study, | |
| 81 const std::string& locale, | |
| 82 const base::Time& reference_date, | |
| 83 const base::Version& version, | |
| 84 Study_Channel channel); | |
| 85 | |
| 86 // Validates the sanity of |study| and computes the total probability. | |
| 87 bool ValidateStudyAndComputeTotalProbability( | |
| 88 const Study& study, | |
| 89 base::FieldTrial::Probability* total_probability); | |
| 90 | |
| 91 DISALLOW_COPY_AND_ASSIGN(VariationsSeedProcessor); | |
| 92 }; | |
| 93 | |
| 94 } // namespace chrome_variations | |
| 95 | |
| 96 #endif // CHROME_BROWSER_METRICS_VARIATIONS_VARIATIONS_SEED_PROCESSOR_H_ | |
| OLD | NEW |