people_provider.h revision 1e9bf3e0803691d0a228da41fc608347b6db4340
136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// Copyright 2013 The Chromium Authors. All rights reserved. 236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// Use of this source code is governed by a BSD-style license that can be 336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// found in the LICENSE file. 436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#ifndef CHROME_BROWSER_UI_APP_LIST_SEARCH_PEOPLE_PEOPLE_PROVIDER_H_ 636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#define CHROME_BROWSER_UI_APP_LIST_SEARCH_PEOPLE_PEOPLE_PROVIDER_H_ 736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "base/basictypes.h" 936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "base/callback_forward.h" 1036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "base/memory/scoped_ptr.h" 1136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "chrome/browser/ui/app_list/search/common/webservice_search_provider.h" 1236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "google_apis/gaia/oauth2_token_service.h" 1336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "url/gurl.h" 1436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 1536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass AppListControllerDelegate; 1636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 1736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesnamespace base { 1836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass DictionaryValue; 1936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines} 2036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 2136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesnamespace app_list { 2236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 2336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesnamespace test { 24dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass PeopleProviderTest; 25dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines} 2636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 2736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass ChromeSearchResult; 2836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass JSONResponseFetcher; 2936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 3036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// PeopleProvider fetches search results from the web store server. 3136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// A "Search in web store" result will be returned if the server does not 3236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// return any results. 3336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass PeopleProvider : public WebserviceSearchProvider, 3436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines public OAuth2TokenService::Consumer { 35dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines public: 36dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines explicit PeopleProvider(Profile* profile); 3736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual ~PeopleProvider(); 3836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 3936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // SearchProvider overrides: 4036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void Start(const base::string16& query) OVERRIDE; 41dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines virtual void Stop() OVERRIDE; 42dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 43dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // OAuth2TokenService::Consumer overrides: 44dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines virtual void OnGetTokenSuccess( 45dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines const OAuth2TokenService::Request* request, 46dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines const std::string& access_token, 4736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines const base::Time& expiration_time) OVERRIDE; 4836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void OnGetTokenFailure( 4936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines const OAuth2TokenService::Request* request, 5036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines const GoogleServiceAuthError& error) OVERRIDE; 5136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 5236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines private: 5336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines friend class app_list::test::PeopleProviderTest; 5436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 5536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Start a request for getting the access token for people search. 5636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void RequestAccessToken(); 57dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // Invalidate our existing token so a new one can be fetched. 58dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void InvalidateToken(); 59dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 6036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Get the full people search query URL. This URL includes the OAuth refresh 6136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // token for authenticating the current user. 6236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines GURL GetQueryUrl(const std::string& query); 6336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 6436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Start the search request with |query_|. 6536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void StartQuery(); 6636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 6736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Callback for people search results being fetched. 6836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void OnPeopleSearchFetched(scoped_ptr<base::DictionaryValue> json); 6936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void ProcessPeopleSearchResults(const base::DictionaryValue* json); 7036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines scoped_ptr<ChromeSearchResult> CreateResult( 7136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines const base::DictionaryValue& dict); 7236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 7336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Setup the various variables that we override for testing. 7436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void SetupForTest(const base::Closure& people_search_fetched_callback, 7536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines const GURL& people_search_url); 7636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 7736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines scoped_ptr<JSONResponseFetcher> people_search_; 7836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines base::Closure people_search_fetched_callback_; 7936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 8036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines std::string access_token_; 8136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines scoped_ptr<OAuth2TokenService::Request> access_token_request_; 8236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines OAuth2TokenService::ScopeSet oauth2_scope_; 8336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 8436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // The current query. 8536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines std::string query_; 8636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines GURL people_search_url_; 8736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 8836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool skip_request_token_for_test_; 8936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 9036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DISALLOW_COPY_AND_ASSIGN(PeopleProvider); 9136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}; 9236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 9336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines} // namespace app_list 9436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 9536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#endif // CHROME_BROWSER_UI_APP_LIST_SEARCH_PEOPLE_PEOPLE_PROVIDER_H_ 9636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines