Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(537)

Unified Diff: chrome/browser/login_prompt_mac.mm

Issue 173341: Autofill http auth dialog on os x and linux. (Closed)
Patch Set: linux compiles and works Created 11 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/login_prompt_mac.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/login_prompt_mac.mm
diff --git a/chrome/browser/login_prompt_mac.mm b/chrome/browser/login_prompt_mac.mm
index a8da3804082670ac910e6402b113e4ea1b654a10..99bbaba5f882ca79a807f317dc4fe369081607de 100644
--- a/chrome/browser/login_prompt_mac.mm
+++ b/chrome/browser/login_prompt_mac.mm
@@ -10,6 +10,7 @@
#include "base/message_loop.h"
#include "base/sys_string_conversions.h"
#include "chrome/browser/cocoa/constrained_window_mac.h"
+#include "chrome/browser/login_model.h"
#include "chrome/browser/password_manager/password_manager.h"
#include "chrome/browser/renderer_host/resource_dispatcher_host.h"
#include "chrome/browser/tab_contents/navigation_controller.h"
@@ -30,7 +31,8 @@ using webkit_glue::PasswordForm;
// have been called.
class LoginHandlerMac : public LoginHandler,
public base::RefCountedThreadSafe<LoginHandlerMac>,
- public ConstrainedWindowMacDelegateCustomSheet {
+ public ConstrainedWindowMacDelegateCustomSheet,
+ public LoginModelObserver {
public:
LoginHandlerMac(URLRequest* request, MessageLoop* ui_loop)
: handled_auth_(false),
@@ -38,7 +40,9 @@ class LoginHandlerMac : public LoginHandler,
ui_loop_(ui_loop),
request_(request),
request_loop_(MessageLoop::current()),
- password_manager_(NULL) {
+ password_manager_(NULL),
+ sheet_controller_(nil),
+ login_model_(NULL) {
// This constructor is called on the I/O thread, so we cannot load the nib
// here. BuildViewForPasswordManager() will be invoked on the UI thread
// later, so wait with loading the nib until then.
@@ -53,6 +57,21 @@ class LoginHandlerMac : public LoginHandler,
}
virtual ~LoginHandlerMac() {
+ if (login_model_)
+ login_model_->SetObserver(NULL);
+ }
+
+ void SetModel(LoginModel* model) {
+ login_model_ = model;
+ if (login_model_)
+ login_model_->SetObserver(this);
+ }
+
+ // LoginModelObserver implementation.
+ virtual void OnAutofillDataAvailable(const std::wstring& username,
+ const std::wstring& password) {
+ [sheet_controller_ autofillLogin:base::SysWideToNSString(username)
+ password:base::SysWideToNSString(password)];
}
// LoginHandler:
@@ -61,11 +80,13 @@ class LoginHandlerMac : public LoginHandler,
DCHECK(MessageLoop::current() == ui_loop_);
// Load nib here instead of in constructor.
- LoginHandlerSheet* sheetController = [[[LoginHandlerSheet alloc]
+ sheet_controller_ = [[[LoginHandlerSheet alloc]
initWithLoginHandler:this] autorelease];
- init([sheetController window], sheetController,
+ init([sheet_controller_ window], sheet_controller_,
@selector(sheetDidEnd:returnCode:contextInfo:));
+ SetModel(manager);
+
// Scary thread safety note: This can potentially be called *after* SetAuth
// or CancelAuth (say, if the request was cancelled before the UI thread got
// control). However, that's OK since any UI interaction in those functions
@@ -265,6 +286,13 @@ class LoginHandlerMac : public LoginHandler,
int render_process_host_id_;
int tab_contents_id_;
+ // The Cocoa controller of the GUI.
+ LoginHandlerSheet* sheet_controller_;
+
+ // If not null, points to a model we need to notify of our own destruction
+ // so it doesn't try and access this when its too late.
+ LoginModel* login_model_;
+
DISALLOW_COPY_AND_ASSIGN(LoginHandlerMac);
};
@@ -305,4 +333,12 @@ LoginHandler* LoginHandler::Create(URLRequest* request, MessageLoop* ui_loop) {
// Also called when user navigates to another page while the sheet is open.
}
+- (void)autofillLogin:(NSString*)login password:(NSString*)password {
+ if ([[nameField_ stringValue] length] == 0) {
stuartmorgan 2009/08/25 16:54:39 Per IIRC comments, I believe that because of the d
+ [nameField_ setStringValue:login];
+ [passwordField_ setStringValue:password];
+ [nameField_ selectText:self];
+ }
+}
+
@end
« no previous file with comments | « chrome/browser/login_prompt_mac.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698