diff options
author | Benjamin Dupont <bdupont@nds.com> | 2013-08-06 13:58:39 +0000 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-08-09 16:26:24 +0200 |
commit | a8257e82b8a4c41a0a0788943a2346d169a737a6 (patch) | |
tree | 03aabcb57ea8800c08519c0763289c4161732327 /Source/WebKit/qt/tests | |
parent | f3484678deb631b7d994dd400b609dcb7bbbc04b (diff) |
[Qt] Add Page Visibility API support
https://bugs.webkit.org/show_bug.cgi?id=109422
Patch by Benjamin Dupont <bdupont@nds.com> on 2013-08-06
Reviewed by Simon Hausmann.
* WebCoreSupport/QWebPageAdapter.cpp:
(webPageVisibilityStateToWebCoreVisibilityState):
(webCoreVisibilityStateToWebPageVisibilityState):
(QWebPageAdapter::setVisibilityState):
(QWebPageAdapter::visibilityState):
* WebCoreSupport/QWebPageAdapter.h:
* WidgetApi/qwebpage.cpp:
(QWebPage::setVisibilityState):
(QWebPage::visibilityState):
* WidgetApi/qwebpage.h:
* tests/qwebpage/tst_qwebpage.cpp:
(tst_QWebPage::changeVisibilityState):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@153751 268f45cc-cd09-0410-ab3c-d52691b4dbfc
[Qt] Build fix after r153751
Unreviewed build fix.
Fix build when PAGE_VISIBILITY_API is disabled.
* WebCoreSupport/QWebPageAdapter.cpp:
(QWebPageAdapter::visibilityState):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@153782 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Change-Id: I7c99337a902d7d06cde03107ebf71e3fce430fdf
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com>
Diffstat (limited to 'Source/WebKit/qt/tests')
-rw-r--r-- | Source/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/Source/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp b/Source/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp index fe0332042..5d2255624 100644 --- a/Source/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp +++ b/Source/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp @@ -168,6 +168,8 @@ private Q_SLOTS: void screenshot_data(); void screenshot(); + void changeVisibilityState(); + #if defined(ENABLE_WEBGL) && ENABLE_WEBGL void acceleratedWebGLScreenshotWithoutView(); void unacceleratedWebGLScreenshotWithoutView(); @@ -3128,6 +3130,82 @@ void tst_QWebPage::macCopyUnicodeToClipboard() } #endif +void tst_QWebPage::changeVisibilityState() +{ +#if ENABLE_PAGE_VISIBILITY_API + QVariant stateBool, stateString, cpt; + + m_page->mainFrame()->setHtml("<html><body></body></html>"); + m_page->mainFrame()->evaluateJavaScript("var stateBool = undefined, stateString = undefined, cpt = 0; var visibilityCallBack = function () {stateBool = document['hidden']; stateString = document['visibilityState']; cpt++;};document.addEventListener('visibilitychange', visibilityCallBack, false);"); + + // The visibility state should be initialised to visible. + QCOMPARE(m_page->visibilityState(), QWebPage::VisibilityStateVisible); + stateBool = m_page->mainFrame()->evaluateJavaScript("document['hidden']"); + QVERIFY(stateBool.type() == QVariant::Bool && !stateBool.toBool()); + stateString = m_page->mainFrame()->evaluateJavaScript("document['visibilityState']"); + QVERIFY(stateString.type() == QVariant::String && stateString.toString() == QString("visible")); + + // Try to change with the same value. + m_page->setVisibilityState(QWebPage::VisibilityStateVisible); + QVERIFY(m_page->visibilityState() == QWebPage::VisibilityStateVisible); + // We check that there isn't any JS event that has been fired and + // visibility properties are still equals to visible. + stateBool = m_page->mainFrame()->evaluateJavaScript("document['hidden']"); + QVERIFY(stateBool.type() == QVariant::Bool && !stateBool.toBool()); + stateString = m_page->mainFrame()->evaluateJavaScript("document['visibilityState']"); + QVERIFY(stateString.type() == QVariant::String && stateString.toString() == QString("visible")); + cpt = m_page->mainFrame()->evaluateJavaScript("cpt"); + QVERIFY(cpt.type() == QVariant::Double && !cpt.toDouble()); + + // Try to change to with different values then check if a JS event has been fired + // and visibility properties have been updated correctly. + m_page->setVisibilityState(QWebPage::VisibilityStatePrerender); + QCOMPARE(m_page->visibilityState(), QWebPage::VisibilityStatePrerender); + stateBool = m_page->mainFrame()->evaluateJavaScript("stateBool"); + QVERIFY(stateBool.type() == QVariant::Bool && stateBool.toBool()); + stateString = m_page->mainFrame()->evaluateJavaScript("stateString"); + QVERIFY(stateString.type() == QVariant::String && stateString.toString() == QString("prerender")); + cpt = m_page->mainFrame()->evaluateJavaScript("cpt"); + QVERIFY(cpt.type() == QVariant::Double && cpt.toDouble() == 1); + + m_page->setVisibilityState(QWebPage::VisibilityStateUnloaded); + QCOMPARE(m_page->visibilityState(), QWebPage::VisibilityStateUnloaded); + stateBool = m_page->mainFrame()->evaluateJavaScript("stateBool"); + QVERIFY(stateBool.type() == QVariant::Bool && stateBool.toBool()); + stateString = m_page->mainFrame()->evaluateJavaScript("stateString"); + QVERIFY(stateString.type() == QVariant::String && stateString.toString() == QString("unloaded")); + cpt = m_page->mainFrame()->evaluateJavaScript("cpt"); + QVERIFY(cpt.type() == QVariant::Double && cpt.toDouble() == 2); + + m_page->setVisibilityState(QWebPage::VisibilityStateVisible); + QCOMPARE(m_page->visibilityState(), QWebPage::VisibilityStateVisible); + stateBool = m_page->mainFrame()->evaluateJavaScript("stateBool"); + QVERIFY(stateBool.type() == QVariant::Bool && !stateBool.toBool()); + stateString = m_page->mainFrame()->evaluateJavaScript("stateString"); + QVERIFY(stateString.type() == QVariant::String && stateString.toString() == QString("visible")); + cpt = m_page->mainFrame()->evaluateJavaScript("cpt"); + QVERIFY(cpt.type() == QVariant::Double && cpt.toDouble() == 3); + + m_page->setVisibilityState(QWebPage::VisibilityStateHidden); + QCOMPARE(m_page->visibilityState(), QWebPage::VisibilityStateHidden); + stateBool = m_page->mainFrame()->evaluateJavaScript("stateBool"); + QVERIFY(stateBool.type() == QVariant::Bool && stateBool.toBool()); + stateString = m_page->mainFrame()->evaluateJavaScript("stateString"); + QVERIFY(stateString.type() == QVariant::String && stateString.toString() == QString("hidden")); + cpt = m_page->mainFrame()->evaluateJavaScript("cpt"); + QVERIFY(cpt.type() == QVariant::Double && cpt.toDouble() == 4); + + m_page->setVisibilityState(QWebPage::VisibilityStateVisible); + QCOMPARE(m_page->visibilityState(), QWebPage::VisibilityStateVisible); + stateBool = m_page->mainFrame()->evaluateJavaScript("stateBool"); + QVERIFY(stateBool.type() == QVariant::Bool && !stateBool.toBool()); + stateString = m_page->mainFrame()->evaluateJavaScript("stateString"); + QVERIFY(stateString.type() == QVariant::String && stateString.toString() == QString("visible")); + cpt = m_page->mainFrame()->evaluateJavaScript("cpt"); + QVERIFY(cpt.type() == QVariant::Double && cpt.toDouble() == 5); +#endif +} + void tst_QWebPage::contextMenuCopy() { QWebView view; |