| // 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/nearby_sharing/nearby_notification_handler.h" |
| |
| #include <utility> |
| |
| #include "ash/webui/settings/public/constants/routes.mojom.h" |
| #include "base/functional/callback.h" |
| #include "base/notreached.h" |
| #include "build/build_config.h" |
| #include "build/chromeos_buildflags.h" |
| #include "chrome/browser/nearby_sharing/nearby_notification_delegate.h" |
| #include "chrome/browser/nearby_sharing/nearby_sharing_service.h" |
| #include "chrome/browser/nearby_sharing/nearby_sharing_service_factory.h" |
| #include "chrome/browser/notifications/notification_display_service.h" |
| #include "chrome/browser/notifications/notification_display_service_factory.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/ui/settings_window_manager_chromeos.h" |
| #include "components/cross_device/logging/logging.h" |
| |
| namespace { |
| |
| NearbyNotificationDelegate* GetNotificationDelegate( |
| Profile* profile, |
| const std::string& notification_id) { |
| DCHECK(NearbySharingServiceFactory::IsNearbyShareSupportedForBrowserContext( |
| profile)); |
| |
| return NearbySharingServiceFactory::GetForBrowserContext(profile) |
| ->GetNotificationDelegate(notification_id); |
| } |
| |
| void CloseNearbyNotification(Profile* profile, |
| const std::string& notification_id) { |
| NotificationDisplayServiceFactory::GetInstance() |
| ->GetForProfile(profile) |
| ->Close(NotificationHandler::Type::NEARBY_SHARE, notification_id); |
| } |
| |
| } // namespace |
| |
| NearbyNotificationHandler::NearbyNotificationHandler() = default; |
| |
| NearbyNotificationHandler::~NearbyNotificationHandler() = default; |
| |
| void NearbyNotificationHandler::OnClick( |
| Profile* profile, |
| const GURL& origin, |
| const std::string& notification_id, |
| const std::optional<int>& action_index, |
| const std::optional<std::u16string>& reply, |
| base::OnceClosure completed_closure) { |
| NearbyNotificationDelegate* delegate = |
| GetNotificationDelegate(profile, notification_id); |
| if (!delegate) { |
| CD_LOG(VERBOSE, Feature::NS) |
| << "Ignoring notification click event for unknown id " |
| << notification_id; |
| CloseNearbyNotification(profile, notification_id); |
| std::move(completed_closure).Run(); |
| return; |
| } |
| |
| delegate->OnClick(notification_id, action_index); |
| std::move(completed_closure).Run(); |
| } |
| |
| void NearbyNotificationHandler::OnClose(Profile* profile, |
| const GURL& origin, |
| const std::string& notification_id, |
| bool by_user, |
| base::OnceClosure completed_closure) { |
| NearbyNotificationDelegate* delegate = |
| GetNotificationDelegate(profile, notification_id); |
| if (!delegate) { |
| CD_LOG(VERBOSE, Feature::NS) |
| << "Ignoring notification close event for unknown id " |
| << notification_id; |
| std::move(completed_closure).Run(); |
| return; |
| } |
| |
| delegate->OnClose(notification_id); |
| std::move(completed_closure).Run(); |
| } |
| |
| void NearbyNotificationHandler::OpenSettings(Profile* profile, |
| const GURL& origin) { |
| DCHECK(NearbySharingServiceFactory::IsNearbyShareSupportedForBrowserContext( |
| profile)); |
| chrome::SettingsWindowManager::GetInstance()->ShowOSSettings( |
| profile, chromeos::settings::mojom::kNearbyShareSubpagePath); |
| } |