Commit 413d7545 authored by mukai's avatar mukai Committed by Commit bot

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}
parent f5164b9f
......@@ -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',
......
......@@ -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",
......
// 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
// 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_
// 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
......@@ -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) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment