OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 #include "chrome/browser/ui/webui/chromeos/login/inline_login_handler_chromeos.h
" | 5 #include "chrome/browser/ui/webui/chromeos/login/inline_login_handler_chromeos.h
" |
6 | 6 |
7 #include "chrome/browser/chromeos/login/oauth2_token_fetcher.h" | 7 #include "chrome/browser/chromeos/login/oauth2_token_fetcher.h" |
8 #include "chrome/browser/profiles/profile.h" | 8 #include "chrome/browser/profiles/profile.h" |
9 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" | 9 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
10 #include "chrome/browser/signin/signin_manager_factory.h" | 10 #include "chrome/browser/signin/signin_manager_factory.h" |
| 11 #include "chrome/browser/signin/signin_promo.h" |
| 12 #include "chrome/common/url_constants.h" |
11 #include "components/signin/core/browser/profile_oauth2_token_service.h" | 13 #include "components/signin/core/browser/profile_oauth2_token_service.h" |
12 #include "components/signin/core/browser/signin_manager.h" | 14 #include "components/signin/core/browser/signin_manager.h" |
| 15 #include "content/public/browser/storage_partition.h" |
| 16 #include "content/public/browser/web_contents.h" |
13 #include "content/public/browser/web_ui.h" | 17 #include "content/public/browser/web_ui.h" |
| 18 #include "google_apis/gaia/gaia_urls.h" |
| 19 #include "net/base/url_util.h" |
14 | 20 |
15 namespace chromeos { | 21 namespace chromeos { |
16 | 22 |
17 class InlineLoginHandlerChromeOS::InlineLoginUIOAuth2Delegate | 23 class InlineLoginHandlerChromeOS::InlineLoginUIOAuth2Delegate |
18 : public OAuth2TokenFetcher::Delegate { | 24 : public OAuth2TokenFetcher::Delegate { |
19 public: | 25 public: |
20 explicit InlineLoginUIOAuth2Delegate(content::WebUI* web_ui) | 26 explicit InlineLoginUIOAuth2Delegate(content::WebUI* web_ui, |
21 : web_ui_(web_ui) {} | 27 const std::string& account_id) |
| 28 : web_ui_(web_ui), account_id_(account_id) {} |
| 29 |
22 virtual ~InlineLoginUIOAuth2Delegate() {} | 30 virtual ~InlineLoginUIOAuth2Delegate() {} |
23 | 31 |
24 // OAuth2TokenFetcher::Delegate overrides: | 32 // OAuth2TokenFetcher::Delegate overrides: |
25 virtual void OnOAuth2TokensAvailable( | 33 virtual void OnOAuth2TokensAvailable( |
26 const GaiaAuthConsumer::ClientOAuthResult& oauth2_tokens) OVERRIDE { | 34 const GaiaAuthConsumer::ClientOAuthResult& oauth2_tokens) OVERRIDE { |
27 // Closes sign-in dialog before update token service. Token service update | 35 // Closes sign-in dialog before update token service. Token service update |
28 // might trigger a permission dialog and if this dialog does not close, | 36 // might trigger a permission dialog and if this dialog does not close, |
29 // a DCHECK would be triggered because attempting to activate a window | 37 // a DCHECK would be triggered because attempting to activate a window |
30 // while there is a modal dialog. | 38 // while there is a modal dialog. |
31 web_ui_->CallJavascriptFunction("inline.login.closeDialog"); | 39 web_ui_->CallJavascriptFunction("inline.login.closeDialog"); |
32 | 40 |
33 Profile* profile = Profile::FromWebUI(web_ui_); | 41 Profile* profile = Profile::FromWebUI(web_ui_); |
34 ProfileOAuth2TokenService* token_service = | 42 ProfileOAuth2TokenService* token_service = |
35 ProfileOAuth2TokenServiceFactory::GetForProfile(profile); | 43 ProfileOAuth2TokenServiceFactory::GetForProfile(profile); |
36 SigninManagerBase* signin_manager = | 44 token_service->UpdateCredentials(account_id_, oauth2_tokens.refresh_token); |
37 SigninManagerFactory::GetForProfile(profile); | |
38 token_service->UpdateCredentials( | |
39 signin_manager->GetAuthenticatedAccountId(), | |
40 oauth2_tokens.refresh_token); | |
41 } | 45 } |
42 | 46 |
43 virtual void OnOAuth2TokensFetchFailed() OVERRIDE { | 47 virtual void OnOAuth2TokensFetchFailed() OVERRIDE { |
44 LOG(ERROR) << "Failed to fetch oauth2 token with inline login."; | 48 LOG(ERROR) << "Failed to fetch oauth2 token with inline login."; |
45 web_ui_->CallJavascriptFunction("inline.login.handleOAuth2TokenFailure"); | 49 web_ui_->CallJavascriptFunction("inline.login.handleOAuth2TokenFailure"); |
46 } | 50 } |
47 | 51 |
48 private: | 52 private: |
49 content::WebUI* web_ui_; | 53 content::WebUI* web_ui_; |
| 54 std::string account_id_; |
| 55 |
| 56 DISALLOW_COPY_AND_ASSIGN(InlineLoginUIOAuth2Delegate); |
50 }; | 57 }; |
51 | 58 |
52 InlineLoginHandlerChromeOS::InlineLoginHandlerChromeOS() {} | 59 InlineLoginHandlerChromeOS::InlineLoginHandlerChromeOS() {} |
53 | 60 |
54 InlineLoginHandlerChromeOS::~InlineLoginHandlerChromeOS() {} | 61 InlineLoginHandlerChromeOS::~InlineLoginHandlerChromeOS() {} |
55 | 62 |
56 void InlineLoginHandlerChromeOS::CompleteLogin(const base::ListValue* args) { | 63 void InlineLoginHandlerChromeOS::CompleteLogin(const base::ListValue* args) { |
57 Profile* profile = Profile::FromWebUI(web_ui()); | 64 Profile* profile = Profile::FromWebUI(web_ui()); |
58 | 65 |
59 oauth2_delegate_.reset(new InlineLoginUIOAuth2Delegate(web_ui())); | 66 const base::DictionaryValue* dict = NULL; |
60 oauth2_token_fetcher_.reset(new OAuth2TokenFetcher( | 67 args->GetDictionary(0, &dict); |
61 oauth2_delegate_.get(), profile->GetRequestContext())); | 68 |
62 oauth2_token_fetcher_->StartExchangeFromCookies(); | 69 std::string session_index; |
| 70 dict->GetString("sessionIndex", &session_index); |
| 71 CHECK(!session_index.empty()) << "Session index is empty."; |
| 72 |
| 73 std::string account_id; |
| 74 dict->GetString("email", &account_id); |
| 75 CHECK(!account_id.empty()) << "Account ID is empty."; |
| 76 |
| 77 oauth2_delegate_.reset(new InlineLoginUIOAuth2Delegate(web_ui(), account_id)); |
| 78 net::URLRequestContextGetter* request_context = |
| 79 content::BrowserContext::GetStoragePartitionForSite( |
| 80 profile, GURL(chrome::kChromeUIChromeSigninURL)) |
| 81 ->GetURLRequestContext(); |
| 82 oauth2_token_fetcher_.reset( |
| 83 new OAuth2TokenFetcher(oauth2_delegate_.get(), request_context)); |
| 84 oauth2_token_fetcher_->StartExchangeFromCookies(session_index); |
63 } | 85 } |
64 | 86 |
65 } // namespace chromeos | 87 } // namespace chromeos |
OLD | NEW |