1 // Copyright 2014 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 "chromeos/login/auth/online_attempt_host.h" 6 7 #include "base/bind.h" 8 #include "base/location.h" 9 #include "base/message_loop/message_loop_proxy.h" 10 #include "chromeos/login/auth/auth_attempt_state.h" 11 #include "chromeos/login/auth/online_attempt.h" 12 #include "chromeos/login/auth/user_context.h" 13 #include "components/user_manager/user_type.h" 14 15 namespace chromeos { 16 17 OnlineAttemptHost::OnlineAttemptHost(Delegate* delegate) 18 : message_loop_(base::MessageLoopProxy::current()), 19 delegate_(delegate), 20 weak_ptr_factory_(this) { 21 } 22 23 OnlineAttemptHost::~OnlineAttemptHost() { 24 Reset(); 25 } 26 27 void OnlineAttemptHost::Check(net::URLRequestContextGetter* request_context, 28 const UserContext& user_context) { 29 if (user_context != current_attempt_user_context_) { 30 Reset(); 31 current_attempt_user_context_ = user_context; 32 33 state_.reset(new AuthAttemptState(user_context, 34 user_manager::USER_TYPE_REGULAR, 35 false, // unlock 36 false, // online_complete 37 false)); // user_is_new 38 online_attempt_.reset(new OnlineAttempt(state_.get(), this)); 39 online_attempt_->Initiate(request_context); 40 } 41 } 42 43 void OnlineAttemptHost::Reset() { 44 online_attempt_.reset(NULL); 45 current_attempt_user_context_ = UserContext(); 46 } 47 48 void OnlineAttemptHost::Resolve() { 49 if (state_->online_complete()) { 50 bool success = state_->online_outcome().reason() == AuthFailure::NONE; 51 message_loop_->PostTask(FROM_HERE, 52 base::Bind(&OnlineAttemptHost::ResolveOnUIThread, 53 weak_ptr_factory_.GetWeakPtr(), 54 success)); 55 } 56 } 57 58 void OnlineAttemptHost::ResolveOnUIThread(bool success) { 59 delegate_->OnChecked(current_attempt_user_context_.GetUserID(), success); 60 Reset(); 61 } 62 63 } // namespace chromeos 64