Changeset 70044 in webkit
- Timestamp:
- Oct 19, 2010 3:34:56 AM (14 years ago)
- Location:
- trunk/WebKitTools
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebKitTools/ChangeLog
r70039 r70044 1 2010-10-18 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> 2 3 Reviewed by Andreas Kling. 4 5 [Qt] QtTestBrowser: Prevent calling load() directly from loadFinished() in robot mode. 6 https://bugs.webkit.org/show_bug.cgi?id=47809 7 8 Connecting a call to load from the loadFinished signal can cause 9 re-entrance crashes in WebCore. This patch uses a timer to do so, 10 also giving some time to subsequent frames to finish loading. 11 12 * QtTestBrowser/urlloader.cpp: 13 (UrlLoader::UrlLoader): 14 (UrlLoader::loadNext): 15 (UrlLoader::checkIfFinished): 16 (UrlLoader::frameLoadStarted): 17 (UrlLoader::frameLoadFinished): 18 * QtTestBrowser/urlloader.h: 19 1 20 2010-10-19 Sergio Villar Senín <svillar@igalia.com> 2 21 -
trunk/WebKitTools/QtTestBrowser/urlloader.cpp
r67942 r70044 31 31 #include <QFile> 32 32 #include <QDebug> 33 #include <QWebPage> 33 34 34 35 UrlLoader::UrlLoader(QWebFrame* frame, const QString& inputFileName, int timeoutSeconds, int extraTimeSeconds) … … 36 37 , m_stdOut(stdout) 37 38 , m_loaded(0) 39 , m_numFramesLoading(0) 38 40 { 41 m_checkIfFinishedTimer.setInterval(200); 42 m_checkIfFinishedTimer.setSingleShot(true); 43 connect(&m_checkIfFinishedTimer, SIGNAL(timeout()), this, SLOT(checkIfFinished())); 44 // loadStarted and loadFinished on QWebPage is emitted for each frame/sub-frame 45 connect(m_frame->page(), SIGNAL(loadStarted()), this, SLOT(frameLoadStarted())); 46 connect(m_frame->page(), SIGNAL(loadFinished(bool)), this, SLOT(frameLoadFinished())); 47 39 48 if (timeoutSeconds) { 40 49 m_timeoutTimer.setInterval(timeoutSeconds * 1000); … … 46 55 m_extraTimeTimer.setInterval(extraTimeSeconds * 1000); 47 56 m_extraTimeTimer.setSingleShot(true); 48 connect( frame, SIGNAL(loadFinished(bool)), &m_extraTimeTimer, SLOT(start()));57 connect(this, SIGNAL(pageLoadFinished()), &m_extraTimeTimer, SLOT(start())); 49 58 connect(&m_extraTimeTimer, SIGNAL(timeout()), this, SLOT(loadNext())); 50 59 } else 51 connect( frame, SIGNAL(loadFinished(bool)), this, SLOT(loadNext()));60 connect(this, SIGNAL(pageLoadFinished()), this, SLOT(loadNext())); 52 61 loadUrlList(inputFileName); 53 62 } … … 57 66 m_timeoutTimer.stop(); 58 67 m_extraTimeTimer.stop(); 68 m_checkIfFinishedTimer.stop(); 69 m_numFramesLoading = 0; 59 70 QString qstr; 60 71 if (getUrl(qstr)) { … … 67 78 } else 68 79 disconnect(m_frame, 0, this, 0); 80 } 81 82 void UrlLoader::checkIfFinished() 83 { 84 if (!m_numFramesLoading) 85 emit pageLoadFinished(); 86 } 87 88 void UrlLoader::frameLoadStarted() 89 { 90 ++m_numFramesLoading; 91 m_checkIfFinishedTimer.stop(); 92 } 93 94 void UrlLoader::frameLoadFinished() 95 { 96 Q_ASSERT(m_numFramesLoading > 0); 97 --m_numFramesLoading; 98 // Once our frame has finished loading, wait a moment to call loadNext for cases 99 // where a sub-frame starts loading or another frame is loaded through JavaScript. 100 m_checkIfFinishedTimer.start(); 69 101 } 70 102 -
trunk/WebKitTools/QtTestBrowser/urlloader.h
r67942 r70044 45 45 void loadNext(); 46 46 47 private slots: 48 void checkIfFinished(); 49 void frameLoadStarted(); 50 void frameLoadFinished(); 51 52 signals: 53 void pageLoadFinished(); 54 47 55 private: 48 56 void loadUrlList(const QString& inputFileName); … … 57 65 QTimer m_timeoutTimer; 58 66 QTimer m_extraTimeTimer; 67 QTimer m_checkIfFinishedTimer; 68 int m_numFramesLoading; 59 69 }; 60 70
Note: See TracChangeset
for help on using the changeset viewer.