people_provider.h revision 58537e28ecd584eab876aee8be7156509866d23a
1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_UI_APP_LIST_SEARCH_PEOPLE_PEOPLE_PROVIDER_H_ 6#define CHROME_BROWSER_UI_APP_LIST_SEARCH_PEOPLE_PEOPLE_PROVIDER_H_ 7 8#include "base/basictypes.h" 9#include "base/callback_forward.h" 10#include "base/memory/scoped_ptr.h" 11#include "chrome/browser/ui/app_list/search/common/webservice_search_provider.h" 12#include "google_apis/gaia/oauth2_token_service.h" 13#include "url/gurl.h" 14 15class AppListControllerDelegate; 16 17namespace base { 18class DictionaryValue; 19} 20 21namespace app_list { 22 23namespace test { 24class PeopleProviderTest; 25} 26 27class ChromeSearchResult; 28class JSONResponseFetcher; 29 30// PeopleProvider fetches search results from the web store server. 31// A "Search in web store" result will be returned if the server does not 32// return any results. 33class PeopleProvider : public WebserviceSearchProvider, 34 public OAuth2TokenService::Consumer { 35 public: 36 explicit PeopleProvider(Profile* profile); 37 virtual ~PeopleProvider(); 38 39 // SearchProvider overrides: 40 virtual void Start(const base::string16& query) OVERRIDE; 41 virtual void Stop() OVERRIDE; 42 43 // OAuth2TokenService::Consumer overrides: 44 virtual void OnGetTokenSuccess( 45 const OAuth2TokenService::Request* request, 46 const std::string& access_token, 47 const base::Time& expiration_time) OVERRIDE; 48 virtual void OnGetTokenFailure( 49 const OAuth2TokenService::Request* request, 50 const GoogleServiceAuthError& error) OVERRIDE; 51 52 private: 53 friend class app_list::test::PeopleProviderTest; 54 55 // Start a request for getting the access token for people search. 56 void RequestAccessToken(); 57 // Invalidate our existing token so a new one can be fetched. 58 void InvalidateToken(); 59 60 // Get the full people search query URL. This URL includes the OAuth refresh 61 // token for authenticating the current user. 62 GURL GetQueryUrl(const std::string& query); 63 64 // Start the search request with |query_|. 65 void StartQuery(); 66 67 void OnPeopleSearchFetched(scoped_ptr<base::DictionaryValue> json); 68 void ProcessPeopleSearchResults(const base::DictionaryValue* json); 69 scoped_ptr<ChromeSearchResult> CreateResult( 70 const base::DictionaryValue& dict); 71 72 // Setup the various variables that we override for testing. 73 void SetupForTest(const base::Closure& people_search_fetched_callback, 74 const GURL& people_search_url); 75 76 scoped_ptr<JSONResponseFetcher> people_search_; 77 base::Closure people_search_fetched_callback_; 78 79 std::string access_token_; 80 scoped_ptr<OAuth2TokenService::Request> access_token_request_; 81 OAuth2TokenService::ScopeSet oauth2_scope_; 82 83 // The current query. 84 std::string query_; 85 GURL people_search_url_; 86 87 bool skip_request_token_for_test_; 88 89 DISALLOW_COPY_AND_ASSIGN(PeopleProvider); 90}; 91 92} // namespace app_list 93 94#endif // CHROME_BROWSER_UI_APP_LIST_SEARCH_PEOPLE_PEOPLE_PROVIDER_H_ 95