1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#ifndef CHROME_BROWSER_SUPERVISED_USER_PERMISSION_REQUEST_CREATOR_APIARY_H_ 6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define CHROME_BROWSER_SUPERVISED_USER_PERMISSION_REQUEST_CREATOR_APIARY_H_ 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <string> 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/scoped_vector.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/supervised_user/permission_request_creator.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "google_apis/gaia/oauth2_token_service.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "net/url_request/url_fetcher_delegate.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "url/gurl.h" 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Profile; 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass SupervisedUserSigninManagerWrapper; 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace base { 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Time; 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace net { 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class URLFetcher; 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class URLRequestContextGetter; 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class PermissionRequestCreatorApiary : public PermissionRequestCreator, 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public OAuth2TokenService::Consumer, 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public net::URLFetcherDelegate { 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PermissionRequestCreatorApiary( 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) OAuth2TokenService* oauth2_token_service, 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<SupervisedUserSigninManagerWrapper> signin_wrapper, 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) net::URLRequestContextGetter* context); 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~PermissionRequestCreatorApiary(); 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static scoped_ptr<PermissionRequestCreator> CreateWithProfile( 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Profile* profile); 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // PermissionRequestCreator implementation: 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void CreatePermissionRequest(const GURL& url_requested, 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::Closure& callback) OVERRIDE; 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci struct Request; 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci typedef ScopedVector<Request>::iterator RequestIterator; 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // OAuth2TokenService::Consumer implementation: 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request, 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string& access_token, 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::Time& expiration_time) OVERRIDE; 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request, 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GoogleServiceAuthError& error) OVERRIDE; 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // net::URLFetcherDelegate implementation. 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string GetApiScopeToUse() const; 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Requests an access token, which is the first thing we need. This is where 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // we restart when the returned access token has expired. 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void StartFetching(Request* request); 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void DispatchNetworkError(RequestIterator it, int error_code); 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void DispatchGoogleServiceAuthError(RequestIterator it, 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const GoogleServiceAuthError& error); 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) OAuth2TokenService* oauth2_token_service_; 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<SupervisedUserSigninManagerWrapper> signin_wrapper_; 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) net::URLRequestContextGetter* context_; 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ScopedVector<Request> requests_; 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif // CHROME_BROWSER_SUPERVISED_USER_PERMISSION_REQUEST_CREATOR_APIARY_H_ 78