| Index: athena/main/url_search_provider.cc
|
| diff --git a/athena/main/url_search_provider.cc b/athena/main/url_search_provider.cc
|
| index ce386ea28682be29f6fea73d9e4f44397215cdae..cfa930ca167675e8fae5c7da2cb69cb6ac5f14c3 100644
|
| --- a/athena/main/url_search_provider.cc
|
| +++ b/athena/main/url_search_provider.cc
|
| @@ -7,6 +7,15 @@
|
| #include "athena/activity/public/activity_factory.h"
|
| #include "athena/activity/public/activity_manager.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| +#include "components/autocomplete/autocomplete_input.h"
|
| +#include "components/autocomplete/autocomplete_scheme_classifier.h"
|
| +#include "components/metrics/proto/omnibox_event.pb.h"
|
| +#include "components/metrics/proto/omnibox_input_type.pb.h"
|
| +#include "components/search_engines/search_terms_data.h"
|
| +#include "components/search_engines/template_url.h"
|
| +#include "components/search_engines/template_url_service.h"
|
| +#include "components/search_engines/template_url_service_client.h"
|
| +#include "net/url_request/url_request.h"
|
| #include "ui/app_list/search_result.h"
|
| #include "url/gurl.h"
|
|
|
| @@ -14,15 +23,67 @@ namespace athena {
|
|
|
| namespace {
|
|
|
| +// The AutocompleteSchemeClassifier implementation for Athena.
|
| +// TODO(mukai): Introduce supports of normal schemes like about: or blob:
|
| +class AthenaSchemeClassifier : public AutocompleteSchemeClassifier {
|
| + public:
|
| + AthenaSchemeClassifier() {}
|
| +
|
| + // AutocompleteSchemeClassifier:
|
| + virtual metrics::OmniboxInputType::Type GetInputTypeForScheme(
|
| + const std::string& scheme) const OVERRIDE {
|
| + if (net::URLRequest::IsHandledProtocol(scheme))
|
| + return metrics::OmniboxInputType::URL;
|
| + return metrics::OmniboxInputType::INVALID;
|
| + }
|
| +};
|
| +
|
| +// The templateURLServiceClient for Athena. Mainly for the interaction with
|
| +// history module (see chrome/browser/search_engines for Chrome implementation).
|
| +// TODO(mukai): Implement the contents of this class when it's necessary.
|
| +class AthenaTemplateURLServiceClient : public TemplateURLServiceClient {
|
| + public:
|
| + AthenaTemplateURLServiceClient() {}
|
| + virtual ~AthenaTemplateURLServiceClient() {}
|
| +
|
| + private:
|
| + // TemplateURLServiceClient:
|
| + virtual void SetOwner(TemplateURLService* owner) OVERRIDE {}
|
| + virtual void DeleteAllSearchTermsForKeyword(TemplateURLID id) OVERRIDE {}
|
| + virtual void SetKeywordSearchTermsForURL(
|
| + const GURL& url,
|
| + TemplateURLID id,
|
| + const base::string16& term) OVERRIDE {}
|
| + virtual void AddKeywordGeneratedVisit(const GURL& url) OVERRIDE {}
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(AthenaTemplateURLServiceClient);
|
| +};
|
| +
|
| class UrlSearchResult : public app_list::SearchResult {
|
| public:
|
| UrlSearchResult(content::BrowserContext* browser_context,
|
| + TemplateURLService* template_url_service,
|
| const base::string16& query)
|
| - : browser_context_(browser_context), url_(query) {
|
| + : browser_context_(browser_context),
|
| + template_url_service_(template_url_service),
|
| + input_(query,
|
| + base::string16::npos /* cursor_position */,
|
| + base::string16() /* desired_tld */,
|
| + GURL() /* current_url */,
|
| + metrics::OmniboxEventProto::INVALID_SPEC,
|
| + false /* prevent_inline_autocomplete */,
|
| + false /* prefer_keyword */,
|
| + true /* allow_extract_keyword_match */,
|
| + true /* want_asynchronous_matches */,
|
| + AthenaSchemeClassifier()) {
|
| set_title(query);
|
| app_list::SearchResult::Tags title_tags;
|
| + if (input_.type() == metrics::OmniboxInputType::URL) {
|
| + title_tags.push_back(app_list::SearchResult::Tag(
|
| + app_list::SearchResult::Tag::URL, 0, query.size()));
|
| + }
|
| title_tags.push_back(app_list::SearchResult::Tag(
|
| - app_list::SearchResult::Tag::URL, 0, query.size()));
|
| + app_list::SearchResult::Tag::MATCH, 0, query.size()));
|
| set_title_tags(title_tags);
|
| set_id(base::UTF16ToUTF8(query));
|
| }
|
| @@ -30,12 +91,24 @@ class UrlSearchResult : public app_list::SearchResult {
|
| private:
|
| // Overriddenn from app_list::SearchResult:
|
| virtual void Open(int event_flags) OVERRIDE {
|
| + GURL url;
|
| + if (input_.type() == metrics::OmniboxInputType::URL) {
|
| + url = input_.canonicalized_url();
|
| + } else {
|
| + TemplateURL* template_url =
|
| + template_url_service_->GetDefaultSearchProvider();
|
| + const TemplateURLRef& search_url = template_url->url_ref();
|
| + TemplateURLRef::SearchTermsArgs search_terms_args(input_.text());
|
| + url = GURL(search_url.ReplaceSearchTerms(
|
| + search_terms_args, template_url_service_->search_terms_data()));
|
| + }
|
| ActivityManager::Get()->AddActivity(
|
| - ActivityFactory::Get()->CreateWebActivity(browser_context_, url_));
|
| + ActivityFactory::Get()->CreateWebActivity(browser_context_, url));
|
| }
|
|
|
| content::BrowserContext* browser_context_;
|
| - const GURL url_;
|
| + TemplateURLService* template_url_service_;
|
| + AutocompleteInput input_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(UrlSearchResult);
|
| };
|
| @@ -43,7 +116,18 @@ class UrlSearchResult : public app_list::SearchResult {
|
| } // namespace
|
|
|
| UrlSearchProvider::UrlSearchProvider(content::BrowserContext* browser_context)
|
| - : browser_context_(browser_context) {
|
| + : browser_context_(browser_context),
|
| + // TODO(mukai): introduce the real parameters when it's necessary.
|
| + template_url_service_(
|
| + new TemplateURLService(NULL /* prefs */,
|
| + make_scoped_ptr(new SearchTermsData()),
|
| + NULL /* KeywordWebDataService */,
|
| + scoped_ptr<TemplateURLServiceClient>(
|
| + new AthenaTemplateURLServiceClient()),
|
| + NULL /*GoogleURLTracker */,
|
| + NULL /* RapporService */,
|
| + base::Closure() /* dsp_change_callback */)) {
|
| + template_url_service_->Load();
|
| }
|
|
|
| UrlSearchProvider::~UrlSearchProvider() {
|
| @@ -51,8 +135,8 @@ UrlSearchProvider::~UrlSearchProvider() {
|
|
|
| void UrlSearchProvider::Start(const base::string16& query) {
|
| ClearResults();
|
| - Add(scoped_ptr<app_list::SearchResult>(
|
| - new UrlSearchResult(browser_context_, query)));
|
| + Add(scoped_ptr<app_list::SearchResult>(new UrlSearchResult(
|
| + browser_context_, template_url_service_.get(), query)));
|
| }
|
|
|
| void UrlSearchProvider::Stop() {
|
|
|