1a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// found in the LICENSE file. 4a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 5a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#ifndef IOS_PUBLIC_PROVIDER_COMPONENTS_SIGNIN_BROWSER_PROFILE_OAUTH2_TOKEN_SERVICE_IOS_PROVIDER_H_ 6a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#define IOS_PUBLIC_PROVIDER_COMPONENTS_SIGNIN_BROWSER_PROFILE_OAUTH2_TOKEN_SERVICE_IOS_PROVIDER_H_ 7a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 8a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(__OBJC__) 9a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch@class NSDate; 10a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch@class NSError; 11a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch@class NSString; 12a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#else 13a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass NSDate; 14a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass NSError; 15a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass NSString; 16a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif // defined(__OBJC__) 17a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 18a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include <set> 19a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include <string> 20a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include <vector> 21a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 22a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "base/callback.h" 23a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 24a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochnamespace ios { 25a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 26a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochenum AuthenticationErrorCategory { 27a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Unknown errors. 28a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kAuthenticationErrorCategoryUnknownErrors, 29a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Authorization errors. 30a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kAuthenticationErrorCategoryAuthorizationErrors, 31a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Authorization errors with HTTP_FORBIDDEN (403) error code. 32a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kAuthenticationErrorCategoryAuthorizationForbiddenErrors, 33a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Network server errors includes parsing error and should be treated as 34a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // transient/offline errors. 35a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kAuthenticationErrorCategoryNetworkServerErrors, 36a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // User cancellation errors should be handled by treating them as a no-op. 37a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kAuthenticationErrorCategoryUserCancellationErrors, 38a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // User identity not found errors. 39a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kAuthenticationErrorCategoryUnknownIdentityErrors, 40a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}; 41a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 42a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Interface that provides support for ProfileOAuth2TokenServiceIOS. 43a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass ProfileOAuth2TokenServiceIOSProvider { 44a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch public: 45a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch typedef base::Callback<void(NSString* token, 46a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NSDate* expiration, 47a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NSError* error)> AccessTokenCallback; 48a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 49a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ProfileOAuth2TokenServiceIOSProvider() {}; 50a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual ~ProfileOAuth2TokenServiceIOSProvider() {}; 51a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 52a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Initializes the shared authentication library. This method should be called 53a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // when loading credentials if the user is signed in to Chrome via the shared 54a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // authentication library. 55a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void InitializeSharedAuthentication() = 0; 56a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 57a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Returns the ids of all accounts. 58a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual std::vector<std::string> GetAllAccountIds() = 0; 59a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 60a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Starts fetching an access token for the account with id |account_id| with 61a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // the given |scopes|. Once the token is obtained, |callback| is called. 62a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void GetAccessToken(const std::string& account_id, 63a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const std::string& client_id, 64a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const std::string& client_secret, 65a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const std::set<std::string>& scopes, 66a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const AccessTokenCallback& callback) = 0; 67a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 68a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Returns the authentication error category of |error|. 69a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual AuthenticationErrorCategory GetAuthenticationErrorCategory( 70a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NSError* error) const = 0; 71a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}; 72a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 73a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} // namespace ios 74a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 75a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif // IOS_PUBLIC_PROVIDER_COMPONENTS_SIGNIN_BROWSER_PROFILE_OAUTH2_TOKEN_SERVICE_IOS_PROVIDER_H_ 76