• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright (c) 2013 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// Use the <code>chrome.identity</code> API to get OAuth2 access tokens.
6namespace identity {
7
8  dictionary AccountInfo {
9    // A unique identifier for the account. This ID will not change
10    // for the lifetime of the account.
11    DOMString id;
12  };
13
14  dictionary ProfileUserInfo {
15    // An email address for the user account signed into the current
16    // profile. Empty if the user is not signed in.
17    DOMString email;
18
19    // A unique identifier for the account. This ID will not change
20    // for the lifetime of the account. Empty if the user is not
21    // signed in.
22    DOMString id;
23  };
24
25  dictionary TokenDetails {
26    // Fetching a token may require the user to sign-in to Chrome, or
27    // approve the application's requested scopes. If the interactive
28    // flag is <code>true</code>, <code>getAuthToken</code> will
29    // prompt the user as necessary. When the flag is
30    // <code>false</code> or omitted, <code>getAuthToken</code> will
31    // return failure any time a prompt would be required.
32    boolean? interactive;
33
34    // The account ID whose token should be returned. If not
35    // specified, the primary account for the profile will be used.
36    //
37    // <code>account</code> is only supported when the
38    // "enable-new-profile-management" flag is set.
39    AccountInfo? account;
40
41    // A list of OAuth2 scopes to request.
42    //
43    // When the <code>scopes</code> field is present, it overrides the
44    // list of scopes specified in manifest.json.
45    DOMString[]? scopes;
46  };
47
48  dictionary InvalidTokenDetails {
49    // The specific token that should be removed from the cache.
50    DOMString token;
51  };
52
53  dictionary WebAuthFlowDetails {
54    // The URL that initiates the auth flow.
55    DOMString url;
56
57    // Whether to launch auth flow in interactive mode.
58    //
59    // Since some auth flows may immediately redirect to a result URL,
60    // <code>launchWebAuthFlow</code> hides its web view until the
61    // first navigation either redirects to the final URL, or finishes
62    // loading a page meant to be displayed.
63    //
64    // If the interactive flag is <code>true</code>, the window will
65    // be displayed when a page load completes. If the flag is
66    // <code>false</code> or omitted, <code>launchWebAuthFlow</code>
67    // will return with an error if the initial navigation does not
68    // complete the flow.
69    boolean? interactive;
70  };
71
72  callback GetAuthTokenCallback = void (optional DOMString token);
73  callback GetAccountsCallback = void (AccountInfo[] accounts);
74  callback GetProfileUserInfoCallback = void (ProfileUserInfo userInfo);
75  callback InvalidateAuthTokenCallback = void ();
76  callback LaunchWebAuthFlowCallback = void (optional DOMString responseUrl);
77
78  interface Functions {
79    // Retrieves a list of AccountInfo objects describing the accounts
80    // present on the profile.
81    //
82    // <code>getAccounts</code> is only supported on dev channel.
83    static void getAccounts(GetAccountsCallback callback);
84
85    // Gets an OAuth2 access token using the client ID and scopes
86    // specified in the <a
87    // href="app_identity.html#update_manifest"><code>oauth2</code>
88    // section of manifest.json</a>.
89    //
90    // The Identity API caches access tokens in memory, so it's ok to
91    // call <code>getAuthToken</code> non-interactively any time a token is
92    // required. The token cache automatically handles expiration.
93    //
94    // For a good user experience it is important interactive token requests are
95    // initiated by UI in your app explaining what the authorization is for.
96    // Failing to do this will cause your users to get authorization requests,
97    // or Chrome sign in screens if they are not signed in, with with no
98    // context. In particular, do not use <code>getAuthToken</code>
99    // interactively when your app is first launched.
100    //
101    // |details| : Token options.
102    // |callback| : Called with an OAuth2 access token as specified by the
103    // manifest, or undefined if there was an error.
104    static void getAuthToken(optional TokenDetails details,
105                             GetAuthTokenCallback callback);
106
107    // Retrieves email address and obfuscated gaia id of the user
108    // signed into a profile.
109    //
110    // This API is different from identity.getAccounts in two
111    // ways. The information returned is available offline, and it
112    // only applies to the primary account for the profile.
113    static void getProfileUserInfo(GetProfileUserInfoCallback callback);
114
115    // Removes an OAuth2 access token from the Identity API's token cache.
116    //
117    // If an access token is discovered to be invalid, it should be
118    // passed to removeCachedAuthToken to remove it from the
119    // cache. The app may then retrieve a fresh token with
120    // <code>getAuthToken</code>.
121    //
122    // |details| : Token information.
123    // |callback| : Called when the token has been removed from the cache.
124    static void removeCachedAuthToken(
125        InvalidTokenDetails details, InvalidateAuthTokenCallback callback);
126
127    // Starts an auth flow at the specified URL.
128    //
129    // This method enables auth flows with non-Google identity
130    // providers by launching a web view and navigating it to the
131    // first URL in the provider's auth flow. When the provider
132    // redirects to a URL matching the pattern
133    // <code>https://&lt;app-id&gt;.chromiumapp.org/*</code>, the
134    // window will close, and the final redirect URL will be passed to
135    // the <var>callback</var> function.
136    //
137    // For a good user experience it is important interactive auth flows are
138    // initiated by UI in your app explaining what the authorization is for.
139    // Failing to do this will cause your users to get authorization requests
140    // with no context. In particular, do not launch an interactive auth flow
141    // when your app is first launched.
142    //
143    // |details| : WebAuth flow options.
144    // |callback| : Called with the URL redirected back to your application.
145    static void launchWebAuthFlow(WebAuthFlowDetails details,
146                                  LaunchWebAuthFlowCallback callback);
147
148    // Generates a redirect URL to be used in |launchWebAuthFlow|.
149    //
150    // The generated URLs match the pattern
151    // <code>https://&lt;app-id&gt;.chromiumapp.org/*</code>.
152    //
153    // |path| : The path appended to the end of the generated URL.
154    [nocompile] static DOMString getRedirectURL(optional DOMString path);
155  };
156
157  interface Events {
158    // Fired when signin state changes for an account on the user's profile.
159    static void onSignInChanged(AccountInfo account, boolean signedIn);
160  };
161};
162