1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file. 4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "athena/main/url_search_provider.h" 6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "athena/activity/public/activity.h" 8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "athena/activity/public/activity_factory.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "athena/content/public/scheme_classifier_factory.h" 10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/values.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/metrics/proto/omnibox_event.pb.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/metrics/proto/omnibox_input_type.pb.h" 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/omnibox/autocomplete_input.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/omnibox/autocomplete_provider_client.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/omnibox/search_provider.h" 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/search_terms_data.h" 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_service.h" 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_service_client.h" 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/browser/browser_context.h" 21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "ui/app_list/search_result.h" 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/base/resource/resource_bundle.h" 23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "url/gurl.h" 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace athena { 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace { 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// This constant was copied from HistoryURLProvider. 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// TODO(hashimoto): Componentize HistoryURLProvider and delete this. 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst int kScoreForWhatYouTypedResult = 1203; 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// The SearchTermsData implementation for Athena. 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class AthenaSearchTermsData : public SearchTermsData { 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public: 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // SearchTermsData: 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual std::string GetSuggestClient() const OVERRIDE { 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return "chrome"; 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// The templateURLServiceClient for Athena. Mainly for the interaction with 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// history module (see chrome/browser/search_engines for Chrome implementation). 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// TODO(mukai): Implement the contents of this class when it's necessary. 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass AthenaTemplateURLServiceClient : public TemplateURLServiceClient { 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AthenaTemplateURLServiceClient() {} 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual ~AthenaTemplateURLServiceClient() {} 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private: 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // TemplateURLServiceClient: 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SetOwner(TemplateURLService* owner) OVERRIDE {} 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void DeleteAllSearchTermsForKeyword(TemplateURLID id) OVERRIDE {} 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SetKeywordSearchTermsForURL( 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& url, 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TemplateURLID id, 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::string16& term) OVERRIDE {} 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void AddKeywordGeneratedVisit(const GURL& url) OVERRIDE {} 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void RestoreExtensionInfoIfNecessary( 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TemplateURL* template_url) OVERRIDE {} 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISALLOW_COPY_AND_ASSIGN(AthenaTemplateURLServiceClient); 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// The AutocompleteProviderClient for Athena. 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass AthenaAutocompleteProviderClient : public AutocompleteProviderClient { 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci explicit AthenaAutocompleteProviderClient( 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::BrowserContext* browser_context) 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : browser_context_(browser_context), 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scheme_classifier_(CreateSchemeClassifier(browser_context)) {} 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~AthenaAutocompleteProviderClient() {} 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual net::URLRequestContextGetter* RequestContext() OVERRIDE { 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return browser_context_->GetRequestContext(); 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual bool IsOffTheRecord() OVERRIDE { 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return browser_context_->IsOffTheRecord(); 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual std::string AcceptLanguages() OVERRIDE { 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(hashimoto): Return the value stored in the prefs. 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return "en-US"; 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual bool SearchSuggestEnabled() OVERRIDE { return true; } 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual bool ShowBookmarkBar() OVERRIDE { return false; } 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual const AutocompleteSchemeClassifier& SchemeClassifier() OVERRIDE { 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return *scheme_classifier_; 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void Classify( 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::string16& text, 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool prefer_keyword, 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool allow_exact_keyword_match, 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci metrics::OmniboxEventProto::PageClassification page_classification, 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AutocompleteMatch* match, 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL* alternate_nav_url) OVERRIDE {} 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual history::URLDatabase* InMemoryDatabase() OVERRIDE { return NULL; } 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void DeleteMatchingURLsForKeywordFromHistory( 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci history::KeywordID keyword_id, 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::string16& term) OVERRIDE {} 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual bool TabSyncEnabledAndUnencrypted() OVERRIDE { return false; } 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void PrefetchImage(const GURL& url) OVERRIDE {} 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::BrowserContext* browser_context_; 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<AutocompleteSchemeClassifier> scheme_classifier_; 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(AthenaAutocompleteProviderClient); 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint ACMatchStyleToTagStyle(int styles) { 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int tag_styles = 0; 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (styles & ACMatchClassification::URL) 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci tag_styles |= app_list::SearchResult::Tag::URL; 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (styles & ACMatchClassification::MATCH) 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci tag_styles |= app_list::SearchResult::Tag::MATCH; 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (styles & ACMatchClassification::DIM) 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci tag_styles |= app_list::SearchResult::Tag::DIM; 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return tag_styles; 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Translates ACMatchClassifications into SearchResult tags. 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ACMatchClassificationsToTags( 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::string16& text, 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ACMatchClassifications& text_classes, 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci app_list::SearchResult::Tags* tags) { 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int tag_styles = app_list::SearchResult::Tag::NONE; 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size_t tag_start = 0; 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t i = 0; i < text_classes.size(); ++i) { 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ACMatchClassification& text_class = text_classes[i]; 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Closes current tag. 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (tag_styles != app_list::SearchResult::Tag::NONE) { 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci tags->push_back(app_list::SearchResult::Tag( 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci tag_styles, tag_start, text_class.offset)); 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci tag_styles = app_list::SearchResult::Tag::NONE; 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (text_class.style == ACMatchClassification::NONE) 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci continue; 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci tag_start = text_class.offset; 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci tag_styles = ACMatchStyleToTagStyle(text_class.style); 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (tag_styles != app_list::SearchResult::Tag::NONE) { 1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci tags->push_back(app_list::SearchResult::Tag( 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci tag_styles, tag_start, text.length())); 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 153f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class UrlSearchResult : public app_list::SearchResult { 154f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 155f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) UrlSearchResult(content::BrowserContext* browser_context, 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const AutocompleteMatch& match) 157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : browser_context_(browser_context), 1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci match_(match) { 1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci set_id(match_.destination_url.spec()); 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Derive relevance from omnibox relevance and normalize it to [0, 1]. 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The magic number 1500 is the highest score of an omnibox result. 1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // See comments in autocomplete_provider.h. 1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci set_relevance(match_.relevance / 1500.0); 1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UpdateIcon(); 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UpdateTitleAndDetails(); 168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 169f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~UrlSearchResult() {} 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 172f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private: 173f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Overriddenn from app_list::SearchResult: 174f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void Open(int event_flags) OVERRIDE { 1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Activity* activity = ActivityFactory::Get()->CreateWebActivity( 1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci browser_context_, base::string16(), match_.destination_url); 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Activity::Show(activity); 1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void UpdateIcon() { 1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetIcon(*ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( 1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AutocompleteMatch::TypeToIcon(match_.type))); 1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void UpdateTitleAndDetails() { 1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci set_title(match_.contents); 1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SearchResult::Tags title_tags; 1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ACMatchClassificationsToTags(match_.contents, 1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci match_.contents_class, 1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &title_tags); 1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci set_title_tags(title_tags); 1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci set_details(match_.description); 1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SearchResult::Tags details_tags; 1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ACMatchClassificationsToTags(match_.description, 1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci match_.description_class, 1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &details_tags); 1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci set_details_tags(details_tags); 199f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 200f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 201f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::BrowserContext* browser_context_; 2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AutocompleteMatch match_; 203f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 204f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(UrlSearchResult); 205f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 206f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 207f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace 208f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 209f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)UrlSearchProvider::UrlSearchProvider(content::BrowserContext* browser_context) 210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : browser_context_(browser_context), 211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // TODO(mukai): introduce the real parameters when it's necessary. 212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch template_url_service_( 213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new TemplateURLService(NULL /* prefs */, 2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<SearchTermsData>( 2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new AthenaSearchTermsData()), 216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NULL /* KeywordWebDataService */, 217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<TemplateURLServiceClient>( 218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new AthenaTemplateURLServiceClient()), 219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NULL /*GoogleURLTracker */, 220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NULL /* RapporService */, 2215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Closure() /* dsp_change_callback */)), 2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci provider_(new ::SearchProvider( 2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci this, 2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci template_url_service_.get(), 2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<AutocompleteProviderClient>( 2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new AthenaAutocompleteProviderClient(browser_context_)))) { 227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch template_url_service_->Load(); 228f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 229f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 230f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)UrlSearchProvider::~UrlSearchProvider() { 231f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 232f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 233f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void UrlSearchProvider::Start(const base::string16& query) { 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const bool minimal_changes = query == input_.text(); 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<AutocompleteSchemeClassifier> scheme_classifier( 2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateSchemeClassifier(browser_context_)); 2375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) input_ = AutocompleteInput(query, 2385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::string16::npos /* cursor_position */, 2395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::string16() /* desired_tld */, 2405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GURL() /* current_url */, 2415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) metrics::OmniboxEventProto::INVALID_SPEC, 2425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) false /* prevent_inline_autocomplete */, 2435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) false /* prefer_keyword */, 2445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) true /* allow_extract_keyword_match */, 2455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) true /* want_asynchronous_matches */, 2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *scheme_classifier); 247f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Clearing results here may cause unexpected results. 2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(mukai): fix this by fixing crbug.com/415500 2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!minimal_changes) 2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ClearResults(); 2525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (input_.type() == metrics::OmniboxInputType::URL) { 2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(hashimoto): Componentize HistoryURLProvider and remove this code. 2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AutocompleteMatch what_you_typed_match( 2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NULL, 0, false, AutocompleteMatchType::URL_WHAT_YOU_TYPED); 2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci what_you_typed_match.destination_url = input_.canonicalized_url(); 2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci what_you_typed_match.contents = input_.text(); 2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci what_you_typed_match.relevance = kScoreForWhatYouTypedResult; 2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Add(scoped_ptr<app_list::SearchResult>(new UrlSearchResult( 2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci browser_context_, what_you_typed_match))); 2625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci provider_->Start(input_, minimal_changes); 2655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 2665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid UrlSearchProvider::Stop() { 2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci provider_->Stop(false); 2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid UrlSearchProvider::OnProviderUpdate(bool updated_matches) { 2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!updated_matches) 2735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return; 2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ACMatches& matches = provider_->matches(); 2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (ACMatches::const_iterator it = matches.begin(); it != matches.end(); 2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ++it) { 2781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!it->destination_url.is_valid()) 2791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci continue; 2801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Add(scoped_ptr<app_list::SearchResult>(new UrlSearchResult( 2821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci browser_context_, *it))); 2835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 284f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 285f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 286f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace athena 287