blob: 143351858d5e3895c9b823814eb9641215f09a62 [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_OMNIBOX_BROWSER_OMNIBOX_TRIGGERED_FEATURE_SERVICE_H_
#define COMPONENTS_OMNIBOX_BROWSER_OMNIBOX_TRIGGERED_FEATURE_SERVICE_H_
#include <set>
#include "components/omnibox/browser/autocomplete_match.h"
#include "third_party/metrics_proto/omnibox_event.pb.h"
// Tracks the features that trigger during an omnibox session and records them
// to the logs. This is used for counterfactual slicing metrics by feature.
class OmniboxTriggeredFeatureService {
public:
using Feature = metrics::OmniboxEventProto_Feature;
using Features = std::set<Feature>;
OmniboxTriggeredFeatureService();
~OmniboxTriggeredFeatureService();
// Records `features_triggered_[in_session_]` to the params. Records UMA
// histograms for any non-omnibox-event-protobuf features (i.e.
// `rich_autocompletion_types_`).
void RecordToLogs(Features* features_triggered,
Features* features_triggered_in_session) const;
// Invoked to indicate `feature` was triggered.
void FeatureTriggered(Feature feature);
// Invoked to indicate `rich_autocompletion_type` was triggered. Multiple
// types can be triggered in a session. Does not automatically trigger
// `kRichAutocompletion`.
void RichAutocompletionTypeTriggered(
AutocompleteMatch::RichAutocompletionType rich_autocompletion_type);
// Returns whether `FeatureTriggered()` was called with `feature` since the
// last `ResetSession()`.
bool GetFeatureTriggeredInSession(Feature feature) const;
// Invoked when a new omnibox input starts. Clears `features_triggered_`.
void ResetInput();
// Invoked when a new omnibox session starts. Clears `features_triggered_`,
// `features_triggered_in_session_`, and
// `rich_autocompletion_types_in_session_`.
void ResetSession();
private:
// The set of features triggered in the current omnibox session via
// `FeatureTriggered()`.
std::set<Feature> features_triggered_;
std::set<Feature> features_triggered_in_session_;
// The set of rich autocompletion types triggered in the current omnibox
// session via `RichAutocompletionTypeTriggered()`.
std::set<AutocompleteMatch::RichAutocompletionType>
rich_autocompletion_types_in_session_;
};
#endif // COMPONENTS_OMNIBOX_BROWSER_OMNIBOX_TRIGGERED_FEATURE_SERVICE_H_