• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 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 COMPONENTS_VARIATIONS_STUDY_FILTERING_H_
6 #define COMPONENTS_VARIATIONS_STUDY_FILTERING_H_
7 
8 #include <string>
9 #include <vector>
10 
11 #include "base/compiler_specific.h"
12 #include "base/time/time.h"
13 #include "base/version.h"
14 #include "components/variations/processed_study.h"
15 #include "components/variations/proto/study.pb.h"
16 #include "components/variations/proto/variations_seed.pb.h"
17 
18 namespace chrome_variations {
19 
20 // Internal functions exposed for testing purposes only.
21 namespace internal {
22 
23 // Checks whether a study is applicable for the given |channel| per |filter|.
24 bool CheckStudyChannel(const Study_Filter& filter, Study_Channel channel);
25 
26 // Checks whether a study is applicable for the given |form_factor| per
27 // |filter|.
28 bool CheckStudyFormFactor(const Study_Filter& filter,
29                           Study_FormFactor form_factor);
30 
31 // Checks whether a study is applicable for the given |hardware_class| per
32 // |filter|.
33 bool CheckStudyHardwareClass(const Study_Filter& filter,
34                              const std::string& hardware_class);
35 
36 // Checks whether a study is applicable for the given |locale| per |filter|.
37 bool CheckStudyLocale(const Study_Filter& filter, const std::string& locale);
38 
39 // Checks whether a study is applicable for the given |platform| per |filter|.
40 bool CheckStudyPlatform(const Study_Filter& filter, Study_Platform platform);
41 
42 // Checks whether a study is applicable for the given date/time per |filter|.
43 bool CheckStudyStartDate(const Study_Filter& filter,
44                          const base::Time& date_time);
45 
46 // Checks whether a study is applicable for the given version per |filter|.
47 bool CheckStudyVersion(const Study_Filter& filter,
48                        const base::Version& version);
49 
50 // Checks whether |study| is expired using the given date/time.
51 bool IsStudyExpired(const Study& study, const base::Time& date_time);
52 
53 // Returns whether |study| should be disabled according to its restriction
54 // parameters.
55 bool ShouldAddStudy(const Study& study,
56                     const std::string& locale,
57                     const base::Time& reference_date,
58                     const base::Version& version,
59                     Study_Channel channel,
60                     Study_FormFactor form_factor,
61                     const std::string& hardware_class);
62 
63 }  // namespace internal
64 
65 // Filters the list of studies in |seed| and validates and pre-processes them,
66 // adding any kept studies to |filtered_studies| list. Ensures that the
67 // resulting list will not have more than one study with the same name.
68 void FilterAndValidateStudies(const VariationsSeed& seed,
69                               const std::string& locale,
70                               const base::Time& reference_date,
71                               const base::Version& version,
72                               Study_Channel channel,
73                               Study_FormFactor form_factor,
74                               const std::string& hardware_class,
75                               std::vector<ProcessedStudy>* filtered_studies);
76 
77 }  // namespace chrome_variations
78 
79 #endif  // COMPONENTS_VARIATIONS_STUDY_FILTERING_H_
80