From f74bacb596ce4116a2fc0f4b2f2c1def9a509cf5 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 +++++++++++++++++++ test/filters/browser_tests.filter | 5 +++ 4 files changed, 83 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()); +} diff --git a/test/filters/browser_tests.filter b/test/filters/browser_tests.filter index f619f2394ecd..4c8a94aa8a07 100644 --- a/test/filters/browser_tests.filter +++ b/test/filters/browser_tests.filter @@ -1936,6 +1936,11 @@ -ComponentManagerUpdateCheckBrowserTest.RegisterAndUnregisterTranslateKitLanguagePackComponent -ComponentManagerUpdateCheckBrowserTest.RegisterTranslateKitComponent +# We disable the ImageCopied/LinkCopied toast notifications +-All/ContextMenuBrowserTest.ShowsToastOnImageCopied/* +-All/ContextMenuBrowserTest.ShowsToastOnLinkCopied/* +-BrowserCommandsTest.CopyingUrlOpensToast + # Tests below this point have not been diagnosed or had issues created yet. -_/WebrtcLoggingPrivateApiStartEventLoggingTestFeatureAndPolicyEnabled.* -AccessCodeCastHandlerBrowserTest.*