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