omnibox_metrics_provider.cc revision 46d4c2bc3267f3f028f39e7e311b0f89aba2e4fd
1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file.
4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/metrics/omnibox_metrics_provider.h"
6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <vector>
8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/logging.h"
10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/strings/string16.h"
11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/strings/string_util.h"
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_input.h"
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_match.h"
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_provider.h"
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_result.h"
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chrome_notification_types.h"
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/omnibox/omnibox_log.h"
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/ui/browser_otr_state.h"
1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/metrics/metrics_log.h"
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/browser/notification_service.h"
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)using metrics::OmniboxEventProto;
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace {
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)OmniboxEventProto::InputType AsOmniboxEventInputType(
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    AutocompleteInput::Type type) {
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  switch (type) {
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteInput::INVALID:
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::INVALID;
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteInput::UNKNOWN:
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::UNKNOWN;
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteInput::URL:
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::URL;
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteInput::QUERY:
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::QUERY;
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteInput::FORCED_QUERY:
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::FORCED_QUERY;
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  NOTREACHED();
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return OmniboxEventProto::INVALID;
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)OmniboxEventProto::Suggestion::ResultType AsOmniboxEventResultType(
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    AutocompleteMatch::Type type) {
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  switch (type) {
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteMatchType::URL_WHAT_YOU_TYPED:
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::Suggestion::URL_WHAT_YOU_TYPED;
49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteMatchType::HISTORY_URL:
50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::Suggestion::HISTORY_URL;
51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteMatchType::HISTORY_TITLE:
52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::Suggestion::HISTORY_TITLE;
53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteMatchType::HISTORY_BODY:
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::Suggestion::HISTORY_BODY;
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteMatchType::HISTORY_KEYWORD:
56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::Suggestion::HISTORY_KEYWORD;
57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteMatchType::NAVSUGGEST:
58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::Suggestion::NAVSUGGEST;
59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED:
60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::Suggestion::SEARCH_WHAT_YOU_TYPED;
61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteMatchType::SEARCH_HISTORY:
62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::Suggestion::SEARCH_HISTORY;
63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteMatchType::SEARCH_SUGGEST:
64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::Suggestion::SEARCH_SUGGEST;
65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteMatchType::SEARCH_SUGGEST_ENTITY:
66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::Suggestion::SEARCH_SUGGEST_ENTITY;
67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteMatchType::SEARCH_SUGGEST_INFINITE:
68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::Suggestion::SEARCH_SUGGEST_INFINITE;
69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteMatchType::SEARCH_SUGGEST_PERSONALIZED:
70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::Suggestion::SEARCH_SUGGEST_PERSONALIZED;
71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteMatchType::SEARCH_SUGGEST_PROFILE:
72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::Suggestion::SEARCH_SUGGEST_PROFILE;
73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteMatchType::SEARCH_OTHER_ENGINE:
74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::Suggestion::SEARCH_OTHER_ENGINE;
75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteMatchType::EXTENSION_APP:
76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::Suggestion::EXTENSION_APP;
77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteMatchType::BOOKMARK_TITLE:
78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::Suggestion::BOOKMARK_TITLE;
79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteMatchType::NAVSUGGEST_PERSONALIZED:
80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::Suggestion::NAVSUGGEST_PERSONALIZED;
81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteMatchType::CONTACT_DEPRECATED:
82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteMatchType::NUM_TYPES:
83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      break;
84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  NOTREACHED();
86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return OmniboxEventProto::Suggestion::UNKNOWN_RESULT_TYPE;
87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)OmniboxEventProto::PageClassification AsOmniboxEventPageClassification(
90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    AutocompleteInput::PageClassification page_classification) {
91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  switch (page_classification) {
92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteInput::INVALID_SPEC:
93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::INVALID_SPEC;
94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteInput::NTP:
95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::NTP;
96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteInput::BLANK:
97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::BLANK;
98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteInput::HOME_PAGE:
99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::HOME_PAGE;
100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteInput::OTHER:
101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::OTHER;
102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteInput::SEARCH_RESULT_PAGE_DOING_SEARCH_TERM_REPLACEMENT:
103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::
104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          SEARCH_RESULT_PAGE_DOING_SEARCH_TERM_REPLACEMENT;
105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteInput::INSTANT_NTP_WITH_OMNIBOX_AS_STARTING_FOCUS:
106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::INSTANT_NTP_WITH_OMNIBOX_AS_STARTING_FOCUS;
107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteInput::INSTANT_NTP_WITH_FAKEBOX_AS_STARTING_FOCUS:
108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::INSTANT_NTP_WITH_FAKEBOX_AS_STARTING_FOCUS;
109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case AutocompleteInput::SEARCH_RESULT_PAGE_NO_SEARCH_TERM_REPLACEMENT:
110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return OmniboxEventProto::
111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          SEARCH_RESULT_PAGE_NO_SEARCH_TERM_REPLACEMENT;
112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  NOTREACHED();
114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return OmniboxEventProto::INVALID_SPEC;
115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}  // namespace
118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)OmniboxMetricsProvider::OmniboxMetricsProvider() {
120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)OmniboxMetricsProvider::~OmniboxMetricsProvider() {
123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void OmniboxMetricsProvider::OnRecordingEnabled() {
126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  registrar_.Add(this, chrome::NOTIFICATION_OMNIBOX_OPENED_URL,
127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                 content::NotificationService::AllSources());
128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void OmniboxMetricsProvider::OnRecordingDisabled() {
131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  registrar_.RemoveAll();
132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
133cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
134cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void OmniboxMetricsProvider::ProvideGeneralMetrics(
135cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    metrics::ChromeUserMetricsExtension* uma_proto) {
136cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  uma_proto->mutable_omnibox_event()->Swap(
137cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      omnibox_events_cache.mutable_omnibox_event());
138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void OmniboxMetricsProvider::Observe(
141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    int type,
142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const content::NotificationSource& source,
143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const content::NotificationDetails& details) {
144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DCHECK_EQ(chrome::NOTIFICATION_OMNIBOX_OPENED_URL, type);
145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // We simply don't log events to UMA if there is a single incognito
147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // session visible. In the future, it may be worth revisiting this to
148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // still log events from non-incognito sessions.
149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (!chrome::IsOffTheRecordSessionActive())
150cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    RecordOmniboxOpenedURL(*content::Details<OmniboxLog>(details).ptr());
151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void OmniboxMetricsProvider::RecordOmniboxOpenedURL(const OmniboxLog& log) {
154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  std::vector<base::string16> terms;
155cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const int num_terms =
156cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      static_cast<int>(Tokenize(log.text, base::kWhitespaceUTF16, &terms));
157cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
158cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  OmniboxEventProto* omnibox_event = omnibox_events_cache.add_omnibox_event();
15946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  omnibox_event->set_time(MetricsLog::GetCurrentTime());
160cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (log.tab_id != -1) {
161cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // If we know what tab the autocomplete URL was opened in, log it.
162cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    omnibox_event->set_tab_id(log.tab_id);
163cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
164cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  omnibox_event->set_typed_length(log.text.length());
165cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  omnibox_event->set_just_deleted_text(log.just_deleted_text);
166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  omnibox_event->set_num_typed_terms(num_terms);
167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  omnibox_event->set_selected_index(log.selected_index);
168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (log.completed_length != base::string16::npos)
169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    omnibox_event->set_completed_length(log.completed_length);
170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const base::TimeDelta default_time_delta =
171cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      base::TimeDelta::FromMilliseconds(-1);
172cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (log.elapsed_time_since_user_first_modified_omnibox !=
173cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      default_time_delta) {
174cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // Only upload the typing duration if it is set/valid.
175cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    omnibox_event->set_typing_duration_ms(
176cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        log.elapsed_time_since_user_first_modified_omnibox.InMilliseconds());
177cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
178cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (log.elapsed_time_since_last_change_to_default_match !=
179cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      default_time_delta) {
180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    omnibox_event->set_duration_since_last_default_match_update_ms(
181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        log.elapsed_time_since_last_change_to_default_match.InMilliseconds());
182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
183cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  omnibox_event->set_current_page_classification(
184cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      AsOmniboxEventPageClassification(log.current_page_classification));
185cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  omnibox_event->set_input_type(AsOmniboxEventInputType(log.input_type));
186cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // We consider a paste-and-search/paste-and-go action to have a closed popup
187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // (as explained in omnibox_event.proto) even if it was not, because such
188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // actions ignore the contents of the popup so it doesn't matter that it was
189cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // open.
190cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const bool consider_popup_open = log.is_popup_open && !log.is_paste_and_go;
191cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  omnibox_event->set_is_popup_open(consider_popup_open);
192cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  omnibox_event->set_is_paste_and_go(log.is_paste_and_go);
193cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (consider_popup_open) {
194cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    omnibox_event->set_is_top_result_hidden_in_dropdown(
195cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        log.result.ShouldHideTopMatch());
196cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
197cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
198cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  for (AutocompleteResult::const_iterator i(log.result.begin());
199cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       i != log.result.end(); ++i) {
200cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    OmniboxEventProto::Suggestion* suggestion = omnibox_event->add_suggestion();
201cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    suggestion->set_provider(i->provider->AsOmniboxEventProviderType());
202cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    suggestion->set_result_type(AsOmniboxEventResultType(i->type));
203cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    suggestion->set_relevance(i->relevance);
204cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    if (i->typed_count != -1)
205cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      suggestion->set_typed_count(i->typed_count);
206cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    suggestion->set_is_starred(i->starred);
207cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
208cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  for (ProvidersInfo::const_iterator i(log.providers_info.begin());
209cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       i != log.providers_info.end(); ++i) {
210cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    OmniboxEventProto::ProviderInfo* provider_info =
211cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        omnibox_event->add_provider_info();
212cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    provider_info->CopyFrom(*i);
213cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
214cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
215