diff options
author | mukai <mukai@chromium.org> | 2014-09-19 16:23:09 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-19 23:23:40 +0000 |
commit | 413d75456a61016bf0652800920228241881277d (patch) | |
tree | 01fd33a8f5220e40b1fae7e007d9618b7cb7711b /athena | |
parent | f5164b9f8b4352fb326260ae2f901b17a000fd51 (diff) | |
download | chromium_src-413d75456a61016bf0652800920228241881277d.zip chromium_src-413d75456a61016bf0652800920228241881277d.tar.gz chromium_src-413d75456a61016bf0652800920228241881277d.tar.bz2 |
Use ChromeAutocompleteSchemeClassifier for Athena on Chrome.
Otherwise chrome:// are not recognized as the search result.
This CL also modifies the logic of URLSearchProvider's result
aggregation, because the SearchProvider doesn't emit result change
for URL-ish results.
BUG=416083
R=oshima@chromium.org
TBR=mpearson@chromium.org, agl@chromium.org
TEST=manually
Review URL: https://codereview.chromium.org/584263002
Cr-Commit-Position: refs/heads/master@{#295803}
Diffstat (limited to 'athena')
-rw-r--r-- | athena/athena.gyp | 9 | ||||
-rw-r--r-- | athena/content/DEPS | 3 | ||||
-rw-r--r-- | athena/content/chrome/scheme_classifier_factory.cc | 19 | ||||
-rw-r--r-- | athena/content/public/scheme_classifier_factory.h | 24 | ||||
-rw-r--r-- | athena/content/shell/scheme_classifier_factory.cc | 40 | ||||
-rw-r--r-- | athena/main/url_search_provider.cc | 55 |
6 files changed, 118 insertions, 32 deletions
diff --git a/athena/athena.gyp b/athena/athena.gyp index 946fda2..e8ca5b4 100644 --- a/athena/athena.gyp +++ b/athena/athena.gyp @@ -126,7 +126,9 @@ 'dependencies': [ 'athena_lib', '../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations', + '../components/components.gyp:component_metrics_proto', '../components/components.gyp:native_app_window', + '../components/components.gyp:omnibox', '../components/components.gyp:renderer_context_menu', '../components/components.gyp:web_modal', '../extensions/extensions.gyp:extensions_browser', @@ -154,6 +156,7 @@ 'content/public/app_registry.h', 'content/public/content_activity_factory_creator.h', 'content/public/dialogs.h', + 'content/public/scheme_classifier_factory.h', 'content/public/web_contents_view_delegate_creator.h', 'content/render_view_context_menu_impl.cc', 'content/render_view_context_menu_impl.h', @@ -178,11 +181,14 @@ 'target_name': 'athena_chrome_lib', 'type': 'static_library', 'dependencies': [ + '../components/components.gyp:component_metrics_proto', '../chrome/chrome.gyp:browser_extensions', + '../components/components.gyp:omnibox', ], 'sources': [ 'content/chrome/content_activity_factory.cc', 'content/chrome/dialogs.cc', + 'content/chrome/scheme_classifier_factory.cc', 'extensions/chrome/athena_chrome_app_delegate.cc', 'extensions/chrome/athena_chrome_app_delegate.h', 'extensions/chrome/athena_chrome_app_window_client.cc', @@ -194,12 +200,15 @@ 'target_name': 'athena_app_shell_lib', 'type': 'static_library', 'dependencies': [ + '../components/components.gyp:component_metrics_proto', + '../components/components.gyp:omnibox', '../extensions/shell/app_shell.gyp:app_shell_lib', '../skia/skia.gyp:skia', ], 'sources': [ 'content/shell/content_activity_factory.cc', 'content/shell/dialogs.cc', + 'content/shell/scheme_classifier_factory.cc', 'content/shell/shell_app_activity.cc', 'content/shell/shell_app_activity.h', 'extensions/shell/extensions_delegate_impl.cc', diff --git a/athena/content/DEPS b/athena/content/DEPS index 016834f..98e54cf 100644 --- a/athena/content/DEPS +++ b/athena/content/DEPS @@ -6,9 +6,12 @@ include_rules = [ "+athena/resource_manager/public", "+athena/wm/public", "+components/favicon_base", + "+components/metrics/proto", + "+components/omnibox", "+components/renderer_context_menu", "+components/web_modal", "+content/public", + "+net/url_request", "+ui/aura", "+ui/compositor", "+ui/gfx", diff --git a/athena/content/chrome/scheme_classifier_factory.cc b/athena/content/chrome/scheme_classifier_factory.cc new file mode 100644 index 0000000..6e23df1 --- /dev/null +++ b/athena/content/chrome/scheme_classifier_factory.cc @@ -0,0 +1,19 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "athena/content/public/scheme_classifier_factory.h" + +#include "chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.h" +#include "chrome/browser/profiles/profile.h" + +namespace athena { + +scoped_ptr<AutocompleteSchemeClassifier> CreateSchemeClassifier( + content::BrowserContext* context) { + return scoped_ptr<AutocompleteSchemeClassifier>( + new ChromeAutocompleteSchemeClassifier( + Profile::FromBrowserContext(context))); +} + +} // namespace athena diff --git a/athena/content/public/scheme_classifier_factory.h b/athena/content/public/scheme_classifier_factory.h new file mode 100644 index 0000000..272736e --- /dev/null +++ b/athena/content/public/scheme_classifier_factory.h @@ -0,0 +1,24 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ATHENA_CONTENT_PUBLIC_SCHEME_CLASSIFIER_FACTORY_H_ +#define ATHENA_CONTENT_PUBLIC_SCHEME_CLASSIFIER_FACTORY_H_ + +#include "base/memory/scoped_ptr.h" +#include "components/omnibox/autocomplete_scheme_classifier.h" + +namespace content { +class BrowserContext; +} + +namespace athena { + +// Create the AutocompleteSchemeClassifier implementation of the current +// environment. +scoped_ptr<AutocompleteSchemeClassifier> CreateSchemeClassifier( + content::BrowserContext* context); + +} // namespace athena + +#endif // ATHENA_CONTENT_PUBLIC_SCHEME_CLASSIFIER_FACTORY_H_ diff --git a/athena/content/shell/scheme_classifier_factory.cc b/athena/content/shell/scheme_classifier_factory.cc new file mode 100644 index 0000000..b8c8914 --- /dev/null +++ b/athena/content/shell/scheme_classifier_factory.cc @@ -0,0 +1,40 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "athena/content/public/scheme_classifier_factory.h" + +#include "components/metrics/proto/omnibox_input_type.pb.h" +#include "net/url_request/url_request.h" + +namespace athena { + +namespace { + +// The AutocompleteSchemeClassifier implementation for athena_main. +class AthenaShellSchemeClassifier : public AutocompleteSchemeClassifier { + public: + AthenaShellSchemeClassifier() {} + virtual ~AthenaShellSchemeClassifier() {} + + // 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; + } + + private: + DISALLOW_COPY_AND_ASSIGN(AthenaShellSchemeClassifier); +}; + +} // namespace + +scoped_ptr<AutocompleteSchemeClassifier> CreateSchemeClassifier( + content::BrowserContext* context) { + return scoped_ptr<AutocompleteSchemeClassifier>( + new AthenaShellSchemeClassifier()); +} + +} // namespace athena diff --git a/athena/main/url_search_provider.cc b/athena/main/url_search_provider.cc index 39819bd..5fcea5a 100644 --- a/athena/main/url_search_provider.cc +++ b/athena/main/url_search_provider.cc @@ -6,13 +6,13 @@ #include "athena/activity/public/activity_factory.h" #include "athena/activity/public/activity_manager.h" +#include "athena/content/public/scheme_classifier_factory.h" #include "base/strings/utf_string_conversions.h" #include "base/values.h" #include "components/metrics/proto/omnibox_event.pb.h" #include "components/metrics/proto/omnibox_input_type.pb.h" #include "components/omnibox/autocomplete_input.h" #include "components/omnibox/autocomplete_provider_client.h" -#include "components/omnibox/autocomplete_scheme_classifier.h" #include "components/omnibox/search_provider.h" #include "components/search_engines/search_terms_data.h" #include "components/search_engines/template_url_service.h" @@ -39,21 +39,6 @@ class AthenaSearchTermsData : public SearchTermsData { } }; -// 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. @@ -82,7 +67,8 @@ class AthenaAutocompleteProviderClient : public AutocompleteProviderClient { public: explicit AthenaAutocompleteProviderClient( content::BrowserContext* browser_context) - : browser_context_(browser_context) {} + : browser_context_(browser_context), + scheme_classifier_(CreateSchemeClassifier(browser_context)) {} virtual ~AthenaAutocompleteProviderClient() {} virtual net::URLRequestContextGetter* RequestContext() OVERRIDE { @@ -98,7 +84,7 @@ class AthenaAutocompleteProviderClient : public AutocompleteProviderClient { virtual bool SearchSuggestEnabled() OVERRIDE { return true; } virtual bool ShowBookmarkBar() OVERRIDE { return false; } virtual const AutocompleteSchemeClassifier& SchemeClassifier() OVERRIDE { - return scheme_classifier_; + return *scheme_classifier_; } virtual void Classify( const base::string16& text, @@ -116,7 +102,7 @@ class AthenaAutocompleteProviderClient : public AutocompleteProviderClient { private: content::BrowserContext* browser_context_; - AthenaSchemeClassifier scheme_classifier_; + scoped_ptr<AutocompleteSchemeClassifier> scheme_classifier_; DISALLOW_COPY_AND_ASSIGN(AthenaAutocompleteProviderClient); }; @@ -246,6 +232,8 @@ UrlSearchProvider::~UrlSearchProvider() { void UrlSearchProvider::Start(const base::string16& query) { const bool minimal_changes = query == input_.text(); + scoped_ptr<AutocompleteSchemeClassifier> scheme_classifier( + CreateSchemeClassifier(browser_context_)); input_ = AutocompleteInput(query, base::string16::npos /* cursor_position */, base::string16() /* desired_tld */, @@ -255,20 +243,12 @@ void UrlSearchProvider::Start(const base::string16& query) { false /* prefer_keyword */, true /* allow_extract_keyword_match */, true /* want_asynchronous_matches */, - AthenaSchemeClassifier()); - - provider_->Start(input_, minimal_changes); -} + *scheme_classifier); -void UrlSearchProvider::Stop() { - provider_->Stop(false); -} - -void UrlSearchProvider::OnProviderUpdate(bool updated_matches) { - if (!updated_matches) - return; - - ClearResults(); + // Clearing results here may cause unexpected results. + // TODO(mukai): fix this by fixing crbug.com/415500 + if (!minimal_changes) + ClearResults(); if (input_.type() == metrics::OmniboxInputType::URL) { // TODO(hashimoto): Componentize HistoryURLProvider and remove this code. @@ -281,6 +261,17 @@ void UrlSearchProvider::OnProviderUpdate(bool updated_matches) { browser_context_, what_you_typed_match))); } + provider_->Start(input_, minimal_changes); +} + +void UrlSearchProvider::Stop() { + provider_->Stop(false); +} + +void UrlSearchProvider::OnProviderUpdate(bool updated_matches) { + if (!updated_matches) + return; + const ACMatches& matches = provider_->matches(); for (ACMatches::const_iterator it = matches.begin(); it != matches.end(); ++it) { |