// 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. // // Stores information about an omnibox interaction. 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"; // Next tag: 17 message OmniboxEventProto { // The timestamp for the event, in seconds since the epoch. optional int64 time = 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; // 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. INVALID_SPEC = 0; // 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 // INSTANT_NTP_WITH_OMNIBOX_AS_STARTING_FOCUS or // INSTANT_NTP_WITH_FAKEBOX_AS_STARTING_FOCUS below, // 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. HOME_PAGE = 3; // 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. OBSOLETE_INSTANT_NTP = 5; // The user is on a search result page that's doing search term // replacement, meaning the search terms should've appeared in the omnibox // before the user started editing it, not the URL of the page. SEARCH_RESULT_PAGE_DOING_SEARCH_TERM_REPLACEMENT = 6; // The new tab page in which this omnibox interaction first started // with the user having focus in the omnibox. INSTANT_NTP_WITH_OMNIBOX_AS_STARTING_FOCUS = 7; // The new tab page in which this omnibox interaction first started // with the user having focus in the fakebox. INSTANT_NTP_WITH_FAKEBOX_AS_STARTING_FOCUS = 8; // 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. SEARCH_RESULT_PAGE_NO_SEARCH_TERM_REPLACEMENT = 9; // The user is on the home screen. APP_HOME = 10; // The user is in the search app. APP_SEARCH = 11; // The user is in the maps app. APP_MAPS = 12; // When adding new classifications, please consider adding them in // chrome/browser/resources/omnibox/omnibox.html // so that these new options are displayed on about:omnibox. } optional PageClassification current_page_classification = 10; optional OmniboxInputType.Type 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. ON_DEVICE = 12; // This enum value is currently only used by Android GSA. It represents // a suggestion powered by a Chrome content provider. ON_DEVICE_CHROME = 13; CLIPBOARD_URL = 14; // Suggestion coming from clipboard (iOS only). } // The result set displayed on the completion popup // Next tag: 7 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 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 whose title 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. } 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; } 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/search_provider.cc 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/search_provider.cc 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; }