123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- // Copyright (c) 2015 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE-CHROMIUM file.
- #include "brightray/browser/platform_notification_service.h"
- #include "base/strings/utf_string_conversions.h"
- #include "brightray/browser/browser_client.h"
- #include "brightray/browser/notification.h"
- #include "brightray/browser/notification_delegate.h"
- #include "brightray/browser/notification_presenter.h"
- #include "content/public/browser/notification_event_dispatcher.h"
- #include "content/public/common/notification_resources.h"
- #include "content/public/common/platform_notification_data.h"
- #include "third_party/skia/include/core/SkBitmap.h"
- namespace brightray {
- namespace {
- void RemoveNotification(base::WeakPtr<Notification> notification) {
- if (notification)
- notification->Dismiss();
- }
- void OnWebNotificationAllowed(base::WeakPtr<Notification> notification,
- const SkBitmap& icon,
- const content::PlatformNotificationData& data,
- bool audio_muted,
- bool allowed) {
- if (!notification)
- return;
- if (allowed) {
- brightray::NotificationOptions options;
- options.title = data.title;
- options.msg = data.body;
- options.tag = data.tag;
- options.icon_url = data.icon;
- options.icon = icon;
- options.silent = audio_muted ? true : data.silent;
- options.has_reply = false;
- notification->Show(options);
- } else {
- notification->Destroy();
- }
- }
- class NotificationDelegateImpl final : public brightray::NotificationDelegate {
- public:
- explicit NotificationDelegateImpl(const std::string& notification_id)
- : notification_id_(notification_id) {}
- void NotificationDestroyed() override { delete this; }
- void NotificationClick() override {
- content::NotificationEventDispatcher::GetInstance()
- ->DispatchNonPersistentClickEvent(notification_id_);
- }
- void NotificationClosed() override {
- content::NotificationEventDispatcher::GetInstance()
- ->DispatchNonPersistentCloseEvent(notification_id_);
- }
- void NotificationDisplayed() override {
- content::NotificationEventDispatcher::GetInstance()
- ->DispatchNonPersistentShowEvent(notification_id_);
- }
- private:
- std::string notification_id_;
- DISALLOW_COPY_AND_ASSIGN(NotificationDelegateImpl);
- };
- } // namespace
- PlatformNotificationService::PlatformNotificationService(
- BrowserClient* browser_client)
- : browser_client_(browser_client), render_process_id_(-1) {}
- PlatformNotificationService::~PlatformNotificationService() {}
- blink::mojom::PermissionStatus
- PlatformNotificationService::CheckPermissionOnUIThread(
- content::BrowserContext* browser_context,
- const GURL& origin,
- int render_process_id) {
- render_process_id_ = render_process_id;
- return blink::mojom::PermissionStatus::GRANTED;
- }
- blink::mojom::PermissionStatus
- PlatformNotificationService::CheckPermissionOnIOThread(
- content::ResourceContext* resource_context,
- const GURL& origin,
- int render_process_id) {
- return blink::mojom::PermissionStatus::GRANTED;
- }
- void PlatformNotificationService::DisplayNotification(
- content::BrowserContext* browser_context,
- const std::string& notification_id,
- const GURL& origin,
- const content::PlatformNotificationData& notification_data,
- const content::NotificationResources& notification_resources,
- base::Closure* cancel_callback) {
- auto* presenter = browser_client_->GetNotificationPresenter();
- if (!presenter)
- return;
- NotificationDelegateImpl* delegate =
- new NotificationDelegateImpl(notification_id);
- auto notification = presenter->CreateNotification(delegate);
- if (notification) {
- *cancel_callback = base::Bind(&RemoveNotification, notification);
- browser_client_->WebNotificationAllowed(
- render_process_id_, base::Bind(&OnWebNotificationAllowed, notification,
- notification_resources.notification_icon,
- notification_data));
- }
- }
- void PlatformNotificationService::DisplayPersistentNotification(
- content::BrowserContext* browser_context,
- const std::string& notification_id,
- const GURL& service_worker_scope,
- const GURL& origin,
- const content::PlatformNotificationData& notification_data,
- const content::NotificationResources& notification_resources) {}
- void PlatformNotificationService::ClosePersistentNotification(
- content::BrowserContext* browser_context,
- const std::string& notification_id) {}
- void PlatformNotificationService::GetDisplayedNotifications(
- content::BrowserContext* browser_context,
- const DisplayedNotificationsCallback& callback) {}
- } // namespace brightray
|