// 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.
#include "chrome/browser/ash/notifications/system_proxy_notification.h"
#include <string>
#include "ash/constants/notifier_catalogs.h"
#include "ash/public/cpp/notification_utils.h"
#include "base/location.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/app/vector_icons/vector_icons.h"
#include "chrome/browser/notifications/notification_display_service.h"
#include "chrome/browser/notifications/notification_display_service_factory.h"
#include "chrome/browser/notifications/system_notification_helper.h"
#include "chrome/grit/generated_resources.h"
#include "components/vector_icons/vector_icons.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/paint_vector_icon.h"
#include "ui/message_center/public/cpp/notification.h"
#include "ui/message_center/public/cpp/notification_delegate.h"
#include "ui/message_center/public/cpp/notification_types.h"
#include "ui/message_center/public/cpp/notifier_id.h"
namespace {
constexpr char kNotificationId[] = "system-proxy.auth_required";
constexpr char kNotifierId[] = "system-proxy";
} // namespace
namespace ash {
SystemProxyNotification::SystemProxyNotification(
const system_proxy::ProtectionSpace& protection_space,
bool show_error,
OnClickCallback callback)
: protection_space_(protection_space),
show_error_(show_error),
on_click_callback_(std::move(callback)),
weak_ptr_factory_(this) {}
SystemProxyNotification::~SystemProxyNotification() = default;
void SystemProxyNotification::Show() {
const std::u16string title =
show_error_ ? l10n_util::GetStringUTF16(
IDS_SYSTEM_PROXY_AUTH_REQUIRED_NOTIFICATION_ERROR_TITLE)
: l10n_util::GetStringUTF16(
IDS_SYSTEM_PROXY_AUTH_REQUIRED_NOTIFICATION_TITLE);
const std::u16string body = l10n_util::GetStringFUTF16(
IDS_SYSTEM_PROXY_AUTH_REQUIRED_NOTIFICATION_BODY,
base::ASCIIToUTF16(protection_space_.origin()));
message_center::Notification notification = ash::CreateSystemNotification(
message_center::NOTIFICATION_TYPE_SIMPLE, kNotificationId, title, body,
std::u16string() /*display_source=*/, GURL() /*origin_url=*/,
message_center::NotifierId(message_center::NotifierType::SYSTEM_COMPONENT,
kNotifierId,
NotificationCatalogName::kSystemProxy),
message_center::RichNotificationData(),
base::MakeRefCounted<message_center::HandleNotificationClickDelegate>(
base::BindRepeating(&SystemProxyNotification::OnClick,
weak_ptr_factory_.GetWeakPtr())),
kNotificationWifiIcon,
message_center::SystemNotificationWarningLevel::WARNING);
notification.set_pinned(true);
SystemNotificationHelper::GetInstance()->Display(notification);
}
void SystemProxyNotification::SystemProxyNotification::OnClick() {
DCHECK(!on_click_callback_.is_null());
std::move(on_click_callback_).Run(protection_space_, show_error_);
}
void SystemProxyNotification::Close() {
SystemNotificationHelper::GetInstance()->Close(kNotificationId);
}
} // namespace ash