| 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_IDENTITY_API_H_ | 5 #ifndef CHROME_BROWSER_EXTENSIONS_API_IDENTITY_IDENTITY_API_H_ |
| 6 #define CHROME_BROWSER_EXTENSIONS_API_IDENTITY_IDENTITY_API_H_ | 6 #define CHROME_BROWSER_EXTENSIONS_API_IDENTITY_IDENTITY_API_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 | 83 |
| 84 // Initiate/complete the sub-flows. | 84 // Initiate/complete the sub-flows. |
| 85 void StartSigninFlow(); | 85 void StartSigninFlow(); |
| 86 void StartMintTokenFlow(IdentityMintRequestQueue::MintType type); | 86 void StartMintTokenFlow(IdentityMintRequestQueue::MintType type); |
| 87 void CompleteMintTokenFlow(); | 87 void CompleteMintTokenFlow(); |
| 88 | 88 |
| 89 // IdentityMintRequestQueue::Request implementation: | 89 // IdentityMintRequestQueue::Request implementation: |
| 90 virtual void StartMintToken(IdentityMintRequestQueue::MintType type) OVERRIDE; | 90 virtual void StartMintToken(IdentityMintRequestQueue::MintType type) OVERRIDE; |
| 91 | 91 |
| 92 // OAuth2MintTokenFlow::Delegate implementation: | 92 // OAuth2MintTokenFlow::Delegate implementation: |
| 93 virtual void OnMintTokenSuccess(const std::string& access_token) OVERRIDE; | 93 virtual void OnMintTokenSuccess(const std::string& access_token, |
| 94 int time_to_live) OVERRIDE; |
| 94 virtual void OnMintTokenFailure( | 95 virtual void OnMintTokenFailure( |
| 95 const GoogleServiceAuthError& error) OVERRIDE; | 96 const GoogleServiceAuthError& error) OVERRIDE; |
| 96 virtual void OnIssueAdviceSuccess( | 97 virtual void OnIssueAdviceSuccess( |
| 97 const IssueAdviceInfo& issue_advice) OVERRIDE; | 98 const IssueAdviceInfo& issue_advice) OVERRIDE; |
| 98 | 99 |
| 99 // IdentitySigninFlow::Delegate implementation: | 100 // IdentitySigninFlow::Delegate implementation: |
| 100 virtual void SigninSuccess(const std::string& token) OVERRIDE; | 101 virtual void SigninSuccess(const std::string& token) OVERRIDE; |
| 101 virtual void SigninFailed() OVERRIDE; | 102 virtual void SigninFailed() OVERRIDE; |
| 102 | 103 |
| 103 // ExtensionInstallPrompt::Delegate implementation: | 104 // ExtensionInstallPrompt::Delegate implementation: |
| (...skipping 19 matching lines...) Expand all Loading... |
| 123 std::string refresh_token_; | 124 std::string refresh_token_; |
| 124 bool should_prompt_for_signin_; | 125 bool should_prompt_for_signin_; |
| 125 | 126 |
| 126 // When launched in interactive mode, and if there is no existing grant, | 127 // When launched in interactive mode, and if there is no existing grant, |
| 127 // a permissions prompt will be popped up to the user. | 128 // a permissions prompt will be popped up to the user. |
| 128 IssueAdviceInfo issue_advice_; | 129 IssueAdviceInfo issue_advice_; |
| 129 scoped_ptr<ExtensionInstallPrompt> install_ui_; | 130 scoped_ptr<ExtensionInstallPrompt> install_ui_; |
| 130 scoped_ptr<IdentitySigninFlow> signin_flow_; | 131 scoped_ptr<IdentitySigninFlow> signin_flow_; |
| 131 }; | 132 }; |
| 132 | 133 |
| 134 class IdentityRemoveCachedAuthTokenFunction : public SyncExtensionFunction { |
| 135 public: |
| 136 DECLARE_EXTENSION_FUNCTION("experimental.identity.removeCachedAuthToken", |
| 137 EXPERIMENTAL_IDENTITY_REMOVECACHEDAUTHTOKEN) |
| 138 IdentityRemoveCachedAuthTokenFunction(); |
| 139 |
| 140 protected: |
| 141 virtual ~IdentityRemoveCachedAuthTokenFunction(); |
| 142 |
| 143 // SyncExtensionFunction implementation: |
| 144 virtual bool RunImpl() OVERRIDE; |
| 145 }; |
| 146 |
| 133 class IdentityLaunchWebAuthFlowFunction : public AsyncExtensionFunction, | 147 class IdentityLaunchWebAuthFlowFunction : public AsyncExtensionFunction, |
| 134 public WebAuthFlow::Delegate { | 148 public WebAuthFlow::Delegate { |
| 135 public: | 149 public: |
| 136 DECLARE_EXTENSION_FUNCTION("experimental.identity.launchWebAuthFlow", | 150 DECLARE_EXTENSION_FUNCTION("experimental.identity.launchWebAuthFlow", |
| 137 EXPERIMENTAL_IDENTITY_LAUNCHWEBAUTHFLOW) | 151 EXPERIMENTAL_IDENTITY_LAUNCHWEBAUTHFLOW) |
| 138 | 152 |
| 139 IdentityLaunchWebAuthFlowFunction(); | 153 IdentityLaunchWebAuthFlowFunction(); |
| 140 | 154 |
| 141 // URL checking helpers. Public for testing. | 155 // URL checking helpers. Public for testing. |
| 142 // Checks to see if the current URL ends the flow. | 156 // Checks to see if the current URL ends the flow. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 153 virtual void OnAuthFlowFailure(WebAuthFlow::Failure failure) OVERRIDE; | 167 virtual void OnAuthFlowFailure(WebAuthFlow::Failure failure) OVERRIDE; |
| 154 virtual void OnAuthFlowURLChange(const GURL& redirect_url) OVERRIDE; | 168 virtual void OnAuthFlowURLChange(const GURL& redirect_url) OVERRIDE; |
| 155 | 169 |
| 156 // Helper to initialize final URLs vector. | 170 // Helper to initialize final URLs vector. |
| 157 void InitFinalRedirectURLPrefixes(const std::string& extension_id); | 171 void InitFinalRedirectURLPrefixes(const std::string& extension_id); |
| 158 | 172 |
| 159 scoped_ptr<WebAuthFlow> auth_flow_; | 173 scoped_ptr<WebAuthFlow> auth_flow_; |
| 160 std::vector<GURL> final_prefixes_; | 174 std::vector<GURL> final_prefixes_; |
| 161 }; | 175 }; |
| 162 | 176 |
| 177 class IdentityTokenCacheValue { |
| 178 public: |
| 179 IdentityTokenCacheValue(); |
| 180 explicit IdentityTokenCacheValue(const IssueAdviceInfo& issue_advice); |
| 181 IdentityTokenCacheValue(const std::string& token, |
| 182 base::TimeDelta time_to_live); |
| 183 ~IdentityTokenCacheValue(); |
| 184 |
| 185 // Order of these entries is used to determine whether or not new |
| 186 // entries supercede older ones in SetCachedToken. |
| 187 enum CacheValueStatus { |
| 188 CACHE_STATUS_NOTFOUND, |
| 189 CACHE_STATUS_ADVICE, |
| 190 CACHE_STATUS_TOKEN |
| 191 }; |
| 192 |
| 193 CacheValueStatus status() const; |
| 194 const IssueAdviceInfo& issue_advice() const; |
| 195 const std::string& token() const; |
| 196 |
| 197 private: |
| 198 bool is_expired() const; |
| 199 |
| 200 CacheValueStatus status_; |
| 201 IssueAdviceInfo issue_advice_; |
| 202 std::string token_; |
| 203 base::Time expiration_time_; |
| 204 }; |
| 205 |
| 163 class IdentityAPI : public ProfileKeyedAPI, | 206 class IdentityAPI : public ProfileKeyedAPI, |
| 164 public SigninGlobalError::AuthStatusProvider, | 207 public SigninGlobalError::AuthStatusProvider, |
| 165 public content::NotificationObserver { | 208 public content::NotificationObserver { |
| 166 public: | 209 public: |
| 167 explicit IdentityAPI(Profile* profile); | 210 explicit IdentityAPI(Profile* profile); |
| 168 virtual ~IdentityAPI(); | 211 virtual ~IdentityAPI(); |
| 169 void Initialize(); | 212 void Initialize(); |
| 170 | 213 |
| 171 // Request serialization queue for getAuthToken. | 214 // Request serialization queue for getAuthToken. |
| 172 IdentityMintRequestQueue* mint_queue(); | 215 IdentityMintRequestQueue* mint_queue(); |
| 173 | 216 |
| 217 // Token cache |
| 218 void SetCachedToken(const std::string& extension_id, |
| 219 const std::vector<std::string> scopes, |
| 220 const IdentityTokenCacheValue& token_data); |
| 221 void EraseCachedToken(const std::string& extension_id, |
| 222 const std::string& token); |
| 223 void EraseAllCachedTokens(); |
| 224 const IdentityTokenCacheValue& GetCachedToken( |
| 225 const std::string& extension_id, const std::vector<std::string> scopes); |
| 226 |
| 174 void ReportAuthError(const GoogleServiceAuthError& error); | 227 void ReportAuthError(const GoogleServiceAuthError& error); |
| 175 | 228 |
| 176 // ProfileKeyedAPI implementation. | 229 // ProfileKeyedAPI implementation. |
| 177 virtual void Shutdown() OVERRIDE; | 230 virtual void Shutdown() OVERRIDE; |
| 178 static ProfileKeyedAPIFactory<IdentityAPI>* GetFactoryInstance(); | 231 static ProfileKeyedAPIFactory<IdentityAPI>* GetFactoryInstance(); |
| 179 | 232 |
| 180 // AuthStatusProvider implementation. | 233 // AuthStatusProvider implementation. |
| 181 virtual GoogleServiceAuthError GetAuthStatus() const OVERRIDE; | 234 virtual GoogleServiceAuthError GetAuthStatus() const OVERRIDE; |
| 182 | 235 |
| 183 // content::NotificationObserver implementation. | 236 // content::NotificationObserver implementation. |
| 184 virtual void Observe(int type, | 237 virtual void Observe(int type, |
| 185 const content::NotificationSource& source, | 238 const content::NotificationSource& source, |
| 186 const content::NotificationDetails& details) OVERRIDE; | 239 const content::NotificationDetails& details) OVERRIDE; |
| 187 | 240 |
| 188 private: | 241 private: |
| 189 friend class ProfileKeyedAPIFactory<IdentityAPI>; | 242 friend class ProfileKeyedAPIFactory<IdentityAPI>; |
| 190 | 243 |
| 244 struct TokenCacheKey { |
| 245 TokenCacheKey(const std::string& extension_id, |
| 246 const std::set<std::string> scopes); |
| 247 ~TokenCacheKey(); |
| 248 bool operator<(const TokenCacheKey& rhs) const; |
| 249 std::string extension_id; |
| 250 std::set<std::string> scopes; |
| 251 }; |
| 252 |
| 191 // ProfileKeyedAPI implementation. | 253 // ProfileKeyedAPI implementation. |
| 192 static const char* service_name() { | 254 static const char* service_name() { |
| 193 return "IdentityAPI"; | 255 return "IdentityAPI"; |
| 194 } | 256 } |
| 195 static const bool kServiceIsNULLWhileTesting = true; | 257 static const bool kServiceIsNULLWhileTesting = true; |
| 196 | 258 |
| 197 Profile* profile_; | 259 Profile* profile_; |
| 198 SigninManagerBase* signin_manager_; | 260 SigninManagerBase* signin_manager_; |
| 199 GoogleServiceAuthError error_; | 261 GoogleServiceAuthError error_; |
| 200 // Used to listen to notifications from the TokenService. | 262 // Used to listen to notifications from the TokenService. |
| 201 content::NotificationRegistrar registrar_; | 263 content::NotificationRegistrar registrar_; |
| 202 IdentityMintRequestQueue mint_queue_; | 264 IdentityMintRequestQueue mint_queue_; |
| 265 std::map<TokenCacheKey, IdentityTokenCacheValue> token_cache_; |
| 203 }; | 266 }; |
| 204 | 267 |
| 205 template <> | 268 template <> |
| 206 void ProfileKeyedAPIFactory<IdentityAPI>::DeclareFactoryDependencies(); | 269 void ProfileKeyedAPIFactory<IdentityAPI>::DeclareFactoryDependencies(); |
| 207 | 270 |
| 208 } // namespace extensions | 271 } // namespace extensions |
| 209 | 272 |
| 210 #endif // CHROME_BROWSER_EXTENSIONS_API_IDENTITY_IDENTITY_API_H_ | 273 #endif // CHROME_BROWSER_EXTENSIONS_API_IDENTITY_IDENTITY_API_H_ |
| OLD | NEW |