tst_qgraphicswebview.cpp revision 81bc750723a18f21cd17d1b173cd2a4dda9cea6e
10bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/* 20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Copyright (C) 2009 Jakub Wieczorek <faw217@gmail.com> 30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 40bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch This library is free software; you can redistribute it and/or 50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch modify it under the terms of the GNU Library General Public 60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch License as published by the Free Software Foundation; either 70bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch version 2 of the License, or (at your option) any later version. 80bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 90bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch This library is distributed in the hope that it will be useful, 100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch but WITHOUT ANY WARRANTY; without even the implied warranty of 110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Library General Public License for more details. 130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch You should have received a copy of the GNU Library General Public License 150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch along with this library; see the file COPYING.LIB. If not, write to 160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Boston, MA 02110-1301, USA. 180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 20643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "../util.h" 21231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <QtTest/QtTest> 22545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include <QGraphicsSceneMouseEvent> 23cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block#include <QGraphicsView> 24231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <qgraphicswebview.h> 25cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block#include <qwebpage.h> 26cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block#include <qwebframe.h> 27cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 28231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockclass tst_QGraphicsWebView : public QObject 29231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 30231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Q_OBJECT 310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 32231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockprivate slots: 33231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block void qgraphicswebview(); 34cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block void crashOnViewlessWebPages(); 3521939df44de1705786c545cd1bf519d47250322dBen Murdoch void microFocusCoordinates(); 36545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch void focusInputTypes(); 37ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block void crashOnSetScaleBeforeSetUrl(); 38e14391e94c850b8bd03680c23b38978db68687a8John Reck void widgetsRenderingThroughCache(); 3981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void setPalette_data(); 4081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void setPalette(); 410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}; 420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 43231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid tst_QGraphicsWebView::qgraphicswebview() 44231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 45231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block QGraphicsWebView item; 46231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block item.url(); 47231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block item.title(); 48231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block item.icon(); 49231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block item.zoomFactor(); 50231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block item.history(); 51231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block item.settings(); 52231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block item.page(); 53231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block item.setPage(0); 54231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block item.page(); 55231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block item.setUrl(QUrl()); 56231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block item.setZoomFactor(0); 57231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block item.load(QUrl()); 58231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block item.setHtml(QString()); 59231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block item.setContent(QByteArray()); 60643ca7872b450ea4efacab6188849e5aac2ba161Steve Block item.isModified(); 61231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 62231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 63cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass WebPage : public QWebPage 64cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 65cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Q_OBJECT 66cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 67cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockpublic: 68cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block WebPage(QObject* parent = 0): QWebPage(parent) 69cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block { 70cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block } 71cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 72cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QGraphicsWebView* webView; 73cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 74cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockprivate slots: 75cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block // Force a webview deletion during the load. 76cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block // It should not cause WebPage to crash due to 77cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block // it accessing invalid pageClient pointer. 78cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block void aborting() 79cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block { 80cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block delete webView; 81cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block } 82cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block}; 83cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 84545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochclass GraphicsWebView : public QGraphicsWebView 85545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 86545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch Q_OBJECT 87545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 88545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochpublic: 89545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch GraphicsWebView(QGraphicsItem* parent = 0): QGraphicsWebView(parent) 90545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch { 91545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch } 92545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 93545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch void fireMouseClick(QPointF point) { 94545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch QGraphicsSceneMouseEvent presEv(QEvent::GraphicsSceneMousePress); 95545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch presEv.setPos(point); 96545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch presEv.setButton(Qt::LeftButton); 97545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch presEv.setButtons(Qt::LeftButton); 98545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch QGraphicsSceneMouseEvent relEv(QEvent::GraphicsSceneMouseRelease); 99545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch relEv.setPos(point); 100545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch relEv.setButton(Qt::LeftButton); 101545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch relEv.setButtons(Qt::LeftButton); 102545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch QGraphicsWebView::sceneEvent(&presEv); 103545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch QGraphicsWebView::sceneEvent(&relEv); 104545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch } 105545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch}; 106545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 107cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockvoid tst_QGraphicsWebView::crashOnViewlessWebPages() 108cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 109cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QGraphicsScene scene; 110cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QGraphicsView view(&scene); 111cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 112cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QGraphicsWebView* webView = new QGraphicsWebView; 113cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block WebPage* page = new WebPage; 114cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block webView->setPage(page); 115cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block page->webView = webView; 116cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block scene.addItem(webView); 117cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 118cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block view.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); 119cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block view.resize(600, 480); 120cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block webView->resize(view.geometry().size()); 1216c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 122643ca7872b450ea4efacab6188849e5aac2ba161Steve Block QCoreApplication::processEvents(); 123cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block view.show(); 124cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1256c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen // Resizing the page will resize and layout the empty "about:blank" 1266c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen // page, so we first connect the signal afterward. 1276c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen connect(page->mainFrame(), SIGNAL(initialLayoutCompleted()), page, SLOT(aborting())); 1286c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 129e14391e94c850b8bd03680c23b38978db68687a8John Reck page->mainFrame()->load(QUrl("data:text/html," 130e14391e94c850b8bd03680c23b38978db68687a8John Reck "<frameset cols=\"25%,75%\">" 131e14391e94c850b8bd03680c23b38978db68687a8John Reck "<frame src=\"data:text/html,foo \">" 132e14391e94c850b8bd03680c23b38978db68687a8John Reck "<frame src=\"data:text/html,bar\">" 133e14391e94c850b8bd03680c23b38978db68687a8John Reck "</frameset>")); 134cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 135643ca7872b450ea4efacab6188849e5aac2ba161Steve Block QVERIFY(waitForSignal(page, SIGNAL(loadFinished(bool)))); 1366c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen delete page; 137cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 138cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 139ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockvoid tst_QGraphicsWebView::crashOnSetScaleBeforeSetUrl() 140ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block{ 141ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block QGraphicsWebView* webView = new QGraphicsWebView; 142ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block webView->setScale(2.0); 143ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block delete webView; 144ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block} 145ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 146e14391e94c850b8bd03680c23b38978db68687a8John Reckvoid tst_QGraphicsWebView::widgetsRenderingThroughCache() 147e14391e94c850b8bd03680c23b38978db68687a8John Reck{ 148e14391e94c850b8bd03680c23b38978db68687a8John Reck // Widgets should be rendered the same way with and without 149e14391e94c850b8bd03680c23b38978db68687a8John Reck // intermediate cache (tiling for example). 150e14391e94c850b8bd03680c23b38978db68687a8John Reck // See bug https://bugs.webkit.org/show_bug.cgi?id=47767 where 151e14391e94c850b8bd03680c23b38978db68687a8John Reck // widget are rendered as disabled when caching is using. 152e14391e94c850b8bd03680c23b38978db68687a8John Reck 153e14391e94c850b8bd03680c23b38978db68687a8John Reck QGraphicsWebView* webView = new QGraphicsWebView; 154e14391e94c850b8bd03680c23b38978db68687a8John Reck webView->setHtml(QLatin1String("<body style=\"background-color: white\"><input type=range></input><input type=checkbox></input><input type=radio></input><input type=file></input></body>")); 155e14391e94c850b8bd03680c23b38978db68687a8John Reck 156e14391e94c850b8bd03680c23b38978db68687a8John Reck QGraphicsView view; 157e14391e94c850b8bd03680c23b38978db68687a8John Reck view.show(); 158e14391e94c850b8bd03680c23b38978db68687a8John Reck QGraphicsScene* scene = new QGraphicsScene(&view); 159e14391e94c850b8bd03680c23b38978db68687a8John Reck view.setScene(scene); 160e14391e94c850b8bd03680c23b38978db68687a8John Reck scene->addItem(webView); 161e14391e94c850b8bd03680c23b38978db68687a8John Reck view.setGeometry(QRect(0, 0, 500, 500)); 162e14391e94c850b8bd03680c23b38978db68687a8John Reck QWidget *const widget = &view; 163e14391e94c850b8bd03680c23b38978db68687a8John Reck QTest::qWaitForWindowShown(widget); 164e14391e94c850b8bd03680c23b38978db68687a8John Reck 165e14391e94c850b8bd03680c23b38978db68687a8John Reck // 1. Reference without tiling. 166e14391e94c850b8bd03680c23b38978db68687a8John Reck webView->settings()->setAttribute(QWebSettings::TiledBackingStoreEnabled, false); 167e14391e94c850b8bd03680c23b38978db68687a8John Reck QPixmap referencePixmap(view.size()); 168e14391e94c850b8bd03680c23b38978db68687a8John Reck widget->render(&referencePixmap); 169e14391e94c850b8bd03680c23b38978db68687a8John Reck 170e14391e94c850b8bd03680c23b38978db68687a8John Reck // 2. With tiling. 171e14391e94c850b8bd03680c23b38978db68687a8John Reck webView->settings()->setAttribute(QWebSettings::TiledBackingStoreEnabled, true); 172e14391e94c850b8bd03680c23b38978db68687a8John Reck QPixmap viewWithTiling(view.size()); 173e14391e94c850b8bd03680c23b38978db68687a8John Reck widget->render(&viewWithTiling); 174e14391e94c850b8bd03680c23b38978db68687a8John Reck QApplication::processEvents(); 175e14391e94c850b8bd03680c23b38978db68687a8John Reck viewWithTiling.fill(); 176e14391e94c850b8bd03680c23b38978db68687a8John Reck widget->render(&viewWithTiling); 177e14391e94c850b8bd03680c23b38978db68687a8John Reck 178e14391e94c850b8bd03680c23b38978db68687a8John Reck QCOMPARE(referencePixmap.toImage(), viewWithTiling.toImage()); 179e14391e94c850b8bd03680c23b38978db68687a8John Reck} 180e14391e94c850b8bd03680c23b38978db68687a8John Reck 18121939df44de1705786c545cd1bf519d47250322dBen Murdochvoid tst_QGraphicsWebView::microFocusCoordinates() 18221939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 18321939df44de1705786c545cd1bf519d47250322dBen Murdoch QWebPage* page = new QWebPage; 18421939df44de1705786c545cd1bf519d47250322dBen Murdoch QGraphicsWebView* webView = new QGraphicsWebView; 18521939df44de1705786c545cd1bf519d47250322dBen Murdoch webView->setPage( page ); 18621939df44de1705786c545cd1bf519d47250322dBen Murdoch QGraphicsView* view = new QGraphicsView; 18721939df44de1705786c545cd1bf519d47250322dBen Murdoch QGraphicsScene* scene = new QGraphicsScene(view); 18821939df44de1705786c545cd1bf519d47250322dBen Murdoch view->setScene(scene); 18921939df44de1705786c545cd1bf519d47250322dBen Murdoch scene->addItem(webView); 19021939df44de1705786c545cd1bf519d47250322dBen Murdoch view->setGeometry(QRect(0,0,500,500)); 19121939df44de1705786c545cd1bf519d47250322dBen Murdoch 19221939df44de1705786c545cd1bf519d47250322dBen Murdoch page->mainFrame()->setHtml("<html><body>" \ 19321939df44de1705786c545cd1bf519d47250322dBen Murdoch "<input type='text' id='input1' style='font--family: serif' value='' maxlength='20'/><br>" \ 19421939df44de1705786c545cd1bf519d47250322dBen Murdoch "<canvas id='canvas1' width='500' height='500'/>" \ 19521939df44de1705786c545cd1bf519d47250322dBen Murdoch "<input type='password'/><br>" \ 19621939df44de1705786c545cd1bf519d47250322dBen Murdoch "<canvas id='canvas2' width='500' height='500'/>" \ 19721939df44de1705786c545cd1bf519d47250322dBen Murdoch "</body></html>"); 19821939df44de1705786c545cd1bf519d47250322dBen Murdoch 19921939df44de1705786c545cd1bf519d47250322dBen Murdoch page->mainFrame()->setFocus(); 20021939df44de1705786c545cd1bf519d47250322dBen Murdoch 20121939df44de1705786c545cd1bf519d47250322dBen Murdoch QVariant initialMicroFocus = page->inputMethodQuery(Qt::ImMicroFocus); 20221939df44de1705786c545cd1bf519d47250322dBen Murdoch QVERIFY(initialMicroFocus.isValid()); 20321939df44de1705786c545cd1bf519d47250322dBen Murdoch 20421939df44de1705786c545cd1bf519d47250322dBen Murdoch page->mainFrame()->scroll(0,300); 20521939df44de1705786c545cd1bf519d47250322dBen Murdoch 20621939df44de1705786c545cd1bf519d47250322dBen Murdoch QVariant currentMicroFocus = page->inputMethodQuery(Qt::ImMicroFocus); 20721939df44de1705786c545cd1bf519d47250322dBen Murdoch QVERIFY(currentMicroFocus.isValid()); 20821939df44de1705786c545cd1bf519d47250322dBen Murdoch 20921939df44de1705786c545cd1bf519d47250322dBen Murdoch QCOMPARE(initialMicroFocus.toRect().translated(QPoint(0,-300)), currentMicroFocus.toRect()); 21021939df44de1705786c545cd1bf519d47250322dBen Murdoch 21121939df44de1705786c545cd1bf519d47250322dBen Murdoch delete view; 21221939df44de1705786c545cd1bf519d47250322dBen Murdoch} 21321939df44de1705786c545cd1bf519d47250322dBen Murdoch 214545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochvoid tst_QGraphicsWebView::focusInputTypes() 215545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 216545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch QWebPage* page = new QWebPage; 217545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch GraphicsWebView* webView = new GraphicsWebView; 218545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch webView->setPage( page ); 219545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch QGraphicsView* view = new QGraphicsView; 220545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch QGraphicsScene* scene = new QGraphicsScene(view); 221545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch view->setScene(scene); 222545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch scene->addItem(webView); 223545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch view->setGeometry(QRect(0,0,500,500)); 224545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch QCoreApplication::processEvents(); 225545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch QUrl url("qrc:///resources/input_types.html"); 226545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch page->mainFrame()->load(url); 227545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch page->mainFrame()->setFocus(); 228545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 229545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch QVERIFY(waitForSignal(page, SIGNAL(loadFinished(bool)))); 230545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 231545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch // 'text' type 232545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch webView->fireMouseClick(QPointF(20.0, 10.0)); 233545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#if defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) || defined(Q_OS_SYMBIAN) 234545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch QVERIFY(webView->inputMethodHints() & Qt::ImhNoAutoUppercase); 235545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch QVERIFY(webView->inputMethodHints() & Qt::ImhNoPredictiveText); 236545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#else 237545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch QVERIFY(webView->inputMethodHints() == Qt::ImhNone); 238545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#endif 239545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 240545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch // 'password' field 241545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch webView->fireMouseClick(QPointF(20.0, 60.0)); 242545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch QVERIFY(webView->inputMethodHints() & Qt::ImhHiddenText); 243545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 244545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch // 'tel' field 245545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch webView->fireMouseClick(QPointF(20.0, 110.0)); 246545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch QVERIFY(webView->inputMethodHints() & Qt::ImhDialableCharactersOnly); 247545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 248545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch // 'number' field 249545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch webView->fireMouseClick(QPointF(20.0, 160.0)); 250545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch QVERIFY(webView->inputMethodHints() & Qt::ImhDigitsOnly); 251545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 252545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch // 'email' field 253545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch webView->fireMouseClick(QPointF(20.0, 210.0)); 254545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch QVERIFY(webView->inputMethodHints() & Qt::ImhEmailCharactersOnly); 255545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 256545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch // 'url' field 257545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch webView->fireMouseClick(QPointF(20.0, 260.0)); 258545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch QVERIFY(webView->inputMethodHints() & Qt::ImhUrlCharactersOnly); 259545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 260545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch delete webView; 261545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch delete view; 262545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 263545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 26481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid tst_QGraphicsWebView::setPalette_data() 26581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 26681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTest::addColumn<bool>("active"); 26781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTest::addColumn<bool>("background"); 26881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTest::newRow("activeBG") << true << true; 26981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTest::newRow("activeFG") << true << false; 27081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTest::newRow("inactiveBG") << false << true; 27181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTest::newRow("inactiveFG") << false << false; 27281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 27381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 27481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch// Render a QGraphicsWebView to a QImage twice, each time with a different palette set, 27581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch// verify that images rendered are not the same, confirming WebCore usage of 27681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch// custom palette on selections. 27781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid tst_QGraphicsWebView::setPalette() 27881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 27981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QString html = "<html><head></head>" 28081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch "<body>" 28181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch "Some text here" 28281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch "</body>" 28381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch "</html>"; 28481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 28581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QFETCH(bool, active); 28681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QFETCH(bool, background); 28781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 28881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QWidget* activeView = 0; 28981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 29081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Use controlView to manage active/inactive state of test views by raising 29181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // or lowering their position in the window stack. 29281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QGraphicsScene controlScene; 29381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QGraphicsView controlView(&controlScene); 29481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QGraphicsWebView controlWebView; 29581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch controlScene.addItem(&controlWebView); 29681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch controlWebView.setHtml(html); 29781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch controlWebView.setGeometry(QRectF(0, 0, 200, 200)); 29881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 29981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QGraphicsScene scene1; 30081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QGraphicsView view1(&scene1); 30181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view1.setSceneRect(0, 0, 300, 300); 30281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QGraphicsWebView webView1; 30381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch webView1.setResizesToContents(true); 30481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch scene1.addItem(&webView1); 30581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch webView1.setFocus(); 30681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 30781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QPalette palette1; 30881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QBrush brush1(Qt::red); 30981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch brush1.setStyle(Qt::SolidPattern); 31081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (active && background) { 31181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Rendered image must have red background on an active QGraphicsWebView. 31281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch palette1.setBrush(QPalette::Active, QPalette::Highlight, brush1); 31381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } else if (active && !background) { 31481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Rendered image must have red foreground on an active QGraphicsWebView. 31581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch palette1.setBrush(QPalette::Active, QPalette::HighlightedText, brush1); 31681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } else if (!active && background) { 31781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Rendered image must have red background on an inactive QGraphicsWebView. 31881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch palette1.setBrush(QPalette::Inactive, QPalette::Highlight, brush1); 31981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } else if (!active && !background) { 32081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Rendered image must have red foreground on an inactive QGraphicsWebView. 32181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch palette1.setBrush(QPalette::Inactive, QPalette::HighlightedText, brush1); 32281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 32381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 32481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch webView1.setHtml(html); 32581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view1.resize(webView1.page()->viewportSize()); 32681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch webView1.setPalette(palette1); 32781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view1.show(); 32881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 32981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QVERIFY(webView1.palette() == palette1); 33081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QVERIFY(webView1.page()->palette() == palette1); 33181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 33281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTest::qWaitForWindowShown(&view1); 33381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 33481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!active) { 33581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch controlView.show(); 33681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTest::qWaitForWindowShown(&controlView); 33781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch activeView = &controlView; 33881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch controlView.activateWindow(); 33981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } else { 34081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view1.activateWindow(); 34181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch activeView = &view1; 34281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 343545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 34481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTRY_COMPARE(QApplication::activeWindow(), activeView); 34581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 34681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch webView1.page()->triggerAction(QWebPage::SelectAll); 34781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 34881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QImage img1(webView1.page()->viewportSize(), QImage::Format_ARGB32); 34981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QPainter painter1(&img1); 35081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch webView1.page()->currentFrame()->render(&painter1); 35181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch painter1.end(); 35281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view1.close(); 35381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch controlView.close(); 35481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 35581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QGraphicsScene scene2; 35681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QGraphicsView view2(&scene2); 35781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view2.setSceneRect(0, 0, 300, 300); 35881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QGraphicsWebView webView2; 35981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch webView2.setResizesToContents(true); 36081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch scene2.addItem(&webView2); 36181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch webView2.setFocus(); 36281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 36381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QPalette palette2; 36481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QBrush brush2(Qt::blue); 36581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch brush2.setStyle(Qt::SolidPattern); 36681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (active && background) { 36781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Rendered image must have blue background on an active QGraphicsWebView. 36881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch palette2.setBrush(QPalette::Active, QPalette::Highlight, brush2); 36981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } else if (active && !background) { 37081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Rendered image must have blue foreground on an active QGraphicsWebView. 37181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch palette2.setBrush(QPalette::Active, QPalette::HighlightedText, brush2); 37281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } else if (!active && background) { 37381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Rendered image must have blue background on an inactive QGraphicsWebView. 37481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch palette2.setBrush(QPalette::Inactive, QPalette::Highlight, brush2); 37581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } else if (!active && !background) { 37681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Rendered image must have blue foreground on an inactive QGraphicsWebView. 37781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch palette2.setBrush(QPalette::Inactive, QPalette::HighlightedText, brush2); 37881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 37981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 38081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch webView2.setHtml(html); 38181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view2.resize(webView2.page()->viewportSize()); 38281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch webView2.setPalette(palette2); 38381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view2.show(); 38481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 38581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTest::qWaitForWindowShown(&view2); 38681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 38781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!active) { 38881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch controlView.show(); 38981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTest::qWaitForWindowShown(&controlView); 39081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch activeView = &controlView; 39181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch controlView.activateWindow(); 39281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } else { 39381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view2.activateWindow(); 39481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch activeView = &view2; 39581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 39681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 39781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QTRY_COMPARE(QApplication::activeWindow(), activeView); 39881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 39981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch webView2.page()->triggerAction(QWebPage::SelectAll); 40081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 40181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QImage img2(webView2.page()->viewportSize(), QImage::Format_ARGB32); 40281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QPainter painter2(&img2); 40381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch webView2.page()->currentFrame()->render(&painter2); 40481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch painter2.end(); 40581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 40681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view2.close(); 40781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch controlView.close(); 40881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 40981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QVERIFY(img1 != img2); 41081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 41121939df44de1705786c545cd1bf519d47250322dBen Murdoch 412231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockQTEST_MAIN(tst_QGraphicsWebView) 413231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 414231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "tst_qgraphicswebview.moc" 415