diff options
author | Allan Sandfeld Jensen <allan.jensen@digia.com> | 2013-02-05 14:14:14 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-02-06 17:41:22 +0100 |
commit | 052090690fe4006427d89e09eca8f0fd67a8e7f1 (patch) | |
tree | c69d5a09bfae652a5813d39f5953e18e9c3b5b75 | |
parent | af04e12234efbf6bba5bddf9c2cfc11f6d516ca8 (diff) | |
download | qtwebkit-052090690fe4006427d89e09eca8f0fd67a8e7f1.tar.gz |
[Qt][WK1] Permission request callbacks for non-legacy notifications
https://bugs.webkit.org/show_bug.cgi?id=107438
Reviewed by Jocelyn Turcotte.
Tracks the new callbacks the same way legacy callbacks are tracked.
No test affected yet as we are still lacking support for testing
feature permission callbacks.
* WebCoreSupport/NotificationPresenterClientQt.cpp:
(WebCore::NotificationPresenterClientQt::requestPermission):
(WebCore::NotificationPresenterClientQt::allowNotificationForFrame):
* WebCoreSupport/NotificationPresenterClientQt.h:
(NotificationPresenterClientQt):
(CallbacksInfo):
Change-Id: Ia01ec54c2d55fac59c6a245757f44ce507a3ef19
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@140330 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
-rw-r--r-- | Source/WebKit/qt/ChangeLog | 19 | ||||
-rw-r--r-- | Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp | 40 | ||||
-rw-r--r-- | Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h | 9 |
3 files changed, 63 insertions, 5 deletions
diff --git a/Source/WebKit/qt/ChangeLog b/Source/WebKit/qt/ChangeLog index f03960ceb..5a7a30d01 100644 --- a/Source/WebKit/qt/ChangeLog +++ b/Source/WebKit/qt/ChangeLog @@ -1,5 +1,24 @@ 2013-01-21 Allan Sandfeld Jensen <allan.jensen@digia.com> + [Qt][WK1] Permission request callbacks for non-legacy notifications + https://bugs.webkit.org/show_bug.cgi?id=107438 + + Reviewed by Jocelyn Turcotte. + + Tracks the new callbacks the same way legacy callbacks are tracked. + + No test affected yet as we are still lacking support for testing + feature permission callbacks. + + * WebCoreSupport/NotificationPresenterClientQt.cpp: + (WebCore::NotificationPresenterClientQt::requestPermission): + (WebCore::NotificationPresenterClientQt::allowNotificationForFrame): + * WebCoreSupport/NotificationPresenterClientQt.h: + (NotificationPresenterClientQt): + (CallbacksInfo): + +2013-01-21 Allan Sandfeld Jensen <allan.jensen@digia.com> + [Qt] Crash in gmail on enabling desktop notifications https://bugs.webkit.org/show_bug.cgi?id=106699 diff --git a/Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp b/Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp index 2f25b8960..d3a6d74e1 100644 --- a/Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp +++ b/Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp @@ -304,6 +304,7 @@ void NotificationPresenterClientQt::notificationControllerDestroyed() { } +#if ENABLE(LEGACY_NOTIFICATIONS) void NotificationPresenterClientQt::requestPermission(ScriptExecutionContext* context, PassRefPtr<VoidCallback> callback) { if (dumpNotification) @@ -311,11 +312,34 @@ void NotificationPresenterClientQt::requestPermission(ScriptExecutionContext* co QHash<ScriptExecutionContext*, CallbacksInfo >::iterator iter = m_pendingPermissionRequests.find(context); if (iter != m_pendingPermissionRequests.end()) - iter.value().m_callbacks.append(callback); + iter.value().m_voidCallbacks.append(callback); else { RefPtr<VoidCallback> cb = callback; CallbacksInfo info; info.m_frame = toFrame(context); + info.m_voidCallbacks.append(cb); + + if (toPage(context) && toFrame(context)) { + m_pendingPermissionRequests.insert(context, info); + toPage(context)->notificationsPermissionRequested(toFrame(context)); + } + } +} +#endif + +#if ENABLE(NOTIFICATIONS) +void NotificationPresenterClientQt::requestPermission(ScriptExecutionContext* context, PassRefPtr<NotificationPermissionCallback> callback) +{ + if (dumpNotification) + printf("DESKTOP NOTIFICATION PERMISSION REQUESTED: %s\n", QString(context->securityOrigin()->toString()).toUtf8().constData()); + + QHash<ScriptExecutionContext*, CallbacksInfo >::iterator iter = m_pendingPermissionRequests.find(context); + if (iter != m_pendingPermissionRequests.end()) + iter.value().m_callbacks.append(callback); + else { + RefPtr<NotificationPermissionCallback> cb = callback; + CallbacksInfo info; + info.m_frame = toFrame(context); info.m_callbacks.append(cb); if (toPage(context) && toFrame(context)) { @@ -324,6 +348,7 @@ void NotificationPresenterClientQt::requestPermission(ScriptExecutionContext* co } } } +#endif NotificationClient::Permission NotificationPresenterClientQt::checkPermission(ScriptExecutionContext* context) { @@ -366,11 +391,20 @@ void NotificationPresenterClientQt::allowNotificationForFrame(Frame* frame) if (iter == m_pendingPermissionRequests.end()) return; - QList<RefPtr<VoidCallback> >& callbacks = iter.value().m_callbacks; - Q_FOREACH(const RefPtr<VoidCallback>& callback, callbacks) { +#if ENABLE(LEGACY_NOTIFICATIONS) + QList<RefPtr<VoidCallback> >& voidCallbacks = iter.value().m_voidCallbacks; + Q_FOREACH(const RefPtr<VoidCallback>& callback, voidCallbacks) { if (callback) callback->handleEvent(); } +#endif +#if ENABLE(NOTIFICATIONS) + QList<RefPtr<NotificationPermissionCallback> >& callbacks = iter.value().m_callbacks; + Q_FOREACH(const RefPtr<NotificationPermissionCallback>& callback, callbacks) { + if (callback) + callback->handleEvent(Notification::permissionString(NotificationClient::PermissionAllowed)); + } +#endif m_pendingPermissionRequests.remove(iter.key()); } diff --git a/Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h b/Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h index 78668f35f..2c52f435a 100644 --- a/Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h +++ b/Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h @@ -94,7 +94,7 @@ public: virtual void requestPermission(ScriptExecutionContext*, PassRefPtr<VoidCallback>); #endif #if ENABLE(NOTIFICATIONS) - virtual void requestPermission(ScriptExecutionContext*, PassRefPtr<NotificationPermissionCallback>) { } + virtual void requestPermission(ScriptExecutionContext*, PassRefPtr<NotificationPermissionCallback>); #endif virtual NotificationClient::Permission checkPermission(ScriptExecutionContext*); virtual void cancelRequestsForPermission(ScriptExecutionContext*); @@ -131,7 +131,12 @@ private: int m_clientCount; struct CallbacksInfo { QWebFrameAdapter* m_frame; - QList<RefPtr<VoidCallback> > m_callbacks; +#if ENABLE(LEGACY_NOTIFICATIONS) + QList<RefPtr<VoidCallback> > m_voidCallbacks; +#endif +#if ENABLE(NOTIFICATIONS) + QList<RefPtr<NotificationPermissionCallback> > m_callbacks; +#endif }; QHash<ScriptExecutionContext*, CallbacksInfo > m_pendingPermissionRequests; QHash<ScriptExecutionContext*, NotificationClient::Permission> m_cachedPermissions; |