summaryrefslogtreecommitdiff
path: root/Source/WebKit2/WebProcess/Notifications/WebNotificationManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2/WebProcess/Notifications/WebNotificationManager.cpp')
-rw-r--r--Source/WebKit2/WebProcess/Notifications/WebNotificationManager.cpp32
1 files changed, 30 insertions, 2 deletions
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 <WebCore/Document.h>
#include <WebCore/Notification.h>
#include <WebCore/Page.h>
#include <WebCore/ScriptExecutionContext.h>
@@ -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<NotificationContextMap::iterator, bool> addedPair = m_notificationContextMap.add(notification->scriptExecutionContext(), Vector<uint64_t>());
+ 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<uint64_t>& 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