summaryrefslogtreecommitdiffstats
path: root/athena
diff options
context:
space:
mode:
authormukai <mukai@chromium.org>2014-09-19 16:23:09 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-19 23:23:40 +0000
commit413d75456a61016bf0652800920228241881277d (patch)
tree01fd33a8f5220e40b1fae7e007d9618b7cb7711b /athena
parentf5164b9f8b4352fb326260ae2f901b17a000fd51 (diff)
downloadchromium_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.gyp9
-rw-r--r--athena/content/DEPS3
-rw-r--r--athena/content/chrome/scheme_classifier_factory.cc19
-rw-r--r--athena/content/public/scheme_classifier_factory.h24
-rw-r--r--athena/content/shell/scheme_classifier_factory.cc40
-rw-r--r--athena/main/url_search_provider.cc55
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) {