login_view.h revision 21d179b334e59e9a3bfcaed4c4430bef1bc5759d
14a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
24a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
34a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// found in the LICENSE file.
44a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
54a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#ifndef CHROME_BROWSER_UI_VIEWS_LOGIN_VIEW_H_
64a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#define CHROME_BROWSER_UI_VIEWS_LOGIN_VIEW_H_
74a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#pragma once
84a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "base/task.h"
1021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/login/login_model.h"
114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "views/view.h"
124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochnamespace views {
144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass Label;
154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass Textfield;
164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass LoginModel;
174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}  // namespace views
184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// This class is responsible for displaying the contents of a login window
204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// for HTTP/FTP authentication.
214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass LoginView : public views::View, public LoginModelObserver {
224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public:
234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // |focus_view| indicates if the view can be focused.
244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  LoginView(const std::wstring& explanation, bool focus_view);
254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual ~LoginView();
264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Access the data in the username/password text fields.
284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  std::wstring GetUsername();
294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  std::wstring GetPassword();
304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // LoginModelObserver implementation.
324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void OnAutofillDataAvailable(const std::wstring& username,
334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                                       const std::wstring& password);
344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Sets the model. This lets the observer notify the model
364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // when it has been closed / freed, so the model should no longer try and
374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // contact it. The view does not own the model, and it is the responsibility
384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // of the caller to inform this view if the model is deleted.
394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void SetModel(LoginModel* model);
404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void RequestFocus();
424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch protected:
444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // views::View overrides:
454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void ViewHierarchyChanged(bool is_add, views::View *parent,
464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                                    views::View *child);
474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void NativeViewHierarchyChanged(bool attached,
494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                                          gfx::NativeView native_view,
504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                                          views::RootView* root_view);
514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private:
534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void FocusFirstField();
544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Non-owning refs to the input text fields.
564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::Textfield* username_field_;
574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::Textfield* password_field_;
584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Button labels
604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::Label* username_label_;
614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::Label* password_label_;
624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Authentication message.
644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::Label* message_label_;
654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // If not null, points to a model we need to notify of our own destruction
674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // so it doesn't try and access this when its too late.
684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  LoginModel* login_model_;
694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  ScopedRunnableMethodFactory<LoginView> focus_grabber_factory_;
714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // See description above constructor.
734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  const bool focus_view_;
744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Indicates that this view was created when focus manager was unavailable
764a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // (on the hidden tab, for example). This is only used if focus_view_ is true.
774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  bool focus_delayed_;
784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(LoginView);
804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch};
814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#endif  // CHROME_BROWSER_UI_VIEWS_LOGIN_VIEW_H_
83