// 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;

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;

  // Whether or not the top match was hidden in the omnibox suggestions
  // dropdown.
  optional bool is_top_result_hidden_in_dropdown = 14;

  // 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;

    // 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;    // Custom suggestions from extensions and/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;
  }

  // The result set displayed on the completion popup
  // Next tag: 6
  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
    // chrome/browser/autocomplete/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;           // 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;         // 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_INFINITE = 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; // A short result for a suggested search.
    }
    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;
  }
  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;
}
