1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/extensions/api/identity/identity_signin_flow.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/app_mode/app_mode_utils.h" 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/webui/signin/login_ui_service.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" 12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/profile_oauth2_token_service.h" 13e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace extensions { 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IdentitySigninFlow::IdentitySigninFlow(Delegate* delegate, Profile* profile) 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : delegate_(delegate), 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_(profile) { 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IdentitySigninFlow::~IdentitySigninFlow() { 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ProfileOAuth2TokenServiceFactory::GetForProfile(profile_)-> 247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch RemoveObserver(this); 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void IdentitySigninFlow::Start() { 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(delegate_); 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // In normal mode (i.e. non-forced app mode), the user has to log out to 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // re-establish credentials. Let the global error popup handle everything. 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!chrome::IsRunningInForcedAppMode()) { 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_->SigninFailed(); 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ProfileOAuth2TokenServiceFactory::GetForProfile(profile_)->AddObserver(this); 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoginUIService* login_ui_service = 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoginUIServiceFactory::GetForProfile(profile_); 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) login_ui_service->ShowLoginPopup(); 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid IdentitySigninFlow::OnRefreshTokenAvailable( 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& account_id) { 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (SigninManagerFactory::GetForProfile(profile_)-> 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetAuthenticatedAccountId() == account_id) { 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) delegate_->SigninSuccess(); 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace extensions 55