Home | History | Annotate | Download | only in auth
      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 #ifndef CHROMEOS_LOGIN_AUTH_ONLINE_ATTEMPT_HOST_H_
      6 #define CHROMEOS_LOGIN_AUTH_ONLINE_ATTEMPT_HOST_H_
      7 
      8 #include <string>
      9 
     10 #include "base/memory/ref_counted.h"
     11 #include "base/memory/scoped_ptr.h"
     12 #include "base/memory/weak_ptr.h"
     13 #include "chromeos/chromeos_export.h"
     14 #include "chromeos/login/auth/auth_attempt_state_resolver.h"
     15 #include "chromeos/login/auth/user_context.h"
     16 
     17 namespace net {
     18 class URLRequestContextGetter;
     19 }
     20 
     21 namespace chromeos {
     22 
     23 class AuthAttemptState;
     24 class OnlineAttempt;
     25 class UserContext;
     26 
     27 // Helper class which hosts OnlineAttempt for online credentials checking.
     28 class CHROMEOS_EXPORT OnlineAttemptHost : public AuthAttemptStateResolver {
     29  public:
     30   class Delegate {
     31    public:
     32     // Called after user_context were checked online.
     33     virtual void OnChecked(const std::string& username, bool success) = 0;
     34   };
     35 
     36   explicit OnlineAttemptHost(Delegate* delegate);
     37   virtual ~OnlineAttemptHost();
     38 
     39   // Performs an online check of the credentials in |request_context| and
     40   // invokes
     41   // the delegate's OnChecked() with the result. Note that only one check can be
     42   // in progress at any given time. If this method is invoked with a different
     43   // |user_context| than a check currently in progress, the current check will
     44   // be silently aborted.
     45   void Check(net::URLRequestContextGetter* request_context,
     46              const UserContext& user_context);
     47 
     48   // Resets the checking process.
     49   void Reset();
     50 
     51   // AuthAttemptStateResolver overrides.
     52   // Executed on IO thread.
     53   virtual void Resolve() OVERRIDE;
     54 
     55   // Does an actual resolve on UI thread.
     56   void ResolveOnUIThread(bool success);
     57 
     58  private:
     59   scoped_refptr<base::MessageLoopProxy> message_loop_;
     60   Delegate* delegate_;
     61   UserContext current_attempt_user_context_;
     62   scoped_ptr<OnlineAttempt> online_attempt_;
     63   scoped_ptr<AuthAttemptState> state_;
     64   base::WeakPtrFactory<OnlineAttemptHost> weak_ptr_factory_;
     65 
     66   DISALLOW_COPY_AND_ASSIGN(OnlineAttemptHost);
     67 };
     68 
     69 }  // namespace chromeos
     70 
     71 #endif  // CHROMEOS_LOGIN_AUTH_ONLINE_ATTEMPT_HOST_H_
     72