blob: 4f1146e97cfccf00227968e33b94277ec119a8bc [file] [log] [blame]
// Copyright 2014 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.
syntax = "proto2";
option optimize_for = LITE_RUNTIME;
option java_outer_classname = "OmniboxEventProtos";
option java_package = "org.chromium.components.metrics";
package metrics;
import "omnibox_input_type.proto";
// Stores information about an omnibox interaction.
// Next tag: 21
message OmniboxEventProto {
// The timestamp for the event, in seconds.
// This value comes from Chromium's TimeTicks::Now(), which is an abstract
// time value that is guaranteed to always be non-decreasing (regardless of
// Daylight Saving Time or any other changes to the system clock).
// These numbers are only comparable within a session. To sequence events
// across sessions, order by the |session_id| from the
// ChromeUserMetricsExtension message.
optional int64 time_sec = 1;
// The id of the originating tab for this omnibox interaction.
// This is the current tab *unless* the user opened the target in a new tab.
// In those cases, this is unset. Tab ids are unique for a given session_id
// (in the containing protocol buffer ChromeUserMetricsExtensionProto).
optional int32 tab_id = 2;
// The number of characters the user had typed before autocompleting.
optional int32 typed_length = 3;
// Whether the user deleted text immediately before selecting an omnibox
// suggestion. This is usually the result of pressing backspace or delete.
optional bool just_deleted_text = 11;
// The number of terms that the user typed in the omnibox.
optional int32 num_typed_terms = 4;
// The index of the item that the user selected in the omnibox popup list.
// This corresponds the index of the |suggestion| below.
optional int32 selected_index = 5;
// Whether the user selected the option to switch tabs (or ignored it
// and navigated). If true, one or more |Suggestions| will have
// |has_tab_match| set as well, which must include the |selected_index|.
optional bool selected_tab_match = 17;
// DEPRECATED. Whether or not the top match was hidden in the omnibox
// suggestions dropdown.
optional bool DEPRECATED_is_top_result_hidden_in_dropdown = 14
[deprecated = true];
// Whether the omnibox popup is open. It can be closed if, for instance,
// the user clicks in the omnibox and hits return to reload the same page.
// If the popup is closed, the suggestion list will contain only one item
// and selected_index will be 0 (pointing to that single item). Because
// paste-and-search/paste-and-go actions ignore the current content of the
// omnibox dropdown (if it is open) when they happen, we pretend the
// dropdown is closed when logging these.
optional bool is_popup_open = 15;
// True if this is a paste-and-search or paste-and-go action. (The codebase
// refers to both these types as paste-and-go.)
optional bool is_paste_and_go = 16;
// The length of the inline autocomplete text in the omnibox.
// The sum |typed_length| + |completed_length| gives the full length of the
// user-visible text in the omnibox.
// This field is only set for suggestions that are allowed to be the default
// match and omitted otherwise. The first suggestion is always allowed to
// be the default match. (This is an enforced constraint.) Hence, if
// |selected_index| == 0, then this field will always be set.
optional int32 completed_length = 6;
// The amount of time, in milliseconds, since the user first began modifying
// the text in the omnibox. If at some point after modifying the text, the
// user reverts the modifications (thus seeing the current web page's URL
// again), then writes in the omnibox again, this elapsed time should start
// from the time of the second series of modification.
optional int64 typing_duration_ms = 7;
// The amount of time, in milliseconds, since the last time the default
// (inline) match changed. This may be longer than the time since the
// last keystroke. (The last keystroke may not have changed the default
// match.) It may also be shorter than the time since the last keystroke
// because the default match might have come from an asynchronous
// provider. Regardless, it should always be less than or equal to
// the field |typing_duration_ms|.
optional int64 duration_since_last_default_match_update_ms = 13;
// The type of page currently displayed when the user used the omnibox.
enum PageClassification {
// An invalid URL; shouldn't happen.
// chrome://newtab/. This can be either the built-in version or a
// replacement new tab page from an extension. Note that when Instant
// Extended is enabled, the new tab page will be reported as either
// unless an extension is replacing the new tab page, in which case
// it will still be reported as NTP.
NTP = 1;
// about:blank.
BLANK = 2;
// The user's home page. Note that if the home page is set to any
// of the new tab page versions or to about:blank, then we'll
// classify the page into those categories, not HOME_PAGE.
// The catch-all entry of everything not included somewhere else
// on this list.
OTHER = 4;
// The instant new tab page enum value was deprecated on August 2, 2013.
// The search term replacement enum value was deprecated in August 2016.
// The new tab page in which this omnibox interaction first started
// with the user having focus in the omnibox.
// The new tab page in which this omnibox interaction first started
// with the user having focus in the fakebox.
// The user is on a search result page that's not doing search term
// replacement, meaning the URL of the page should've appeared in the
// omnibox before the user started editing it, not the search terms.
// The user is on the home screen.
APP_HOME = 10;
// The user is in the search app.
// The user is in the maps app.
APP_MAPS = 12;
// This omnibox interaction started with the user tapping the search button.
// This interaction started with the user focusing or typing in the search
// box of the ChromeOS app list (a.k.a., launcher).
// When adding new classifications, please consider adding them in
// chromium's chrome/browser/resources/omnibox/omnibox.html
// so that these new options are displayed on about:omnibox.
optional PageClassification current_page_classification = 10;
enum ModeType {
// Unknown type (should not be reported).
// This user is in web mode when looking for suggestions.
// This user is in image mode when looking for suggestions.
optional ModeType mode_type = 18;
optional OmniboxInputType input_type = 8;
// An enum used in multiple places below.
enum ProviderType {
UNKNOWN_PROVIDER = 0; // Unknown provider (should not reach here)
HISTORY_URL = 1; // URLs in history, or user-typed URLs
HISTORY_CONTENTS = 2; // Matches for page contents of pages in history
HISTORY_QUICK = 3; // Matches for recently or frequently visited pages
// in history
SEARCH = 4; // Search suggestions for the default search engine
KEYWORD = 5; // Keyword-triggered searches
BUILTIN = 6; // Built-in URLs, such as chrome://version
SHORTCUTS = 7; // Recently selected omnibox suggestions
EXTENSION_APPS = 8; // DEPRECATED. Suggestions from extensions or apps
CONTACT = 9; // DEPRECATED. The user's contacts
BOOKMARK = 10; // The user's bookmarks
ZERO_SUGGEST = 11; // Suggestions based on the current page
// This enum value is currently only used by Android GSA. It represents
// a suggestion from the phone powered by go/icing.
// This enum value is currently only used by Android GSA. It represents
// a suggestion powered by a Chrome content provider.
CLIPBOARD_URL = 14; // Suggestion coming from clipboard (iOS only).
PHYSICAL_WEB = 15; // Suggestions triggered by URLs broadcast by nearby
// devices (iOS and Android).
DOCUMENT = 16; // Suggestions for documents in a cloud corpus.
// The result set displayed on the completion popup
// Next tag: 10
message Suggestion {
// Where does this result come from?
optional ProviderType provider = 1;
// What kind of result this is.
// This corresponds to the AutocompleteMatch::Type enumeration in
// components/omnibox/autocomplete_match.h
// (except for Android GSA result types).
enum ResultType {
UNKNOWN_RESULT_TYPE = 0; // Unknown type (should not reach here)
URL_WHAT_YOU_TYPED = 1; // The input as a URL
HISTORY_URL = 2; // A past page whose URL contains the input
HISTORY_TITLE = 3; // A past page whose title contains the input
HISTORY_BODY = 4; // DEPRECATED. A past page whose body
// contains the input
HISTORY_KEYWORD = 5; // A past page whose keyword contains the
// input
NAVSUGGEST = 6; // A suggested URL
// result_subtype_identifier is currently used
// for contextual zero-suggest suggestions
// provided by the experimental service (note
// that not all NAVSUUGGEST suggestions come
// from the experimental service).
// For subtype definitions, please contact
SEARCH_WHAT_YOU_TYPED = 7; // The input as a search query (with the
// default engine)
SEARCH_HISTORY = 8; // A past search (with the default engine)
// containing the input
SEARCH_SUGGEST = 9; // A suggested search (with the default
// engine) for a query.
SEARCH_OTHER_ENGINE = 10; // A search with a non-default engine
EXTENSION_APP = 11; // DEPRECATED. An Extension App with a
// title/url that contains the input.
CONTACT = 12; // One of the user's contacts
BOOKMARK_TITLE = 13; // A bookmark with a title/url that contains
// the input.
SEARCH_SUGGEST_ENTITY = 14; // A suggested search for an entity.
SEARCH_SUGGEST_TAIL = 15; // A suggested search to complete the tail of
// the query.
SEARCH_SUGGEST_PERSONALIZED = 16; // A personalized suggested search.
SEARCH_SUGGEST_PROFILE = 17; // A personalized suggested search for a
// Google+ profile.
APP_RESULT = 18; // Result from an installed app
// (eg: a gmail email).
// Used by Android GSA for on-device
// suggestion logging.
APP = 19; // An app result (eg: the gmail app).
// Used by Android GSA for on-device
// suggestion logging.
LEGACY_ON_DEVICE = 20; // An on-device result from a legacy
// provider. That is, this result is not
// from the on-device suggestion provider
// (go/icing). This field is
// used by Android GSA for on-device
// suggestion logging.
NAVSUGGEST_PERSONALIZED = 21; // A personalized url.
SEARCH_SUGGEST_ANSWER = 22; // DEPRECATED. Answers no longer have their
// own type but instead can be attached to
// suggestions of any type.
CALCULATOR = 23; // A calculator answer.
CLIPBOARD = 24; // An URL based on the clipboard.
PHYSICAL_WEB = 25; // A Physical Web nearby URL.
PHYSICAL_WEB_OVERFLOW = 26; // An item representing multiple Physical
// Web nearby URLs.
DOCUMENT = 27; // An item representing a cloud document
// suggestion.
optional ResultType result_type = 2;
// The relevance score for this suggestion.
optional int32 relevance = 3;
// How many times this result was typed in / selected from the omnibox.
// Only set for some providers and result_types. At the time of
// writing this comment, it is only set for HistoryURL and
// HistoryQuickProvider matches.
optional int32 typed_count = 5;
// Whether this item is starred (bookmarked) or not.
optional bool is_starred = 4 [deprecated = true];
// Whether this item is disabled in the UI (not clickable).
optional bool is_disabled = 6;
// Used to identify the specific source / type for suggestions by the
// suggest server. The meaning of individual values is determined by the
// provider of each suggestion type and is different for every suggestion
// type. See enum ResultType above for more details.
optional int32 result_subtype_identifier = 7;
// Whether the suggestion presented in the match, regardless of type,
// matched an open tab.
optional bool has_tab_match = 8;
// Whether this suggestion came associated with a keyword. Does not include
// suggestions that came from the default search engine unless the search
// engine was explicitly invoked. As two common examples,
// |is_keyword_suggestion| will be true for suggestions from explicitly-
// invoked suggestions (whether from a search engine or an extension). It
// will also be true for suggestions from a keyword that wasn't explicitly
// requested. For example, if a user has Google as their default search
// engine, the input "bing testing" will often show a suggestion to "Search
// Bing for testing" in the dropdown. This suggestion will be marked as
// |is_keyword_suggestion|.
optional bool is_keyword_suggestion = 9;
repeated Suggestion suggestion = 9;
// A data structure that holds per-provider information, general information
// not associated with a particular result.
// Next tag: 6
message ProviderInfo {
// Which provider generated this ProviderInfo entry.
optional ProviderType provider = 1;
// The provider's done() value, i.e., whether it's completed processing
// the query. Providers which don't do any asynchronous processing
// will always be done.
optional bool provider_done = 2;
// The set of field trials that have triggered in the most recent query,
// possibly affecting the shown suggestions. Each element is a hash
// of the corresponding field trial name.
// See chrome/browser/autocomplete/ for a specific usage
// example.
repeated fixed32 field_trial_triggered = 3;
// Same as above except that the set of field trials is a union of all field
// trials that have triggered within the current omnibox session including
// the most recent query.
// See AutocompleteController::ResetSession() for more details on the
// definition of a session.
// See chrome/browser/autocomplete/ for a specific usage
// example.
repeated fixed32 field_trial_triggered_in_session = 4;
// The number of times this provider returned a non-zero number of
// suggestions during this omnibox session.
// Note that each provider may define a session differently for its
// purposes.
optional int32 times_returned_results_in_session = 5;
// A list of diagnostic information about each provider. Providers
// will appear at most once in this list.
repeated ProviderInfo provider_info = 12;
// Whether the Omnibox was in keyword mode, however it was entered.
optional bool in_keyword_mode = 19;
// How the Omnibox got into keyword mode. Not present if not in keyword
// mode.
enum KeywordModeEntryMethod {
TAB = 1; // Select a suggestion that provides a keyword hint
// and press Tab.
SPACE_AT_END = 2; // Type a complete keyword and press Space.
SPACE_IN_MIDDLE = 3; // Press Space in the middle of an input in order to
// separate it into a keyword and other text.
QUESTION_MARK = 5; // Press Question-mark without any other input.
CLICK_HINT_VIEW = 6; // Select a suggestion that provides a keyword hint
// and click the reminder that one can press Tab.
TAP_HINT_VIEW = 7; // Select a suggestion that provides a keyword hint
// and touch the reminder that one can press Tab.
SELECT_SUGGESTION = 8; // Select a keyword suggestion, such as by arrowing
// or tabbing to it.
optional KeywordModeEntryMethod keyword_mode_entry_method = 20;