permission_request_creator_apiary.h revision 116680a4aac90f2aa7413d9095a592090648e557
15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// found in the LICENSE file. 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef CHROME_BROWSER_SUPERVISED_USER_PERMISSION_REQUEST_CREATOR_APIARY_H_ 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define CHROME_BROWSER_SUPERVISED_USER_PERMISSION_REQUEST_CREATOR_APIARY_H_ 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "chrome/browser/supervised_user/permission_request_creator.h" 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "google_apis/gaia/oauth2_token_service.h" 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "net/url_request/url_fetcher_delegate.h" 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Profile; 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SupervisedUserSigninManagerWrapper; 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace base { 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Time; 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace net { 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class URLFetcher; 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class URLRequestContextGetter; 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class PermissionRequestCreatorApiary : public PermissionRequestCreator, 2753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) public OAuth2TokenService::Consumer, 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) public net::URLFetcherDelegate { 2953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) public: 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) PermissionRequestCreatorApiary( 3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) OAuth2TokenService* oauth2_token_service, 3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) scoped_ptr<SupervisedUserSigninManagerWrapper> signin_wrapper, 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) net::URLRequestContextGetter* context); 34926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual ~PermissionRequestCreatorApiary(); 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static scoped_ptr<PermissionRequestCreator> CreateWithProfile( 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Profile* profile); 38926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 39926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // PermissionRequestCreator implementation: 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void CreatePermissionRequest(const std::string& url_requested, 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const base::Closure& callback) OVERRIDE; 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 43591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch private: 44591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch // OAuth2TokenService::Consumer implementation: 45926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request, 46926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) const std::string& access_token, 47926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) const base::Time& expiration_time) OVERRIDE; 48926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request, 49926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) const GoogleServiceAuthError& error) OVERRIDE; 50926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 51926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // net::URLFetcherDelegate implementation. 52926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 54926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // Requests an access token, which is the first thing we need. This is where 55926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // we restart when the returned access token has expired. 56926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void StartFetching(); 57926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void DispatchNetworkError(int error_code); 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void DispatchGoogleServiceAuthError(const GoogleServiceAuthError& error); 60591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 61591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch OAuth2TokenService* oauth2_token_service_; 62591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch scoped_ptr<SupervisedUserSigninManagerWrapper> signin_wrapper_; 63591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch base::Closure callback_; 64591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch net::URLRequestContextGetter* context_; 65591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch std::string url_requested_; 66591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch scoped_ptr<OAuth2TokenService::Request> access_token_request_; 67591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch std::string access_token_; 68591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch bool access_token_expired_; 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) scoped_ptr<net::URLFetcher> url_fetcher_; 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 72591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#endif // CHROME_BROWSER_SUPERVISED_USER_PERMISSION_REQUEST_CREATOR_APIARY_H_ 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)