| Index: chrome/browser/ui/webui/chromeos/login/inline_login_handler_chromeos.cc
|
| diff --git a/chrome/browser/ui/webui/chromeos/login/inline_login_handler_chromeos.cc b/chrome/browser/ui/webui/chromeos/login/inline_login_handler_chromeos.cc
|
| index 9fa4efce7e6bdf386abf7cf41a34f16d3e163b81..8c5ddc5544318eb793f05f1d8df29e9402b4ce7b 100644
|
| --- a/chrome/browser/ui/webui/chromeos/login/inline_login_handler_chromeos.cc
|
| +++ b/chrome/browser/ui/webui/chromeos/login/inline_login_handler_chromeos.cc
|
| @@ -8,17 +8,25 @@
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
|
| #include "chrome/browser/signin/signin_manager_factory.h"
|
| +#include "chrome/browser/signin/signin_promo.h"
|
| +#include "chrome/common/url_constants.h"
|
| #include "components/signin/core/browser/profile_oauth2_token_service.h"
|
| #include "components/signin/core/browser/signin_manager.h"
|
| +#include "content/public/browser/storage_partition.h"
|
| +#include "content/public/browser/web_contents.h"
|
| #include "content/public/browser/web_ui.h"
|
| +#include "google_apis/gaia/gaia_urls.h"
|
| +#include "net/base/url_util.h"
|
|
|
| namespace chromeos {
|
|
|
| class InlineLoginHandlerChromeOS::InlineLoginUIOAuth2Delegate
|
| : public OAuth2TokenFetcher::Delegate {
|
| public:
|
| - explicit InlineLoginUIOAuth2Delegate(content::WebUI* web_ui)
|
| - : web_ui_(web_ui) {}
|
| + explicit InlineLoginUIOAuth2Delegate(content::WebUI* web_ui,
|
| + const std::string& account_id)
|
| + : web_ui_(web_ui), account_id_(account_id) {}
|
| +
|
| virtual ~InlineLoginUIOAuth2Delegate() {}
|
|
|
| // OAuth2TokenFetcher::Delegate overrides:
|
| @@ -33,11 +41,7 @@ class InlineLoginHandlerChromeOS::InlineLoginUIOAuth2Delegate
|
| Profile* profile = Profile::FromWebUI(web_ui_);
|
| ProfileOAuth2TokenService* token_service =
|
| ProfileOAuth2TokenServiceFactory::GetForProfile(profile);
|
| - SigninManagerBase* signin_manager =
|
| - SigninManagerFactory::GetForProfile(profile);
|
| - token_service->UpdateCredentials(
|
| - signin_manager->GetAuthenticatedAccountId(),
|
| - oauth2_tokens.refresh_token);
|
| + token_service->UpdateCredentials(account_id_, oauth2_tokens.refresh_token);
|
| }
|
|
|
| virtual void OnOAuth2TokensFetchFailed() OVERRIDE {
|
| @@ -47,6 +51,9 @@ class InlineLoginHandlerChromeOS::InlineLoginUIOAuth2Delegate
|
|
|
| private:
|
| content::WebUI* web_ui_;
|
| + std::string account_id_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(InlineLoginUIOAuth2Delegate);
|
| };
|
|
|
| InlineLoginHandlerChromeOS::InlineLoginHandlerChromeOS() {}
|
| @@ -56,10 +63,25 @@ InlineLoginHandlerChromeOS::~InlineLoginHandlerChromeOS() {}
|
| void InlineLoginHandlerChromeOS::CompleteLogin(const base::ListValue* args) {
|
| Profile* profile = Profile::FromWebUI(web_ui());
|
|
|
| - oauth2_delegate_.reset(new InlineLoginUIOAuth2Delegate(web_ui()));
|
| - oauth2_token_fetcher_.reset(new OAuth2TokenFetcher(
|
| - oauth2_delegate_.get(), profile->GetRequestContext()));
|
| - oauth2_token_fetcher_->StartExchangeFromCookies();
|
| + const base::DictionaryValue* dict = NULL;
|
| + args->GetDictionary(0, &dict);
|
| +
|
| + std::string session_index;
|
| + dict->GetString("sessionIndex", &session_index);
|
| + CHECK(!session_index.empty()) << "Session index is empty.";
|
| +
|
| + std::string account_id;
|
| + dict->GetString("email", &account_id);
|
| + CHECK(!account_id.empty()) << "Account ID is empty.";
|
| +
|
| + oauth2_delegate_.reset(new InlineLoginUIOAuth2Delegate(web_ui(), account_id));
|
| + net::URLRequestContextGetter* request_context =
|
| + content::BrowserContext::GetStoragePartitionForSite(
|
| + profile, GURL(chrome::kChromeUIChromeSigninURL))
|
| + ->GetURLRequestContext();
|
| + oauth2_token_fetcher_.reset(
|
| + new OAuth2TokenFetcher(oauth2_delegate_.get(), request_context));
|
| + oauth2_token_fetcher_->StartExchangeFromCookies(session_index);
|
| }
|
|
|
| } // namespace chromeos
|
|
|