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