1/* 2 Copyright (C) 2009 Jakub Wieczorek <faw217@gmail.com> 3 4 This library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Library General Public 6 License as published by the Free Software Foundation; either 7 version 2 of the License, or (at your option) any later version. 8 9 This library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Library General Public License for more details. 13 14 You should have received a copy of the GNU Library General Public License 15 along with this library; see the file COPYING.LIB. If not, write to 16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17 Boston, MA 02110-1301, USA. 18*/ 19 20#include "../util.h" 21#include <QtTest/QtTest> 22#include <QGraphicsView> 23#include <qgraphicswebview.h> 24#include <qwebpage.h> 25#include <qwebframe.h> 26 27class tst_QGraphicsWebView : public QObject 28{ 29 Q_OBJECT 30 31private slots: 32 void qgraphicswebview(); 33 void crashOnViewlessWebPages(); 34}; 35 36void tst_QGraphicsWebView::qgraphicswebview() 37{ 38 QGraphicsWebView item; 39 item.url(); 40 item.title(); 41 item.icon(); 42 item.zoomFactor(); 43 item.history(); 44 item.settings(); 45 item.page(); 46 item.setPage(0); 47 item.page(); 48 item.setUrl(QUrl()); 49 item.setZoomFactor(0); 50 item.load(QUrl()); 51 item.setHtml(QString()); 52 item.setContent(QByteArray()); 53 item.isModified(); 54} 55 56class WebPage : public QWebPage 57{ 58 Q_OBJECT 59 60public: 61 WebPage(QObject* parent = 0): QWebPage(parent) 62 { 63 } 64 65 QGraphicsWebView* webView; 66 67private slots: 68 // Force a webview deletion during the load. 69 // It should not cause WebPage to crash due to 70 // it accessing invalid pageClient pointer. 71 void aborting() 72 { 73 delete webView; 74 } 75}; 76 77void tst_QGraphicsWebView::crashOnViewlessWebPages() 78{ 79 QGraphicsScene scene; 80 QGraphicsView view(&scene); 81 82 QGraphicsWebView* webView = new QGraphicsWebView; 83 WebPage* page = new WebPage; 84 webView->setPage(page); 85 page->webView = webView; 86 connect(page->mainFrame(), SIGNAL(initialLayoutCompleted()), page, SLOT(aborting())); 87 88 scene.addItem(webView); 89 90 view.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); 91 view.resize(600, 480); 92 webView->resize(view.geometry().size()); 93 QCoreApplication::processEvents(); 94 view.show(); 95 96 page->mainFrame()->setHtml(QString("data:text/html," 97 "<frameset cols=\"25%,75%\">" 98 "<frame src=\"data:text/html,foo \">" 99 "<frame src=\"data:text/html,bar\">" 100 "</frameset>")); 101 102 QVERIFY(waitForSignal(page, SIGNAL(loadFinished(bool)))); 103} 104 105QTEST_MAIN(tst_QGraphicsWebView) 106 107#include "tst_qgraphicswebview.moc" 108