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
17namespace net {
18class URLRequestContextGetter;
19}
20
21namespace chromeos {
22
23class AuthAttemptState;
24class OnlineAttempt;
25class UserContext;
26
27// Helper class which hosts OnlineAttempt for online credentials checking.
28class 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