[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-10851-g50815da

commit-queue at webkit.org commit-queue at webkit.org
Wed Dec 22 18:28:56 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 0aba6fac2c77d6c260f3fe2d03155f6c200fc355
Author: commit-queue at webkit.org <commit-queue at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Sun Dec 12 03:21:51 2010 +0000

    2010-12-11  Jan Erik Hanssen  <jhanssen at sencha.com>
    
            Reviewed by Andreas Kling.
    
            [Qt] QWebFrame does not support QNetworkRequest::CacheLoadControl
            https://bugs.webkit.org/show_bug.cgi?id=35671
    
            Make QWebFrame respect the QNetworkRequest::CacheLoadControl attribute
            set on the request, if any.
    
            * Api/qwebframe.cpp:
            (cacheLoadControlToCachePolicy):
            (QWebFrame::load):
            * tests/qwebframe/tst_qwebframe.cpp:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@73865 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit/qt/Api/qwebframe.cpp b/WebKit/qt/Api/qwebframe.cpp
index 62e760c..701cfe0 100644
--- a/WebKit/qt/Api/qwebframe.cpp
+++ b/WebKit/qt/Api/qwebframe.cpp
@@ -201,6 +201,21 @@ void QWEBKIT_EXPORT qtwebkit_webframe_scrollRecursively(QWebFrame* qFrame, int d
     } while (qFrame);
 }
 
+static inline ResourceRequestCachePolicy cacheLoadControlToCachePolicy(uint cacheLoadControl)
+{
+    switch (cacheLoadControl) {
+    case QNetworkRequest::AlwaysNetwork:
+        return WebCore::ReloadIgnoringCacheData;
+    case QNetworkRequest::PreferCache:
+        return WebCore::ReturnCacheDataElseLoad;
+    case QNetworkRequest::AlwaysCache:
+        return WebCore::ReturnCacheDataDontLoad;
+    default:
+        break;
+    }
+    return WebCore::UseProtocolCachePolicy;
+}
+
 QWebFrameData::QWebFrameData(WebCore::Page* parentPage, WebCore::Frame* parentFrame,
                              WebCore::HTMLFrameOwnerElement* ownerFrameElement,
                              const WTF::String& frameName)
@@ -883,6 +898,14 @@ void QWebFrame::load(const QNetworkRequest &req,
             break;
     }
 
+    QVariant cacheLoad = req.attribute(QNetworkRequest::CacheLoadControlAttribute);
+    if (cacheLoad.isValid()) {
+        bool ok;
+        uint cacheLoadValue = cacheLoad.toUInt(&ok);
+        if (ok)
+            request.setCachePolicy(cacheLoadControlToCachePolicy(cacheLoadValue));
+    }
+
     QList<QByteArray> httpHeaders = req.rawHeaderList();
     for (int i = 0; i < httpHeaders.size(); ++i) {
         const QByteArray &headerName = httpHeaders.at(i);
diff --git a/WebKit/qt/ChangeLog b/WebKit/qt/ChangeLog
index ada1ee4..b6c3902 100644
--- a/WebKit/qt/ChangeLog
+++ b/WebKit/qt/ChangeLog
@@ -1,3 +1,18 @@
+2010-12-11  Jan Erik Hanssen  <jhanssen at sencha.com>
+
+        Reviewed by Andreas Kling.
+
+        [Qt] QWebFrame does not support QNetworkRequest::CacheLoadControl
+        https://bugs.webkit.org/show_bug.cgi?id=35671
+
+        Make QWebFrame respect the QNetworkRequest::CacheLoadControl attribute
+        set on the request, if any.
+
+        * Api/qwebframe.cpp:
+        (cacheLoadControlToCachePolicy):
+        (QWebFrame::load):
+        * tests/qwebframe/tst_qwebframe.cpp:
+
 2010-10-11  Diego Gonzalez  <diegohcg at webkit.org>
 
         Reviewed by Kenneth Rohde Christiansen.
diff --git a/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp b/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp
index eb3ae0a..6923315 100644
--- a/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp
+++ b/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp
@@ -625,6 +625,7 @@ private slots:
     void introspectQtMethods();
     void setContent_data();
     void setContent();
+    void setCacheLoadControlAttribute();
 
 private:
     QString  evalJS(const QString&s) {
@@ -3068,5 +3069,58 @@ void tst_QWebFrame::setContent()
     QCOMPARE(expected , mainFrame->toPlainText());
 }
 
+class CacheNetworkAccessManager : public QNetworkAccessManager {
+public:
+    CacheNetworkAccessManager(QObject* parent = 0)
+        : QNetworkAccessManager(parent)
+        , m_lastCacheLoad(QNetworkRequest::PreferNetwork)
+    {
+    }
+
+    virtual QNetworkReply* createRequest(Operation, const QNetworkRequest& request, QIODevice*)
+    {
+        QVariant cacheLoad = request.attribute(QNetworkRequest::CacheLoadControlAttribute);
+        if (cacheLoad.isValid())
+            m_lastCacheLoad = static_cast<QNetworkRequest::CacheLoadControl>(cacheLoad.toUInt());
+        else
+            m_lastCacheLoad = QNetworkRequest::PreferNetwork; // default value
+        return new FakeReply(request, this);
+    }
+
+    QNetworkRequest::CacheLoadControl lastCacheLoad() const
+    {
+        return m_lastCacheLoad;
+    }
+
+private:
+    QNetworkRequest::CacheLoadControl m_lastCacheLoad;
+};
+
+void tst_QWebFrame::setCacheLoadControlAttribute()
+{
+    QWebPage page;
+    CacheNetworkAccessManager* manager = new CacheNetworkAccessManager(&page);
+    page.setNetworkAccessManager(manager);
+    QWebFrame* frame = page.mainFrame();
+
+    QNetworkRequest request(QUrl("http://abcdef.abcdef/"));
+
+    request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysCache);
+    frame->load(request);
+    QCOMPARE(manager->lastCacheLoad(), QNetworkRequest::AlwaysCache);
+
+    request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache);
+    frame->load(request);
+    QCOMPARE(manager->lastCacheLoad(), QNetworkRequest::PreferCache);
+
+    request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysNetwork);
+    frame->load(request);
+    QCOMPARE(manager->lastCacheLoad(), QNetworkRequest::AlwaysNetwork);
+
+    request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferNetwork);
+    frame->load(request);
+    QCOMPARE(manager->lastCacheLoad(), QNetworkRequest::PreferNetwork);
+}
+
 QTEST_MAIN(tst_QWebFrame)
 #include "tst_qwebframe.moc"

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list