1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chromeos/login/auth/online_attempt_host.h" 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/bind.h" 803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/location.h" 903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/message_loop/message_loop_proxy.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chromeos/login/auth/auth_attempt_state.h" 1103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chromeos/login/auth/online_attempt.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/login/auth/user_context.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/user_manager/user_type.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace chromeos { 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)OnlineAttemptHost::OnlineAttemptHost(Delegate* delegate) 1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) : message_loop_(base::MessageLoopProxy::current()), 1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) delegate_(delegate), 2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) weak_ptr_factory_(this) { 2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)OnlineAttemptHost::~OnlineAttemptHost() { 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Reset(); 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void OnlineAttemptHost::Check(net::URLRequestContextGetter* request_context, 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const UserContext& user_context) { 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (user_context != current_attempt_user_context_) { 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Reset(); 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) current_attempt_user_context_ = user_context; 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) state_.reset(new AuthAttemptState(user_context, 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch user_manager::USER_TYPE_REGULAR, 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) false, // unlock 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) false, // online_complete 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) false)); // user_is_new 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) online_attempt_.reset(new OnlineAttempt(state_.get(), this)); 3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) online_attempt_->Initiate(request_context); 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void OnlineAttemptHost::Reset() { 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) online_attempt_.reset(NULL); 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) current_attempt_user_context_ = UserContext(); 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void OnlineAttemptHost::Resolve() { 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (state_->online_complete()) { 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool success = state_->online_outcome().reason() == AuthFailure::NONE; 5103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) message_loop_->PostTask(FROM_HERE, 5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Bind(&OnlineAttemptHost::ResolveOnUIThread, 5303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) weak_ptr_factory_.GetWeakPtr(), 5403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) success)); 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void OnlineAttemptHost::ResolveOnUIThread(bool success) { 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->OnChecked(current_attempt_user_context_.GetUserID(), success); 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Reset(); 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace chromeos 64