blob: 22f946513aea7570d7bd77878be6fc3705d4da5a [file] [log] [blame]
asvitkine239749722016-06-02 06:34:391// Copyright 2016 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
asvitkine92c1a932016-11-24 19:51:225#ifndef COMPONENTS_VARIATIONS_FIELD_TRIAL_SYNCER_H_
6#define COMPONENTS_VARIATIONS_FIELD_TRIAL_SYNCER_H_
asvitkine239749722016-06-02 06:34:397
8#include <string>
9
10#include "base/macros.h"
11#include "base/metrics/field_trial.h"
asvitkine239749722016-06-02 06:34:3912
13namespace base {
14class CommandLine;
15}
16
asvitkine92c1a932016-11-24 19:51:2217namespace variations {
asvitkine239749722016-06-02 06:34:3918
19// ChildProcessFieldTrialSyncer is a utility class that's responsible for
20// syncing the "activated" state of field trials between browser and child
21// processes. Specifically, when a field trial is activated in the browser, it
22// also activates it in the child process and when a field trial is activated
23// in the child process, it notifies the browser process to activate it.
asvitkine5dc812a2016-06-07 18:20:3024class ChildProcessFieldTrialSyncer {
asvitkine239749722016-06-02 06:34:3925 public:
26 // ChildProcessFieldTrialSyncer constructor taking an externally owned
asvitkine5dc812a2016-06-07 18:20:3027 // |observer| param that's responsible for sending IPCs to the browser process
28 // when a trial is activated. The |observer| must outlive this object.
29 explicit ChildProcessFieldTrialSyncer(
30 base::FieldTrialList::Observer* observer);
31 ~ChildProcessFieldTrialSyncer();
asvitkine239749722016-06-02 06:34:3932
33 // Initializes field trial state change observation and notifies the browser
Lukasz Anforowicz5a024122017-07-19 21:31:5734 // of any field trials that might have already been activated.
35 void InitFieldTrialObserving(const base::CommandLine& command_line);
asvitkine239749722016-06-02 06:34:3936
37 // Handler for messages from the browser process notifying the child process
38 // that a field trial was activated.
39 void OnSetFieldTrialGroup(const std::string& trial_name,
40 const std::string& group_name);
41
42 private:
asvitkine5dc812a2016-06-07 18:20:3043 base::FieldTrialList::Observer* const observer_;
asvitkine239749722016-06-02 06:34:3944
45 DISALLOW_COPY_AND_ASSIGN(ChildProcessFieldTrialSyncer);
46};
47
asvitkine92c1a932016-11-24 19:51:2248} // namespace variations
asvitkine239749722016-06-02 06:34:3949
asvitkine92c1a932016-11-24 19:51:2250#endif // COMPONENTS_VARIATIONS_FIELD_TRIAL_SYNCER_H_