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