Changeset 103330 in webkit


Ignore:
Timestamp:
Dec 20, 2011 7:35:52 AM (12 years ago)
Author:
Simon Hausmann
Message:

[Qt] Extend QQuickWebview::navigationRequested API
https://bugs.webkit.org/show_bug.cgi?id=73818

Patch by Rafael Brandao <rafael.lobo@openbossa.org> on 2011-12-20
Reviewed by Simon Hausmann.

Source/WebKit/qt:

  • declarative/experimental/plugin.cpp:

Source/WebKit2:

Added url of the originating frame on QWebNavigationRequest,
accessible via 'request.originatingUrl' on QML. Download action
was moved to experimental, so in order to use it you should set
'request.action = WebViewExperimental.DownloadRequest' on QML.

  • UIProcess/API/qt/qquickwebview_p.h:
  • UIProcess/API/qt/qwebnavigationrequest.cpp:

(QWebNavigationRequestPrivate::QWebNavigationRequestPrivate):
(QWebNavigationRequest::QWebNavigationRequest):
(QWebNavigationRequest::originatingUrl):

  • UIProcess/API/qt/qwebnavigationrequest_p.h:
  • UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_navigationRequested.qml:

Tests were modified a bit to reuse urls and also added a test case to check
originating url once a request is done.

  • UIProcess/qt/QtWebPagePolicyClient.cpp:

(QtWebPagePolicyClient::decidePolicyForNavigationAction):

  • UIProcess/qt/QtWebPagePolicyClient.h:
Location:
trunk/Source
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/qt/ChangeLog

    r103320 r103330  
     12011-12-20  Rafael Brandao  <rafael.lobo@openbossa.org>
     2
     3        [Qt] Extend QQuickWebview::navigationRequested API
     4        https://bugs.webkit.org/show_bug.cgi?id=73818
     5
     6        Reviewed by Simon Hausmann.
     7
     8        * declarative/experimental/plugin.cpp:
     9
    1102011-12-20  Jarred Nicholls  <jarred@sencha.com>
    211
  • trunk/Source/WebKit/qt/declarative/experimental/plugin.cpp

    r102922 r103330  
    4949        qmlRegisterUncreatableType<QWebNavigationHistory>(uri, 3, 0, "NavigationHistory", QObject::tr("Cannot create separate instance of NavigationHistory"));
    5050        qmlRegisterExtendedType<QQuickWebView, QQuickWebViewExperimentalExtension>(uri, 3, 0, "WebView");
    51         qmlRegisterUncreatableType<QQuickWebViewExperimental>(uri, 3, 0, "QQuickWebViewExperimental",
    52             QObject::tr("Cannot create separate instance of QQuickWebViewExperimental"));
     51        qmlRegisterUncreatableType<QQuickWebViewExperimental>(uri, 3, 0, "WebViewExperimental",
     52            QObject::tr("Cannot create separate instance of WebViewExperimental"));
    5353        qmlRegisterUncreatableType<QWebViewportInfo>(uri, 3, 0, "QWebViewportInfo",
    5454            QObject::tr("Cannot create separate instance of QWebViewportInfo"));
  • trunk/Source/WebKit2/ChangeLog

    r103329 r103330  
     12011-12-20  Rafael Brandao  <rafael.lobo@openbossa.org>
     2
     3        [Qt] Extend QQuickWebview::navigationRequested API
     4        https://bugs.webkit.org/show_bug.cgi?id=73818
     5
     6        Reviewed by Simon Hausmann.
     7
     8        Added url of the originating frame on QWebNavigationRequest,
     9        accessible via 'request.originatingUrl' on QML. Download action
     10        was moved to experimental, so in order to use it you should set
     11        'request.action = WebViewExperimental.DownloadRequest' on QML.
     12
     13        * UIProcess/API/qt/qquickwebview_p.h:
     14        * UIProcess/API/qt/qwebnavigationrequest.cpp:
     15        (QWebNavigationRequestPrivate::QWebNavigationRequestPrivate):
     16        (QWebNavigationRequest::QWebNavigationRequest):
     17        (QWebNavigationRequest::originatingUrl):
     18        * UIProcess/API/qt/qwebnavigationrequest_p.h:
     19        * UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_navigationRequested.qml:
     20        Tests were modified a bit to reuse urls and also added a test case to check
     21        originating url once a request is done.
     22        * UIProcess/qt/QtWebPagePolicyClient.cpp:
     23        (QtWebPagePolicyClient::decidePolicyForNavigationAction):
     24        * UIProcess/qt/QtWebPagePolicyClient.h:
     25
    1262011-12-20  Balazs Kelemen  <kbalazs@webkit.org>
    227
  • trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h

    r103316 r103330  
    6666    enum NavigationRequestAction {
    6767        AcceptRequest,
    68         IgnoreRequest,
    69         DownloadRequest
     68        IgnoreRequest
    7069    };
    7170
     
    179178    Q_PROPERTY(bool useTraditionalDesktopBehaviour READ useTraditionalDesktopBehaviour WRITE setUseTraditionalDesktopBehaviour)
    180179    Q_PROPERTY(QWebViewportInfo* viewportInfo READ viewportInfo CONSTANT FINAL)
     180    Q_ENUMS(NavigationRequestAction)
    181181
    182182public:
     183    enum NavigationRequestAction {
     184        DownloadRequest = 2
     185    };
     186
    183187    QQuickWebViewExperimental(QQuickWebView* webView);
    184188    virtual ~QQuickWebViewExperimental();
  • trunk/Source/WebKit2/UIProcess/API/qt/qwebnavigationrequest.cpp

    r102502 r103330  
    2626class QWebNavigationRequestPrivate {
    2727public:
    28     QWebNavigationRequestPrivate(const QUrl& url, Qt::MouseButton button, Qt::KeyboardModifiers modifiers)
     28    QWebNavigationRequestPrivate(const QUrl& url, const QUrl& originatingUrl, Qt::MouseButton button, Qt::KeyboardModifiers modifiers)
    2929        : url(url)
     30        , originatingUrl(originatingUrl)
    3031        , button(button)
    3132        , modifiers(modifiers)
     
    3940
    4041    QUrl url;
     42    QUrl originatingUrl;
    4143    Qt::MouseButton button;
    4244    Qt::KeyboardModifiers modifiers;
     
    4446};
    4547
    46 QWebNavigationRequest::QWebNavigationRequest(const QUrl& url, Qt::MouseButton button, Qt::KeyboardModifiers modifiers, QObject* parent)
     48QWebNavigationRequest::QWebNavigationRequest(const QUrl& url, const QUrl& originatingUrl, Qt::MouseButton button, Qt::KeyboardModifiers modifiers, QObject* parent)
    4749    : QObject(parent)
    48     , d(new QWebNavigationRequestPrivate(url, button, modifiers))
     50    , d(new QWebNavigationRequestPrivate(url, originatingUrl, button, modifiers))
    4951{
    5052}
     
    6971}
    7072
     73QUrl QWebNavigationRequest::originatingUrl() const
     74{
     75    return d->originatingUrl;
     76}
     77
    7178int QWebNavigationRequest::button() const
    7279{
  • trunk/Source/WebKit2/UIProcess/API/qt/qwebnavigationrequest_p.h

    r102502 r103330  
    3131    Q_OBJECT
    3232    Q_PROPERTY(QUrl url READ url CONSTANT FINAL)
     33    Q_PROPERTY(QUrl originatingUrl READ originatingUrl CONSTANT FINAL)
    3334    Q_PROPERTY(int button READ button CONSTANT FINAL)
    3435    Q_PROPERTY(int modifiers READ modifiers CONSTANT FINAL)
     
    3637
    3738public:
    38     QWebNavigationRequest(const QUrl& url, Qt::MouseButton button, Qt::KeyboardModifiers modifiers, QObject* parent = 0);
     39    QWebNavigationRequest(const QUrl& url, const QUrl& originatingUrl, Qt::MouseButton button, Qt::KeyboardModifiers modifiers, QObject* parent = 0);
    3940    ~QWebNavigationRequest();
    4041
    4142    QUrl url() const;
     43    QUrl originatingUrl() const;
    4244    int button() const;
    4345    int modifiers() const;
  • trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_navigationRequested.qml

    r102959 r103330  
    22import QtTest 1.0
    33import QtWebKit 3.0
     4import QtWebKit.experimental 3.0
    45
    56Item {
     
    78    property int totalBytes: 0
    89    property bool shouldDownload: false
     10    property string originatingUrl: ""
     11    property url beginUrl: Qt.resolvedUrl("../common/test2.html")
     12    property url endUrl: Qt.resolvedUrl("../common/test1.html")
    913
    1014    DesktopWebView {
     
    1721        onNavigationRequested: {
    1822            if (shouldDownload)
    19                 request.action = WebView.DownloadRequest
     23                request.action = WebViewExperimental.DownloadRequest
    2024            else if (request.button == Qt.MiddleButton && request.modifiers & Qt.ControlModifier) {
    2125                otherWebView.load(request.url)
    2226                request.action = WebView.IgnoreRequest
    2327            }
     28            originatingUrl = request.originatingUrl
    2429        }
    2530
     
    8792            downloadFinishedSpy.clear()
    8893            shouldDownload = false
     94            originatingUrl = ""
    8995        }
    9096
    9197        function test_usePolicy() {
    92             webView.load(Qt.resolvedUrl("../common/test2.html"))
     98            webView.load(beginUrl)
    9399            spy.wait()
    94100            spy.clear()
     
    97103            compare(spy.count, 1)
    98104            compare(webView.title, "Test page 1")
     105            compare(webView.url, endUrl)
    99106        }
    100107
    101108        function test_ignorePolicy() {
    102             webView.load(Qt.resolvedUrl("../common/test2.html"))
     109            webView.load(beginUrl)
    103110            spy.wait()
    104111            spy.clear()
     
    109116            compare(spy.count, 0)
    110117            compare(otherSpy.count, 1)
     118            compare(webView.url, beginUrl)
    111119            compare(otherWebView.title, "Test page 1")
     120            compare(otherWebView.url, endUrl)
    112121        }
    113122
    114123        function test_downloadPolicy() {
    115             webView.load(Qt.resolvedUrl("../common/test2.html"))
     124            webView.load(beginUrl)
    116125            spy.wait()
    117126            spy.clear()
     
    128137            compare(totalBytes, expectedLength)
    129138        }
     139
     140        function test_originatingUrl() {
     141            webView.load(beginUrl)
     142            spy.wait()
     143            spy.clear()
     144            mouseClick(webView, 100, 100, Qt.LeftButton)
     145            spy.wait()
     146            compare(webView.title, "Test page 1")
     147            compare(webView.url, endUrl)
     148            compare(originatingUrl, beginUrl)
     149        }
    130150    }
    131151}
  • trunk/Source/WebKit2/UIProcess/qt/QtWebPagePolicyClient.cpp

    r102502 r103330  
    2222#include "QtWebPagePolicyClient.h"
    2323
     24#include "WKFrame.h"
    2425#include "WKURLQt.h"
    2526#include "qquickwebview_p.h"
     
    4243}
    4344
    44 void QtWebPagePolicyClient::decidePolicyForNavigationAction(const QUrl& url, Qt::MouseButton mouseButton, Qt::KeyboardModifiers keyboardModifiers, WKFramePolicyListenerRef listener)
     45void QtWebPagePolicyClient::decidePolicyForNavigationAction(const QUrl& url, const QUrl& originatingUrl, Qt::MouseButton mouseButton, Qt::KeyboardModifiers keyboardModifiers, WKFramePolicyListenerRef listener)
    4546{
    4647    // NOTE: even though the C API (and the WebKit2 IPC) supports an asynchronous answer, this is not currently working.
    4748    // We are expected to call the listener immediately. See the patch for https://bugs.webkit.org/show_bug.cgi?id=53785.
    48     QWebNavigationRequest navigationRequest(url, mouseButton, keyboardModifiers);
     49    QWebNavigationRequest navigationRequest(url, originatingUrl, mouseButton, keyboardModifiers);
    4950    emit m_webView->navigationRequested(&navigationRequest);
    5051
     
    5354        WKFramePolicyListenerIgnore(listener);
    5455        return;
    55     case QQuickWebView::DownloadRequest:
     56    case QQuickWebViewExperimental::DownloadRequest:
    5657        WKFramePolicyListenerDownload(listener);
    5758        return;
     
    99100}
    100101
    101 void QtWebPagePolicyClient::decidePolicyForNavigationAction(WKPageRef, WKFrameRef, WKFrameNavigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRequestRef request, WKFramePolicyListenerRef listener, WKTypeRef, const void* clientInfo)
     102void QtWebPagePolicyClient::decidePolicyForNavigationAction(WKPageRef, WKFrameRef frame, WKFrameNavigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRequestRef request, WKFramePolicyListenerRef listener, WKTypeRef, const void* clientInfo)
    102103{
    103     WKURLRef requestURL = WKURLRequestCopyURL(request);
    104     QUrl qUrl = WKURLCopyQUrl(requestURL);
    105     WKRelease(requestURL);
    106     toQtWebPagePolicyClient(clientInfo)->decidePolicyForNavigationAction(qUrl, toQtMouseButton(mouseButton), toQtKeyboardModifiers(modifiers), listener);
     104    WKRetainPtr<WKURLRef> frameURL(AdoptWK, WKFrameCopyURL(frame));
     105    WKRetainPtr<WKURLRef> requestURL(AdoptWK, WKURLRequestCopyURL(request));
     106    QUrl qUrlFrame = WKURLCopyQUrl(frameURL.get());
     107    QUrl qUrl = WKURLCopyQUrl(requestURL.get());
     108    toQtWebPagePolicyClient(clientInfo)->decidePolicyForNavigationAction(qUrl, qUrlFrame, toQtMouseButton(mouseButton), toQtKeyboardModifiers(modifiers), listener);
    107109}
    108110
  • trunk/Source/WebKit2/UIProcess/qt/QtWebPagePolicyClient.h

    r101086 r103330  
    3232
    3333private:
    34     void decidePolicyForNavigationAction(const QUrl&, Qt::MouseButton, Qt::KeyboardModifiers, WKFramePolicyListenerRef);
     34    void decidePolicyForNavigationAction(const QUrl&, const QUrl&, Qt::MouseButton, Qt::KeyboardModifiers, WKFramePolicyListenerRef);
    3535
    3636    // WKPagePolicyClient callbacks.
Note: See TracChangeset for help on using the changeset viewer.