10bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/* 20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies) 30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Copyright (C) 2009 Torch Mobile Inc. 4cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Copyright (C) 2009 Girish Ramakrishnan <girish@forwardbias.in> 50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch This library is free software; you can redistribute it and/or 70bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch modify it under the terms of the GNU Library General Public 80bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch License as published by the Free Software Foundation; either 90bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch version 2 of the License, or (at your option) any later version. 100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch This library is distributed in the hope that it will be useful, 120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch but WITHOUT ANY WARRANTY; without even the implied warranty of 130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Library General Public License for more details. 150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch You should have received a copy of the GNU Library General Public License 170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch along with this library; see the file COPYING.LIB. If not, write to 180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Boston, MA 02110-1301, USA. 200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qtest.h> 23643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "../util.h" 240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qpainter.h> 260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qwebview.h> 270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qwebpage.h> 280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qnetworkrequest.h> 290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qdiriterator.h> 300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qwebkitversion.h> 315ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include <qwebelement.h> 32cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block#include <qwebframe.h> 330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#ifdef Q_OS_SYMBIAN 352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#define VERIFY_INPUTMETHOD_HINTS(actual, expect) \ 362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch QVERIFY(actual & Qt::ImhNoAutoUppercase); \ 372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch QVERIFY(actual & Qt::ImhNoPredictiveText); \ 382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch QVERIFY(actual & expect); 392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#else 402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#define VERIFY_INPUTMETHOD_HINTS(actual, expect) \ 412daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch QVERIFY(actual == expect); 422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochclass tst_QWebView : public QObject 450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Q_OBJECT 470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochpublic slots: 490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void initTestCase(); 500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void cleanupTestCase(); 510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void init(); 520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void cleanup(); 530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochprivate slots: 552bde8e466a4451c7319e3a072d118917957d6554Steve Block void renderingAfterMaxAndBack(); 560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void renderHints(); 570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void getWebKitVersion(); 58cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 59cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block void reusePage_data(); 60cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block void reusePage(); 6121939df44de1705786c545cd1bf519d47250322dBen Murdoch void microFocusCoordinates(); 62545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch void focusInputTypes(); 63643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 64643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void crashTests(); 6581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 6681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void setPalette_data(); 6781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void setPalette(); 680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}; 690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// This will be called before the first test function is executed. 710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// It is only called once. 720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebView::initTestCase() 730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// This will be called after the last test function is executed. 770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// It is only called once. 780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebView::cleanupTestCase() 790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// This will be called before each test function is executed. 830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebView::init() 840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// This will be called after every test function. 880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebView::cleanup() 890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebView::renderHints() 930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QWebView webView; 950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 96f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // default is only text antialiasing + smooth pixmap transform 970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QVERIFY(!(webView.renderHints() & QPainter::Antialiasing)); 980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QVERIFY(webView.renderHints() & QPainter::TextAntialiasing); 99f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch QVERIFY(webView.renderHints() & QPainter::SmoothPixmapTransform); 1000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QVERIFY(!(webView.renderHints() & QPainter::HighQualityAntialiasing)); 1010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch webView.setRenderHint(QPainter::Antialiasing, true); 1030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QVERIFY(webView.renderHints() & QPainter::Antialiasing); 1040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QVERIFY(webView.renderHints() & QPainter::TextAntialiasing); 105f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch QVERIFY(webView.renderHints() & QPainter::SmoothPixmapTransform); 1060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QVERIFY(!(webView.renderHints() & QPainter::HighQualityAntialiasing)); 1070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch webView.setRenderHint(QPainter::Antialiasing, false); 1090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QVERIFY(!(webView.renderHints() & QPainter::Antialiasing)); 1100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QVERIFY(webView.renderHints() & QPainter::TextAntialiasing); 111f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch QVERIFY(webView.renderHints() & QPainter::SmoothPixmapTransform); 1120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QVERIFY(!(webView.renderHints() & QPainter::HighQualityAntialiasing)); 1130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch webView.setRenderHint(QPainter::SmoothPixmapTransform, true); 1150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QVERIFY(!(webView.renderHints() & QPainter::Antialiasing)); 1160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QVERIFY(webView.renderHints() & QPainter::TextAntialiasing); 1170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QVERIFY(webView.renderHints() & QPainter::SmoothPixmapTransform); 1180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QVERIFY(!(webView.renderHints() & QPainter::HighQualityAntialiasing)); 1190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch webView.setRenderHint(QPainter::SmoothPixmapTransform, false); 1210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QVERIFY(webView.renderHints() & QPainter::TextAntialiasing); 1220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QVERIFY(!(webView.renderHints() & QPainter::SmoothPixmapTransform)); 1230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QVERIFY(!(webView.renderHints() & QPainter::HighQualityAntialiasing)); 1240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 1250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebView::getWebKitVersion() 1270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 1280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QVERIFY(qWebKitVersion().toDouble() > 0); 1290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 1300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 131cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockvoid tst_QWebView::reusePage_data() 132cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 133cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QTest::addColumn<QString>("html"); 134cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QTest::newRow("WithoutPlugin") << "<html><body id='b'>text</body></html>"; 135cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QTest::newRow("WindowedPlugin") << QString("<html><body id='b'>text<embed src='resources/test.swf'></embed></body></html>"); 136cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QTest::newRow("WindowlessPlugin") << QString("<html><body id='b'>text<embed src='resources/test.swf' wmode=\"transparent\"></embed></body></html>"); 137cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 138cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 139cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockvoid tst_QWebView::reusePage() 140cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 141d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!QDir(TESTS_SOURCE_DIR).exists()) 142d0825bca7fe65beaee391d30da42e937db621564Steve Block QSKIP(QString("This test requires access to resources found in '%1'").arg(TESTS_SOURCE_DIR).toLatin1().constData(), SkipAll); 143d0825bca7fe65beaee391d30da42e937db621564Steve Block 144d0825bca7fe65beaee391d30da42e937db621564Steve Block QDir::setCurrent(TESTS_SOURCE_DIR); 145cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 146cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QFETCH(QString, html); 147cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QWebView* view1 = new QWebView; 148cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QPointer<QWebPage> page = new QWebPage; 149cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block view1->setPage(page); 150cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block page->settings()->setAttribute(QWebSettings::PluginsEnabled, true); 151cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QWebFrame* mainFrame = page->mainFrame(); 152d0825bca7fe65beaee391d30da42e937db621564Steve Block mainFrame->setHtml(html, QUrl::fromLocalFile(TESTS_SOURCE_DIR)); 153cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (html.contains("</embed>")) { 154cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block // some reasonable time for the PluginStream to feed test.swf to flash and start painting 155643ca7872b450ea4efacab6188849e5aac2ba161Steve Block waitForSignal(view1, SIGNAL(loadFinished(bool)), 2000); 156cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block } 157cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 158cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block view1->show(); 159643ca7872b450ea4efacab6188849e5aac2ba161Steve Block QTest::qWaitForWindowShown(view1); 160cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block delete view1; 161cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QVERIFY(page != 0); // deleting view must not have deleted the page, since it's not a child of view 162cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 163cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QWebView *view2 = new QWebView; 164cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block view2->setPage(page); 165cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block view2->show(); // in Windowless mode, you should still be able to see the plugin here 166643ca7872b450ea4efacab6188849e5aac2ba161Steve Block QTest::qWaitForWindowShown(view2); 167cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block delete view2; 168cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 169cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block delete page; // must not crash 170cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 171cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QDir::setCurrent(QApplication::applicationDirPath()); 172cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 173cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 174643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// Class used in crashTests 175643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebViewCrashTest : public QObject { 176643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Q_OBJECT 177643ca7872b450ea4efacab6188849e5aac2ba161Steve Block QWebView* m_view; 178643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockpublic: 179643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bool m_executed; 180643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 181643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 182643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebViewCrashTest(QWebView* view) 183643ca7872b450ea4efacab6188849e5aac2ba161Steve Block : m_view(view) 184643ca7872b450ea4efacab6188849e5aac2ba161Steve Block , m_executed(false) 185643ca7872b450ea4efacab6188849e5aac2ba161Steve Block { 186643ca7872b450ea4efacab6188849e5aac2ba161Steve Block view->connect(view, SIGNAL(loadProgress(int)), this, SLOT(loading(int))); 187643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 188643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 189643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockprivate slots: 190643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void loading(int progress) 191643ca7872b450ea4efacab6188849e5aac2ba161Steve Block { 192643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (progress >= 20 && progress < 90) { 193643ca7872b450ea4efacab6188849e5aac2ba161Steve Block QVERIFY(!m_executed); 194643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_view->stop(); 195643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_executed = true; 196643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 197643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 198643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}; 199643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 200643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 201643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// Should not crash. 202643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid tst_QWebView::crashTests() 203643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 204643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Test if loading can be stopped in loadProgress handler without crash. 205643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Test page should have frames. 206643ca7872b450ea4efacab6188849e5aac2ba161Steve Block QWebView view; 207643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebViewCrashTest tester(&view); 208d0825bca7fe65beaee391d30da42e937db621564Steve Block QUrl url("qrc:///resources/index.html"); 209643ca7872b450ea4efacab6188849e5aac2ba161Steve Block view.load(url); 210643ca7872b450ea4efacab6188849e5aac2ba161Steve Block QTRY_VERIFY(tester.m_executed); // If fail it means that the test wasn't executed. 211643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 212643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 21321939df44de1705786c545cd1bf519d47250322dBen Murdochvoid tst_QWebView::microFocusCoordinates() 21421939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 21521939df44de1705786c545cd1bf519d47250322dBen Murdoch QWebPage* page = new QWebPage; 21621939df44de1705786c545cd1bf519d47250322dBen Murdoch QWebView* webView = new QWebView; 21721939df44de1705786c545cd1bf519d47250322dBen Murdoch webView->setPage( page ); 21821939df44de1705786c545cd1bf519d47250322dBen Murdoch 21921939df44de1705786c545cd1bf519d47250322dBen Murdoch page->mainFrame()->setHtml("<html><body>" \ 22021939df44de1705786c545cd1bf519d47250322dBen Murdoch "<input type='text' id='input1' style='font--family: serif' value='' maxlength='20'/><br>" \ 2212bde8e466a4451c7319e3a072d118917957d6554Steve Block "<canvas id='canvas1' width='500' height='500'></canvas>" \ 22221939df44de1705786c545cd1bf519d47250322dBen Murdoch "<input type='password'/><br>" \ 2232bde8e466a4451c7319e3a072d118917957d6554Steve Block "<canvas id='canvas2' width='500' height='500'></canvas>" \ 22421939df44de1705786c545cd1bf519d47250322dBen Murdoch "</body></html>"); 22521939df44de1705786c545cd1bf519d47250322dBen Murdoch 22621939df44de1705786c545cd1bf519d47250322dBen Murdoch page->mainFrame()->setFocus(); 22721939df44de1705786c545cd1bf519d47250322dBen Murdoch 22821939df44de1705786c545cd1bf519d47250322dBen Murdoch QVariant initialMicroFocus = page->inputMethodQuery(Qt::ImMicroFocus); 22921939df44de1705786c545cd1bf519d47250322dBen Murdoch QVERIFY(initialMicroFocus.isValid()); 23021939df44de1705786c545cd1bf519d47250322dBen Murdoch 23121939df44de1705786c545cd1bf519d47250322dBen Murdoch page->mainFrame()->scroll(0,50); 23221939df44de1705786c545cd1bf519d47250322dBen Murdoch 23321939df44de1705786c545cd1bf519d47250322dBen Murdoch QVariant currentMicroFocus = page->inputMethodQuery(Qt::ImMicroFocus); 23421939df44de1705786c545cd1bf519d47250322dBen Murdoch QVERIFY(currentMicroFocus.isValid()); 23521939df44de1705786c545cd1bf519d47250322dBen Murdoch 23621939df44de1705786c545cd1bf519d47250322dBen Murdoch QCOMPARE(initialMicroFocus.toRect().translated(QPoint(0,-50)), currentMicroFocus.toRect()); 23721939df44de1705786c545cd1bf519d47250322dBen Murdoch} 238643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 239545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochvoid tst_QWebView::focusInputTypes() 240545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 2415ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QWebView webView; 2425ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen webView.show(); 2435ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QTest::qWaitForWindowShown(&webView); 244545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 245545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch QUrl url("qrc:///resources/input_types.html"); 2465ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QWebFrame* const mainFrame = webView.page()->mainFrame(); 2475ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen mainFrame->load(url); 2485ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen mainFrame->setFocus(); 249545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 2505ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QVERIFY(waitForSignal(&webView, SIGNAL(loadFinished(bool)))); 251545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 252545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch // 'text' type 2535ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QWebElement inputElement = mainFrame->documentElement().findFirst(QLatin1String("input[type=text]")); 2545ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QTest::mouseClick(&webView, Qt::LeftButton, 0, inputElement.geometry().center()); 255545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#if defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) || defined(Q_OS_SYMBIAN) 2565ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QVERIFY(webView.inputMethodHints() & Qt::ImhNoAutoUppercase); 2575ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QVERIFY(webView.inputMethodHints() & Qt::ImhNoPredictiveText); 258545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#else 2595ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QVERIFY(webView.inputMethodHints() == Qt::ImhNone); 260545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#endif 2615ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QVERIFY(webView.testAttribute(Qt::WA_InputMethodEnabled)); 262545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 263545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch // 'password' field 2645ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen inputElement = mainFrame->documentElement().findFirst(QLatin1String("input[type=password]")); 2655ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QTest::mouseClick(&webView, Qt::LeftButton, 0, inputElement.geometry().center()); 2662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch VERIFY_INPUTMETHOD_HINTS(webView.inputMethodHints(), Qt::ImhHiddenText); 2675ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QVERIFY(webView.testAttribute(Qt::WA_InputMethodEnabled)); 268545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 269545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch // 'tel' field 2705ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen inputElement = mainFrame->documentElement().findFirst(QLatin1String("input[type=tel]")); 2715ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QTest::mouseClick(&webView, Qt::LeftButton, 0, inputElement.geometry().center()); 2722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch VERIFY_INPUTMETHOD_HINTS(webView.inputMethodHints(), Qt::ImhDialableCharactersOnly); 2735ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QVERIFY(webView.testAttribute(Qt::WA_InputMethodEnabled)); 274545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 275545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch // 'number' field 2765ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen inputElement = mainFrame->documentElement().findFirst(QLatin1String("input[type=number]")); 2775ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QTest::mouseClick(&webView, Qt::LeftButton, 0, inputElement.geometry().center()); 2782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch VERIFY_INPUTMETHOD_HINTS(webView.inputMethodHints(), Qt::ImhDigitsOnly); 2795ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QVERIFY(webView.testAttribute(Qt::WA_InputMethodEnabled)); 280545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 281545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch // 'email' field 2825ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen inputElement = mainFrame->documentElement().findFirst(QLatin1String("input[type=email]")); 2835ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QTest::mouseClick(&webView, Qt::LeftButton, 0, inputElement.geometry().center()); 2842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch VERIFY_INPUTMETHOD_HINTS(webView.inputMethodHints(), Qt::ImhEmailCharactersOnly); 2855ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QVERIFY(webView.testAttribute(Qt::WA_InputMethodEnabled)); 286545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 287545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch // 'url' field 2885ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen inputElement = mainFrame->documentElement().findFirst(QLatin1String("input[type=url]")); 2895ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QTest::mouseClick(&webView, Qt::LeftButton, 0, inputElement.geometry().center()); 2902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch VERIFY_INPUTMETHOD_HINTS(webView.inputMethodHints(), Qt::ImhUrlCharactersOnly); 2915ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QVERIFY(webView.testAttribute(Qt::WA_InputMethodEnabled)); 2920617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 2930617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen // 'password' field 2945ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen inputElement = mainFrame->documentElement().findFirst(QLatin1String("input[type=password]")); 2955ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QTest::mouseClick(&webView, Qt::LeftButton, 0, inputElement.geometry().center()); 2962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch VERIFY_INPUTMETHOD_HINTS(webView.inputMethodHints(), Qt::ImhHiddenText); 2975ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QVERIFY(webView.testAttribute(Qt::WA_InputMethodEnabled)); 2980617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 2990617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen // 'text' type 3005ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen inputElement = mainFrame->documentElement().findFirst(QLatin1String("input[type=text]")); 3015ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QTest::mouseClick(&webView, Qt::LeftButton, 0, inputElement.geometry().center()); 3020617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#if defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) || defined(Q_OS_SYMBIAN) 3035ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QVERIFY(webView.inputMethodHints() & Qt::ImhNoAutoUppercase); 3045ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QVERIFY(webView.inputMethodHints() & Qt::ImhNoPredictiveText); 3050617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#else 3065ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QVERIFY(webView.inputMethodHints() == Qt::ImhNone); 3070617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#endif 3085ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QVERIFY(webView.testAttribute(Qt::WA_InputMethodEnabled)); 309dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 310dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // 'password' field 3115ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen inputElement = mainFrame->documentElement().findFirst(QLatin1String("input[type=password]")); 3125ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QTest::mouseClick(&webView, Qt::LeftButton, 0, inputElement.geometry().center()); 3132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch VERIFY_INPUTMETHOD_HINTS(webView.inputMethodHints(), Qt::ImhHiddenText); 3145ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QVERIFY(webView.testAttribute(Qt::WA_InputMethodEnabled)); 315dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 316dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // 'text area' field 3175ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen inputElement = mainFrame->documentElement().findFirst(QLatin1String("textarea")); 3185ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QTest::mouseClick(&webView, Qt::LeftButton, 0, inputElement.geometry().center()); 3192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if defined(Q_OS_SYMBIAN) 3202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch QVERIFY(webView.inputMethodHints() & Qt::ImhNoAutoUppercase); 3212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch QVERIFY(webView.inputMethodHints() & Qt::ImhNoPredictiveText); 3222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#else 3235ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QVERIFY(webView.inputMethodHints() == Qt::ImhNone); 3242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 3255ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen QVERIFY(webView.testAttribute(Qt::WA_InputMethodEnabled)); 326545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 327545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 32881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid tst_QWebView::setPalette_data() 32981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 33081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTest::addColumn<bool>("active"); 33181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTest::addColumn<bool>("background"); 33281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTest::newRow("activeBG") << true << true; 33381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTest::newRow("activeFG") << true << false; 33481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTest::newRow("inactiveBG") << false << true; 33581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTest::newRow("inactiveFG") << false << false; 33681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 33781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 33881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch// Render a QWebView to a QImage twice, each time with a different palette set, 33981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch// verify that images rendered are not the same, confirming WebCore usage of 34081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch// custom palette on selections. 34181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid tst_QWebView::setPalette() 34281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 34381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QString html = "<html><head></head>" 34481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch "<body>" 34581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch "Some text here" 34681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch "</body>" 34781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch "</html>"; 34881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 34981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QFETCH(bool, active); 35081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QFETCH(bool, background); 35181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 35281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QWidget* activeView = 0; 35381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 35481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Use controlView to manage active/inactive state of test views by raising 35581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // or lowering their position in the window stack. 35681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QWebView controlView; 35781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch controlView.setHtml(html); 35881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 35981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QWebView view1; 36081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 36181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QPalette palette1; 36281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QBrush brush1(Qt::red); 36381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch brush1.setStyle(Qt::SolidPattern); 36481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (active && background) { 36581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Rendered image must have red background on an active QWebView. 36681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch palette1.setBrush(QPalette::Active, QPalette::Highlight, brush1); 36781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } else if (active && !background) { 36881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Rendered image must have red foreground on an active QWebView. 36981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch palette1.setBrush(QPalette::Active, QPalette::HighlightedText, brush1); 37081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } else if (!active && background) { 37181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Rendered image must have red background on an inactive QWebView. 37281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch palette1.setBrush(QPalette::Inactive, QPalette::Highlight, brush1); 37381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } else if (!active && !background) { 37481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Rendered image must have red foreground on an inactive QWebView. 37581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch palette1.setBrush(QPalette::Inactive, QPalette::HighlightedText, brush1); 37681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 37781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 37881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view1.setPalette(palette1); 37981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view1.setHtml(html); 38081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view1.page()->setViewportSize(view1.page()->currentFrame()->contentsSize()); 38181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view1.show(); 38281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 38381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTest::qWaitForWindowShown(&view1); 38481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 38581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!active) { 38681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch controlView.show(); 38781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTest::qWaitForWindowShown(&controlView); 38881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch activeView = &controlView; 38981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch controlView.activateWindow(); 39081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } else { 39181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view1.activateWindow(); 39281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch activeView = &view1; 39381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 39481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 39581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTRY_COMPARE(QApplication::activeWindow(), activeView); 39681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 39781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view1.page()->triggerAction(QWebPage::SelectAll); 39881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 39981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QImage img1(view1.page()->viewportSize(), QImage::Format_ARGB32); 40081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QPainter painter1(&img1); 40181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view1.page()->currentFrame()->render(&painter1); 40281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch painter1.end(); 40381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view1.close(); 40481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch controlView.close(); 40581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 40681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QWebView view2; 40781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 40881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QPalette palette2; 40981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QBrush brush2(Qt::blue); 41081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch brush2.setStyle(Qt::SolidPattern); 41181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (active && background) { 41281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Rendered image must have blue background on an active QWebView. 41381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch palette2.setBrush(QPalette::Active, QPalette::Highlight, brush2); 41481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } else if (active && !background) { 41581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Rendered image must have blue foreground on an active QWebView. 41681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch palette2.setBrush(QPalette::Active, QPalette::HighlightedText, brush2); 41781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } else if (!active && background) { 41881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Rendered image must have blue background on an inactive QWebView. 41981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch palette2.setBrush(QPalette::Inactive, QPalette::Highlight, brush2); 42081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } else if (!active && !background) { 42181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Rendered image must have blue foreground on an inactive QWebView. 42281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch palette2.setBrush(QPalette::Inactive, QPalette::HighlightedText, brush2); 42381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 42481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 42581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view2.setPalette(palette2); 42681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view2.setHtml(html); 42781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view2.page()->setViewportSize(view2.page()->currentFrame()->contentsSize()); 42881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view2.show(); 42981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 43081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTest::qWaitForWindowShown(&view2); 43181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 43281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!active) { 43381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch controlView.show(); 43481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTest::qWaitForWindowShown(&controlView); 43581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch activeView = &controlView; 43681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch controlView.activateWindow(); 43781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } else { 43881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view2.activateWindow(); 43981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch activeView = &view2; 44081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 44181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 44281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTRY_COMPARE(QApplication::activeWindow(), activeView); 44381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 44481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view2.page()->triggerAction(QWebPage::SelectAll); 44581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 44681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QImage img2(view2.page()->viewportSize(), QImage::Format_ARGB32); 44781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QPainter painter2(&img2); 44881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view2.page()->currentFrame()->render(&painter2); 44981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch painter2.end(); 45081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 45181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view2.close(); 45281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch controlView.close(); 45381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 45481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QVERIFY(img1 != img2); 45581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 45681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 4572bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid tst_QWebView::renderingAfterMaxAndBack() 4582bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 4592bde8e466a4451c7319e3a072d118917957d6554Steve Block QUrl url = QUrl("data:text/html,<html><head></head>" 4602bde8e466a4451c7319e3a072d118917957d6554Steve Block "<body width=1024 height=768 bgcolor=red>" 4612bde8e466a4451c7319e3a072d118917957d6554Steve Block "</body>" 4622bde8e466a4451c7319e3a072d118917957d6554Steve Block "</html>"); 4632bde8e466a4451c7319e3a072d118917957d6554Steve Block 4642bde8e466a4451c7319e3a072d118917957d6554Steve Block QWebView view; 4652bde8e466a4451c7319e3a072d118917957d6554Steve Block view.page()->mainFrame()->load(url); 4662bde8e466a4451c7319e3a072d118917957d6554Steve Block QVERIFY(waitForSignal(&view, SIGNAL(loadFinished(bool)))); 4672bde8e466a4451c7319e3a072d118917957d6554Steve Block view.show(); 4682bde8e466a4451c7319e3a072d118917957d6554Steve Block 4692bde8e466a4451c7319e3a072d118917957d6554Steve Block view.page()->settings()->setMaximumPagesInCache(3); 4702bde8e466a4451c7319e3a072d118917957d6554Steve Block 4712bde8e466a4451c7319e3a072d118917957d6554Steve Block QTest::qWaitForWindowShown(&view); 4722bde8e466a4451c7319e3a072d118917957d6554Steve Block 4732bde8e466a4451c7319e3a072d118917957d6554Steve Block QPixmap reference(view.page()->viewportSize()); 4742bde8e466a4451c7319e3a072d118917957d6554Steve Block reference.fill(Qt::red); 4752bde8e466a4451c7319e3a072d118917957d6554Steve Block 4762bde8e466a4451c7319e3a072d118917957d6554Steve Block QPixmap image(view.page()->viewportSize()); 4772bde8e466a4451c7319e3a072d118917957d6554Steve Block QPainter painter(&image); 4782bde8e466a4451c7319e3a072d118917957d6554Steve Block view.page()->currentFrame()->render(&painter); 4792bde8e466a4451c7319e3a072d118917957d6554Steve Block 4802bde8e466a4451c7319e3a072d118917957d6554Steve Block QCOMPARE(image, reference); 4812bde8e466a4451c7319e3a072d118917957d6554Steve Block 4822bde8e466a4451c7319e3a072d118917957d6554Steve Block QUrl url2 = QUrl("data:text/html,<html><head></head>" 4832bde8e466a4451c7319e3a072d118917957d6554Steve Block "<body width=1024 height=768 bgcolor=blue>" 4842bde8e466a4451c7319e3a072d118917957d6554Steve Block "</body>" 4852bde8e466a4451c7319e3a072d118917957d6554Steve Block "</html>"); 4862bde8e466a4451c7319e3a072d118917957d6554Steve Block view.page()->mainFrame()->load(url2); 4872bde8e466a4451c7319e3a072d118917957d6554Steve Block 4882bde8e466a4451c7319e3a072d118917957d6554Steve Block QVERIFY(waitForSignal(&view, SIGNAL(loadFinished(bool)))); 4892bde8e466a4451c7319e3a072d118917957d6554Steve Block 4902bde8e466a4451c7319e3a072d118917957d6554Steve Block view.showMaximized(); 4912bde8e466a4451c7319e3a072d118917957d6554Steve Block 4922bde8e466a4451c7319e3a072d118917957d6554Steve Block QTest::qWaitForWindowShown(&view); 4932bde8e466a4451c7319e3a072d118917957d6554Steve Block 4942bde8e466a4451c7319e3a072d118917957d6554Steve Block QPixmap reference2(view.page()->viewportSize()); 4952bde8e466a4451c7319e3a072d118917957d6554Steve Block reference2.fill(Qt::blue); 4962bde8e466a4451c7319e3a072d118917957d6554Steve Block 4972bde8e466a4451c7319e3a072d118917957d6554Steve Block QPixmap image2(view.page()->viewportSize()); 4982bde8e466a4451c7319e3a072d118917957d6554Steve Block QPainter painter2(&image2); 4992bde8e466a4451c7319e3a072d118917957d6554Steve Block view.page()->currentFrame()->render(&painter2); 5002bde8e466a4451c7319e3a072d118917957d6554Steve Block 5012bde8e466a4451c7319e3a072d118917957d6554Steve Block QCOMPARE(image2, reference2); 5022bde8e466a4451c7319e3a072d118917957d6554Steve Block 5032bde8e466a4451c7319e3a072d118917957d6554Steve Block view.back(); 5042bde8e466a4451c7319e3a072d118917957d6554Steve Block 5052bde8e466a4451c7319e3a072d118917957d6554Steve Block QPixmap reference3(view.page()->viewportSize()); 5062bde8e466a4451c7319e3a072d118917957d6554Steve Block reference3.fill(Qt::red); 5072bde8e466a4451c7319e3a072d118917957d6554Steve Block QPixmap image3(view.page()->viewportSize()); 5082bde8e466a4451c7319e3a072d118917957d6554Steve Block QPainter painter3(&image3); 5092bde8e466a4451c7319e3a072d118917957d6554Steve Block view.page()->currentFrame()->render(&painter3); 5102bde8e466a4451c7319e3a072d118917957d6554Steve Block 5112bde8e466a4451c7319e3a072d118917957d6554Steve Block QCOMPARE(image3, reference3); 5122bde8e466a4451c7319e3a072d118917957d6554Steve Block} 5132bde8e466a4451c7319e3a072d118917957d6554Steve Block 5140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQTEST_MAIN(tst_QWebView) 5150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "tst_qwebview.moc" 5160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 517