# Copyright 2019 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import("//build/config/features.gni") import("//chrome/common/features.gni") import("//extensions/buildflags/buildflags.gni") if (is_android) { import("//build/config/android/rules.gni") import("//third_party/jni_zero/jni_zero.gni") } source_set("notifications") { public = [ "displayed_notifications_dispatch_callback.h", "metrics/notification_metrics_logger.h", "metrics/notification_metrics_logger_factory.h", "non_persistent_notification_handler.h", "notification_blocker.h", "notification_common.h", "notification_display_queue.h", "notification_display_service.h", "notification_display_service_factory.h", "notification_display_service_impl.h", "notification_handler.h", "notification_permission_context.h", "notification_platform_bridge.h", "notification_platform_bridge_delegator.h", "notification_trigger_scheduler.h", "notifier_state_tracker.h", "notifier_state_tracker_factory.h", "persistent_notification_handler.h", "platform_notification_service_factory.h", "platform_notification_service_impl.h", "scheduler/notification_background_task_scheduler_impl.h", "scheduler/notification_schedule_service_factory.h", ] public_deps = [ "//base", "//chrome/browser/notifications/proto", "//chrome/browser/notifications/scheduler", "//chrome/browser/notifications/scheduler/public", "//chrome/browser/profiles:profile", "//chrome/browser/profiles/keep_alive", "//chrome/common:buildflags", "//chrome/common/notifications", "//components/content_settings/core/common", "//components/keyed_service/core", "//components/permissions", "//components/prefs", "//components/webapps/common", "//content/public/browser", "//content/public/common", "//extensions/buildflags", "//services/metrics/public/cpp:ukm_builders", "//ui/gfx", "//ui/message_center/public/cpp", "//url", ] deps = [ "//components/content_settings/core/browser" ] if (is_android) { public += [ "notification_channels_provider_android.h", "notification_platform_bridge_android.h", "notification_trigger_scheduler_android.h", "scheduler/display_agent_android.h", "scheduler/finds_agent_android.h", "scheduler/notification_background_task_scheduler_android.h", "scheduler/tips_agent_android.h", ] deps += [ ":jni_headers", "//components/content_settings/core/common", "//components/pref_registry", "//components/search_engines", ] } if (!is_android) { public += [ "muted_notification_handler.h", "profile_notification.h", ] public_deps += [ "//components/keep_alive_registry" ] } if (is_chromeos) { public += [ "arc_application_notifier_controller.h", "chrome_ash_message_center_client.h", "extension_notifier_controller.h", "notification_platform_bridge_chromeos.h", "notification_platform_bridge_delegate.h", "notifier_controller.h", "notifier_dataset.h", "passphrase_textfield.h", "web_page_notifier_controller.h", ] public_deps += [ "//ash/public/cpp", "//components/app_icon_loader", "//components/services/app_service/public/cpp:app_types", "//ui/views", ] } if (is_win) { public += [ "notification_platform_bridge_win.h", "win/notification_launch_id.h", "win/notification_metrics.h", "win/notification_template_builder.h", "win/notification_util.h", ] } if (is_mac) { public += [ "mac/mac_notification_provider_factory.h", "mac/notification_dispatcher_mac.h", "mac/notification_dispatcher_mojo.h", "mac/notification_platform_bridge_mac.h", "mac/notification_utils.h", ] public_deps += [ "//chrome/services/mac_notifications/public/cpp", "//chrome/services/mac_notifications/public/mojom", "//mojo/public/cpp/bindings", ] } if (is_linux) { if (use_dbus) { public += [ "notification_platform_bridge_linux.h" ] } } if (enable_chrome_notifications) { public += [ "fullscreen_notification_blocker.h", "notification_platform_bridge_message_center.h", "notification_system_observer.h", "notification_ui_manager.h", "notification_ui_manager_impl.h", "popups_only_ui_controller.h", "screen_lock_notification_blocker.h", ] public_deps += [ "//extensions/browser", "//ui/message_center", ] } # notifier_state_tracker.h conditionally includes extensions/browser headers. if (enable_extensions_core && !enable_chrome_notifications) { public_deps += [ "//extensions/browser" ] } } source_set("impl") { sources = [ "metrics/notification_metrics_logger.cc", "metrics/notification_metrics_logger_factory.cc", "non_persistent_notification_handler.cc", "notification_blocker.cc", "notification_common.cc", "notification_display_queue.cc", "notification_display_service.cc", "notification_display_service_factory.cc", "notification_display_service_impl.cc", "notification_handler.cc", "notification_permission_context.cc", "notification_platform_bridge.cc", "notification_platform_bridge_delegator.cc", "notification_trigger_scheduler.cc", "notifier_state_tracker.cc", "notifier_state_tracker_factory.cc", "persistent_notification_handler.cc", "platform_notification_service_factory.cc", "platform_notification_service_impl.cc", "scheduler/notification_background_task_scheduler_impl.cc", "scheduler/notification_schedule_service_factory.cc", ] public_deps = [ ":notifications", "//chrome/browser:browser_public_dependencies", ] deps = [ "//chrome/browser:browser_features", "//chrome/browser/content_settings:content_settings_factory", "//chrome/browser/lifetime", "//chrome/browser/lifetime:termination_notification", "//chrome/browser/metrics", "//chrome/browser/notifications/scheduler:factory", "//chrome/browser/optimization_guide", "//chrome/browser/permissions", "//chrome/browser/safe_browsing", "//chrome/browser/ui/browser_window", "//chrome/browser/ui/exclusive_access", "//chrome/browser/ui/safety_hub", "//chrome/browser/updates/announcement_notification", "//components/content_settings/browser", "//components/content_settings/core/browser", "//components/pref_registry", "//components/safe_browsing/content/browser/notification_content_detection", "//components/safe_browsing/core/browser:safe_browsing_metrics_collector", "//components/safe_browsing/core/common:features", "//components/site_engagement/content", "//components/visibility_timer", "//ui/message_center", "//ui/strings:ui_strings_grit", ] if (is_android) { sources += [ "notification_channels_provider_android.cc", "notification_platform_bridge_android.cc", "notification_suspender_android.cc", "notification_trigger_scheduler_android.cc", "scheduler/display_agent_android.cc", "scheduler/finds_agent_android.cc", "scheduler/notification_background_task_scheduler_android.cc", "scheduler/tips_agent_android.cc", ] deps += [ ":jni_headers", "//chrome/android:chrome_jni_headers", "//chrome/browser/android:shortcut_helper", "//chrome/browser/flags:flags_android", "//chrome/browser/notifications/chime/android", "//chrome/browser/notifications/scheduler/public", "//chrome/browser/segmentation_platform", "//chrome/browser/tips/core", "//chrome/browser/webapps/installable:android", "//components/browser_ui/notifications/android", ] } if (!is_android) { sources += [ "muted_notification_handler.cc", "profile_notification.cc", "screen_capture_notification_blocker.cc", "screen_capture_notification_blocker.h", ] deps += [ "//chrome/browser/media/webrtc", "//chrome/browser/sharing", "//chrome/browser/ui:chrome_pages", "//chrome/browser/ui/navigator", "//chrome/browser/ui/tabs:tab_strip", "//chrome/browser/web_applications", "//chrome/browser/web_applications/proto", ] if (!is_chromeos) { deps += [ "//chrome/browser/default_browser" ] } } if (is_chromeos) { sources += [ "arc_application_notifier_controller.cc", "chrome_ash_message_center_client.cc", "extension_notifier_controller.cc", "notification_platform_bridge_chromeos.cc", "notifier_dataset.cc", "passphrase_textfield.cc", "web_page_notifier_controller.cc", ] deps += [ "//chrome/browser/apps/app_service", "//chrome/browser/content_settings", "//chrome/browser/extensions", "//chrome/browser/extensions/api/notifications", "//chrome/browser/favicon", "//chrome/browser/nearby_sharing", "//chrome/browser/ui/ash/multi_user", "//chromeos/ash/components/browser_context_helper", "//ui/message_center", ] } if (is_win) { sources += [ "notification_platform_bridge_win.cc", "win/notification_launch_id.cc", "win/notification_metrics.cc", "win/notification_template_builder.cc", "win/notification_util.cc", ] deps += [ "//chrome/browser:shell_integration", "//third_party/libxml:xml_writer", ] } if (is_mac) { sources += [ "mac/mac_notification_provider_factory.cc", "mac/notification_dispatcher_mojo.cc", "mac/notification_platform_bridge_mac.cc", "mac/notification_utils.cc", ] deps += [ "//chrome/browser:child_process_host_flags", "//chrome/browser/apps/app_shim", "//chrome/services/mac_notifications", "//chrome/services/mac_notifications/public/cpp", "//chrome/services/mac_notifications/public/mojom", ] } if (is_linux) { if (use_dbus) { sources += [ "notification_platform_bridge_linux.cc" ] deps += [ "//chrome/app/theme:chrome_unscaled_resources_grit", "//chrome/browser/themes", ] } } if (enable_extensions_core) { if (is_android) { deps += [ "//chrome/browser/enterprise" ] } deps += [ "//chrome/browser/extensions/api/notifications" ] } if (enable_chrome_notifications) { sources += [ "fullscreen_notification_blocker.cc", "notification_platform_bridge_message_center.cc", "notification_system_observer.cc", "notification_ui_manager_impl.cc", "popups_only_ui_controller.cc", "screen_lock_notification_blocker.cc", ] deps += [ "//chrome/browser:fullscreen", "//chrome/browser/extensions", "//chrome/browser/themes", ] } } source_set("system_notification_helper") { sources = [ "system_notification_helper.h" ] public_deps = [ "//ui/message_center/public/cpp" ] } source_set("system_notification_helper_impl") { sources = [ "system_notification_helper.cc" ] deps = [ ":notifications", ":system_notification_helper", "//chrome/browser:browser_public_dependencies", "//ui/message_center/public/cpp", ] } source_set("test_support") { testonly = true sources = [ "metrics/mock_notification_metrics_logger.cc", "metrics/mock_notification_metrics_logger.h", "notification_display_service_tester.cc", "notification_display_service_tester.h", "stub_notification_display_service.cc", "stub_notification_display_service.h", "stub_notification_platform_bridge.cc", "stub_notification_platform_bridge.h", ] public_deps = [ ":notifications" ] deps = [ ":system_notification_helper", "//base", "//chrome/browser/profiles:profile", "//components/keyed_service/content", "//components/keyed_service/core", "//content/public/browser", "//testing/gmock", "//ui/message_center/public/cpp", ] if (is_win) { sources += [ "win/fake_itoastnotification.cc", "win/fake_itoastnotification.h", ] } if (enable_chrome_notifications) { sources += [ "notification_test_util.cc", "notification_test_util.h", ] deps += [ "//ui/message_center/public/cpp", "//url", ] } } source_set("unit_tests") { testonly = true sources = [ "metrics/notification_metrics_logger_unittest.cc", "notification_display_queue_unittest.cc", "notification_display_service_impl_unittest.cc", "notification_permission_context_unittest.cc", "notification_platform_bridge_unittest.cc", "notification_trigger_scheduler_unittest.cc", "persistent_notification_handler_unittest.cc", "platform_notification_service_unittest.cc", ] deps = [ ":notifications", ":test_support", "//base", "//base/test:test_support", "//chrome/browser/engagement", "//chrome/browser/notifications/scheduler:unit_tests", "//chrome/browser/optimization_guide:test_support", "//chrome/browser/permissions", "//chrome/test:test_support", "//components/content_settings/core/test:test_support", "//components/optimization_guide/core:model_execution_test_support", "//components/safe_browsing/content/browser/notification_content_detection:test_utils", "//content/test:test_support", "//testing/gmock", "//testing/gtest", "//ui/message_center/public/cpp", ] if (enable_chrome_notifications) { sources += [ "notification_system_observer_unittest.cc", "notification_ui_manager_unittest.cc", "popups_only_ui_controller_unittest.cc", ] } if (!is_android) { sources += [ "muted_notification_handler_unittest.cc", "screen_capture_notification_blocker_unittest.cc", ] deps += [ "//chrome/browser/web_applications:web_applications_test_support" ] } if (is_android) { sources += [ "notification_channels_provider_android_unittest.cc" ] deps += [ "//chrome/browser/content_settings:content_settings_factory", "//chrome/browser/optimization_guide", "//chrome/browser/ui/safety_hub", "//chrome/browser/web_applications/proto:proto_gen", "//components/content_settings/core/browser:test_support", "//components/safe_browsing/content/browser/notification_content_detection", "//components/safe_browsing/core/browser:safe_browsing_metrics_collector", "//components/ukm:test_support", ] } if (is_win) { sources += [ "notification_platform_bridge_win_unittest.cc", "win/fake_notification_image_retainer.cc", "win/fake_notification_image_retainer.h", "win/notification_helper_launches_chrome_unittest.cc", "win/notification_launch_id_unittest.cc", "win/notification_template_builder_unittest.cc", ] deps += [ "//chrome/common/notifications", "//chrome/installer/setup:lib", ] } if (is_mac) { sources += [ "mac/notification_dispatcher_mojo_unittest.cc", "mac/notification_platform_bridge_mac_unittest.cc", "mac/notification_utils_unittest.cc", "mac/stub_notification_dispatcher_mac.cc", "mac/stub_notification_dispatcher_mac.h", ] deps += [ "//chrome/common/notifications", "//chrome/services/mac_notifications/public/mojom", ] } if (is_chromeos) { sources += [ "chrome_ash_message_center_client_unittest.cc", "notification_platform_bridge_chromeos_unittest.cc", "web_page_notifier_controller_unittest.cc", ] deps += [ "//chrome/browser/favicon", "//chrome/browser/nearby_sharing", "//components/favicon/core/test:test_support", ] } if (is_linux) { if (use_dbus) { sources += [ "notification_platform_bridge_linux_unittest.cc" ] deps += [ "//components/dbus", "//dbus:test_support", "//ui/linux:test_support", ] } } } if (!is_android) { source_set("browser_tests") { testonly = true defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] sources = [ "notification_permission_browsertest.cc" ] deps = [ ":notifications", ":test_support", "//base", "//chrome/browser:chrome_content_browser_client", "//chrome/test:test_support", "//chrome/test:test_support_ui", "//content/test:test_support", "//testing/gtest", ] if (is_chromeos) { sources += [ "notification_platform_bridge_chromeos_browsertest.cc", "notifier_settings_test_observer.cc", "notifier_settings_test_observer.h", ] deps += [ "//chrome/browser/ash/notifications" ] } if (enable_extensions) { sources += [ "notification_permission_context_apitest.cc" ] deps += [ "//chrome/browser/extensions:test_support", "//chrome/browser/profiles:profile", "//extensions/browser", "//ui/message_center/public/cpp", ] } } if (!is_chromeos_device) { source_set("interactive_ui_tests") { testonly = true defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] sources = [ "platform_notification_service_interactive_uitest.cc" ] deps = [ ":notifications", ":test_support", "//base", "//chrome/browser/permissions", "//chrome/browser/web_applications:web_applications_test_support", "//chrome/test:test_support", "//chrome/test:test_support_ui", "//components/infobars/content", "//content/test:test_support", "//testing/gtest", ] if (!is_chromeos) { sources += [ "notification_interactive_uitest.cc", "notification_interactive_uitest_support.cc", "notification_interactive_uitest_support.h", ] } if (is_win) { sources += [ "notification_platform_bridge_win_interactive_uitest.cc", "win/fake_itoastnotifier.cc", "win/fake_itoastnotifier.h", ] } if (is_mac) { sources += [ "mac/notification_interactive_uitest_mac.mm" ] } if (enable_chrome_notifications) { sources += [ "notification_ui_manager_browsertest.cc", "notification_ui_manager_interactive_uitest.cc", ] } } } } if (is_android) { android_library("java") { sources = [ "android/java/src/org/chromium/chrome/browser/notifications/ChromeNotificationWrapperBuilder.java", "android/java/src/org/chromium/chrome/browser/notifications/NotificationBuilderBase.java", "android/java/src/org/chromium/chrome/browser/notifications/NotificationConstants.java", "android/java/src/org/chromium/chrome/browser/notifications/NotificationIntentInterceptor.java", "android/java/src/org/chromium/chrome/browser/notifications/NotificationSettingsBridge.java", "android/java/src/org/chromium/chrome/browser/notifications/NotificationSystemStatusUtil.java", "android/java/src/org/chromium/chrome/browser/notifications/NotificationUmaTracker.java", "android/java/src/org/chromium/chrome/browser/notifications/NotificationWrapperBuilderFactory.java", "android/java/src/org/chromium/chrome/browser/notifications/StandardNotificationBuilder.java", "android/java/src/org/chromium/chrome/browser/notifications/TrampolineActivityTracker.java", "android/java/src/org/chromium/chrome/browser/notifications/channels/ChannelsUpdater.java", "android/java/src/org/chromium/chrome/browser/notifications/channels/ChromeChannelDefinitions.java", "android/java/src/org/chromium/chrome/browser/notifications/channels/LocaleChangedBroadcastReceiver.java", "android/java/src/org/chromium/chrome/browser/notifications/channels/SiteChannelsManager.java", "android/java/src/org/chromium/chrome/browser/notifications/permissions/NotificationPermissionChangeReceiver.java", "android/java/src/org/chromium/chrome/browser/notifications/permissions/NotificationPermissionController.java", "android/java/src/org/chromium/chrome/browser/notifications/permissions/NotificationPermissionRationaleDialogController.java", ] deps = [ ":java_resources", "//base:base_java", "//build/android:build_java", "//chrome/android:base_module_java", "//chrome/browser/flags:java", "//chrome/browser/lifetime/android:java", "//chrome/browser/preferences:java", "//chrome/browser/profiles/android:java", "//components/browser_ui/bottomsheet/android:java", "//components/browser_ui/notifications/android:java", "//components/browser_ui/notifications/android:utils_java", "//components/browser_ui/settings/android:java", "//components/browser_ui/site_settings/android:java", "//components/browser_ui/widget/android:java", "//components/content_settings/android:content_settings_enums_java", "//components/url_formatter/android:url_formatter_java", "//content/public/android:content_full_java", "//content/public/android:content_main_dex_java", "//third_party/androidx:androidx_annotation_annotation_java", "//third_party/androidx:androidx_core_core_java", "//third_party/androidx:androidx_media_media_java", "//third_party/jni_zero:jni_zero_java", "//ui/android:ui_no_recycler_view_java", ] srcjar_deps = [ ":jni_headers", ":notifications_java_enum_srcjar", ] resources_package = "org.chromium.chrome.browser.notifications" } java_cpp_enum("notifications_java_enum_srcjar") { sources = [ "notification_channels_provider_android.h" ] } generate_jni("jni_headers") { sources = [ "android/java/src/org/chromium/chrome/browser/notifications/NotificationSettingsBridge.java", "android/java/src/org/chromium/chrome/browser/notifications/NotificationSystemStatusUtil.java", ] } robolectric_library("junit_tests") { resources_package = "org.chromium.chrome.browser.notifications" sources = [ "android/java/src/org/chromium/chrome/browser/notifications/NotificationBuilderBaseTest.java", "android/java/src/org/chromium/chrome/browser/notifications/NotificationIntentInterceptorTest.java", "android/java/src/org/chromium/chrome/browser/notifications/NotificationSystemStatusUtilUnitTest.java", "android/java/src/org/chromium/chrome/browser/notifications/NotificationTestUtil.java", "android/java/src/org/chromium/chrome/browser/notifications/PendingIntentProviderTest.java", "android/java/src/org/chromium/chrome/browser/notifications/StandardNotificationBuilderTest.java", "android/java/src/org/chromium/chrome/browser/notifications/ThrottlingNotificationSchedulerTest.java", "android/java/src/org/chromium/chrome/browser/notifications/TrampolineActivityTrackerTest.java", "android/java/src/org/chromium/chrome/browser/notifications/channels/ChannelsInitializerTest.java", "android/java/src/org/chromium/chrome/browser/notifications/channels/ChannelsUpdaterTest.java", "android/java/src/org/chromium/chrome/browser/notifications/channels/ChromeChannelDefinitionsTest.java", "android/java/src/org/chromium/chrome/browser/notifications/channels/LocaleChangedBroadcastReceiverTest.java", "android/java/src/org/chromium/chrome/browser/notifications/permissions/NotificationPermissionChangeReceiverTest.java", "android/java/src/org/chromium/chrome/browser/notifications/permissions/NotificationPermissionControllerTest.java", "android/java/src/org/chromium/chrome/browser/notifications/permissions/NotificationPermissionRationaleDialogControllerTest.java", "android/java/src/org/chromium/chrome/browser/notifications/permissions/TestRationaleDelegate.java", ] deps = [ ":java", ":java_resources", "//base:base_java", "//base:base_java_test_support", "//base:base_java_test_support_uncommon", "//base:base_junit_test_support", "//chrome/browser/flags:java", "//chrome/browser/lifetime/android:java", "//chrome/browser/preferences:java", "//chrome/browser/ui/android/signin:java_resources", "//chrome/test/android:chrome_java_unit_test_support", "//components/browser_ui/bottomsheet/android:java", "//components/browser_ui/notifications/android:java", "//components/browser_ui/notifications/android:utils_java", "//components/url_formatter/android:url_formatter_java", "//third_party/android_deps:espresso_java", "//third_party/androidx:androidx_annotation_annotation_java", "//third_party/androidx:androidx_test_core_java", "//third_party/androidx:androidx_test_ext_junit_java", "//third_party/google-truth:google_truth_java", "//third_party/hamcrest:hamcrest_core_java", "//third_party/hamcrest:hamcrest_library_java", "//third_party/jni_zero:jni_zero_java", "//third_party/junit", "//third_party/mockito:mockito_java", "//ui/android:ui_java_test_support", "//ui/android:ui_no_recycler_view_java", ] } android_library("javatests") { testonly = true resources_package = "org.chromium.chrome.browser.notifications" sources = [ "android/java/src/org/chromium/chrome/browser/notifications/NotificationWrapperBuilderFactoryTest.java" ] deps = [ ":java", ":java_resources", "//base:base_java", "//base:base_java_test_support", "//chrome/browser/flags:java", "//chrome/browser/preferences:java", "//chrome/test/android:chrome_java_integration_test_support", "//components/browser_ui/notifications/android:java", "//components/browser_ui/util/android:java", "//components/browser_ui/widget/android:java", "//content/public/test/android:content_java_test_support", "//third_party/androidx:androidx_annotation_annotation_java", "//third_party/androidx:androidx_test_core_java", "//third_party/androidx:androidx_test_monitor_java", "//third_party/androidx:androidx_test_runner_java", "//third_party/hamcrest:hamcrest_core_java", "//third_party/hamcrest:hamcrest_library_java", "//third_party/junit", "//third_party/mockito:mockito_java", "//url:gurl_java", ] } android_library("test_support_java") { testonly = true sources = [ "android/java/src/org/chromium/chrome/browser/notifications/NotificationTestUtil.java" ] deps = [ ":java", ":java_resources", "//base:base_java", "//base:base_java_test_support", "//chrome/browser/flags:java", "//chrome/browser/preferences:java", "//chrome/test/android:chrome_java_integration_test_support", "//components/browser_ui/notifications/android:java", "//components/browser_ui/util/android:java", "//components/browser_ui/widget/android:java", "//content/public/test/android:content_java_test_support", "//third_party/androidx:androidx_annotation_annotation_java", "//third_party/androidx:androidx_test_core_java", "//third_party/androidx:androidx_test_monitor_java", "//third_party/androidx:androidx_test_runner_java", "//third_party/hamcrest:hamcrest_core_java", "//third_party/hamcrest:hamcrest_library_java", "//third_party/junit", "//third_party/mockito:mockito_java", "//url:gurl_java", ] } android_resources("java_resources") { sources = [ "android/java/res/drawable-ldrtl/notification_permission_rationale_dialog_header.xml", "android/java/res/drawable/notification_permission_rationale_dialog_header.xml", "android/java/res/layout/notification_permission_rationale_dialog.xml", "android/java/res/layout/notification_trampoline.xml", "android/java/res/values-night/colors.xml", "android/java/res/values/colors.xml", ] deps = [ "//chrome/browser/ui/android/strings:ui_strings_grd", "//components/browser_ui/strings/android:browser_ui_strings_grd", "//components/browser_ui/styles/android:java_resources", "//components/browser_ui/widget/android:java_resources", "//ui/android:ui_java_resources", ] } }