summaryrefslogtreecommitdiffstats
path: root/Source/WebKit/qt/tests
diff options
context:
space:
mode:
authorBenjamin Dupont <bdupont@nds.com>2013-08-06 13:58:39 +0000
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-08-09 16:26:24 +0200
commita8257e82b8a4c41a0a0788943a2346d169a737a6 (patch)
tree03aabcb57ea8800c08519c0763289c4161732327 /Source/WebKit/qt/tests
parentf3484678deb631b7d994dd400b609dcb7bbbc04b (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.cpp78
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;