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