// Copyright 2017 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_VARIATIONS_VARIATIONS_ID_COLLECTION_H_ #define COMPONENTS_VARIATIONS_VARIATIONS_ID_COLLECTION_H_ #include #include #include "base/macros.h" #include "base/metrics/field_trial.h" #include "components/variations/variations_associated_data.h" namespace variations { // Watches finalization of trials that may have a variation id for the given // key. Maintains a list of ids for the given key, and invokes a callback every // time a new id is found. Does not invoke the callback for ids for trials that // were finalized prior to the construction of a VariationsIdCollection // instance. Is not thread safe. class VariationsIdCollection : public base::FieldTrialList::Observer { public: // Will not invoke |new_id_callback| for ids that correspond to trials that // were finalized before construction of this object. Callers may want to // call |GetIds()| manually after construction to batch the initial ids. VariationsIdCollection( IDCollectionKey collection_key, base::RepeatingCallback new_id_callback); ~VariationsIdCollection() override; // base::FieldTrialList::Observer implementation. void OnFieldTrialGroupFinalized(const std::string& trial_name, const std::string& group_name) override; // Returns a set of all variations ids for trials finalized that are part of // |collection_key_|. const std::set& GetIds(); private: const IDCollectionKey collection_key_; // Will not be set until the end of initialization. base::RepeatingCallback new_id_callback_; std::set id_set_; DISALLOW_COPY_AND_ASSIGN(VariationsIdCollection); }; } // namespace variations #endif // COMPONENTS_VARIATIONS_VARIATIONS_ID_COLLECTION_H_