// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_UI_VIEWS_LOGIN_VIEW_H_
#define CHROME_BROWSER_UI_VIEWS_LOGIN_VIEW_H_

#include "base/compiler_specific.h"
#include "base/macros.h"
#include "chrome/browser/ui/login/login_prompt.h"
#include "components/autofill/core/common/password_form.h"
#include "components/password_manager/core/browser/login_model.h"
#include "ui/views/view.h"

namespace views {
class Label;
class Textfield;
}

// This class is responsible for displaying the contents of a login window
// for HTTP/FTP authentication.
class LoginView : public views::View,
                  public password_manager::LoginModelObserver {
 public:
  // |login_model_data->model| is observed for the entire lifetime of the
  // LoginView. Therefore |login_model_data->model| should not be destroyed
  // before the LoginView object. |login_model_data| may be null.
  LoginView(const base::string16& authority,
            const base::string16& explanation,
            LoginHandler::LoginModelData* login_model_data);
  ~LoginView() override;

  // Access the data in the username/password text fields.
  const base::string16& GetUsername() const;
  const base::string16& GetPassword() const;

  // password_manager::LoginModelObserver:
  void OnAutofillDataAvailableInternal(const base::string16& username,
                                       const base::string16& password) override;
  void OnLoginModelDestroying() override;

  // Used by LoginHandlerWin to set the initial focus.
  views::View* GetInitiallyFocusedView();

 private:
  // views::View:
  const char* GetClassName() const override;

  // Non-owning refs to the input text fields.
  views::Textfield* username_field_;
  views::Textfield* password_field_;

  // Button labels
  views::Label* username_label_;
  views::Label* password_label_;

  // Authority and security state messages.
  views::Label* authority_label_;
  views::Label* message_label_;

  // 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.
  password_manager::LoginModel* login_model_;

  DISALLOW_COPY_AND_ASSIGN(LoginView);
};

#endif  // CHROME_BROWSER_UI_VIEWS_LOGIN_VIEW_H_