chromium/chrome/browser/ash/notifications/request_system_proxy_credentials_view.h

// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_ASH_NOTIFICATIONS_REQUEST_SYSTEM_PROXY_CREDENTIALS_VIEW_H_
#define CHROME_BROWSER_ASH_NOTIFICATIONS_REQUEST_SYSTEM_PROXY_CREDENTIALS_VIEW_H_

#include <memory>
#include <string>

#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h"
#include "ui/base/metadata/metadata_header_macros.h"
#include "ui/base/ui_base_types.h"
#include "ui/views/view.h"
#include "ui/views/window/dialog_delegate.h"

namespace views {
class Label;
class Textfield;
}  // namespace views

namespace ash {

// A dialog box for requesting proxy authentication credentials for network
// traffic at OS level (outside the browser).
class RequestSystemProxyCredentialsView final
    : public views::DialogDelegateView {
  METADATA_HEADER(RequestSystemProxyCredentialsView, views::DialogDelegateView)

 public:
  RequestSystemProxyCredentialsView(
      const std::string& proxy_server,
      bool show_error_label,
      base::OnceClosure view_destruction_callback);
  RequestSystemProxyCredentialsView(const RequestSystemProxyCredentialsView&) =
      delete;
  RequestSystemProxyCredentialsView& operator=(
      const RequestSystemProxyCredentialsView&) = delete;
  ~RequestSystemProxyCredentialsView() override;

  // views::DialogDelegateView
  views::View* GetInitiallyFocusedView() override;
  std::u16string GetWindowTitle() const override;
  bool ShouldShowCloseButton() const override;

  // Returns the proxy server for which the dialog is asking for credentials,
  // in the format scheme://host:port.
  const std::string& GetProxyServer() const;

  std::u16string GetUsername() const;
  std::u16string GetPassword() const;

  views::Textfield* username_textfield_for_testing() {
    return username_textfield_;
  }
  views::Textfield* password_textfield_for_testing() {
    return password_textfield_;
  }
  views::Label* error_label_for_testing() { return error_label_; }

 private:
  void Init();

  const std::u16string window_title_;

  raw_ptr<views::Textfield> username_textfield_ = nullptr;
  raw_ptr<views::Textfield> password_textfield_ = nullptr;
  raw_ptr<views::Label> error_label_ = nullptr;

  const std::string proxy_server_;
  const bool show_error_label_;
  base::OnceClosure view_destruction_callback_;
};

}  // namespace ash

#endif  // CHROME_BROWSER_ASH_NOTIFICATIONS_REQUEST_SYSTEM_PROXY_CREDENTIALS_VIEW_H_