1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#ifndef CHROMEOS_LOGIN_AUTH_ONLINE_ATTEMPT_HOST_H_ 603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#define CHROMEOS_LOGIN_AUTH_ONLINE_ATTEMPT_HOST_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/memory/weak_ptr.h" 1303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chromeos/chromeos_export.h" 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chromeos/login/auth/auth_attempt_state_resolver.h" 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/login/auth/user_context.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace net { 1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class URLRequestContextGetter; 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AuthAttemptState; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OnlineAttempt; 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class UserContext; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper class which hosts OnlineAttempt for online credentials checking. 2803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class CHROMEOS_EXPORT OnlineAttemptHost : public AuthAttemptStateResolver { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class Delegate { 3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) public: 3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Called after user_context were checked online. 3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual void OnChecked(const std::string& username, bool success) = 0; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) explicit OnlineAttemptHost(Delegate* delegate); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~OnlineAttemptHost(); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Performs an online check of the credentials in |request_context| and 4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // invokes 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // the delegate's OnChecked() with the result. Note that only one check can be 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // in progress at any given time. If this method is invoked with a different 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // |user_context| than a check currently in progress, the current check will 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // be silently aborted. 4503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void Check(net::URLRequestContextGetter* request_context, 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const UserContext& user_context); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Resets the checking process. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Reset(); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AuthAttemptStateResolver overrides. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Executed on IO thread. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Resolve() OVERRIDE; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Does an actual resolve on UI thread. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ResolveOnUIThread(bool success); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 5903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_refptr<base::MessageLoopProxy> message_loop_; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate_; 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) UserContext current_attempt_user_context_; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<OnlineAttempt> online_attempt_; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<AuthAttemptState> state_; 647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::WeakPtrFactory<OnlineAttemptHost> weak_ptr_factory_; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(OnlineAttemptHost); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} // namespace chromeos 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif // CHROMEOS_LOGIN_AUTH_ONLINE_ATTEMPT_HOST_H_ 72