blob: 2ca52ca037f63aaf4e37f889ef95df70d77272f1 [file] [log] [blame]
// 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_