Home | History | Annotate | Download | only in variations
      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