Simon Hausmann <hausmann@webkit.org>
authorhausmann@webkit.org <hausmann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 23 Apr 2008 14:36:10 +0000 (14:36 +0000)
committerhausmann@webkit.org <hausmann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 23 Apr 2008 14:36:10 +0000 (14:36 +0000)
Fix crashes on window.close().

We should not delete the QWebPage object in the ChromeClient but leave it up to
the application when and whether to delete a browser window. For this we now
emit the windowCloseRequested() signal.

Done with Tor Arne.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@32433 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKit/qt/Api/qwebpage.cpp
WebKit/qt/Api/qwebpage.h
WebKit/qt/ChangeLog
WebKit/qt/QtLauncher/main.cpp
WebKit/qt/WebCoreSupport/ChromeClientQt.cpp

index 47944fa..d637830 100644 (file)
@@ -2120,6 +2120,13 @@ quint64 QWebPage::bytesReceived() const {
 */
 
 /*!
+    \fn void QWebPage::windowCloseRequested()
+
+    This signal is emitted whenever the page requests the web browser window to be closed,
+    for example through the JavaScript \c{window.close()} call.
+*/
+
+/*!
     \fn void QWebPage::unsupportedContent(QNetworkReply *reply)
 
     This signals is emitted when webkit cannot handle a link the user navigated to.
index a2c57ec..e59899d 100644 (file)
@@ -245,6 +245,7 @@ Q_SIGNALS:
     void geometryChangeRequested(const QRect& geom);
     void repaintRequested(const QRect& dirtyRect);
     void scrollRequested(int dx, int dy, const QRect& scrollViewRect);
+    void windowCloseRequested();
     void linkClicked(const QUrl &url);
 
     void toolBarVisibilityChangeRequested(bool visible);
index a9bf0ab..0c0d6cc 100644 (file)
@@ -2,6 +2,24 @@
 
         Reviewed by Holger.
 
+        Fix crashes on window.close().
+
+        We should not delete the QWebPage object in the ChromeClient but leave it up to
+        the application when and whether to delete a browser window. For this we now
+        emit the windowCloseRequested() signal.
+
+        Done with Tor Arne.
+
+        * Api/qwebpage.cpp:
+        * Api/qwebpage.h:
+        * QtLauncher/main.cpp:
+        (MainWindow::MainWindow):
+        * WebCoreSupport/ChromeClientQt.cpp:
+
+2008-04-23  Simon Hausmann  <hausmann@webkit.org>
+
+        Reviewed by Holger.
+
         Fix parsing of external scripts/stylesheets when using setHtml(const QString &html).
 
         We used to pass the html string to the frameloader in utf-16, which also meant that the default
index a015ce2..c22b4f0 100644 (file)
@@ -303,6 +303,7 @@ public:
                 this, SLOT(setWindowTitle(const QString&)));
         connect(view->page(), SIGNAL(linkHovered(const QString&, const QString&, const QString &)),
                 this, SLOT(showLinkHover(const QString&, const QString&)));
+        connect(view->page(), SIGNAL(windowCloseRequested()), this, SLOT(deleteLater()));
 
 
         setCentralWidget(view);
index 56d7730..3b122c1 100644 (file)
@@ -247,7 +247,7 @@ bool ChromeClientQt::runBeforeUnloadConfirmPanel(const String& message, Frame* f
 void ChromeClientQt::closeWindowSoon()
 {
     m_webPage->mainFrame()->d->frame->loader()->stopAllLoaders();
-    m_webPage->deleteLater();
+    emit m_webPage->windowCloseRequested();
 }
 
 void ChromeClientQt::runJavaScriptAlert(Frame* f, const String& msg)