| 
									
										
										
										
											2015-03-08 19:37:13 -07:00
										 |  |  | // 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.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-24 22:20:47 +08:00
										 |  |  | #include "browser/platform_notification_service.h"
 | 
					
						
							| 
									
										
										
										
											2015-03-08 19:37:13 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-24 22:20:47 +08:00
										 |  |  | #include "browser/browser_client.h"
 | 
					
						
							| 
									
										
										
										
											2015-12-25 10:16:07 +08:00
										 |  |  | #include "browser/notification.h"
 | 
					
						
							|  |  |  | #include "browser/notification_delegate_adapter.h"
 | 
					
						
							| 
									
										
										
										
											2015-03-08 19:37:13 -07:00
										 |  |  | #include "browser/notification_presenter.h"
 | 
					
						
							| 
									
										
										
										
											2015-12-25 10:16:07 +08:00
										 |  |  | #include "content/public/common/platform_notification_data.h"
 | 
					
						
							| 
									
										
										
										
											2016-01-23 19:02:30 +05:30
										 |  |  | #include "third_party/skia/include/core/SkBitmap.h"
 | 
					
						
							| 
									
										
										
										
											2015-03-08 19:37:13 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace brightray { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-25 10:16:07 +08:00
										 |  |  | namespace { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void RemoveNotification(base::WeakPtr<Notification> notification) { | 
					
						
							|  |  |  |   if (notification) | 
					
						
							|  |  |  |     notification->Dismiss(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-23 19:02:30 +05:30
										 |  |  | void OnWebNotificationAllowed( | 
					
						
							|  |  |  |     brightray::BrowserClient* browser_client, | 
					
						
							|  |  |  |     const SkBitmap& icon, | 
					
						
							|  |  |  |     const content::PlatformNotificationData& data, | 
					
						
							|  |  |  |     scoped_ptr<content::DesktopNotificationDelegate> delegate, | 
					
						
							|  |  |  |     base::Closure* cancel_callback, | 
					
						
							|  |  |  |     bool allowed) { | 
					
						
							|  |  |  |   if (!allowed) | 
					
						
							|  |  |  |     return; | 
					
						
							|  |  |  |   auto presenter = browser_client->GetNotificationPresenter(); | 
					
						
							|  |  |  |   if (!presenter) | 
					
						
							|  |  |  |     return; | 
					
						
							|  |  |  |   scoped_ptr<NotificationDelegateAdapter> adapter( | 
					
						
							| 
									
										
										
										
											2016-03-08 20:59:29 +09:00
										 |  |  |       new NotificationDelegateAdapter(std::move(delegate))); | 
					
						
							| 
									
										
										
										
											2016-01-23 19:02:30 +05:30
										 |  |  |   auto notification = presenter->CreateNotification(adapter.get()); | 
					
						
							|  |  |  |   if (notification) { | 
					
						
							|  |  |  |     ignore_result(adapter.release());  // it will release itself automatically.
 | 
					
						
							|  |  |  |     notification->Show(data.title, data.body, data.icon, icon, data.silent); | 
					
						
							|  |  |  |     *cancel_callback = base::Bind(&RemoveNotification, notification); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-25 10:16:07 +08:00
										 |  |  | }  // namespace
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-24 22:20:47 +08:00
										 |  |  | PlatformNotificationService::PlatformNotificationService( | 
					
						
							|  |  |  |     BrowserClient* browser_client) | 
					
						
							| 
									
										
										
										
											2016-01-23 19:02:30 +05:30
										 |  |  |     : browser_client_(browser_client), | 
					
						
							| 
									
										
										
										
											2016-01-27 23:18:42 +08:00
										 |  |  |       render_process_id_(-1) { | 
					
						
							| 
									
										
										
										
											2015-03-08 19:37:13 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-24 22:20:47 +08:00
										 |  |  | PlatformNotificationService::~PlatformNotificationService() {} | 
					
						
							| 
									
										
										
										
											2015-03-08 19:37:13 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-24 22:20:47 +08:00
										 |  |  | blink::WebNotificationPermission PlatformNotificationService::CheckPermissionOnUIThread( | 
					
						
							| 
									
										
										
										
											2015-04-21 18:54:57 +08:00
										 |  |  |     content::BrowserContext* browser_context, | 
					
						
							|  |  |  |     const GURL& origin, | 
					
						
							|  |  |  |     int render_process_id) { | 
					
						
							| 
									
										
										
										
											2016-01-23 19:02:30 +05:30
										 |  |  |   render_process_id_ = render_process_id; | 
					
						
							| 
									
										
										
										
											2015-04-21 18:54:57 +08:00
										 |  |  |   return blink::WebNotificationPermissionAllowed; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-24 22:20:47 +08:00
										 |  |  | blink::WebNotificationPermission PlatformNotificationService::CheckPermissionOnIOThread( | 
					
						
							| 
									
										
										
										
											2015-03-08 19:37:13 -07:00
										 |  |  |     content::ResourceContext* resource_context, | 
					
						
							|  |  |  |     const GURL& origin, | 
					
						
							|  |  |  |     int render_process_id) { | 
					
						
							|  |  |  |   return blink::WebNotificationPermissionAllowed; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-24 22:20:47 +08:00
										 |  |  | void PlatformNotificationService::DisplayNotification( | 
					
						
							| 
									
										
										
										
											2015-03-08 19:37:13 -07:00
										 |  |  |     content::BrowserContext* browser_context, | 
					
						
							|  |  |  |     const GURL& origin, | 
					
						
							|  |  |  |     const SkBitmap& icon, | 
					
						
							| 
									
										
										
										
											2015-12-25 10:16:07 +08:00
										 |  |  |     const content::PlatformNotificationData& data, | 
					
						
							| 
									
										
										
										
											2015-03-08 19:37:13 -07:00
										 |  |  |     scoped_ptr<content::DesktopNotificationDelegate> delegate, | 
					
						
							|  |  |  |     base::Closure* cancel_callback) { | 
					
						
							| 
									
										
										
										
											2016-01-23 19:02:30 +05:30
										 |  |  |   browser_client_->WebNotificationAllowed( | 
					
						
							|  |  |  |       render_process_id_, | 
					
						
							|  |  |  |       base::Bind(&OnWebNotificationAllowed, | 
					
						
							|  |  |  |                  browser_client_, icon, data, | 
					
						
							|  |  |  |                  base::Passed(&delegate), | 
					
						
							|  |  |  |                  cancel_callback)); | 
					
						
							| 
									
										
										
										
											2015-03-08 19:37:13 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-24 22:20:47 +08:00
										 |  |  | void PlatformNotificationService::DisplayPersistentNotification( | 
					
						
							| 
									
										
										
										
											2015-03-08 19:37:13 -07:00
										 |  |  |     content::BrowserContext* browser_context, | 
					
						
							| 
									
										
										
										
											2015-04-21 18:54:57 +08:00
										 |  |  |     int64_t service_worker_registration_id, | 
					
						
							| 
									
										
										
										
											2015-03-08 19:37:13 -07:00
										 |  |  |     const GURL& origin, | 
					
						
							|  |  |  |     const SkBitmap& icon, | 
					
						
							| 
									
										
										
										
											2015-04-21 18:54:57 +08:00
										 |  |  |     const content::PlatformNotificationData& notification_data) { | 
					
						
							| 
									
										
										
										
											2015-03-08 19:37:13 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-24 22:20:47 +08:00
										 |  |  | void PlatformNotificationService::ClosePersistentNotification( | 
					
						
							| 
									
										
										
										
											2015-03-08 19:37:13 -07:00
										 |  |  |     content::BrowserContext* browser_context, | 
					
						
							| 
									
										
										
										
											2015-07-23 14:53:42 +08:00
										 |  |  |     int64_t persistent_notification_id) { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-24 22:20:47 +08:00
										 |  |  | bool PlatformNotificationService::GetDisplayedPersistentNotifications( | 
					
						
							| 
									
										
										
										
											2015-07-23 14:53:42 +08:00
										 |  |  |     content::BrowserContext* browser_context, | 
					
						
							|  |  |  |     std::set<std::string>* displayed_notifications) { | 
					
						
							|  |  |  |   return false; | 
					
						
							| 
									
										
										
										
											2015-03-08 19:37:13 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }  // namespace brightray
 |