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