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