| Index: content/child/notifications/notification_manager.cc
|
| diff --git a/content/child/notifications/notification_manager.cc b/content/child/notifications/notification_manager.cc
|
| index b951ba720cc957e5d0ba0c60291305c809f90985..f1dec82547fe0a7048466bf1303b7dfaead70e69 100644
|
| --- a/content/child/notifications/notification_manager.cc
|
| +++ b/content/child/notifications/notification_manager.cc
|
| @@ -13,7 +13,6 @@
|
| #include "content/child/service_worker/web_service_worker_registration_impl.h"
|
| #include "content/child/thread_safe_sender.h"
|
| #include "content/child/worker_task_runner.h"
|
| -#include "content/common/platform_notification_messages.h"
|
| #include "content/public/common/platform_notification_data.h"
|
| #include "third_party/WebKit/public/platform/WebSerializedOrigin.h"
|
| #include "third_party/WebKit/public/platform/modules/notifications/WebNotificationDelegate.h"
|
| @@ -114,6 +113,36 @@ void NotificationManager::showPersistent(
|
| base::Passed(&owned_callbacks)));
|
| }
|
|
|
| +void NotificationManager::getNotifications(
|
| + const blink::WebString& filter_tag,
|
| + blink::WebServiceWorkerRegistration* service_worker_registration,
|
| + blink::WebNotificationGetCallbacks* callbacks) {
|
| + DCHECK(service_worker_registration);
|
| + DCHECK(callbacks);
|
| +
|
| + WebServiceWorkerRegistrationImpl* service_worker_registration_impl =
|
| + static_cast<WebServiceWorkerRegistrationImpl*>(
|
| + service_worker_registration);
|
| +
|
| + GURL origin = GURL(service_worker_registration_impl->scope()).GetOrigin();
|
| + int64 service_worker_registration_id =
|
| + service_worker_registration_impl->registration_id();
|
| +
|
| + // TODO(peter): GenerateNotificationId is more of a request id. Consider
|
| + // renaming the method in the NotificationDispatcher if this makes sense.
|
| + int request_id =
|
| + notification_dispatcher_->GenerateNotificationId(CurrentWorkerId());
|
| +
|
| + pending_get_notification_requests_.AddWithID(callbacks, request_id);
|
| +
|
| + thread_safe_sender_->Send(
|
| + new PlatformNotificationHostMsg_GetNotifications(
|
| + request_id,
|
| + service_worker_registration_id,
|
| + origin,
|
| + base::UTF16ToUTF8(filter_tag)));
|
| +}
|
| +
|
| void NotificationManager::close(blink::WebNotificationDelegate* delegate) {
|
| if (pending_notifications_.CancelPageNotificationFetches(delegate))
|
| return;
|
| @@ -171,6 +200,8 @@ bool NotificationManager::OnMessageReceived(const IPC::Message& message) {
|
| IPC_MESSAGE_HANDLER(PlatformNotificationMsg_DidShow, OnDidShow);
|
| IPC_MESSAGE_HANDLER(PlatformNotificationMsg_DidClose, OnDidClose);
|
| IPC_MESSAGE_HANDLER(PlatformNotificationMsg_DidClick, OnDidClick);
|
| + IPC_MESSAGE_HANDLER(PlatformNotificationMsg_DidGetNotifications,
|
| + OnDidGetNotifications)
|
| IPC_MESSAGE_UNHANDLED(handled = false)
|
| IPC_END_MESSAGE_MAP()
|
|
|
| @@ -202,6 +233,34 @@ void NotificationManager::OnDidClick(int notification_id) {
|
| iter->second->dispatchClickEvent();
|
| }
|
|
|
| +void NotificationManager::OnDidGetNotifications(
|
| + int request_id,
|
| + const std::vector<PersistentNotificationInfo>& notification_infos) {
|
| + blink::WebNotificationGetCallbacks* callbacks =
|
| + pending_get_notification_requests_.Lookup(request_id);
|
| + DCHECK(callbacks);
|
| + if (!callbacks)
|
| + return;
|
| +
|
| + scoped_ptr<blink::WebVector<blink::WebPersistentNotificationInfo>>
|
| + notifications(new blink::WebVector<blink::WebPersistentNotificationInfo>(
|
| + notification_infos.size()));
|
| +
|
| + for (size_t i = 0; i < notification_infos.size(); ++i) {
|
| + blink::WebPersistentNotificationInfo web_notification_info;
|
| + web_notification_info.persistentNotificationId =
|
| + blink::WebString::fromUTF8(notification_infos[i].first);
|
| + web_notification_info.data =
|
| + ToWebNotificationData(notification_infos[i].second);
|
| +
|
| + (*notifications)[i] = web_notification_info;
|
| + }
|
| +
|
| + callbacks->onSuccess(notifications.release());
|
| +
|
| + pending_get_notification_requests_.Remove(request_id);
|
| +}
|
| +
|
| void NotificationManager::DisplayPageNotification(
|
| const blink::WebSerializedOrigin& origin,
|
| const blink::WebNotificationData& notification_data,
|
|
|