13551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
53551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#ifndef CONTENT_SHELL_BROWSER_SHELL_LOGIN_DIALOG_H_
63551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#define CONTENT_SHELL_BROWSER_SHELL_LOGIN_DIALOG_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/resource_dispatcher_host_login_delegate.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __OBJC__
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@class ShellLoginDialogHelper;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ShellLoginDialogHelper;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // __OBJC__
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(OS_MACOSX)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AuthChallengeInfo;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLRequest;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class provides a dialog box to ask the user for credentials. Useful in
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ResourceDispatcherHostDelegate::CreateLoginDelegate.
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ShellLoginDialog : public ResourceDispatcherHostLoginDelegate {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Threading: IO thread.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ShellLoginDialog(net::AuthChallengeInfo* auth_info, net::URLRequest* request);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ResourceDispatcherHostLoginDelegate implementation:
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Threading: IO thread.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnRequestCancelled() OVERRIDE;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called by the platform specific code when the user responds. Public because
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the aforementioned platform specific code may not have access to private
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // members. Not to be called from client code.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Threading: UI thread.
42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void UserAcceptedAuth(const base::string16& username,
43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                        const base::string16& password);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UserCancelledAuth();
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Threading: any
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ShellLoginDialog();
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // All the methods that begin with Platform need to be implemented by the
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // platform specific LoginDialog implementation.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates the dialog.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Threading: UI thread.
55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void PlatformCreateDialog(const base::string16& message);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called from the destructor to let each platform do any necessary cleanup.
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Threading: UI thread.
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void PlatformCleanUp();
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called from OnRequestCancelled if the request was cancelled.
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Threading: UI thread.
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void PlatformRequestCancelled();
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets up dialog creation.
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Threading: UI thread.
65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void PrepDialog(const base::string16& host, const base::string16& realm);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sends the authentication to the requester.
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Threading: IO thread.
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SendAuthToRequester(bool success,
70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                           const base::string16& username,
71a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                           const base::string16& password);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Who/where/what asked for the authentication.
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Threading: IO thread.
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<net::AuthChallengeInfo> auth_info_;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The request that wants login data.
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Threading: IO thread.
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::URLRequest* request_;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Threading: UI thread.
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ShellLoginDialogHelper* helper_;  // owned
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#endif  // CONTENT_SHELL_BROWSER_SHELL_LOGIN_DIALOG_H_
90