1a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// found in the LICENSE file.
4a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
5a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#ifndef COMPONENTS_VARIATIONS_STUDY_FILTERING_H_
6a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#define COMPONENTS_VARIATIONS_STUDY_FILTERING_H_
7a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
8a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include <string>
9a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include <vector>
10a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
11a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "base/compiler_specific.h"
12a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "base/time/time.h"
13a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "base/version.h"
14a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "components/variations/processed_study.h"
15a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "components/variations/proto/study.pb.h"
16a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "components/variations/proto/variations_seed.pb.h"
17a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace variations {
19a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
20a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Internal functions exposed for testing purposes only.
21a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochnamespace internal {
22a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
23a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Checks whether a study is applicable for the given |channel| per |filter|.
24a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochbool CheckStudyChannel(const Study_Filter& filter, Study_Channel channel);
25a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
26a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Checks whether a study is applicable for the given |form_factor| per
27a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// |filter|.
28a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochbool CheckStudyFormFactor(const Study_Filter& filter,
29a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                          Study_FormFactor form_factor);
30a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Checks whether a study is applicable for the given |hardware_class| per
32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// |filter|.
33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)bool CheckStudyHardwareClass(const Study_Filter& filter,
34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                             const std::string& hardware_class);
35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
36a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Checks whether a study is applicable for the given |locale| per |filter|.
37a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochbool CheckStudyLocale(const Study_Filter& filter, const std::string& locale);
38a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
39a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Checks whether a study is applicable for the given |platform| per |filter|.
40a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochbool CheckStudyPlatform(const Study_Filter& filter, Study_Platform platform);
41a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
42a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Checks whether a study is applicable for the given date/time per |filter|.
43a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochbool CheckStudyStartDate(const Study_Filter& filter,
44a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                         const base::Time& date_time);
45a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
46a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Checks whether a study is applicable for the given version per |filter|.
47a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochbool CheckStudyVersion(const Study_Filter& filter,
48a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                       const base::Version& version);
49a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
50a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Checks whether |study| is expired using the given date/time.
51a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochbool IsStudyExpired(const Study& study, const base::Time& date_time);
52a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
53a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Returns whether |study| should be disabled according to its restriction
54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// parameters.
55a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochbool ShouldAddStudy(const Study& study,
56a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                    const std::string& locale,
57a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                    const base::Time& reference_date,
58a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                    const base::Version& version,
59a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                    Study_Channel channel,
60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                    Study_FormFactor form_factor,
61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                    const std::string& hardware_class);
62a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
63a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}  // namespace internal
64a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
65a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Filters the list of studies in |seed| and validates and pre-processes them,
66a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// adding any kept studies to |filtered_studies| list. Ensures that the
67a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// resulting list will not have more than one study with the same name.
68a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochvoid FilterAndValidateStudies(const VariationsSeed& seed,
69a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                              const std::string& locale,
70a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                              const base::Time& reference_date,
71a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                              const base::Version& version,
72a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                              Study_Channel channel,
73a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                              Study_FormFactor form_factor,
74010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                              const std::string& hardware_class,
75a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                              std::vector<ProcessedStudy>* filtered_studies);
76a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace variations
78a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
79a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif  // COMPONENTS_VARIATIONS_STUDY_FILTERING_H_
80