File: omnibox_log.h

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (165 lines) | stat: -rw-r--r-- 7,116 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
// Copyright 2013 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_LOG_H_
#define COMPONENTS_OMNIBOX_BROWSER_OMNIBOX_LOG_H_

#include <stddef.h>

#include <string>

#include "base/memory/raw_ref.h"
#include "base/time/time.h"
#include "components/omnibox/browser/autocomplete_match.h"
#include "components/omnibox/browser/autocomplete_provider.h"
#include "components/omnibox/browser/omnibox_popup_selection.h"
#include "components/omnibox/browser/omnibox_triggered_feature_service.h"
#include "components/sessions/core/session_id.h"
#include "services/metrics/public/cpp/ukm_source_id.h"
#include "third_party/metrics_proto/omnibox_event.pb.h"
#include "third_party/metrics_proto/omnibox_input_type.pb.h"
#include "ui/base/window_open_disposition.h"
#include "url/gurl.h"

class AutocompleteResult;

// The data to log (via the metrics service) when the user selects an item from
// the omnibox popup.
struct OmniboxLog {
  OmniboxLog(const std::u16string& text,
             bool just_deleted_text,
             metrics::OmniboxInputType input_type,
             bool in_keyword_mode,
             metrics::OmniboxEventProto::KeywordModeEntryMethod entry_method,
             bool is_popup_open,
             OmniboxPopupSelection selection,
             WindowOpenDisposition disposition,
             bool is_paste_and_go,
             SessionID tab_id,
             metrics::OmniboxEventProto::PageClassification
                 current_page_classification,
             base::TimeDelta elapsed_time_since_user_first_modified_omnibox,
             size_t completed_length,
             base::TimeDelta elapsed_time_since_last_change_to_default_match,
             const AutocompleteResult& result,
             const GURL& destination_url,
             bool is_incognito,
             bool is_zero_suggest,
             std::optional<SessionData> session);
  ~OmniboxLog();

  // The user's input text in the omnibox.
  std::u16string text;

  // Whether the user deleted text immediately before selecting an omnibox
  // suggestion.  This is usually the result of pressing backspace or delete.
  bool just_deleted_text;

  // The detected type of the user's input.
  metrics::OmniboxInputType input_type;

  // Whether the Omnibox was in keyword mode when the user selected a
  // suggestion.
  bool in_keyword_mode;

  // Preserves the method that the user used to enter keyword mode. If
  // |in_keyword_mode| is false, this should be INVALID.
  metrics::OmniboxEventProto::KeywordModeEntryMethod keyword_mode_entry_method;

  // True if the popup is open.
  bool is_popup_open;

  // Contains the selection used to open a match or take an action. This
  // includes the index of the item selected in the dropdown list (or 0 if the
  // dropdown is closed and therefore there is only one implicit suggestion).
  OmniboxPopupSelection selection;

  // The disposition used to open the match. Currently, only SWITCH_TO_TAB
  // is relevant to the log; all other dispositions are treated identically.
  WindowOpenDisposition disposition;

  // True if this is a paste-and-search or paste-and-go omnibox interaction.
  // (The codebase refers to both these types as paste-and-go.)
  bool is_paste_and_go;

  // ID of the tab the selected autocomplete suggestion was opened in. Set to
  // SessionID::InvalidValue() if we haven't yet determined the destination tab.
  SessionID tab_id;

  // The type of page (e.g., new tab page, regular web page) that the
  // user was viewing before going somewhere with the omnibox.
  metrics::OmniboxEventProto::PageClassification current_page_classification;

  // The amount of time since the user focused the omnibox. Recorded regardless
  // of whether the omnibox popup is open. If a match is opened without
  // triggering a focus event, e.g., when a user drags a URL to the omnibox to
  // navigate, this elapsed time is set to -1 milliseconds.
  base::TimeDelta elapsed_time_since_user_focused_omnibox;

  // The amount of time 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 time
  // delta should be computed starting from the second series of
  // modifications.  If we somehow skipped the logic to record
  // the time the user began typing (this should only happen in
  // unit tests), this elapsed time is set to -1 milliseconds.
  base::TimeDelta elapsed_time_since_user_first_modified_omnibox;

  // The number of extra characters the user would have to manually type
  // if they were not given the opportunity to select this match.  Only
  // set for matches that are allowed to be the default match (i.e., are
  // inlineable).  Set to std::u16string::npos if the match is not allowed
  // to be the default match.
  size_t completed_length;

  // The amount of time since the last time the default (i.e., inline)
  // match changed.  This will certainly be less than
  // elapsed_time_since_user_first_modified_omnibox.  Measuring this
  // may be inappropriate in some cases (e.g., if editing is not in
  // progress).  In such cases, it's set to -1 milliseconds.
  base::TimeDelta elapsed_time_since_last_change_to_default_match;

  // Result set.
  const raw_ref<const AutocompleteResult> result;

  // Diagnostic information from providers.  See
  // AutocompleteController::AddProviderAndTriggeringLogs() and
  // AutocompleteProvider::AddProviderInfo().
  ProvidersInfo providers_info;

  // The features that have been triggered (see
  // OmniboxTriggeredFeatureService::Feature).
  OmniboxTriggeredFeatureService::Features features_triggered;
  OmniboxTriggeredFeatureService::Features features_triggered_in_session;

  // Whether the omnibox input is a search query that is started
  // by clicking on a image tile. Currently only used on Android.
  bool is_query_started_from_tile = false;

  // The final computed URL for the navigation. This does not always match the
  // destination URL within |result| as the match URLs are computed to add
  // additional data from the client.
  GURL final_destination_url;

  // Whether the item selection happened on an off-the-record/incognito profile.
  // This is used to disable logging of scoring signals in incognito mode.
  bool is_incognito;

  // Whether the omnibox input is zero suggest at the time of item selection.
  bool is_zero_suggest = false;

  // Session-based metrics struct that tracks various bits of info during the
  // course of a single Omnibox session (e.g. number of ZPS shown, etc.).
  std::optional<SessionData> session;

  // The preferred steady state (unfocused) omnibox position. Only logged on
  // iOS phones.
  metrics::OmniboxEventProto::OmniboxPosition steady_state_omnibox_position;

  // The UKM source id for the last committed navigation in the top frame.
  ukm::SourceId ukm_source_id;
};

#endif  // COMPONENTS_OMNIBOX_BROWSER_OMNIBOX_LOG_H_