| // Copyright 2013 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Use the <code>chrome.identity</code> API to get OAuth2 access tokens. |
| namespace identity { |
| |
| dictionary AccountInfo { |
| // A unique identifier for the account. This ID will not change |
| // for the lifetime of the account. |
| DOMString id; |
| }; |
| |
| enum AccountStatus { |
| // Specifies that Sync is enabled for the primary account. |
| SYNC, |
| // Specifies the existence of a primary account, if any. |
| ANY |
| }; |
| |
| dictionary ProfileDetails { |
| // A status of the primary account signed into a profile whose |
| // <code>ProfileUserInfo</code> should be returned. Defaults to |
| // <code>SYNC</code> account status. |
| AccountStatus? accountStatus; |
| }; |
| |
| dictionary ProfileUserInfo { |
| // An email address for the user account signed into the current |
| // profile. Empty if the user is not signed in or the |
| // <code>identity.email</code> manifest permission is not |
| // specified. |
| DOMString email; |
| |
| // A unique identifier for the account. This ID will not change |
| // for the lifetime of the account. Empty if the user is not |
| // signed in or (in M41+) the <code>identity.email</code> |
| // manifest permission is not specified. |
| DOMString id; |
| }; |
| |
| dictionary TokenDetails { |
| // Fetching a token may require the user to sign-in to Chrome, or |
| // approve the application's requested scopes. If the interactive |
| // flag is <code>true</code>, <code>getAuthToken</code> will |
| // prompt the user as necessary. When the flag is |
| // <code>false</code> or omitted, <code>getAuthToken</code> will |
| // return failure any time a prompt would be required. |
| boolean? interactive; |
| |
| // The account ID whose token should be returned. If not specified, the |
| // function will use an account from the Chrome profile: the Sync account if |
| // there is one, or otherwise the first Google web account. |
| AccountInfo? account; |
| |
| // A list of OAuth2 scopes to request. |
| // |
| // When the <code>scopes</code> field is present, it overrides the |
| // list of scopes specified in manifest.json. |
| DOMString[]? scopes; |
| |
| // The <code>enableGranularPermissions</code> flag allows extensions to |
| // opt-in early to the granular permissions consent screen, in which |
| // requested permissions are granted or denied individually. |
| boolean? enableGranularPermissions; |
| }; |
| |
| dictionary InvalidTokenDetails { |
| // The specific token that should be removed from the cache. |
| DOMString token; |
| }; |
| |
| dictionary WebAuthFlowDetails { |
| // The URL that initiates the auth flow. |
| DOMString url; |
| |
| // Whether to launch auth flow in interactive mode. |
| // |
| // Since some auth flows may immediately redirect to a result URL, |
| // <code>launchWebAuthFlow</code> hides its web view until the first |
| // navigation either redirects to the final URL, or finishes loading a page |
| // meant to be displayed. |
| // |
| // If the <code>interactive</code> flag is <code>true</code>, the window |
| // will be displayed when a page load completes. If the flag is |
| // <code>false</code> or omitted, <code>launchWebAuthFlow</code> will return |
| // with an error if the initial navigation does not complete the flow. |
| // |
| // For flows that use JavaScript for redirection, |
| // <code>abortOnLoadForNonInteractive</code> can be set to <code>false</code> |
| // in combination with setting <code>timeoutMsForNonInteractive</code> to give |
| // the page a chance to perform any redirects. |
| boolean? interactive; |
| |
| // Whether to terminate <code>launchWebAuthFlow</code> for non-interactive |
| // requests after the page loads. This parameter does not affect interactive |
| // flows. |
| // |
| // When set to <code>true</code> (default) the flow will terminate |
| // immediately after the page loads. When set to <code>false</code>, the |
| // flow will only terminate after the |
| // <code>timeoutMsForNonInteractive</code> passes. This is useful for |
| // identity providers that use JavaScript to perform redirections after the |
| // page loads. |
| boolean? abortOnLoadForNonInteractive; |
| |
| // The maximum amount of time, in miliseconds, |
| // <code>launchWebAuthFlow</code> is allowed to run in non-interactive mode |
| // in total. Only has an effect if <code>interactive</code> is |
| // <code>false</code>. |
| long? timeoutMsForNonInteractive; |
| }; |
| |
| dictionary GetAuthTokenResult { |
| // The specific token associated with the request. |
| DOMString? token; |
| |
| // A list of OAuth2 scopes granted to the extension. |
| DOMString[]? grantedScopes; |
| }; |
| |
| callback GetAuthTokenCallback = void (GetAuthTokenResult result); |
| callback GetAccountsCallback = void (AccountInfo[] accounts); |
| callback GetProfileUserInfoCallback = void (ProfileUserInfo userInfo); |
| callback InvalidateAuthTokenCallback = void (); |
| callback ClearAllCachedAuthTokensCallback = void (); |
| callback LaunchWebAuthFlowCallback = void (optional DOMString responseUrl); |
| |
| interface Functions { |
| // Retrieves a list of AccountInfo objects describing the accounts |
| // present on the profile. |
| // |
| // <code>getAccounts</code> is only supported on dev channel. |
| static void getAccounts(GetAccountsCallback callback); |
| |
| // Gets an OAuth2 access token using the client ID and scopes |
| // specified in the <a |
| // href="/docs/apps/app_identity#update_manifest"><code>oauth2</code> |
| // section of manifest.json</a>. |
| // |
| // The Identity API caches access tokens in memory, so it's ok to |
| // call <code>getAuthToken</code> non-interactively any time a token is |
| // required. The token cache automatically handles expiration. |
| // |
| // For a good user experience it is important interactive token requests are |
| // initiated by UI in your app explaining what the authorization is for. |
| // Failing to do this will cause your users to get authorization requests, |
| // or Chrome sign in screens if they are not signed in, with with no |
| // context. In particular, do not use <code>getAuthToken</code> |
| // interactively when your app is first launched. |
| // |
| // Note: When called with a callback, instead of returning an object this |
| // function will return the two properties as separate arguments passed to |
| // the callback. |
| // |
| // |details| : Token options. |
| // |callback| : Called with an OAuth2 access token as specified by the |
| // manifest, or undefined if there was an error. The |
| // <code>grantedScopes</code> parameter is populated since Chrome 87. When |
| // available, this parameter contains the list of granted scopes |
| // corresponding with the returned token. |
| static void getAuthToken( |
| optional TokenDetails details, |
| optional GetAuthTokenCallback callback); |
| |
| // Retrieves email address and obfuscated gaia id of the user |
| // signed into a profile. |
| // |
| // Requires the <code>identity.email</code> manifest permission. Otherwise, |
| // returns an empty result. |
| // |
| // This API is different from identity.getAccounts in two |
| // ways. The information returned is available offline, and it |
| // only applies to the primary account for the profile. |
| // |
| // |details|: Profile options. |
| // |callback|: Called with the <code>ProfileUserInfo</code> of the primary |
| // Chrome account, of an empty <code>ProfileUserInfo</code> if the account |
| // with given <code>details</code> doesn't exist. |
| static void getProfileUserInfo( |
| optional ProfileDetails details, |
| GetProfileUserInfoCallback callback); |
| |
| // Removes an OAuth2 access token from the Identity API's token cache. |
| // |
| // If an access token is discovered to be invalid, it should be |
| // passed to removeCachedAuthToken to remove it from the |
| // cache. The app may then retrieve a fresh token with |
| // <code>getAuthToken</code>. |
| // |
| // |details| : Token information. |
| // |callback| : Called when the token has been removed from the cache. |
| static void removeCachedAuthToken( |
| InvalidTokenDetails details, |
| optional InvalidateAuthTokenCallback callback); |
| |
| // Resets the state of the Identity API: |
| // <ul> |
| // <li>Removes all OAuth2 access tokens from the token cache</li> |
| // <li>Removes user's account preferences</li> |
| // <li>De-authorizes the user from all auth flows</li> |
| // </ul> |
| // |
| // |callback| : Called when the state has been cleared. |
| static void clearAllCachedAuthTokens( |
| ClearAllCachedAuthTokensCallback callback); |
| |
| // Starts an auth flow at the specified URL. |
| // |
| // This method enables auth flows with non-Google identity |
| // providers by launching a web view and navigating it to the |
| // first URL in the provider's auth flow. When the provider |
| // redirects to a URL matching the pattern |
| // <code>https://<app-id>.chromiumapp.org/*</code>, the |
| // window will close, and the final redirect URL will be passed to |
| // the <var>callback</var> function. |
| // |
| // For a good user experience it is important interactive auth flows are |
| // initiated by UI in your app explaining what the authorization is for. |
| // Failing to do this will cause your users to get authorization requests |
| // with no context. In particular, do not launch an interactive auth flow |
| // when your app is first launched. |
| // |
| // |details| : WebAuth flow options. |
| // |callback| : Called with the URL redirected back to your application. |
| static void launchWebAuthFlow( |
| WebAuthFlowDetails details, |
| LaunchWebAuthFlowCallback callback); |
| |
| // Generates a redirect URL to be used in |launchWebAuthFlow|. |
| // |
| // The generated URLs match the pattern |
| // <code>https://<app-id>.chromiumapp.org/*</code>. |
| // |
| // |path| : The path appended to the end of the generated URL. |
| [nocompile] static DOMString getRedirectURL(optional DOMString path); |
| }; |
| |
| interface Events { |
| // Fired when signin state changes for an account on the user's profile. |
| static void onSignInChanged(AccountInfo account, boolean signedIn); |
| }; |
| }; |