summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--athena/extensions/shell/url_search_provider.cc3
-rw-r--r--athena/extensions/shell/url_search_provider.h2
-rw-r--r--chrome/browser/ui/app_list/search/app_search_provider.cc3
-rw-r--r--chrome/browser/ui/app_list/search/app_search_provider.h2
-rw-r--r--chrome/browser/ui/app_list/search/app_search_provider_unittest.cc2
-rw-r--r--chrome/browser/ui/app_list/search/omnibox_provider.cc45
-rw-r--r--chrome/browser/ui/app_list/search/omnibox_provider.h5
-rw-r--r--chrome/browser/ui/app_list/search/people/people_provider.cc3
-rw-r--r--chrome/browser/ui/app_list/search/people/people_provider.h2
-rw-r--r--chrome/browser/ui/app_list/search/people/people_provider_browsertest.cc2
-rw-r--r--chrome/browser/ui/app_list/search/suggestions/suggestions_search_provider.cc3
-rw-r--r--chrome/browser/ui/app_list/search/suggestions/suggestions_search_provider.h2
-rw-r--r--chrome/browser/ui/app_list/search/suggestions/suggestions_search_provider_unittest.cc2
-rw-r--r--chrome/browser/ui/app_list/search/webstore/webstore_provider.cc3
-rw-r--r--chrome/browser/ui/app_list/search/webstore/webstore_provider.h2
-rw-r--r--chrome/browser/ui/app_list/search/webstore/webstore_provider_browsertest.cc2
-rw-r--r--ui/app_list/search/mixer_unittest.cc4
-rw-r--r--ui/app_list/search_controller.cc2
-rw-r--r--ui/app_list/search_provider.h2
19 files changed, 63 insertions, 28 deletions
diff --git a/athena/extensions/shell/url_search_provider.cc b/athena/extensions/shell/url_search_provider.cc
index 7cc066d..9019c17 100644
--- a/athena/extensions/shell/url_search_provider.cc
+++ b/athena/extensions/shell/url_search_provider.cc
@@ -223,7 +223,8 @@ UrlSearchProvider::UrlSearchProvider(content::BrowserContext* browser_context)
UrlSearchProvider::~UrlSearchProvider() {
}
-void UrlSearchProvider::Start(const base::string16& query) {
+void UrlSearchProvider::Start(bool /*is_voice_query*/,
+ const base::string16& query) {
const bool minimal_changes = query == input_.text();
input_ = AutocompleteInput(query,
base::string16::npos /* cursor_position */,
diff --git a/athena/extensions/shell/url_search_provider.h b/athena/extensions/shell/url_search_provider.h
index 4782481..32d03d0 100644
--- a/athena/extensions/shell/url_search_provider.h
+++ b/athena/extensions/shell/url_search_provider.h
@@ -28,7 +28,7 @@ class UrlSearchProvider : public app_list::SearchProvider,
~UrlSearchProvider() override;
// Overridden from app_list::SearchProvider
- void Start(const base::string16& query) override;
+ void Start(bool is_voice_query, const base::string16& query) override;
void Stop() override;
// Overridden from AutocompleteProviderListener
diff --git a/chrome/browser/ui/app_list/search/app_search_provider.cc b/chrome/browser/ui/app_list/search/app_search_provider.cc
index a7d7fa8..4314933 100644
--- a/chrome/browser/ui/app_list/search/app_search_provider.cc
+++ b/chrome/browser/ui/app_list/search/app_search_provider.cc
@@ -59,7 +59,8 @@ AppSearchProvider::AppSearchProvider(Profile* profile,
AppSearchProvider::~AppSearchProvider() {}
-void AppSearchProvider::Start(const base::string16& query) {
+void AppSearchProvider::Start(bool /*is_voice_query*/,
+ const base::string16& query) {
query_ = query;
const TokenizedString query_terms(query);
diff --git a/chrome/browser/ui/app_list/search/app_search_provider.h b/chrome/browser/ui/app_list/search/app_search_provider.h
index 5b74ff1..eb014f5 100644
--- a/chrome/browser/ui/app_list/search/app_search_provider.h
+++ b/chrome/browser/ui/app_list/search/app_search_provider.h
@@ -38,7 +38,7 @@ class AppSearchProvider : public SearchProvider,
~AppSearchProvider() override;
// SearchProvider overrides:
- void Start(const base::string16& query) override;
+ void Start(bool is_voice_query, const base::string16& query) override;
void Stop() override;
private:
diff --git a/chrome/browser/ui/app_list/search/app_search_provider_unittest.cc b/chrome/browser/ui/app_list/search/app_search_provider_unittest.cc
index b548936..7b34130 100644
--- a/chrome/browser/ui/app_list/search/app_search_provider_unittest.cc
+++ b/chrome/browser/ui/app_list/search/app_search_provider_unittest.cc
@@ -45,7 +45,7 @@ class AppSearchProviderTest : public AppListTestBase {
}
std::string RunQuery(const std::string& query) {
- app_search_->Start(base::UTF8ToUTF16(query));
+ app_search_->Start(false, base::UTF8ToUTF16(query));
// Sort results by relevance.
std::vector<SearchResult*> sorted_results;
diff --git a/chrome/browser/ui/app_list/search/omnibox_provider.cc b/chrome/browser/ui/app_list/search/omnibox_provider.cc
index 3c5eb9c..0e83e9e 100644
--- a/chrome/browser/ui/app_list/search/omnibox_provider.cc
+++ b/chrome/browser/ui/app_list/search/omnibox_provider.cc
@@ -4,6 +4,7 @@
#include "chrome/browser/ui/app_list/search/omnibox_provider.h"
+#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/autocomplete/autocomplete_classifier.h"
#include "chrome/browser/autocomplete/autocomplete_controller.h"
#include "chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.h"
@@ -19,11 +20,17 @@
#include "grit/theme_resources.h"
#include "ui/app_list/search_result.h"
#include "ui/base/resource/resource_bundle.h"
+#include "url/gurl.h"
+#include "url/url_canon.h"
namespace app_list {
namespace {
+// The Omnibox keyword for Google search. This is correct even if the user is
+// using an international domain (such as google.com.au).
+const char kGoogleSearchKeyword[] = "google.com";
+
int ACMatchStyleToTagStyle(int styles) {
int tag_styles = 0;
if (styles & ACMatchClassification::URL)
@@ -67,15 +74,27 @@ void ACMatchClassificationsToTags(
}
}
+// Converts a Google Search URL into a spoken feedback URL, by adding query
+// parameters. |search_url| must be a Google Search URL.
+GURL MakeGoogleSearchSpokenFeedbackUrl(const GURL& search_url) {
+ std::string query = search_url.query();
+ query += "&gs_ivs=1";
+ GURL::Replacements replacements;
+ replacements.SetQueryStr(query);
+ return search_url.ReplaceComponents(replacements);
+}
+
class OmniboxResult : public SearchResult {
public:
OmniboxResult(Profile* profile,
AppListControllerDelegate* list_controller,
AutocompleteController* autocomplete_controller,
+ bool is_voice_query,
const AutocompleteMatch& match)
: profile_(profile),
list_controller_(list_controller),
autocomplete_controller_(autocomplete_controller),
+ is_voice_query_(is_voice_query),
match_(match) {
if (match_.search_terms_args) {
match_.search_terms_args->from_app_list = true;
@@ -108,15 +127,19 @@ class OmniboxResult : public SearchResult {
// SearchResult overrides:
void Open(int event_flags) override {
RecordHistogram(OMNIBOX_SEARCH_RESULT);
- list_controller_->OpenURL(profile_,
- match_.destination_url,
- match_.transition,
+ GURL url = match_.destination_url;
+ if (is_voice_query_ &&
+ base::UTF16ToUTF8(match_.keyword) == kGoogleSearchKeyword) {
+ url = MakeGoogleSearchSpokenFeedbackUrl(url);
+ }
+ list_controller_->OpenURL(profile_, url, match_.transition,
ui::DispositionFromEventFlags(event_flags));
}
scoped_ptr<SearchResult> Duplicate() override {
- return scoped_ptr<SearchResult>(new OmniboxResult(
- profile_, list_controller_, autocomplete_controller_, match_));
+ return scoped_ptr<SearchResult>(
+ new OmniboxResult(profile_, list_controller_, autocomplete_controller_,
+ is_voice_query_, match_));
}
private:
@@ -150,6 +173,7 @@ class OmniboxResult : public SearchResult {
Profile* profile_;
AppListControllerDelegate* list_controller_;
AutocompleteController* autocomplete_controller_;
+ bool is_voice_query_;
AutocompleteMatch match_;
DISALLOW_COPY_AND_ASSIGN(OmniboxResult);
@@ -166,12 +190,14 @@ OmniboxProvider::OmniboxProvider(Profile* profile,
TemplateURLServiceFactory::GetForProfile(profile),
this,
AutocompleteClassifier::kDefaultOmniboxProviders &
- ~AutocompleteProvider::TYPE_ZERO_SUGGEST)) {
+ ~AutocompleteProvider::TYPE_ZERO_SUGGEST)),
+ is_voice_query_(false) {
}
OmniboxProvider::~OmniboxProvider() {}
-void OmniboxProvider::Start(const base::string16& query) {
+void OmniboxProvider::Start(bool is_voice_query, const base::string16& query) {
+ is_voice_query_ = is_voice_query;
controller_->Start(AutocompleteInput(
query, base::string16::npos, std::string(), GURL(),
metrics::OmniboxEventProto::INVALID_SPEC, false, false, true, true,
@@ -180,6 +206,7 @@ void OmniboxProvider::Start(const base::string16& query) {
void OmniboxProvider::Stop() {
controller_->Stop(false);
+ is_voice_query_ = false;
}
void OmniboxProvider::PopulateFromACResult(const AutocompleteResult& result) {
@@ -190,8 +217,8 @@ void OmniboxProvider::PopulateFromACResult(const AutocompleteResult& result) {
if (!it->destination_url.is_valid())
continue;
- Add(scoped_ptr<SearchResult>(
- new OmniboxResult(profile_, list_controller_, controller_.get(), *it)));
+ Add(scoped_ptr<SearchResult>(new OmniboxResult(
+ profile_, list_controller_, controller_.get(), is_voice_query_, *it)));
}
}
diff --git a/chrome/browser/ui/app_list/search/omnibox_provider.h b/chrome/browser/ui/app_list/search/omnibox_provider.h
index 56c13d4..a7a8c76 100644
--- a/chrome/browser/ui/app_list/search/omnibox_provider.h
+++ b/chrome/browser/ui/app_list/search/omnibox_provider.h
@@ -26,7 +26,7 @@ class OmniboxProvider : public SearchProvider,
~OmniboxProvider() override;
// SearchProvider overrides:
- void Start(const base::string16& query) override;
+ void Start(bool is_voice_query, const base::string16& query) override;
void Stop() override;
private:
@@ -43,6 +43,9 @@ class OmniboxProvider : public SearchProvider,
// eliminates the results as they come in.
scoped_ptr<AutocompleteController> controller_;
+ // Whether the current query is a voice query.
+ bool is_voice_query_;
+
DISALLOW_COPY_AND_ASSIGN(OmniboxProvider);
};
diff --git a/chrome/browser/ui/app_list/search/people/people_provider.cc b/chrome/browser/ui/app_list/search/people/people_provider.cc
index fa11118..1677b18 100644
--- a/chrome/browser/ui/app_list/search/people/people_provider.cc
+++ b/chrome/browser/ui/app_list/search/people/people_provider.cc
@@ -54,7 +54,8 @@ PeopleProvider::PeopleProvider(Profile* profile,
PeopleProvider::~PeopleProvider() {}
-void PeopleProvider::Start(const base::string16& query) {
+void PeopleProvider::Start(bool /*is_voice_query*/,
+ const base::string16& query) {
ClearResults();
if (!IsValidQuery(query)) {
query_.clear();
diff --git a/chrome/browser/ui/app_list/search/people/people_provider.h b/chrome/browser/ui/app_list/search/people/people_provider.h
index dfdda7e..1823109 100644
--- a/chrome/browser/ui/app_list/search/people/people_provider.h
+++ b/chrome/browser/ui/app_list/search/people/people_provider.h
@@ -37,7 +37,7 @@ class PeopleProvider : public WebserviceSearchProvider,
~PeopleProvider() override;
// SearchProvider overrides:
- void Start(const base::string16& query) override;
+ void Start(bool is_voice_query, const base::string16& query) override;
void Stop() override;
// OAuth2TokenService::Consumer overrides:
diff --git a/chrome/browser/ui/app_list/search/people/people_provider_browsertest.cc b/chrome/browser/ui/app_list/search/people/people_provider_browsertest.cc
index 7e4beb9..73979b9 100644
--- a/chrome/browser/ui/app_list/search/people/people_provider_browsertest.cc
+++ b/chrome/browser/ui/app_list/search/people/people_provider_browsertest.cc
@@ -191,7 +191,7 @@ class PeopleProviderTest : public InProcessBrowserTest {
std::string RunQuery(const std::string& query,
const std::string& mock_server_response) {
- people_provider_->Start(base::UTF8ToUTF16(query));
+ people_provider_->Start(false, base::UTF8ToUTF16(query));
if (people_provider_->people_search_ && !mock_server_response.empty()) {
mock_server_response_ = mock_server_response;
diff --git a/chrome/browser/ui/app_list/search/suggestions/suggestions_search_provider.cc b/chrome/browser/ui/app_list/search/suggestions/suggestions_search_provider.cc
index 0e672c3..23599fb 100644
--- a/chrome/browser/ui/app_list/search/suggestions/suggestions_search_provider.cc
+++ b/chrome/browser/ui/app_list/search/suggestions/suggestions_search_provider.cc
@@ -53,7 +53,8 @@ SuggestionsSearchProvider::SuggestionsSearchProvider(
SuggestionsSearchProvider::~SuggestionsSearchProvider() {
}
-void SuggestionsSearchProvider::Start(const base::string16& query) {
+void SuggestionsSearchProvider::Start(bool /*is_voice_query*/,
+ const base::string16& query) {
ClearResults();
// If the service is not enabled, do not return any results.
if (!suggestions_service_)
diff --git a/chrome/browser/ui/app_list/search/suggestions/suggestions_search_provider.h b/chrome/browser/ui/app_list/search/suggestions/suggestions_search_provider.h
index 8f6ea44..ae68fba 100644
--- a/chrome/browser/ui/app_list/search/suggestions/suggestions_search_provider.h
+++ b/chrome/browser/ui/app_list/search/suggestions/suggestions_search_provider.h
@@ -28,7 +28,7 @@ class SuggestionsSearchProvider : public SearchProvider {
~SuggestionsSearchProvider() override;
// SearchProvider overrides:
- void Start(const base::string16& query) override;
+ void Start(bool is_voice_query, const base::string16& query) override;
void Stop() override;
private:
diff --git a/chrome/browser/ui/app_list/search/suggestions/suggestions_search_provider_unittest.cc b/chrome/browser/ui/app_list/search/suggestions/suggestions_search_provider_unittest.cc
index bdd7ac9..428abe5 100644
--- a/chrome/browser/ui/app_list/search/suggestions/suggestions_search_provider_unittest.cc
+++ b/chrome/browser/ui/app_list/search/suggestions/suggestions_search_provider_unittest.cc
@@ -71,7 +71,7 @@ class SuggestionsSearchProviderTest : public AppListTestBase {
}
std::string RunQuery(const std::string& query) {
- suggestions_search_->Start(base::UTF8ToUTF16(query));
+ suggestions_search_->Start(false, base::UTF8ToUTF16(query));
// Sort results from most to least relevant.
std::vector<SearchResult*> sorted_results(
diff --git a/chrome/browser/ui/app_list/search/webstore/webstore_provider.cc b/chrome/browser/ui/app_list/search/webstore/webstore_provider.cc
index 7b30eea..027999d 100644
--- a/chrome/browser/ui/app_list/search/webstore/webstore_provider.cc
+++ b/chrome/browser/ui/app_list/search/webstore/webstore_provider.cc
@@ -59,7 +59,8 @@ WebstoreProvider::WebstoreProvider(Profile* profile,
WebstoreProvider::~WebstoreProvider() {}
-void WebstoreProvider::Start(const base::string16& query) {
+void WebstoreProvider::Start(bool /*is_voice_query*/,
+ const base::string16& query) {
ClearResults();
if (!IsValidQuery(query)) {
query_.clear();
diff --git a/chrome/browser/ui/app_list/search/webstore/webstore_provider.h b/chrome/browser/ui/app_list/search/webstore/webstore_provider.h
index 8762e84..fcc8d7e 100644
--- a/chrome/browser/ui/app_list/search/webstore/webstore_provider.h
+++ b/chrome/browser/ui/app_list/search/webstore/webstore_provider.h
@@ -34,7 +34,7 @@ class WebstoreProvider : public WebserviceSearchProvider{
~WebstoreProvider() override;
// SearchProvider overrides:
- void Start(const base::string16& query) override;
+ void Start(bool is_voice_query, const base::string16& query) override;
void Stop() override;
private:
diff --git a/chrome/browser/ui/app_list/search/webstore/webstore_provider_browsertest.cc b/chrome/browser/ui/app_list/search/webstore/webstore_provider_browsertest.cc
index 1602bff..3652faa 100644
--- a/chrome/browser/ui/app_list/search/webstore/webstore_provider_browsertest.cc
+++ b/chrome/browser/ui/app_list/search/webstore/webstore_provider_browsertest.cc
@@ -129,7 +129,7 @@ class WebstoreProviderTest : public InProcessBrowserTest {
void RunQuery(const std::string& query,
const std::string& mock_server_response) {
- webstore_provider_->Start(base::UTF8ToUTF16(query));
+ webstore_provider_->Start(false, base::UTF8ToUTF16(query));
if (webstore_provider_->webstore_search_ && !mock_server_response.empty()) {
mock_server_response_ = mock_server_response;
diff --git a/ui/app_list/search/mixer_unittest.cc b/ui/app_list/search/mixer_unittest.cc
index 4518c299..5562742 100644
--- a/ui/app_list/search/mixer_unittest.cc
+++ b/ui/app_list/search/mixer_unittest.cc
@@ -61,7 +61,7 @@ class TestSearchProvider : public SearchProvider {
~TestSearchProvider() override {}
// SearchProvider overrides:
- void Start(const base::string16& query) override {
+ void Start(bool is_voice_query, const base::string16& query) override {
ClearResults();
for (size_t i = 0; i < count_; ++i) {
const std::string id =
@@ -116,7 +116,7 @@ class MixerTest : public testing::Test {
const base::string16 query;
for (size_t i = 0; i < providers_.size(); ++i) {
- providers_[i]->Start(query);
+ providers_[i]->Start(is_voice_query_, query);
providers_[i]->Stop();
}
diff --git a/ui/app_list/search_controller.cc b/ui/app_list/search_controller.cc
index f4960e1..66d7593 100644
--- a/ui/app_list/search_controller.cc
+++ b/ui/app_list/search_controller.cc
@@ -49,7 +49,7 @@ void SearchController::Start(bool is_voice_query) {
for (Providers::iterator it = providers_.begin();
it != providers_.end();
++it) {
- (*it)->Start(query);
+ (*it)->Start(is_voice_query, query);
}
dispatching_query_ = false;
diff --git a/ui/app_list/search_provider.h b/ui/app_list/search_provider.h
index d092c7e..92e8e5b 100644
--- a/ui/app_list/search_provider.h
+++ b/ui/app_list/search_provider.h
@@ -25,7 +25,7 @@ class APP_LIST_EXPORT SearchProvider {
virtual ~SearchProvider();
// Invoked to start a query.
- virtual void Start(const base::string16& query) = 0;
+ virtual void Start(bool is_voice_query, const base::string16& query) = 0;
// Invoked to stop the current query and no more results changes.
virtual void Stop() = 0;