From f0c6f59825eefe955e9ce9b1f132e12949aa71ee Mon Sep 17 00:00:00 2001 From: Emerick Rogul Date: Tue, 10 Dec 2024 15:15:05 -0500 Subject: [PATCH] Don't show toast notifications when copying links or images --- .../browser/ui/toasts/toast_controller.cc | 18 ++++++++ .../browser/ui/toasts/toast_controller.h | 17 ++++++++ .../ui/toasts/toast_controller_unittest.cc | 43 +++++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 chromium_src/chrome/browser/ui/toasts/toast_controller.cc create mode 100644 chromium_src/chrome/browser/ui/toasts/toast_controller.h create mode 100644 chromium_src/chrome/browser/ui/toasts/toast_controller_unittest.cc diff --git a/chromium_src/chrome/browser/ui/toasts/toast_controller.cc b/chromium_src/chrome/browser/ui/toasts/toast_controller.cc new file mode 100644 index 000000000000..cbcdc0a85ec3 --- /dev/null +++ b/chromium_src/chrome/browser/ui/toasts/toast_controller.cc @@ -0,0 +1,18 @@ +/* Copyright (c) 2024 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at https://mozilla.org/MPL/2.0/. */ + +#include "chrome/browser/ui/toasts/toast_controller.h" + +#define MaybeShowToast MaybeShowToast_ChromiumImpl +#include "src/chrome/browser/ui/toasts/toast_controller.cc" +#undef MaybeShowToast + +bool ToastController::MaybeShowToast(ToastParams params) { + if (params.toast_id == ToastId::kLinkCopied || + params.toast_id == ToastId::kImageCopied) { + return false; + } + return MaybeShowToast_ChromiumImpl(std::move(params)); +} diff --git a/chromium_src/chrome/browser/ui/toasts/toast_controller.h b/chromium_src/chrome/browser/ui/toasts/toast_controller.h new file mode 100644 index 000000000000..3078685bd91d --- /dev/null +++ b/chromium_src/chrome/browser/ui/toasts/toast_controller.h @@ -0,0 +1,17 @@ +/* Copyright (c) 2024 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at https://mozilla.org/MPL/2.0/. */ + +#ifndef BRAVE_CHROMIUM_SRC_CHROME_BROWSER_UI_TOASTS_TOAST_CONTROLLER_H_ +#define BRAVE_CHROMIUM_SRC_CHROME_BROWSER_UI_TOASTS_TOAST_CONTROLLER_H_ + +#define MaybeShowToast \ + MaybeShowToast_ChromiumImpl(ToastParams params); \ + bool MaybeShowToast + +#include "src/chrome/browser/ui/toasts/toast_controller.h" // IWYU pragma: export + +#undef MaybeShowToast + +#endif // BRAVE_CHROMIUM_SRC_CHROME_BROWSER_UI_TOASTS_TOAST_CONTROLLER_H_ diff --git a/chromium_src/chrome/browser/ui/toasts/toast_controller_unittest.cc b/chromium_src/chrome/browser/ui/toasts/toast_controller_unittest.cc new file mode 100644 index 000000000000..cf048a203519 --- /dev/null +++ b/chromium_src/chrome/browser/ui/toasts/toast_controller_unittest.cc @@ -0,0 +1,43 @@ +/* Copyright (c) 2024 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at https://mozilla.org/MPL/2.0/. */ + +#include "chrome/browser/ui/toasts/api/toast_id.h" + +// All of the upstream unit tests use kLinkCopied or kImageCopied when creating +// test toasts, but those are the two notifications we want to hide so redefine +// their identifiers here so we can continue to run the upstream tests. +#define kLinkCopied kLinkToHighlightCopied +#define kImageCopied kAddedToReadingList +#include "src/chrome/browser/ui/toasts/toast_controller_unittest.cc" +#undef kImageCopied +#undef kLinkCopied + +TEST_F(ToastControllerUnitTest, NeverShowToastForLinkCopied) { + ToastRegistry* const registry = toast_registry(); + registry->RegisterToast( + ToastId::kLinkCopied, + ToastSpecification::Builder(vector_icons::kEmailIcon, 0).Build()); + + auto controller = std::make_unique(registry); + + EXPECT_FALSE(controller->IsShowingToast()); + EXPECT_TRUE(controller->CanShowToast(ToastId::kLinkCopied)); + EXPECT_FALSE(controller->MaybeShowToast(ToastParams(ToastId::kLinkCopied))); + EXPECT_FALSE(controller->IsShowingToast()); +} + +TEST_F(ToastControllerUnitTest, NeverShowToastForImageCopied) { + ToastRegistry* const registry = toast_registry(); + registry->RegisterToast( + ToastId::kImageCopied, + ToastSpecification::Builder(vector_icons::kEmailIcon, 0).Build()); + + auto controller = std::make_unique(registry); + + EXPECT_FALSE(controller->IsShowingToast()); + EXPECT_TRUE(controller->CanShowToast(ToastId::kImageCopied)); + EXPECT_FALSE(controller->MaybeShowToast(ToastParams(ToastId::kImageCopied))); + EXPECT_FALSE(controller->IsShowingToast()); +}