1// Copyright 2013 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 CONTENT_SHELL_BROWSER_SHELL_LOGIN_DIALOG_H_
6#define CONTENT_SHELL_BROWSER_SHELL_LOGIN_DIALOG_H_
7
8#include "base/compiler_specific.h"
9#include "base/strings/string16.h"
10#include "content/public/browser/resource_dispatcher_host_login_delegate.h"
11
12#if defined(OS_MACOSX)
13#if __OBJC__
14@class ShellLoginDialogHelper;
15#else
16class ShellLoginDialogHelper;
17#endif  // __OBJC__
18#endif  // defined(OS_MACOSX)
19
20namespace net {
21class AuthChallengeInfo;
22class URLRequest;
23}
24
25namespace content {
26
27// This class provides a dialog box to ask the user for credentials. Useful in
28// ResourceDispatcherHostDelegate::CreateLoginDelegate.
29class ShellLoginDialog : public ResourceDispatcherHostLoginDelegate {
30 public:
31  // Threading: IO thread.
32  ShellLoginDialog(net::AuthChallengeInfo* auth_info, net::URLRequest* request);
33
34  // ResourceDispatcherHostLoginDelegate implementation:
35  // Threading: IO thread.
36  virtual void OnRequestCancelled() OVERRIDE;
37
38  // Called by the platform specific code when the user responds. Public because
39  // the aforementioned platform specific code may not have access to private
40  // members. Not to be called from client code.
41  // Threading: UI thread.
42  void UserAcceptedAuth(const base::string16& username,
43                        const base::string16& password);
44  void UserCancelledAuth();
45
46 protected:
47  // Threading: any
48  virtual ~ShellLoginDialog();
49
50 private:
51  // All the methods that begin with Platform need to be implemented by the
52  // platform specific LoginDialog implementation.
53  // Creates the dialog.
54  // Threading: UI thread.
55  void PlatformCreateDialog(const base::string16& message);
56  // Called from the destructor to let each platform do any necessary cleanup.
57  // Threading: UI thread.
58  void PlatformCleanUp();
59  // Called from OnRequestCancelled if the request was cancelled.
60  // Threading: UI thread.
61  void PlatformRequestCancelled();
62
63  // Sets up dialog creation.
64  // Threading: UI thread.
65  void PrepDialog(const base::string16& host, const base::string16& realm);
66
67  // Sends the authentication to the requester.
68  // Threading: IO thread.
69  void SendAuthToRequester(bool success,
70                           const base::string16& username,
71                           const base::string16& password);
72
73  // Who/where/what asked for the authentication.
74  // Threading: IO thread.
75  scoped_refptr<net::AuthChallengeInfo> auth_info_;
76
77  // The request that wants login data.
78  // Threading: IO thread.
79  net::URLRequest* request_;
80
81#if defined(OS_MACOSX)
82  // Threading: UI thread.
83  ShellLoginDialogHelper* helper_;  // owned
84#endif
85};
86
87}  // namespace content
88
89#endif  // CONTENT_SHELL_BROWSER_SHELL_LOGIN_DIALOG_H_
90