identity_signin_flow.cc revision effb81e5f8246d0db0270817048dc992db66e9fb
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
3// found in the LICENSE file.
4
5#include "chrome/browser/extensions/api/identity/identity_signin_flow.h"
6
7#include "chrome/browser/app_mode/app_mode_utils.h"
8#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
9#include "chrome/browser/signin/signin_manager.h"
10#include "chrome/browser/signin/signin_manager_factory.h"
11#include "chrome/browser/ui/webui/signin/login_ui_service.h"
12#include "chrome/browser/ui/webui/signin/login_ui_service_factory.h"
13#include "components/signin/core/browser/profile_oauth2_token_service.h"
14
15namespace extensions {
16
17IdentitySigninFlow::IdentitySigninFlow(Delegate* delegate, Profile* profile)
18    : delegate_(delegate),
19      profile_(profile) {
20}
21
22IdentitySigninFlow::~IdentitySigninFlow() {
23  ProfileOAuth2TokenServiceFactory::GetForProfile(profile_)->
24      RemoveObserver(this);
25}
26
27void IdentitySigninFlow::Start() {
28  DCHECK(delegate_);
29
30#if defined(OS_CHROMEOS)
31  // In normal mode (i.e. non-forced app mode), the user has to log out to
32  // re-establish credentials. Let the global error popup handle everything.
33  if (!chrome::IsRunningInForcedAppMode()) {
34    delegate_->SigninFailed();
35    return;
36  }
37#endif
38
39  ProfileOAuth2TokenServiceFactory::GetForProfile(profile_)->AddObserver(this);
40
41  LoginUIService* login_ui_service =
42      LoginUIServiceFactory::GetForProfile(profile_);
43  login_ui_service->ShowLoginPopup();
44}
45
46void IdentitySigninFlow::OnRefreshTokenAvailable(
47    const std::string& account_id) {
48  if (SigninManagerFactory::GetForProfile(profile_)->
49      GetAuthenticatedAccountId() == account_id) {
50    delegate_->SigninSuccess();
51  }
52}
53
54}  // namespace extensions
55