Home | History | Annotate | Download | only in browser
      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
     16 class ShellLoginDialogHelper;
     17 #endif  // __OBJC__
     18 #endif  // defined(OS_MACOSX)
     19 
     20 namespace net {
     21 class AuthChallengeInfo;
     22 class URLRequest;
     23 }
     24 
     25 namespace content {
     26 
     27 // This class provides a dialog box to ask the user for credentials. Useful in
     28 // ResourceDispatcherHostDelegate::CreateLoginDelegate.
     29 class 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