1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/autocomplete/autocomplete_provider.h"
7 #include "base/logging.h"
8 #include "base/prefs/pref_service.h"
9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/browser/autocomplete/autocomplete_match.h"
11 #include "chrome/browser/autocomplete/autocomplete_provider_listener.h"
12 #include "chrome/browser/bookmarks/bookmark_model.h"
13 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
14 #include "chrome/browser/profiles/profile.h"
15 #include "chrome/common/pref_names.h"
16 #include "content/public/common/url_constants.h"
17 #include "net/base/net_util.h"
21 const size_t AutocompleteProvider::kMaxMatches = 3;
23 AutocompleteProvider::AutocompleteProvider(
24 AutocompleteProviderListener* listener,
34 const char* AutocompleteProvider::TypeToString(Type type) {
42 case TYPE_EXTENSION_APP:
43 return "ExtensionApp";
44 case TYPE_HISTORY_QUICK:
45 return "HistoryQuick";
46 case TYPE_HISTORY_URL:
54 case TYPE_ZERO_SUGGEST:
57 NOTREACHED() << "Unhandled AutocompleteProvider::Type " << type;
62 void AutocompleteProvider::Stop(bool clear_cached_results) {
66 const char* AutocompleteProvider::GetName() const {
67 return TypeToString(type_);
70 metrics::OmniboxEventProto_ProviderType AutocompleteProvider::
71 AsOmniboxEventProviderType() const {
74 return metrics::OmniboxEventProto::BOOKMARK;
76 return metrics::OmniboxEventProto::BUILTIN;
78 return metrics::OmniboxEventProto::CONTACT;
79 case TYPE_EXTENSION_APP:
80 return metrics::OmniboxEventProto::EXTENSION_APPS;
81 case TYPE_HISTORY_QUICK:
82 return metrics::OmniboxEventProto::HISTORY_QUICK;
83 case TYPE_HISTORY_URL:
84 return metrics::OmniboxEventProto::HISTORY_URL;
86 return metrics::OmniboxEventProto::KEYWORD;
88 return metrics::OmniboxEventProto::SEARCH;
90 return metrics::OmniboxEventProto::SHORTCUTS;
91 case TYPE_ZERO_SUGGEST:
92 return metrics::OmniboxEventProto::ZERO_SUGGEST;
94 NOTREACHED() << "Unhandled AutocompleteProvider::Type " << type_;
95 return metrics::OmniboxEventProto::UNKNOWN_PROVIDER;
99 void AutocompleteProvider::DeleteMatch(const AutocompleteMatch& match) {
100 DLOG(WARNING) << "The AutocompleteProvider '" << GetName()
101 << "' has not implemented DeleteMatch.";
104 void AutocompleteProvider::AddProviderInfo(ProvidersInfo* provider_info) const {
107 void AutocompleteProvider::ResetSession() {
110 string16 AutocompleteProvider::StringForURLDisplay(const GURL& url,
111 bool check_accept_lang,
112 bool trim_http) const {
113 std::string languages = (check_accept_lang && profile_) ?
114 profile_->GetPrefs()->GetString(prefs::kAcceptLanguages) : std::string();
115 return net::FormatUrl(url, languages,
116 net::kFormatUrlOmitAll & ~(trim_http ? 0 : net::kFormatUrlOmitHTTP),
117 net::UnescapeRule::SPACES, NULL, NULL, NULL);
120 AutocompleteProvider::~AutocompleteProvider() {
124 void AutocompleteProvider::UpdateStarredStateOfMatches() {
125 if (matches_.empty())
131 BookmarkModel* bookmark_model = BookmarkModelFactory::GetForProfile(profile_);
132 if (!bookmark_model || !bookmark_model->loaded())
135 for (ACMatches::iterator i(matches_.begin()); i != matches_.end(); ++i)
136 i->starred = bookmark_model->IsBookmarked(i->destination_url);