Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_EXTENSIONS_API_IDENTITY_EXPERIMENTAL_IDENTITY_API_H_ | 5 #ifndef CHROME_BROWSER_EXTENSIONS_API_IDENTITY_EXPERIMENTAL_IDENTITY_API_H_ |
| 6 #define CHROME_BROWSER_EXTENSIONS_API_IDENTITY_EXPERIMENTAL_IDENTITY_API_H_ | 6 #define CHROME_BROWSER_EXTENSIONS_API_IDENTITY_EXPERIMENTAL_IDENTITY_API_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
| 12 #include "base/memory/weak_ptr.h" | 12 #include "base/memory/weak_ptr.h" |
| 13 #include "chrome/browser/extensions/api/identity/experimental_web_auth_flow.h" | 13 #include "chrome/browser/extensions/api/identity/experimental_web_auth_flow.h" |
| 14 #include "chrome/browser/extensions/api/identity/identity_mint_queue.h" | 14 #include "chrome/browser/extensions/api/identity/identity_mint_queue.h" |
| 15 #include "chrome/browser/extensions/api/identity/identity_signin_flow.h" | 15 #include "chrome/browser/extensions/api/identity/identity_signin_flow.h" |
| 16 #include "chrome/browser/extensions/extension_function.h" | 16 #include "chrome/browser/extensions/extension_function.h" |
| 17 #include "chrome/browser/extensions/extension_install_prompt.h" | 17 #include "chrome/browser/extensions/extension_install_prompt.h" |
| 18 #include "chrome/browser/signin/oauth2_token_service.h" | |
| 18 #include "google_apis/gaia/oauth2_mint_token_flow.h" | 19 #include "google_apis/gaia/oauth2_mint_token_flow.h" |
| 19 | 20 |
| 20 namespace extensions { | 21 namespace extensions { |
| 21 | 22 |
| 22 // TODO(courage): These functions exist to support some apps that were | 23 // TODO(courage): These functions exist to support some apps that were |
| 23 // whitelisted to use the experimental API. Remove them once those | 24 // whitelisted to use the experimental API. Remove them once those |
| 24 // apps have migrated. | 25 // apps have migrated. |
| 25 | 26 |
| 26 // experimental.identity.getAuthToken fetches an OAuth 2 function for | 27 // experimental.identity.getAuthToken fetches an OAuth 2 function for |
| 27 // the caller. The request has three sub-flows: non-interactive, | 28 // the caller. The request has three sub-flows: non-interactive, |
| 28 // interactive, and sign-in. | 29 // interactive, and sign-in. |
| 29 // | 30 // |
| 30 // In the non-interactive flow, getAuthToken requests a token from | 31 // In the non-interactive flow, getAuthToken requests a token from |
| 31 // GAIA. GAIA may respond with a token, an error, or "consent | 32 // GAIA. GAIA may respond with a token, an error, or "consent |
| 32 // required". In the consent required cases, getAuthToken proceeds to | 33 // required". In the consent required cases, getAuthToken proceeds to |
| 33 // the second, interactive phase. | 34 // the second, interactive phase. |
| 34 // | 35 // |
| 35 // The interactive flow presents a scope approval dialog to the | 36 // The interactive flow presents a scope approval dialog to the |
| 36 // user. If the user approves the request, a grant will be recorded on | 37 // user. If the user approves the request, a grant will be recorded on |
| 37 // the server, and an access token will be returned to the caller. | 38 // the server, and an access token will be returned to the caller. |
| 38 // | 39 // |
| 39 // In some cases we need to display a sign-in dialog. Normally the | 40 // In some cases we need to display a sign-in dialog. Normally the |
| 40 // profile will be signed in already, but if it turns out we need a | 41 // profile will be signed in already, but if it turns out we need a |
| 41 // new login token, there is a sign-in flow. If that flow completes | 42 // new login token, there is a sign-in flow. If that flow completes |
| 42 // successfully, getAuthToken proceeds to the non-interactive flow. | 43 // successfully, getAuthToken proceeds to the non-interactive flow. |
| 43 class ExperimentalIdentityGetAuthTokenFunction | 44 class ExperimentalIdentityGetAuthTokenFunction |
| 44 : public AsyncExtensionFunction, | 45 : public AsyncExtensionFunction, |
| 45 public ExtensionInstallPrompt::Delegate, | 46 public ExtensionInstallPrompt::Delegate, |
| 46 public OAuth2MintTokenFlow::Delegate, | 47 public OAuth2MintTokenFlow::Delegate, |
| 47 public IdentitySigninFlow::Delegate { | 48 public IdentitySigninFlow::Delegate, |
| 49 public OAuth2TokenService::Consumer { | |
|
Michael Courage
2013/06/20 00:19:42
chrome.experimental.identity is only around for a
Mattias Nissler (ping if slow)
2013/06/21 02:44:46
OK, reverted the experimental changes.
| |
| 48 public: | 50 public: |
| 49 DECLARE_EXTENSION_FUNCTION("experimental.identity.getAuthToken", | 51 DECLARE_EXTENSION_FUNCTION("experimental.identity.getAuthToken", |
| 50 EXPERIMENTAL_IDENTITY_GETAUTHTOKEN); | 52 EXPERIMENTAL_IDENTITY_GETAUTHTOKEN); |
| 51 | 53 |
| 52 ExperimentalIdentityGetAuthTokenFunction(); | 54 ExperimentalIdentityGetAuthTokenFunction(); |
| 53 virtual bool RunImpl() OVERRIDE; | 55 virtual bool RunImpl() OVERRIDE; |
| 54 | 56 |
| 55 protected: | 57 protected: |
| 56 virtual ~ExperimentalIdentityGetAuthTokenFunction(); | 58 virtual ~ExperimentalIdentityGetAuthTokenFunction(); |
| 57 | 59 |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 76 const IssueAdviceInfo& issue_advice) OVERRIDE; | 78 const IssueAdviceInfo& issue_advice) OVERRIDE; |
| 77 | 79 |
| 78 // IdentitySigninFlow::Delegate implementation: | 80 // IdentitySigninFlow::Delegate implementation: |
| 79 virtual void SigninSuccess(const std::string& token) OVERRIDE; | 81 virtual void SigninSuccess(const std::string& token) OVERRIDE; |
| 80 virtual void SigninFailed() OVERRIDE; | 82 virtual void SigninFailed() OVERRIDE; |
| 81 | 83 |
| 82 // ExtensionInstallPrompt::Delegate implementation: | 84 // ExtensionInstallPrompt::Delegate implementation: |
| 83 virtual void InstallUIProceed() OVERRIDE; | 85 virtual void InstallUIProceed() OVERRIDE; |
| 84 virtual void InstallUIAbort(bool user_initiated) OVERRIDE; | 86 virtual void InstallUIAbort(bool user_initiated) OVERRIDE; |
| 85 | 87 |
| 88 // OAuth2TokenService::Consumer implementation: | |
| 89 virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request, | |
| 90 const std::string& access_token, | |
| 91 const base::Time& expiration_time) OVERRIDE; | |
| 92 virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request, | |
| 93 const GoogleServiceAuthError& error) OVERRIDE; | |
| 94 | |
| 86 // Starts a mint token request to GAIA. | 95 // Starts a mint token request to GAIA. |
| 87 void StartGaiaRequest(OAuth2MintTokenFlow::Mode mode); | 96 void StartGaiaRequest(OAuth2MintTokenFlow::Mode mode); |
| 88 | 97 |
| 89 // Methods for invoking UI. Overridable for testing. | 98 // Methods for invoking UI. Overridable for testing. |
| 90 virtual void ShowLoginPopup(); | 99 virtual void ShowLoginPopup(); |
| 91 virtual void ShowOAuthApprovalDialog(const IssueAdviceInfo& issue_advice); | 100 virtual void ShowOAuthApprovalDialog(const IssueAdviceInfo& issue_advice); |
| 92 // Caller owns the returned instance. | 101 // Caller owns the returned instance. |
| 93 virtual OAuth2MintTokenFlow* CreateMintTokenFlow( | 102 virtual OAuth2MintTokenFlow* CreateMintTokenFlow( |
| 94 OAuth2MintTokenFlow::Mode mode); | 103 OAuth2MintTokenFlow::Mode mode); |
| 95 | 104 |
| 96 // Checks if there is a master login token to mint tokens for the extension. | 105 // Checks if there is a master login token to mint tokens for the extension. |
| 97 virtual bool HasLoginToken() const; | 106 virtual bool HasLoginToken() const; |
| 98 | 107 |
| 99 bool should_prompt_for_scopes_; | 108 bool should_prompt_for_scopes_; |
| 100 scoped_ptr<OAuth2MintTokenFlow> mint_token_flow_; | 109 scoped_ptr<OAuth2MintTokenFlow> mint_token_flow_; |
| 101 std::string refresh_token_; | 110 std::string refresh_token_; |
| 102 bool should_prompt_for_signin_; | 111 bool should_prompt_for_signin_; |
| 103 | 112 |
| 104 // When launched in interactive mode, and if there is no existing grant, | 113 // When launched in interactive mode, and if there is no existing grant, |
| 105 // a permissions prompt will be popped up to the user. | 114 // a permissions prompt will be popped up to the user. |
| 106 IssueAdviceInfo issue_advice_; | 115 IssueAdviceInfo issue_advice_; |
| 107 scoped_ptr<ExtensionInstallPrompt> install_ui_; | 116 scoped_ptr<ExtensionInstallPrompt> install_ui_; |
| 108 scoped_ptr<IdentitySigninFlow> signin_flow_; | 117 scoped_ptr<IdentitySigninFlow> signin_flow_; |
| 118 scoped_ptr<OAuth2TokenService::Request> device_token_request_; | |
| 109 }; | 119 }; |
| 110 | 120 |
| 111 class ExperimentalIdentityLaunchWebAuthFlowFunction | 121 class ExperimentalIdentityLaunchWebAuthFlowFunction |
| 112 : public AsyncExtensionFunction, | 122 : public AsyncExtensionFunction, |
| 113 public ExperimentalWebAuthFlow::Delegate { | 123 public ExperimentalWebAuthFlow::Delegate { |
| 114 public: | 124 public: |
| 115 DECLARE_EXTENSION_FUNCTION("experimental.identity.launchWebAuthFlow", | 125 DECLARE_EXTENSION_FUNCTION("experimental.identity.launchWebAuthFlow", |
| 116 EXPERIMENTAL_IDENTITY_LAUNCHWEBAUTHFLOW); | 126 EXPERIMENTAL_IDENTITY_LAUNCHWEBAUTHFLOW); |
| 117 ExperimentalIdentityLaunchWebAuthFlowFunction(); | 127 ExperimentalIdentityLaunchWebAuthFlowFunction(); |
| 118 | 128 |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 136 private: | 146 private: |
| 137 // ExperimentalWebAuthFlow::Delegate implementation. | 147 // ExperimentalWebAuthFlow::Delegate implementation. |
| 138 virtual void OnAuthFlowFailure(ExperimentalWebAuthFlow::Failure failure) | 148 virtual void OnAuthFlowFailure(ExperimentalWebAuthFlow::Failure failure) |
| 139 OVERRIDE; | 149 OVERRIDE; |
| 140 virtual void OnAuthFlowURLChange(const GURL& redirect_url) OVERRIDE; | 150 virtual void OnAuthFlowURLChange(const GURL& redirect_url) OVERRIDE; |
| 141 }; | 151 }; |
| 142 | 152 |
| 143 } // namespace extensions | 153 } // namespace extensions |
| 144 | 154 |
| 145 #endif // CHROME_BROWSER_EXTENSIONS_API_IDENTITY_EXPERIMENTAL_IDENTITY_API_H_ | 155 #endif // CHROME_BROWSER_EXTENSIONS_API_IDENTITY_EXPERIMENTAL_IDENTITY_API_H_ |
| OLD | NEW |