Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(302)

Unified Diff: chrome/browser/ui/app_list/search/webstore_provider.cc

Issue 23874015: Implement people search. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/app_list/search/webstore_provider.cc
diff --git a/chrome/browser/ui/app_list/search/webstore_provider.cc b/chrome/browser/ui/app_list/search/webstore_provider.cc
deleted file mode 100644
index 20324234a69f192b1832890d07b2e876078e6f91..0000000000000000000000000000000000000000
--- a/chrome/browser/ui/app_list/search/webstore_provider.cc
+++ /dev/null
@@ -1,169 +0,0 @@
-// Copyright 2013 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 "chrome/browser/ui/app_list/search/webstore_provider.h"
-
-#include <string>
-
-#include "base/bind.h"
-#include "base/metrics/field_trial.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/values.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/search/search.h"
-#include "chrome/browser/ui/app_list/search/common/json_response_fetcher.h"
-#include "chrome/browser/ui/app_list/search/search_webstore_result.h"
-#include "chrome/browser/ui/app_list/search/webstore_result.h"
-#include "chrome/common/extensions/extension_constants.h"
-#include "url/gurl.h"
-
-namespace app_list {
-
-namespace {
-
-const char kKeyResults[] = "results";
-const char kKeyId[] = "id";
-const char kKeyLocalizedName[] = "localized_name";
-const char kKeyIconUrl[] = "icon_url";
-const size_t kMinimumQueryLength = 3u;
-
-// Returns true if the launcher should send queries to the web store server.
-bool UseWebstoreSearch() {
- const char kFieldTrialName[] = "LauncherUseWebstoreSearch";
- const char kEnable[] = "Enable";
- return base::FieldTrialList::FindFullName(kFieldTrialName) == kEnable;
-}
-
-} // namespace
-
-WebstoreProvider::WebstoreProvider(Profile* profile,
- AppListControllerDelegate* controller)
- : profile_(profile),
- controller_(controller) {}
-
-WebstoreProvider::~WebstoreProvider() {}
-
-void WebstoreProvider::Start(const base::string16& query) {
- ClearResults();
-
- // If |query| contains sensitive data, bail out and do not create the place
- // holder "search-web-store" result.
- if (IsSensitiveInput(query)) {
- query_.clear();
- return;
- }
-
- const std::string query_utf8 = UTF16ToUTF8(query);
-
- if (query_utf8.size() < kMinimumQueryLength) {
- query_.clear();
- return;
- }
-
- query_ = query_utf8;
- const base::DictionaryValue* cached_result = cache_.Get(query_);
- if (cached_result) {
- ProcessWebstoreSearchResults(cached_result);
- if (!webstore_search_fetched_callback_.is_null())
- webstore_search_fetched_callback_.Run();
- return;
- }
-
- if (UseWebstoreSearch() && chrome::IsSuggestPrefEnabled(profile_)) {
- if (!webstore_search_) {
- webstore_search_.reset(new JSONResponseFetcher(
- base::Bind(&WebstoreProvider::OnWebstoreSearchFetched,
- base::Unretained(this)),
- profile_->GetRequestContext()));
- }
-
- StartThrottledQuery(base::Bind(&WebstoreProvider::StartQuery,
- base::Unretained(this)));
- }
-
- // Add a placeholder result which when clicked will run the user's query in a
- // browser. This placeholder is removed when the search results arrive.
- Add(scoped_ptr<ChromeSearchResult>(
- new SearchWebstoreResult(profile_, query_utf8)).Pass());
-}
-
-void WebstoreProvider::Stop() {
- if (webstore_search_)
- webstore_search_->Stop();
-}
-
-void WebstoreProvider::StartQuery() {
- // |query_| can be NULL when the query is scheduled but then canceled.
- if (!webstore_search_ || query_.empty())
- return;
-
- webstore_search_->Start(extension_urls::GetWebstoreJsonSearchUrl(
- query_, g_browser_process->GetApplicationLocale()));
-}
-
-void WebstoreProvider::OnWebstoreSearchFetched(
- scoped_ptr<base::DictionaryValue> json) {
- ProcessWebstoreSearchResults(json.get());
- cache_.Put(query_, json.Pass());
-
- if (!webstore_search_fetched_callback_.is_null())
- webstore_search_fetched_callback_.Run();
-}
-
-void WebstoreProvider::ProcessWebstoreSearchResults(
- const base::DictionaryValue* json) {
- const base::ListValue* result_list = NULL;
- if (!json ||
- !json->GetList(kKeyResults, &result_list) ||
- !result_list ||
- result_list->empty()) {
- return;
- }
-
- bool first_result = true;
- for (ListValue::const_iterator it = result_list->begin();
- it != result_list->end();
- ++it) {
- const base::DictionaryValue* dict;
- if (!(*it)->GetAsDictionary(&dict))
- continue;
-
- scoped_ptr<ChromeSearchResult> result(CreateResult(*dict));
- if (!result)
- continue;
-
- if (first_result) {
- // Clears "search in webstore" place holder results.
- ClearResults();
- first_result = false;
- }
-
- Add(result.Pass());
- }
-}
-
-scoped_ptr<ChromeSearchResult> WebstoreProvider::CreateResult(
- const base::DictionaryValue& dict) {
- scoped_ptr<ChromeSearchResult> result;
-
- std::string app_id;
- std::string localized_name;
- std::string icon_url_string;
- if (!dict.GetString(kKeyId, &app_id) ||
- !dict.GetString(kKeyLocalizedName, &localized_name) ||
- !dict.GetString(kKeyIconUrl, &icon_url_string)) {
- return result.Pass();
- }
-
- GURL icon_url(icon_url_string);
- if (!icon_url.is_valid())
- return result.Pass();
-
- result.reset(new WebstoreResult(
- profile_, app_id, localized_name, icon_url, controller_));
- return result.Pass();
-}
-
-} // namespace app_list

Powered by Google App Engine
This is Rietveld 408576698