1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_WEBUI_METRICS_INTERNALS_FIELD_TRIALS_HANDLER_H_
#define CHROME_BROWSER_UI_WEBUI_METRICS_INTERNALS_FIELD_TRIALS_HANDLER_H_
#include <string_view>
#include <vector>
#include "base/containers/flat_map.h"
#include "base/memory/raw_ptr.h"
#include "base/values.h"
#include "content/public/browser/web_ui_message_handler.h"
namespace variations {
struct StudyGroupNames;
}
class Profile;
// UI Handler for the Field Trials tab of chrome://metrics-internals.
class FieldTrialsHandler : public content::WebUIMessageHandler {
public:
explicit FieldTrialsHandler(Profile* profile);
~FieldTrialsHandler() override;
// content::WebUIMessageHandler:
void RegisterMessages() override;
private:
struct ExperimentOverride {
std::string trial_hash;
std::string group_hash;
};
// Returns the state of all field trials. Returns a `FieldTrialState` from
// components/metrics/debug/browser_proxy.ts.
base::Value::Dict GetFieldTrialStateValue();
// Handlers for js calls.
// fetchTrialState() grabs the state of studies and calls populateState() with
// the result.
void HandleFetchState(const base::Value::List& args);
// setTrialEnrollState(callback, trial, group, enabled) overrides the enroll
// state of a field trial which will be realized after a restart.
void HandleSetEnrollState(const base::Value::List& args);
// restart() triggers a restart of Chrome.
void HandleRestart(const base::Value::List& args);
// lookupTrialOrGroupName(name) is called when the user types in a a study or
// experiment name. If the name matches a known study or experiment, this
// provides the page a mapping from hash to name for presentation.
void HandleLookupTrialOrGroupName(const base::Value::List& args);
// One-time initialization for this class.
void InitializeFieldTrials();
// Turns on or off an experiment override, which will be realized after a
// restart.
bool SetOverride(const ExperimentOverride& override, bool enabled);
raw_ptr<Profile> profile_;
bool show_names_ = false;
bool restart_required_ = false;
bool initialized_field_trials_ = false;
std::vector<variations::StudyGroupNames> studies_;
base::flat_map<std::string, std::string> overrides_;
};
#endif // CHROME_BROWSER_UI_WEBUI_METRICS_INTERNALS_FIELD_TRIALS_HANDLER_H_
|