Skip to content

Instantly share code, notes, and snippets.

@tronical
Created November 16, 2010 16:05
Show Gist options
  • Save tronical/701979 to your computer and use it in GitHub Desktop.
Save tronical/701979 to your computer and use it in GitHub Desktop.
diff --git a/WebKit/qt/Api/qwebpage.cpp b/WebKit/qt/Api/qwebpage.cpp
index 6152660..a29d417 100644
--- a/WebKit/qt/Api/qwebpage.cpp
+++ b/WebKit/qt/Api/qwebpage.cpp
@@ -2123,7 +2123,7 @@ void QWebPage::setUserPermission(QWebFrame* frame, PermissionDomain domain, Perm
case NotificationsPermissionDomain:
#if ENABLE(NOTIFICATIONS)
if (policy == PermissionGranted)
- NotificationPresenterClientQt::notificationPresenter()->allowNotificationForFrame(frame);
+ NotificationPresenterClientQt::notificationPresenter()->allowNotificationForFrame(frame->d->frame);
#endif
break;
case GeolocationPermissionDomain:
diff --git a/WebKit/qt/Api/qwebpage.h b/WebKit/qt/Api/qwebpage.h
index ec551e5..9fa3518 100644
--- a/WebKit/qt/Api/qwebpage.h
+++ b/WebKit/qt/Api/qwebpage.h
@@ -394,7 +394,6 @@ Q_SIGNALS:
void viewportChangeRequested();
void requestPermissionFromUser(QWebFrame* frame, QWebPage::PermissionDomain domain);
- void checkPermissionFromUser(QWebFrame* frame, QWebPage::PermissionDomain domain, QWebPage::PermissionPolicy& policy);
void cancelRequestsForPermission(QWebFrame* frame, QWebPage::PermissionDomain domain);
protected:
diff --git a/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp b/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp
index 0324c0d..e58829b 100644
--- a/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp
+++ b/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp
@@ -335,24 +335,13 @@ void NotificationPresenterClientQt::requestPermission(ScriptExecutionContext* co
NotificationPresenter::Permission NotificationPresenterClientQt::checkPermission(ScriptExecutionContext* context)
{
- QWebPage::PermissionPolicy policy = QWebPage::PermissionUnknown;
- if (toPage(context) && toFrame(context))
- emit toPage(context)->checkPermissionFromUser(toFrame(context), QWebPage::NotificationsPermissionDomain, policy);
-
- switch (policy) {
- case QWebPage::PermissionGranted:
- return NotificationPresenter::PermissionAllowed;
- case QWebPage::PermissionUnknown:
- return NotificationPresenter::PermissionNotAllowed;
- case QWebPage::PermissionDenied:
- return NotificationPresenter::PermissionDenied;
- }
- ASSERT_NOT_REACHED();
- return NotificationPresenter::PermissionNotAllowed;
+ return m_cachedPermissions.value(context, NotificationPresenter::PermissionNotAllowed);
}
void NotificationPresenterClientQt::cancelRequestsForPermission(ScriptExecutionContext* context)
{
+ m_cachedPermissions.remove(context);
+
QHash<ScriptExecutionContext*, CallbacksInfo >::iterator iter = m_pendingPermissionRequests.find(context);
if (iter == m_pendingPermissionRequests.end())
return;
@@ -372,11 +361,13 @@ void NotificationPresenterClientQt::cancelRequestsForPermission(ScriptExecutionC
emit page->cancelRequestsForPermission(frame, QWebPage::NotificationsPermissionDomain);
}
-void NotificationPresenterClientQt::allowNotificationForFrame(QWebFrame* frame)
+void NotificationPresenterClientQt::allowNotificationForFrame(Frame* frame)
{
+ m_cachedPermissions.insert(frame->document(), NotificationPresenter::PermissionAllowed);
+
QHash<ScriptExecutionContext*, CallbacksInfo>::iterator iter = m_pendingPermissionRequests.begin();
while (iter != m_pendingPermissionRequests.end()) {
- if (toFrame(iter.key()) == frame)
+ if (iter.key() == frame->document())
break;
}
diff --git a/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h b/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h
index 2520f6c..a501247 100644
--- a/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h
+++ b/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h
@@ -48,6 +48,7 @@ class QWebPage;
namespace WebCore {
class Document;
+class Frame;
class ScriptExecutionContext;
class NotificationWrapper : public QObject, public QWebNotificationData {
@@ -95,7 +96,7 @@ public:
void cancel(NotificationWrapper*);
- void allowNotificationForFrame(QWebFrame*);
+ void allowNotificationForFrame(Frame*);
static bool dumpNotification;
@@ -123,6 +124,7 @@ private:
QList<RefPtr<VoidCallback> > m_callbacks;
};
QHash<ScriptExecutionContext*, CallbacksInfo > m_pendingPermissionRequests;
+ QHash<ScriptExecutionContext*, NotificationPresenter::Permission> m_cachedPermissions;
NotificationsQueue m_notifications;
QtPlatformPlugin m_platformPlugin;
diff --git a/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp b/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp
index 3e50e06..2cfe38d 100644
--- a/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp
+++ b/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp
@@ -196,6 +196,8 @@ int LayoutTestController::windowCount()
void LayoutTestController::grantDesktopNotificationPermission(const QString& origin)
{
+ QWebFrame* frame = m_drt->webPage()->mainFrame();
+ m_drt->webPage()->setUserPermission(frame, QWebPage::NotificationsPermissionDomain, QWebPage::PermissionGranted);
m_desktopNotificationAllowedOrigins.append(origin);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment