Changeset 142095 in webkit


Ignore:
Timestamp:
Feb 7, 2013 4:34:08 AM (11 years ago)
Author:
michael.bruning@digia.com
Message:

[Qt][WK2] Fold QtWebPageLoadClient into QQuickWebViewPrivate and move to C API.
https://bugs.webkit.org/show_bug.cgi?id=108473

Reviewed by Simon Hausmann.
Signed off for WebKit2 by Benjamin Poulain.

This patch removes the QtWebPageLoadClient and moves the functionality into the
QQuickWebViewPrivate as most callback methods are calling the private webview
indirectly anyway.

The patch also moves as much of the functionality to the C API as is possible with
the current C API.

  • Target.pri:
  • UIProcess/API/qt/qquickwebview.cpp:

(QQuickWebViewPrivate::initialize):
(QQuickWebViewPrivate::didStartProvisionalLoadForFrame):
(QQuickWebViewPrivate::didReceiveServerRedirectForProvisionalLoadForFrame):
(QQuickWebViewPrivate::didFailLoad):
(QQuickWebViewPrivate::didCommitLoadForFrame):
(QQuickWebViewPrivate::didFinishLoadForFrame):
(QQuickWebViewPrivate::didSameDocumentNavigationForFrame):
(QQuickWebViewPrivate::didReceiveTitleForFrame):
(QQuickWebViewPrivate::didStartProgress):
(QQuickWebViewPrivate::didChangeProgress):
(QQuickWebViewPrivate::didFinishProgress):
(QQuickWebViewPrivate::didChangeBackForwardList):
(QQuickWebViewPrivate::setTransparentBackground):
(QQuickWebViewPrivate::transparentBackground):
(QQuickWebViewPrivate::loadProgressDidChange):

  • UIProcess/API/qt/qquickwebview_p.h:

(WebKit):

  • UIProcess/API/qt/qquickwebview_p_p.h:

(WebKit):
(QQuickWebViewPrivate):

  • UIProcess/qt/QtWebError.cpp:

(WebKit::QtWebError::url):

  • UIProcess/qt/QtWebPageLoadClient.cpp: Removed.
  • UIProcess/qt/QtWebPageLoadClient.h: Removed.
Location:
trunk/Source/WebKit2
Files:
2 deleted
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r142087 r142095  
     12013-02-07  Michael Brüning  <michael.bruning@digia.com>
     2
     3        [Qt][WK2] Fold QtWebPageLoadClient into QQuickWebViewPrivate and move to C API.
     4        https://bugs.webkit.org/show_bug.cgi?id=108473
     5
     6        Reviewed by Simon Hausmann.
     7        Signed off for WebKit2 by Benjamin Poulain.
     8
     9        This patch removes the QtWebPageLoadClient and moves the functionality into the
     10        QQuickWebViewPrivate as most callback methods are calling the private webview
     11        indirectly anyway.
     12
     13        The patch also moves as much of the functionality to the C API as is possible with
     14        the current C API.
     15
     16        * Target.pri:
     17        * UIProcess/API/qt/qquickwebview.cpp:
     18        (QQuickWebViewPrivate::initialize):
     19        (QQuickWebViewPrivate::didStartProvisionalLoadForFrame):
     20        (QQuickWebViewPrivate::didReceiveServerRedirectForProvisionalLoadForFrame):
     21        (QQuickWebViewPrivate::didFailLoad):
     22        (QQuickWebViewPrivate::didCommitLoadForFrame):
     23        (QQuickWebViewPrivate::didFinishLoadForFrame):
     24        (QQuickWebViewPrivate::didSameDocumentNavigationForFrame):
     25        (QQuickWebViewPrivate::didReceiveTitleForFrame):
     26        (QQuickWebViewPrivate::didStartProgress):
     27        (QQuickWebViewPrivate::didChangeProgress):
     28        (QQuickWebViewPrivate::didFinishProgress):
     29        (QQuickWebViewPrivate::didChangeBackForwardList):
     30        (QQuickWebViewPrivate::setTransparentBackground):
     31        (QQuickWebViewPrivate::transparentBackground):
     32        (QQuickWebViewPrivate::loadProgressDidChange):
     33        * UIProcess/API/qt/qquickwebview_p.h:
     34        (WebKit):
     35        * UIProcess/API/qt/qquickwebview_p_p.h:
     36        (WebKit):
     37        (QQuickWebViewPrivate):
     38        * UIProcess/qt/QtWebError.cpp:
     39        (WebKit::QtWebError::url):
     40        * UIProcess/qt/QtWebPageLoadClient.cpp: Removed.
     41        * UIProcess/qt/QtWebPageLoadClient.h: Removed.
     42
    1432013-02-05  Eunmi Lee  <eunmi15.lee@samsung.com> and Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>
    244
  • trunk/Source/WebKit2/Target.pri

    r142073 r142095  
    786786        UIProcess/qt/QtDownloadManager.h \
    787787        UIProcess/qt/QtPageClient.h \
    788         UIProcess/qt/QtWebPageLoadClient.h \
    789788        UIProcess/qt/QtWebPagePolicyClient.h \
    790789        UIProcess/qt/QtWebPageSGNode.h \
     
    813812        UIProcess/qt/QtDownloadManager.cpp \
    814813        UIProcess/qt/QtPageClient.cpp \
    815         UIProcess/qt/QtWebPageLoadClient.cpp \
    816814        UIProcess/qt/QtWebPagePolicyClient.cpp \
    817815        UIProcess/qt/QtWebPageSGNode.cpp \
  • trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp

    r142073 r142095  
    3333#include "QtWebIconDatabaseClient.h"
    3434#include "QtWebPageEventHandler.h"
    35 #include "QtWebPageLoadClient.h"
    3635#include "QtWebPagePolicyClient.h"
    3736#include "WebBackForwardList.h"
     
    331330    }
    332331
    333     pageLoadClient.reset(new QtWebPageLoadClient(webPage.get(), q_ptr));
     332    {
     333        WKPageLoaderClient loadClient;
     334        memset(&loadClient, 0, sizeof(WKPageLoaderClient));
     335        loadClient.version = kWKPageLoaderClientCurrentVersion;
     336        loadClient.clientInfo = this;
     337        loadClient.didStartProvisionalLoadForFrame = didStartProvisionalLoadForFrame;
     338        loadClient.didReceiveServerRedirectForProvisionalLoadForFrame = didReceiveServerRedirectForProvisionalLoadForFrame;
     339        loadClient.didFailProvisionalLoadWithErrorForFrame = didFailLoad;
     340        loadClient.didCommitLoadForFrame = didCommitLoadForFrame;
     341        loadClient.didFinishLoadForFrame = didFinishLoadForFrame;
     342        loadClient.didFailLoadWithErrorForFrame = didFailLoad;
     343        loadClient.didSameDocumentNavigationForFrame = didSameDocumentNavigationForFrame;
     344        loadClient.didReceiveTitleForFrame = didReceiveTitleForFrame;
     345        loadClient.didStartProgress = didStartProgress;
     346        loadClient.didChangeProgress = didChangeProgress;
     347        loadClient.didFinishProgress = didFinishProgress;
     348        loadClient.didChangeBackForwardList = didChangeBackForwardList;
     349        WKPageSetPageLoaderClient(webPage.get(), &loadClient);
     350    }
     351
    334352    pagePolicyClient.reset(new QtWebPagePolicyClient(webPage.get(), q_ptr));
    335353    pageUIClient.reset(new QtWebPageUIClient(webPage.get(), q_ptr));
     
    357375}
    358376
    359 void QQuickWebViewPrivate::loadDidStop()
    360 {
    361     Q_Q(QQuickWebView);
     377void QQuickWebViewPrivate::didStartProvisionalLoadForFrame(WKPageRef, WKFrameRef frame, WKTypeRef, const void* clientInfo)
     378{
     379    if (!WKFrameIsMainFrame(frame))
     380        return;
     381
     382    WKRetainPtr<WKURLRef> url  = adoptWK(WKFrameCopyProvisionalURL(frame));
     383
     384    QQuickWebView* const q = toQQuickWebViewPrivate(clientInfo)->q_func();
     385
     386    q->emitUrlChangeIfNeeded();
     387    QWebLoadRequest loadRequest(WKURLCopyQUrl(url.get()), QQuickWebView::LoadStartedStatus);
     388    emit q->loadingChanged(&loadRequest);
     389}
     390
     391void QQuickWebViewPrivate::didReceiveServerRedirectForProvisionalLoadForFrame(WKPageRef, WKFrameRef frame, WKTypeRef, const void* clientInfo)
     392{
     393    if (!WKFrameIsMainFrame(frame))
     394        return;
     395
     396    toQQuickWebViewPrivate(clientInfo)->q_func()->emitUrlChangeIfNeeded();
     397}
     398
     399void QQuickWebViewPrivate::didFailLoad(WKPageRef, WKFrameRef frame, WKErrorRef errorRef, WKTypeRef, const void* clientInfo)
     400{
     401    if (!WKFrameIsMainFrame(frame))
     402        return;
     403
     404    QQuickWebView* const q = toQQuickWebViewPrivate(clientInfo)->q_func();
    362405    ASSERT(!q->loading());
    363     QWebLoadRequest loadRequest(q->url(), QQuickWebView::LoadStoppedStatus);
     406
     407    QtWebError error(errorRef);
     408    if (error.isCancellation()) {
     409        QWebLoadRequest loadRequest(q->url(), QQuickWebView::LoadStoppedStatus);
     410        emit q->loadingChanged(&loadRequest);
     411        return;
     412    }
     413
     414    int errorCode = error.errorCode();
     415    if (errorCode == kWKErrorCodeFrameLoadInterruptedByPolicyChange && errorCode == kWKErrorCodePlugInWillHandleLoad) {
     416        QWebLoadRequest loadRequest(q->url(), QQuickWebView::LoadSucceededStatus);
     417        q->emitUrlChangeIfNeeded();
     418        emit q->loadingChanged(&loadRequest);
     419        return;
     420    }
     421
     422    // We set the unreachable url unconditionally so that the current
     423    // active url of the webview when the loadingChanged signal is
     424    // emitted reflects the failed url, not the previously committed
     425    // url. This also ensures that if the user does not do a loadHtml
     426    // with an error page and and unreachable url as a reponse to the
     427    // failed load, we can still detect the failed url for reloads.
     428    // We need to find a way to do this via the C API or find another
     429    // way to do this.
     430    toImpl(frame)->setUnreachableURL(error.url());
     431    q->emitUrlChangeIfNeeded();
     432    QWebLoadRequest loadRequest(error.url(), QQuickWebView::LoadFailedStatus, error.description(), static_cast<QQuickWebView::ErrorDomain>(error.type()), errorCode);
    364433    emit q->loadingChanged(&loadRequest);
    365434}
    366435
    367 void QQuickWebViewPrivate::setTransparentBackground(bool enable)
    368 {
    369     webPageProxy->setDrawsTransparentBackground(enable);
    370 }
    371 
    372 bool QQuickWebViewPrivate::transparentBackground() const
    373 {
    374     return webPageProxy->drawsTransparentBackground();
    375 }
    376 
    377 void QQuickWebViewPrivate::provisionalLoadDidStart(const WTF::String& url)
    378 {
    379     Q_Q(QQuickWebView);
    380 
    381     q->emitUrlChangeIfNeeded();
    382 
    383     QWebLoadRequest loadRequest(QString(url), QQuickWebView::LoadStartedStatus);
    384     emit q->loadingChanged(&loadRequest);
    385 }
    386 
    387 void QQuickWebViewPrivate::didReceiveServerRedirectForProvisionalLoad(const WTF::String&)
    388 {
    389     Q_Q(QQuickWebView);
    390 
    391     q->emitUrlChangeIfNeeded();
    392 }
    393 
    394 void QQuickWebViewPrivate::loadDidCommit()
    395 {
    396     Q_Q(QQuickWebView);
     436void QQuickWebViewPrivate::didCommitLoadForFrame(WKPageRef, WKFrameRef frame, WKTypeRef, const void* clientInfo)
     437{
     438    if (!WKFrameIsMainFrame(frame))
     439        return;
     440    QQuickWebViewPrivate* d = toQQuickWebViewPrivate(clientInfo);
     441
     442    PageViewportController* pageViewportController = d->viewportController();
     443    if (pageViewportController)
     444        pageViewportController->didCommitLoad();
     445
     446    QQuickWebView* const q = d->q_func();
    397447    ASSERT(q->loading());
    398 
    399     m_betweenLoadCommitAndFirstFrame = true;
     448    d->m_betweenLoadCommitAndFirstFrame = true;
    400449    emit q->navigationHistoryChanged();
    401450    emit q->titleChanged();
    402451}
    403452
    404 void QQuickWebViewPrivate::didSameDocumentNavigation()
    405 {
    406     Q_Q(QQuickWebView);
    407 
     453void QQuickWebViewPrivate::didFinishLoadForFrame(WKPageRef, WKFrameRef frame, WKTypeRef, const void* clientInfo)
     454{
     455    if (!WKFrameIsMainFrame(frame))
     456        return;
     457
     458    QQuickWebView* const q = toQQuickWebViewPrivate(clientInfo)->q_func();
     459    ASSERT(!q->loading());
     460
     461    QWebLoadRequest loadRequest(q->url(), QQuickWebView::LoadSucceededStatus);
     462    emit q->loadingChanged(&loadRequest);
     463}
     464
     465void QQuickWebViewPrivate::didSameDocumentNavigationForFrame(WKPageRef, WKFrameRef frame, WKSameDocumentNavigationType type, WKTypeRef userData, const void* clientInfo)
     466{
     467    if (!WKFrameIsMainFrame(frame))
     468        return;
     469    QQuickWebView* const q = toQQuickWebViewPrivate(clientInfo)->q_func();
    408470    q->emitUrlChangeIfNeeded();
    409471    emit q->navigationHistoryChanged();
    410472}
    411473
    412 void QQuickWebViewPrivate::titleDidChange()
     474void QQuickWebViewPrivate::didReceiveTitleForFrame(WKPageRef, WKStringRef title, WKFrameRef frame, WKTypeRef, const void* clientInfo)
     475{
     476    if (!WKFrameIsMainFrame(frame))
     477        return;
     478    emit toQQuickWebViewPrivate(clientInfo)->q_func()->titleChanged();
     479}
     480
     481void QQuickWebViewPrivate::didStartProgress(WKPageRef, const void* clientInfo)
     482{
     483    toQQuickWebViewPrivate(clientInfo)->loadProgressDidChange(0);
     484}
     485
     486void QQuickWebViewPrivate::didChangeProgress(WKPageRef page, const void* clientInfo)
     487{
     488    toQQuickWebViewPrivate(clientInfo)->loadProgressDidChange(WKPageGetEstimatedProgress(page) * 100);
     489}
     490
     491void QQuickWebViewPrivate::didFinishProgress(WKPageRef, const void* clientInfo)
     492{
     493    toQQuickWebViewPrivate(clientInfo)->loadProgressDidChange(100);
     494}
     495
     496void QQuickWebViewPrivate::didChangeBackForwardList(WKPageRef, WKBackForwardListItemRef, WKArrayRef, const void *clientInfo)
     497{
     498    toQQuickWebViewPrivate(clientInfo)->navigationHistory->d->reset();
     499}
     500
     501void QQuickWebViewPrivate::setTransparentBackground(bool enable)
     502{
     503    webPageProxy->setDrawsTransparentBackground(enable);
     504}
     505
     506bool QQuickWebViewPrivate::transparentBackground() const
     507{
     508    return webPageProxy->drawsTransparentBackground();
     509}
     510
     511void QQuickWebViewPrivate::loadProgressDidChange(int loadProgress)
    413512{
    414513    Q_Q(QQuickWebView);
    415514
    416     emit q->titleChanged();
    417 }
    418 
    419 void QQuickWebViewPrivate::loadProgressDidChange(int loadProgress)
    420 {
    421     Q_Q(QQuickWebView);
    422 
    423515    m_loadProgress = loadProgress;
    424516
    425517    emit q->loadProgressChanged();
    426 }
    427 
    428 void QQuickWebViewPrivate::backForwardListDidChange()
    429 {
    430     navigationHistory->d->reset();
    431 }
    432 
    433 void QQuickWebViewPrivate::loadDidSucceed()
    434 {
    435     Q_Q(QQuickWebView);
    436     ASSERT(!q->loading());
    437 
    438     QWebLoadRequest loadRequest(q->url(), QQuickWebView::LoadSucceededStatus);
    439     emit q->loadingChanged(&loadRequest);
    440 }
    441 
    442 void QQuickWebViewPrivate::loadDidFail(const QtWebError& error)
    443 {
    444     Q_Q(QQuickWebView);
    445     ASSERT(!q->loading());
    446 
    447     QWebLoadRequest loadRequest(error.url(), QQuickWebView::LoadFailedStatus, error.description(), static_cast<QQuickWebView::ErrorDomain>(error.type()), error.errorCode());
    448     emit q->loadingChanged(&loadRequest);
    449518}
    450519
  • trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h

    r138618 r142095  
    5252struct QtRefCountedNetworkRequestData;
    5353class PageViewportControllerClientQt;
    54 class QtWebPageLoadClient;
    5554class QtWebPageFindClient;
    5655class QtWebPagePolicyClient;
     
    222221    friend class QWebKitTest;
    223222    friend class WebKit::PageViewportControllerClientQt;
    224     friend class WebKit::QtWebPageLoadClient;
    225223    friend class WebKit::QtWebPageFindClient;
    226224    friend class WebKit::QtWebPagePolicyClient;
  • trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h

    r142073 r142095  
    4545class QtWebContext;
    4646class QtWebError;
    47 class QtWebPageLoadClient;
    4847class QtWebPagePolicyClient;
    4948class WebPageProxy;
     
    7473    virtual void onComponentComplete() { }
    7574
    76     virtual void provisionalLoadDidStart(const WTF::String& url);
    77     virtual void didReceiveServerRedirectForProvisionalLoad(const WTF::String& url);
    78     virtual void loadDidCommit();
    79     virtual void didSameDocumentNavigation();
    80     virtual void titleDidChange();
    8175    virtual void loadProgressDidChange(int loadProgress);
    82     virtual void backForwardListDidChange();
    83     virtual void loadDidSucceed();
    84     virtual void loadDidStop();
    85     virtual void loadDidFail(const WebKit::QtWebError& error);
    8676    virtual void handleMouseEvent(QMouseEvent*);
    8777
     
    161151    };
    162152
     153    // WKPageLoadClient callbacks.
     154    static void didStartProvisionalLoadForFrame(WKPageRef, WKFrameRef, WKTypeRef userData, const void* clientInfo);
     155    static void didReceiveServerRedirectForProvisionalLoadForFrame(WKPageRef, WKFrameRef, WKTypeRef userData, const void* clientInfo);
     156    static void didFailLoad(WKPageRef, WKFrameRef, WKErrorRef, WKTypeRef userData, const void* clientInfo);
     157    static void didCommitLoadForFrame(WKPageRef, WKFrameRef, WKTypeRef userData, const void* clientInfo);
     158    static void didFinishLoadForFrame(WKPageRef, WKFrameRef, WKTypeRef userData, const void* clientInfo);
     159    static void didSameDocumentNavigationForFrame(WKPageRef, WKFrameRef, WKSameDocumentNavigationType, WKTypeRef userData, const void* clientInfo);
     160    static void didReceiveTitleForFrame(WKPageRef, WKStringRef, WKFrameRef, WKTypeRef userData, const void* clientInfo);
     161    static void didStartProgress(WKPageRef, const void* clientInfo);
     162    static void didChangeProgress(WKPageRef, const void* clientInfo);
     163    static void didFinishProgress(WKPageRef, const void* clientInfo);
     164    static void didChangeBackForwardList(WKPageRef, WKBackForwardListItemRef, WKArrayRef, const void *clientInfo);
     165
    163166    QQuickWebViewPrivate(QQuickWebView* viewport);
    164167    RefPtr<WebKit::QtWebContext> context;
     
    172175    OwnPtr<QWebPreferences> preferences;
    173176
    174     QScopedPointer<WebKit::QtWebPageLoadClient> pageLoadClient;
    175177    QScopedPointer<WebKit::QtWebPagePolicyClient> pagePolicyClient;
    176178    QScopedPointer<WebKit::QtWebPageUIClient> pageUIClient;
  • trunk/Source/WebKit2/UIProcess/qt/QtWebError.cpp

    r118148 r142095  
    5858QString QtWebError::url() const
    5959{
    60     return toImpl(error.get())->failingURL();
     60    return WKStringCopyQString(WKURLCopyString(WKErrorCopyFailingURL(error.get())));
    6161}
    6262
Note: See TracChangeset for help on using the changeset viewer.