From 03e12282df9aa1e1fb05a8b90f1cfc2e08764cec Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Thu, 9 Feb 2012 14:16:12 +0100 Subject: Imported WebKit commit e09a82039aa4273ab318b71122e92d8e5f233525 (http://svn.webkit.org/repository/webkit/trunk@107223) --- .../Notifications/WebNotificationManager.cpp | 32 ++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) (limited to 'Source/WebKit2/WebProcess/Notifications/WebNotificationManager.cpp') diff --git a/Source/WebKit2/WebProcess/Notifications/WebNotificationManager.cpp b/Source/WebKit2/WebProcess/Notifications/WebNotificationManager.cpp index 0c865292d..84b52c2ac 100644 --- a/Source/WebKit2/WebProcess/Notifications/WebNotificationManager.cpp +++ b/Source/WebKit2/WebProcess/Notifications/WebNotificationManager.cpp @@ -33,6 +33,7 @@ #include "WebNotification.h" #include "WebNotificationManagerProxyMessages.h" #include "WebPageProxyMessages.h" +#include #include #include #include @@ -113,9 +114,18 @@ bool WebNotificationManager::show(Notification* notification, WebPage* page) m_notificationMap.set(notification, notificationID); m_notificationIDMap.set(notificationID, notification); - m_process->connection()->send(Messages::WebPageProxy::ShowNotification(notification->contents().title, notification->contents().body, notification->scriptExecutionContext()->securityOrigin()->toString(), notificationID), page->pageID()); -#endif + NotificationContextMap::iterator it = m_notificationContextMap.find(notification->scriptExecutionContext()); + if (it == m_notificationContextMap.end()) { + pair addedPair = m_notificationContextMap.add(notification->scriptExecutionContext(), Vector()); + it = addedPair.first; + } + it->second.append(notificationID); + + m_process->connection()->send(Messages::WebPageProxy::ShowNotification(notification->contents().title, notification->contents().body, notification->iconURL().string(), notification->scriptExecutionContext()->securityOrigin()->toString(), notificationID), page->pageID()); return true; +#else + return false; +#endif } void WebNotificationManager::cancel(Notification* notification, WebPage* page) @@ -132,6 +142,18 @@ void WebNotificationManager::cancel(Notification* notification, WebPage* page) #endif } +void WebNotificationManager::clearNotifications(WebCore::ScriptExecutionContext* context, WebPage* page) +{ +#if ENABLE(NOTIFICATIONS) + NotificationContextMap::iterator it = m_notificationContextMap.find(context); + if (it == m_notificationContextMap.end()) + return; + + m_process->connection()->send(Messages::WebNotificationManagerProxy::ClearNotifications(it->second), page->pageID()); + m_notificationContextMap.remove(it); +#endif +} + void WebNotificationManager::didDestroyNotification(Notification* notification, WebPage* page) { #if ENABLE(NOTIFICATIONS) @@ -185,6 +207,12 @@ void WebNotificationManager::didCloseNotifications(const Vector& notif if (!notification) continue; + NotificationContextMap::iterator it = m_notificationContextMap.find(notification->scriptExecutionContext()); + ASSERT(it != m_notificationContextMap.end()); + size_t index = it->second.find(notificationID); + ASSERT(index != notFound); + it->second.remove(index); + notification->dispatchCloseEvent(); } #endif -- cgit v1.2.1