Changeset 63921 in webkit


Ignore:
Timestamp:
Jul 22, 2010 4:52:15 PM (14 years ago)
Author:
yael.aharon@nokia.com
Message:

2010-07-22 Yael Aharon <yael.aharon@nokia.com>

Reviewed by Laszlo Gombos.

[Qt] QtWebKit needs public API for Notifications.
https://bugs.webkit.org/show_bug.cgi?id=41413

Add a DRT API to set a flag so that notification requests are ignored,
and add a test for cancelling a pending notification request.
New API and test are disabled for Chromium port.

  • fast/notifications/notifications-cancel-request-permission-expected.txt: Added.
  • fast/notifications/notifications-cancel-request-permission.html: Added.
  • fast/notifications/resources: Added.
  • fast/notifications/resources/notifications-cancel-request-permission.html: Added.
  • platform/chromium/test_expectations.txt:

2010-07-22 Yael Aharon <yael.aharon@nokia.com>

Reviewed by Laszlo Gombos.

[Qt] QtWebKit needs public API for Notifications.
https://bugs.webkit.org/show_bug.cgi?id=41413

Remove DumpRenderTree private API and introduce new API.
Also add support for informing the UI when a notification request is cancelled.

  • Api/qwebpage.cpp: (QWebPage::setUserPermission):
  • Api/qwebpage.h:
  • WebCoreSupport/DumpRenderTreeSupportQt.cpp:
  • WebCoreSupport/DumpRenderTreeSupportQt.h:
  • WebCoreSupport/NotificationPresenterClientQt.cpp: (WebCore::NotificationPresenterClientQt::requestPermission): (WebCore::NotificationPresenterClientQt::checkPermission): (WebCore::NotificationPresenterClientQt::cancelRequestsForPermission): (WebCore::NotificationPresenterClientQt::allowNotificationForFrame): (WebCore::NotificationPresenterClientQt::toPage): (WebCore::NotificationPresenterClientQt::toFrame):
  • WebCoreSupport/NotificationPresenterClientQt.h:

2010-07-22 Yael Aharon <yael.aharon@nokia.com>

Reviewed by Laszlo Gombos.

[Qt] QtWebKit needs public API for Notifications.
https://bugs.webkit.org/show_bug.cgi?id=41413

Update DumpRenderTree and QtTestBrowser to use the new API.
Add new DRT API to flag that notifications permission requests should be ignored.

  • DumpRenderTree/qt/DumpRenderTreeQt.cpp: (WebCore::WebPage::WebPage): (WebCore::WebPage::requestPermission): (WebCore::WebPage::checkPermission): (WebCore::WebPage::cancelRequestsForPermission):
  • DumpRenderTree/qt/DumpRenderTreeQt.h:
  • DumpRenderTree/qt/LayoutTestControllerQt.cpp: (LayoutTestController::reset): (LayoutTestController::ignoreDesktopNotificationPermissionRequests): (LayoutTestController::checkDesktopNotificationPermission):
  • DumpRenderTree/qt/LayoutTestControllerQt.h: (LayoutTestController::ignoreReqestForPermission):
  • QtTestBrowser/main.cpp: (LauncherWindow::LauncherWindow):
  • QtTestBrowser/webpage.cpp: (WebPage::WebPage): (WebPage::requestPermission): (WebPage::checkPermission): (WebPage::cancelRequestsForPermission):
  • QtTestBrowser/webpage.h:
Location:
trunk
Files:
4 added
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r63918 r63921  
     12010-07-22  Yael Aharon  <yael.aharon@nokia.com>
     2
     3        Reviewed by Laszlo Gombos.
     4
     5        [Qt] QtWebKit needs public API for Notifications.
     6        https://bugs.webkit.org/show_bug.cgi?id=41413
     7
     8        Add a DRT API to set a flag so that notification requests are ignored,
     9        and add a test for cancelling a pending notification request.
     10        New API and test are disabled for Chromium port.
     11
     12        * fast/notifications/notifications-cancel-request-permission-expected.txt: Added.
     13        * fast/notifications/notifications-cancel-request-permission.html: Added.
     14        * fast/notifications/resources: Added.
     15        * fast/notifications/resources/notifications-cancel-request-permission.html: Added.
     16        * platform/chromium/test_expectations.txt:
     17
    1182010-07-22  Ryosuke Niwa  <rniwa@webkit.org>
    219
  • trunk/LayoutTests/platform/chromium/test_expectations.txt

    r63909 r63921  
    28292829WONTFIX SKIP : http/tests/notifications = FAIL
    28302830
     2831// Chromium does not support cancel for notifications permissions.
     2832BUGWK42798 SKIP : fast/notifications/notifications-cancel-request-permission.html = FAIL
     2833
    28312834BUG46276 WIN : fast/text/international/khmer-selection.html = IMAGE+TEXT
    28322835
  • trunk/WebKit/qt/Api/qwebpage.cpp

    r63863 r63921  
    21092109}
    21102110
     2111void QWebPage::setUserPermission(QWebFrame* frame, PermissionDomain domain, PermissionPolicy policy)
     2112{
     2113    switch (domain) {
     2114    case NotificationsPermissionDomain:
     2115#if ENABLE(NOTIFICATIONS)
     2116        if (policy == PermissionGranted)
     2117            NotificationPresenterClientQt::notificationPresenter()->allowNotificationForFrame(frame);
     2118#endif
     2119        break;
     2120    default:
     2121        break;
     2122    }
     2123}
     2124
    21112125/*!
    21122126    This function is called whenever WebKit wants to create a new window of the given \a type, for
  • trunk/WebKit/qt/Api/qwebpage.h

    r61342 r63921  
    196196    };
    197197
     198    enum PermissionPolicy {
     199        PermissionGranted,
     200        PermissionUnknown,
     201        PermissionDenied
     202    };
     203
     204    enum PermissionDomain {
     205        NotificationsPermissionDomain
     206    };
     207
    198208    class ViewportHints {
    199209    public:
     
    290300
    291301    QMenu *createStandardContextMenu();
     302
     303    void setUserPermission(QWebFrame* frame, PermissionDomain domain, PermissionPolicy policy);
    292304
    293305    enum Extension {
     
    371383
    372384    void viewportChangeRequested(const QWebPage::ViewportHints& hints);
     385
     386    void requestPermissionFromUser(QWebFrame* frame, QWebPage::PermissionDomain domain);
     387    void checkPermissionFromUser(QWebFrame* frame, QWebPage::PermissionDomain domain, QWebPage::PermissionPolicy& policy);
     388    void cancelRequestsForPermission(QWebFrame* frame, QWebPage::PermissionDomain domain);
    373389
    374390protected:
  • trunk/WebKit/qt/ChangeLog

    r63899 r63921  
     12010-07-22  Yael Aharon  <yael.aharon@nokia.com>
     2
     3        Reviewed by Laszlo Gombos.
     4
     5        [Qt] QtWebKit needs public API for Notifications.
     6        https://bugs.webkit.org/show_bug.cgi?id=41413
     7
     8        Remove DumpRenderTree private API and introduce new API.
     9        Also add support for informing the UI when a notification request is cancelled.
     10
     11        * Api/qwebpage.cpp:
     12        (QWebPage::setUserPermission):
     13        * Api/qwebpage.h:
     14        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
     15        * WebCoreSupport/DumpRenderTreeSupportQt.h:
     16        * WebCoreSupport/NotificationPresenterClientQt.cpp:
     17        (WebCore::NotificationPresenterClientQt::requestPermission):
     18        (WebCore::NotificationPresenterClientQt::checkPermission):
     19        (WebCore::NotificationPresenterClientQt::cancelRequestsForPermission):
     20        (WebCore::NotificationPresenterClientQt::allowNotificationForFrame):
     21        (WebCore::NotificationPresenterClientQt::toPage):
     22        (WebCore::NotificationPresenterClientQt::toFrame):
     23        * WebCoreSupport/NotificationPresenterClientQt.h:
     24
    1252010-07-22  Jamey Hicks  <jamey.hicks@nokia.com>
    226
  • trunk/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp

    r63191 r63921  
    7171using namespace WebCore;
    7272
    73 CheckPermissionFunctionType* checkPermissionFunction = 0;
    74 RequestPermissionFunctionType* requestPermissionFunction = 0;
    7573QMap<int, QWebScriptWorld*> m_worldMap;
    7674
     
    576574}
    577575
    578 void DumpRenderTreeSupportQt::setNotificationsReceiver(QObject* receiver)
    579 {
    580 #if ENABLE(NOTIFICATIONS)
    581     NotificationPresenterClientQt::notificationPresenter()->setReceiver(receiver);
    582 #endif
    583 }
    584 
    585 void DumpRenderTreeSupportQt::allowNotificationForOrigin(const QString& origin)
    586 {
    587 #if ENABLE(NOTIFICATIONS)
    588     NotificationPresenterClientQt::notificationPresenter()->allowNotificationForOrigin(origin);
    589 #endif
    590 }
    591 
    592576void DumpRenderTreeSupportQt::setMockGeolocationPosition(double latitude, double longitude, double accuracy)
    593577{
     
    604588    GeolocationServiceMock::setError(positionError);
    605589#endif
    606 }
    607 
    608 void DumpRenderTreeSupportQt::setCheckPermissionFunction(CheckPermissionFunctionType* f)
    609 {
    610     checkPermissionFunction = f;
    611 }
    612 
    613 void DumpRenderTreeSupportQt::setRequestPermissionFunction(RequestPermissionFunctionType* f)
    614 {
    615     requestPermissionFunction = f;
    616590}
    617591
  • trunk/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h

    r63191 r63921  
    3333class QWebScriptWorld;
    3434
    35 enum NotificationPermission {
    36     NotificationAllowed,
    37     NotificationNotAllowed,
    38     NotificationDenied
    39 };
    40 
    41 typedef void (CheckPermissionFunctionType) (QObject* receiver, const QUrl&, NotificationPermission&);
    42 typedef void (RequestPermissionFunctionType) (QObject* receiver, const QString&);
    43 
    44 extern CheckPermissionFunctionType* checkPermissionFunction;
    45 extern RequestPermissionFunctionType* requestPermissionFunction;
    4635extern QMap<int, QWebScriptWorld*> m_worldMap;
    4736
     
    124113    static void dumpNotification(bool b);
    125114
    126     // These functions should eventually turn into public API
    127     // and the "receiver" concept would go away
    128     static void setNotificationsReceiver(QObject* receiver);
    129     static void allowNotificationForOrigin(const QString& origin);
    130     static void setCheckPermissionFunction(CheckPermissionFunctionType*);
    131     static void setRequestPermissionFunction(RequestPermissionFunctionType*);
    132 
    133115    static QMap<QString, QWebHistoryItem> getChildHistoryItems(const QWebHistoryItem& historyItem);
    134116    static bool isTargetItem(const QWebHistoryItem& historyItem);
  • trunk/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp

    r63738 r63921  
    3737#include "EventNames.h"
    3838#include "KURL.h"
     39#include "Page.h"
    3940#include "QtPlatformPlugin.h"
    4041#include "ScriptExecutionContext.h"
    4142#include "SecurityOrigin.h"
    4243
     44#include "qwebframe_p.h"
    4345#include "qwebkitglobal.h"
     46#include "qwebpage.h"
    4447#include <QtGui>
    4548
     
    260263        printf("DESKTOP NOTIFICATION PERMISSION REQUESTED: %s\n", QString(context->securityOrigin()->toString()).toUtf8().constData());
    261264
    262     QString originString = context->securityOrigin()->toString();
    263     QHash<QString, QList<RefPtr<VoidCallback> > >::iterator iter = m_pendingPermissionRequests.find(originString);
     265    QHash<ScriptExecutionContext*, CallbacksInfo >::iterator iter = m_pendingPermissionRequests.find(context);
    264266    if (iter != m_pendingPermissionRequests.end())
    265         iter.value().append(callback);
     267        iter.value().m_callbacks.append(callback);
    266268    else {
    267         QList<RefPtr<VoidCallback> > callbacks;
    268269        RefPtr<VoidCallback> cb = callback;
    269         callbacks.append(cb);
    270         m_pendingPermissionRequests.insert(originString, callbacks);
    271         if (requestPermissionFunction)
    272             requestPermissionFunction(m_receiver, originString);
     270        CallbacksInfo info;
     271        info.m_frame = toFrame(context);
     272        info.m_callbacks.append(cb);
     273        m_pendingPermissionRequests.insert(context, info);
     274
     275        if (toPage(context) && toFrame(context)) {
     276            m_pendingPermissionRequests.insert(context, info);
     277            emit toPage(context)->requestPermissionFromUser(toFrame(context), QWebPage::NotificationsPermissionDomain);
     278        }
    273279    }
    274280}
     
    276282NotificationPresenter::Permission NotificationPresenterClientQt::checkPermission(ScriptExecutionContext* context)
    277283{
    278     NotificationPermission permission = NotificationNotAllowed;
    279     QString origin = context->url().string();
    280     if (checkPermissionFunction)
    281         checkPermissionFunction(m_receiver, origin, permission);
    282     switch (permission) {
    283     case NotificationAllowed:
     284    QWebPage::PermissionPolicy policy = QWebPage::PermissionUnknown;
     285    if (toPage(context) && toFrame(context))
     286        emit toPage(context)->checkPermissionFromUser(toFrame(context), QWebPage::NotificationsPermissionDomain, policy);
     287
     288    switch (policy) {
     289    case QWebPage::PermissionGranted:
    284290        return NotificationPresenter::PermissionAllowed;
    285     case NotificationNotAllowed:
     291    case QWebPage::PermissionUnknown:
    286292        return NotificationPresenter::PermissionNotAllowed;
    287     case NotificationDenied:
     293    case QWebPage::PermissionDenied:
    288294        return NotificationPresenter::PermissionDenied;
    289295    }
     
    292298}
    293299
    294 void NotificationPresenterClientQt::cancelRequestsForPermission(ScriptExecutionContext*)
    295 {
    296     // FIXME: This will be implemented for https://bugs.webkit.org/show_bug.cgi?id=41413
    297     // to avoid adding and removing new private API
    298 }
    299 
    300 void NotificationPresenterClientQt::allowNotificationForOrigin(const QString& origin)
    301 {
    302     QHash<QString, QList<RefPtr<VoidCallback> > >::iterator iter = m_pendingPermissionRequests.find(origin);
    303     if (iter != m_pendingPermissionRequests.end()) {
    304         QList<RefPtr<VoidCallback> >& callbacks = iter.value();
    305         for (int i = 0; i < callbacks.size(); i++)
    306             callbacks.at(i)->handleEvent();
    307         m_pendingPermissionRequests.remove(origin);
    308     }
     300void NotificationPresenterClientQt::cancelRequestsForPermission(ScriptExecutionContext* context)
     301{
     302    QHash<ScriptExecutionContext*, CallbacksInfo >::iterator iter = m_pendingPermissionRequests.find(context);
     303    if (iter == m_pendingPermissionRequests.end())
     304        return;
     305
     306    QWebFrame* frame = iter.value().m_frame;
     307    if (!frame)
     308        return;
     309    QWebPage* page = frame->page();
     310    m_pendingPermissionRequests.erase(iter);
     311
     312    if (!page)
     313        return;
     314
     315    if (dumpNotification)
     316        printf("DESKTOP NOTIFICATION PERMISSION REQUEST CANCELLED: %s\n", QString(context->securityOrigin()->toString()).toUtf8().constData());
     317
     318    emit page->cancelRequestsForPermission(frame, QWebPage::NotificationsPermissionDomain);
     319}
     320
     321void NotificationPresenterClientQt::allowNotificationForFrame(QWebFrame* frame)
     322{
     323    QHash<ScriptExecutionContext*,  CallbacksInfo>::iterator iter = m_pendingPermissionRequests.begin();
     324    while (iter != m_pendingPermissionRequests.end()) {
     325        if (toFrame(iter.key()) == frame)
     326            break;
     327    }
     328
     329    if (iter == m_pendingPermissionRequests.end())
     330        return;
     331
     332    QList<RefPtr<VoidCallback> >& callbacks = iter.value().m_callbacks;
     333    for (int i = 0; i < callbacks.size(); i++)
     334        callbacks.at(i)->handleEvent();
     335    m_pendingPermissionRequests.remove(iter.key());
    309336}
    310337
     
    363390}
    364391
     392QWebPage* NotificationPresenterClientQt::toPage(ScriptExecutionContext* context)
     393{
     394    if (!context || context->isWorkerContext())
     395        return 0;
     396
     397    Document* document = static_cast<Document*>(context);
     398    if (!document)
     399        return 0;
     400
     401    Page* page = document->page();
     402    if (!page || !page->mainFrame())
     403        return 0;
     404
     405    return QWebFramePrivate::kit(page->mainFrame())->page();
     406}
     407
     408QWebFrame* NotificationPresenterClientQt::toFrame(ScriptExecutionContext* context)
     409{
     410    if (!context || context->isWorkerContext())
     411        return 0;
     412
     413    Document* document = static_cast<Document*>(context);
     414    if (!document || !document->frame())
     415        return 0;
     416
     417    return QWebFramePrivate::kit(document->frame());
     418}
     419
    365420#endif // ENABLE(NOTIFICATIONS)
    366421}
  • trunk/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h

    r62939 r63921  
    4242#include <QMultiHash>
    4343#include <QSystemTrayIcon>
     44
     45class QWebFrame;
     46class QWebPage;
    4447
    4548namespace WebCore {
     
    9194    void cancel(NotificationWrapper*);
    9295
    93     void allowNotificationForOrigin(const QString& origin);
     96    void allowNotificationForFrame(QWebFrame*);
    9497
    9598    static bool dumpNotification;
    96 
    97     void setReceiver(QObject* receiver) { m_receiver = receiver; }
    9899
    99100    void addClient() { m_clientCount++; }
     
    110111    void dumpReplacedIdText(Notification*);
    111112    void dumpShowText(Notification*);
     113    QWebPage* toPage(ScriptExecutionContext*);
     114    QWebFrame* toFrame(ScriptExecutionContext*);
    112115
    113116    int m_clientCount;
    114     QHash<QString,  QList<RefPtr<VoidCallback> > > m_pendingPermissionRequests;
     117    struct CallbacksInfo {
     118        QWebFrame* m_frame;
     119        QList<RefPtr<VoidCallback> > m_callbacks;
     120    };
     121    QHash<ScriptExecutionContext*,  CallbacksInfo > m_pendingPermissionRequests;
     122
    115123    NotificationsQueue m_notifications;
    116     QObject* m_receiver;
    117124    QtPlatformPlugin m_platformPlugin;
    118125};
  • trunk/WebKitTools/ChangeLog

    r63906 r63921  
     12010-07-22  Yael Aharon  <yael.aharon@nokia.com>
     2
     3        Reviewed by Laszlo Gombos.
     4
     5        [Qt] QtWebKit needs public API for Notifications.
     6        https://bugs.webkit.org/show_bug.cgi?id=41413
     7
     8        Update DumpRenderTree and QtTestBrowser to use the new API.
     9        Add new DRT API to flag that notifications permission requests should be ignored.
     10
     11        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
     12        (WebCore::WebPage::WebPage):
     13        (WebCore::WebPage::requestPermission):
     14        (WebCore::WebPage::checkPermission):
     15        (WebCore::WebPage::cancelRequestsForPermission):
     16        * DumpRenderTree/qt/DumpRenderTreeQt.h:
     17        * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
     18        (LayoutTestController::reset):
     19        (LayoutTestController::ignoreDesktopNotificationPermissionRequests):
     20        (LayoutTestController::checkDesktopNotificationPermission):
     21        * DumpRenderTree/qt/LayoutTestControllerQt.h:
     22        (LayoutTestController::ignoreReqestForPermission):
     23        * QtTestBrowser/main.cpp:
     24        (LauncherWindow::LauncherWindow):
     25        * QtTestBrowser/webpage.cpp:
     26        (WebPage::WebPage):
     27        (WebPage::requestPermission):
     28        (WebPage::checkPermission):
     29        (WebPage::cancelRequestsForPermission):
     30        * QtTestBrowser/webpage.h:
     31
    1322010-07-22  Darin Adler  <darin@apple.com>
    233
  • trunk/WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.cpp

    r63536 r63921  
    131131#endif
    132132
    133 void checkPermissionCallback(QObject* receiver, const QUrl& url, NotificationPermission& permission)
    134 {
    135     qobject_cast<DumpRenderTree*>(receiver)->checkPermission(url, permission);
    136 }
    137 
    138 void requestPermissionCallback(QObject* receiver, const QString& origin)
    139 {
    140     qobject_cast<DumpRenderTree*>(receiver)->requestPermission(origin);
    141 }
    142 
    143133WebPage::WebPage(QObject* parent, DumpRenderTree* drt)
    144134    : QWebPage(parent)
     
    168158    setPluginFactory(new TestPlugin(this));
    169159
    170     DumpRenderTreeSupportQt::setNotificationsReceiver(m_drt);
    171     DumpRenderTreeSupportQt::setCheckPermissionFunction(checkPermissionCallback);
    172     DumpRenderTreeSupportQt::setRequestPermissionFunction(requestPermissionCallback);
    173 
     160    connect(this, SIGNAL(requestPermissionFromUser(QWebFrame*, QWebPage::PermissionDomain)), this, SLOT(requestPermission(QWebFrame*, QWebPage::PermissionDomain)));
     161    connect(this, SIGNAL(checkPermissionFromUser(QWebFrame*, QWebPage::PermissionDomain, QWebPage::PermissionPolicy&)), this, SLOT(checkPermission(QWebFrame*, QWebPage::PermissionDomain, QWebPage::PermissionPolicy&)));
     162    connect(this, SIGNAL(cancelRequestsForPermissionFromUser(QWebFrame*, QWebPage::PermissionDomain)), this, SLOT(cancelRequestsForPermissionFromUser(QWebFrame*, QWebPage::PermissionDomain)));
    174163}
    175164
     
    227216
    228217    fprintf(stdout, "ALERT: %s\n", message.toUtf8().constData());
     218}
     219
     220void WebPage::requestPermission(QWebFrame* frame, QWebPage::PermissionDomain domain)
     221{
     222    switch (domain) {
     223    case NotificationsPermissionDomain:
     224        if (!m_drt->layoutTestController()->ignoreReqestForPermission())
     225            setUserPermission(frame, domain, PermissionGranted);
     226        break;
     227    default:
     228        break;
     229    }
     230}
     231
     232void WebPage::checkPermission(QWebFrame* frame, QWebPage::PermissionDomain domain, QWebPage::PermissionPolicy& policy)
     233{
     234    switch (domain) {
     235    case NotificationsPermissionDomain:
     236        {
     237        QUrl url = frame->url();
     238        policy = m_drt->layoutTestController()->checkDesktopNotificationPermission(url.scheme() + "://" + url.host()) ? PermissionGranted : PermissionDenied;
     239        break;
     240        }
     241    default:
     242        break;
     243    }
     244}
     245
     246void WebPage::cancelRequestsForPermission(QWebFrame*, QWebPage::PermissionDomain)
     247{
    229248}
    230249
     
    9931012}
    9941013
    995 void DumpRenderTree::checkPermission(const QUrl& url, NotificationPermission& permission)
    996 {
    997     permission = m_controller->checkDesktopNotificationPermission(url.scheme() + "://" + url.host()) ? NotificationAllowed : NotificationDenied;
    998 }
    999 
    1000 void DumpRenderTree::requestPermission(const QString& origin)
    1001 {
    1002     DumpRenderTreeSupportQt::allowNotificationForOrigin(origin);
    1003 }
    1004 
    10051014#if defined(Q_WS_X11)
    10061015void DumpRenderTree::initializeFonts()
  • trunk/WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.h

    r62444 r63921  
    120120    void statusBarMessage(const QString& message);
    121121    void windowCloseRequested();
    122     void checkPermission(const QUrl&, NotificationPermission&);
    123     void requestPermission(const QString&);
    124122
    125123Q_SIGNALS:
     
    194192    bool shouldInterruptJavaScript() { return false; }
    195193    bool allowGeolocationRequest(QWebFrame *frame);
     194    void requestPermission(QWebFrame* frame, QWebPage::PermissionDomain domain);
     195    void checkPermission(QWebFrame* frame, QWebPage::PermissionDomain domain, QWebPage::PermissionPolicy& policy);
     196    void cancelRequestsForPermission(QWebFrame* frame, QWebPage::PermissionDomain domain);
    196197
    197198protected:
  • trunk/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp

    r63191 r63921  
    6868    m_userStyleSheetEnabled = false;
    6969    m_desktopNotificationAllowedOrigins.clear();
     70    m_ignoreDesktopNotification = false;
    7071
    7172    DumpRenderTreeSupportQt::dumpEditingCallbacks(false);
     
    194195}
    195196
     197void LayoutTestController::ignoreDesktopNotificationPermissionRequests()
     198{
     199    m_ignoreDesktopNotification = true;
     200}
     201
    196202bool LayoutTestController::checkDesktopNotificationPermission(const QString& origin)
    197203{
    198     return m_desktopNotificationAllowedOrigins.contains(origin);
     204    return !m_ignoreDesktopNotification && m_desktopNotificationAllowedOrigins.contains(origin);
    199205}
    200206
  • trunk/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.h

    r63191 r63921  
    7171    bool shouldDumpTitleChanges() const { return m_dumpTitleChanges; }
    7272    bool waitForPolicy() const { return m_waitForPolicy; }
     73    bool ignoreReqestForPermission() const { return m_ignoreDesktopNotification; }
    7374
    7475    void reset();
     
    121122    int windowCount();
    122123    void grantDesktopNotificationPermission(const QString& origin);
     124    void ignoreDesktopNotificationPermissionRequests();
    123125    bool checkDesktopNotificationPermission(const QString& origin);
    124126    void display();
     
    253255    QWebHistory* m_webHistory;
    254256    QStringList m_desktopNotificationAllowedOrigins;
     257    bool m_ignoreDesktopNotification;
    255258};
    256259
  • trunk/WebKitTools/QtTestBrowser/main.cpp

    r63090 r63921  
    9393#endif
    9494
    95 class NotificationsPermissionController : public QObject {
    96     Q_OBJECT
    97 public:
    98     NotificationsPermissionController(QObject* parent) : QObject(parent)
    99     {
    100         DumpRenderTreeSupportQt::setNotificationsReceiver(this);
    101         DumpRenderTreeSupportQt::setCheckPermissionFunction(checkPermission);
    102         DumpRenderTreeSupportQt::setRequestPermissionFunction(requestPermission);
    103     }
    104 
    105     static void checkPermission(QObject*, const QUrl&, NotificationPermission& permission)
    106     {
    107         permission = NotificationAllowed;
    108     }
    109 
    110     static void requestPermission(QObject*, const QString& origin)
    111     {
    112         DumpRenderTreeSupportQt::allowNotificationForOrigin(origin);
    113     }
    114 };
    115 
    116 NotificationsPermissionController* notificationsPermissionController = 0;
    117 
    11895class LauncherWindow : public MainWindow {
    11996    Q_OBJECT
     
    234211
    235212    createChrome();
    236     if (!notificationsPermissionController)
    237         notificationsPermissionController = new NotificationsPermissionController(QCoreApplication::instance());
    238213}
    239214
  • trunk/WebKitTools/QtTestBrowser/webpage.cpp

    r59896 r63921  
    4949    connect(networkAccessManager(), SIGNAL(authenticationRequired(QNetworkReply*, QAuthenticator*)),
    5050            this, SLOT(authenticationRequired(QNetworkReply*, QAuthenticator*)));
     51    connect(this, SIGNAL(requestPermissionFromUser(QWebFrame*, QWebPage::PermissionDomain)), this, SLOT(requestPermission(QWebFrame*, QWebPage::PermissionDomain)));
     52    connect(this, SIGNAL(checkPermissionFromUser(QWebFrame*, QWebPage::PermissionDomain, QWebPage::PermissionPolicy&)), this, SLOT(checkPermission(QWebFrame*, QWebPage::PermissionDomain, QWebPage::PermissionPolicy&)));
     53    connect(this, SIGNAL(cancelRequestsForPermission(QWebFrame*, QWebPage::PermissionDomain)), this, SLOT(cancelRequestsForPermission(QWebFrame*, QWebPage::PermissionDomain)));
    5154}
    5255
     
    163166    delete dialog;
    164167}
     168
     169void WebPage::requestPermission(QWebFrame* frame, QWebPage::PermissionDomain domain)
     170{
     171    setUserPermission(frame, domain, PermissionGranted);
     172}
     173
     174void WebPage::checkPermission(QWebFrame* frame, QWebPage::PermissionDomain domain, QWebPage::PermissionPolicy& policy)
     175{
     176    switch (domain) {
     177    case NotificationsPermissionDomain:
     178        policy = PermissionGranted;
     179        break;
     180    default:
     181        break;
     182    }
     183}
     184
     185void WebPage::cancelRequestsForPermission(QWebFrame*, QWebPage::PermissionDomain)
     186{
     187}
  • trunk/WebKitTools/QtTestBrowser/webpage.h

    r59896 r63921  
    5858    bool shouldInterruptJavaScript();
    5959    void authenticationRequired(QNetworkReply*, QAuthenticator*);
     60    void requestPermission(QWebFrame* frame, QWebPage::PermissionDomain domain);
     61    void checkPermission(QWebFrame* frame, QWebPage::PermissionDomain domain, QWebPage::PermissionPolicy& policy);
     62    void cancelRequestsForPermission(QWebFrame* frame, QWebPage::PermissionDomain domain);
    6063
    6164private:
Note: See TracChangeset for help on using the changeset viewer.