Reviewed by Zack
authorlars <lars@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 24 Jan 2007 13:09:59 +0000 (13:09 +0000)
committerlars <lars@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 24 Jan 2007 13:09:59 +0000 (13:09 +0000)
        WebKitQt:
        Implement some bits and pieces required by the loader.
        Fixes quite a few crashes and hangs in the lyout tests

        DumpRenderTree:
        Add a signal handler, always dump immediately if we get an
        error during a page load and raise the timeout to 5 seconds
        (as we get a lot less such failures now)

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

WebKitQt/Api/qwebframe.h
WebKitQt/ChangeLog
WebKitQt/WebCoreSupport/FrameLoaderClientQt.cpp
WebKitTools/ChangeLog
WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp
WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h
WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp
WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/main.cpp
WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/tests-skipped.txt

index b4566f0..84b600b 100644 (file)
@@ -52,7 +52,7 @@ public:
 
 signals:
     void cleared();
-    void loadDone();
+    void loadDone(bool ok);
     
 private:
     friend class QWebPage;
index 0696ac3..3078a18 100644 (file)
@@ -1,5 +1,24 @@
 2007-01-24  Lars Knoll <lars@trolltech.com>
 
+        Reviewed by Zack
+
+        Implement some bits and pieces required by the loader.
+        Fixes quite a few crashes and hangs in the lyout tests
+
+        * Api/qwebframe.h:
+        * WebCoreSupport/FrameLoaderClientQt.cpp:
+        (WebCore::FrameLoaderClientQt::dispatchDidHandleOnloadEvents):
+        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoad):
+        (WebCore::FrameLoaderClientQt::finishedLoading):
+        (WebCore::FrameLoaderClientQt::setMainDocumentError):
+        (WebCore::FrameLoaderClientQt::committedLoad):
+        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoading):
+        (WebCore::FrameLoaderClientQt::dispatchDidFailLoading):
+        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):
+        (WebCore::FrameLoaderClientQt::createFrame):
+
+2007-01-24  Lars Knoll <lars@trolltech.com>
+
         Fix compilation again.
 
         * WebCoreSupport/EditorClientQt.cpp:
index 283c32e..e491052 100644 (file)
@@ -44,6 +44,7 @@
 #include "qdebug.h"
 
 #define notImplemented() qDebug("FIXME: UNIMPLEMENTED: %s:%d (%s)", __FILE__, __LINE__, __FUNCTION__)
+#define methodDebug() qDebug("FrameLoaderClientQt: %s loader=%p", __FUNCTION__, (m_frame ? m_frame->loader() : 0))
 
 namespace WebCore
 {
@@ -285,8 +286,6 @@ void FrameLoaderClientQt::loadedFromPageCache()
 
 void FrameLoaderClientQt::dispatchDidHandleOnloadEvents()
 {
-    if (m_webFrame)
-        emit m_webFrame->loadDone();
 }
 
 
@@ -348,7 +347,8 @@ void FrameLoaderClientQt::dispatchDidFinishDocumentLoad()
 
 void FrameLoaderClientQt::dispatchDidFinishLoad()
 {
-    notImplemented();
+    if (m_webFrame)
+        emit m_webFrame->loadDone(true);
 }
 
 
@@ -447,9 +447,13 @@ void FrameLoaderClientQt::didChangeTitle(DocumentLoader *l)
 }
 
 
-void FrameLoaderClientQt::finishedLoading(DocumentLoader*)
+void FrameLoaderClientQt::finishedLoading(DocumentLoader* loader)
 {
-    notImplemented();
+    if (m_firstData) {
+        FrameLoader *fl = loader->frameLoader();
+        fl->setEncoding(m_response.textEncodingName(), false);
+        m_firstData = false;
+    }
 }
 
 
@@ -621,9 +625,14 @@ bool FrameLoaderClientQt::canCachePage() const
     return false;
 }
 
-void FrameLoaderClientQt::setMainDocumentError(WebCore::DocumentLoader*, const WebCore::ResourceError&)
+void FrameLoaderClientQt::setMainDocumentError(WebCore::DocumentLoader* loader, const WebCore::ResourceError&)
 {
-    notImplemented();
+    if (m_firstData) {
+        loader->frameLoader()->setEncoding(m_response.textEncodingName(), false);
+        m_firstData = false;
+    }
+    if (m_webFrame)
+        emit m_webFrame->loadDone(false);
 }
 
 void FrameLoaderClientQt::committedLoad(WebCore::DocumentLoader* loader, const char* data, int length)
@@ -632,7 +641,10 @@ void FrameLoaderClientQt::committedLoad(WebCore::DocumentLoader* loader, const c
     if (!m_frame)
         return;
     FrameLoader *fl = loader->frameLoader();
-    fl->setEncoding(m_response.textEncodingName(), false);
+    if (m_firstData) {
+        fl->setEncoding(m_response.textEncodingName(), false);
+        m_firstData = false;
+    }
     fl->addData(data, length);
 }
 
@@ -717,14 +729,17 @@ void FrameLoaderClientQt::dispatchDidReceiveContentLength(WebCore::DocumentLoade
     notImplemented();
 }
 
-void FrameLoaderClientQt::dispatchDidFinishLoading(WebCore::DocumentLoader*, unsigned long)
+void FrameLoaderClientQt::dispatchDidFinishLoading(WebCore::DocumentLoader* loader, unsigned long)
 {
-    notImplemented();
 }
 
-void FrameLoaderClientQt::dispatchDidFailLoading(WebCore::DocumentLoader*, unsigned long, const WebCore::ResourceError&)
+void FrameLoaderClientQt::dispatchDidFailLoading(WebCore::DocumentLoader* loader, unsigned long, const WebCore::ResourceError&)
 {
-    notImplemented();
+    if (m_firstData) {
+        FrameLoader *fl = loader->frameLoader();
+        fl->setEncoding(m_response.textEncodingName(), false);
+        m_firstData = false;
+    }
 }
 
 bool FrameLoaderClientQt::dispatchDidLoadResourceFromMemoryCache(WebCore::DocumentLoader*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, int)
@@ -760,9 +775,15 @@ void FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction(FramePolicyFunc
     callPolicyFunction(function, PolicyIgnore);
 }
 
-void FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction(FramePolicyFunction function, const WebCore::NavigationAction&, const WebCore::ResourceRequest&)
+void FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction(FramePolicyFunction function, const WebCore::NavigationAction&, const WebCore::ResourceRequest& request)
 {
-    notImplemented();
+
+    KURL url = request.url();
+    if (url.isEmpty() || url.protocol() == "about") {
+        m_policyFunction = function;
+        slotCallPolicyFunction(PolicyUse);
+        return;
+    }
     callPolicyFunction(function, PolicyUse);
 }
 
@@ -785,7 +806,6 @@ bool FrameLoaderClientQt::willUseArchive(WebCore::ResourceLoader*, const WebCore
 Frame* FrameLoaderClientQt::createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement,
                                         const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight)
 {
-    qDebug() << ">>>>>>>>>>> createFrame";
     QWebFrameData frameData;
     frameData.url = url;
     frameData.name = name;
index e93379d..bb8e9b0 100644 (file)
@@ -1,3 +1,22 @@
+2007-01-24  Lars Knoll <lars@trolltech.com>
+
+        Reviewed by Zack
+
+        Add a signal handler, always dump immediately if we get an
+        error during a page load and raise the timeout to 5 seconds
+        (as we get a lot less such failures now)
+
+        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.cpp:
+        (WebCore::DumpRenderTree::DumpRenderTree):
+        (WebCore::DumpRenderTree::maybeDump):
+        * DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.h:
+        * DumpRenderTree/DumpRenderTree.qtproj/jsobjects.cpp:
+        (LayoutTestController::waitUntilDone):
+        * DumpRenderTree/DumpRenderTree.qtproj/main.cpp:
+        (crashHandler):
+        (main):
+        * DumpRenderTree/DumpRenderTree.qtproj/tests-skipped.txt:
+
 2007-01-22  Darin Adler  <darin@apple.com>
 
         Reviewed by Mitz.
index 6558bbb..2b08d3f 100644 (file)
@@ -65,7 +65,7 @@ DumpRenderTree::DumpRenderTree()
     QObject::connect(m_controller, SIGNAL(done()), this, SLOT(dump()), Qt::QueuedConnection);
     QObject::connect(this, SIGNAL(quit()), qApp, SLOT(quit()), Qt::QueuedConnection);
     QObject::connect(frame, SIGNAL(cleared()), this, SLOT(initJSObjects()));
-    QObject::connect(frame, SIGNAL(loadDone()), this, SLOT(maybeDump()));
+    QObject::connect(frame, SIGNAL(loadDone(bool)), this, SLOT(maybeDump(bool)));
     
     page->resize(800, 800);
 
@@ -195,9 +195,9 @@ void DumpRenderTree::dump()
     }
 }
     
-void DumpRenderTree::maybeDump()
+void DumpRenderTree::maybeDump(bool ok)
 {
-    if (!m_controller->shouldWaitUntilDone()) 
+    if (!ok || !m_controller->shouldWaitUntilDone()) 
         dump();
 }
 
index 3beafde..70bc609 100644 (file)
@@ -60,7 +60,7 @@ public:
 public Q_SLOTS:
     void initJSObjects();
     void readStdin(int);
-    void maybeDump();
+    void maybeDump(bool);
     void dump();
 
 Q_SIGNALS:
index dc1dd8e..609d1fc 100644 (file)
@@ -46,7 +46,7 @@ void LayoutTestController::waitUntilDone()
 {
     //qDebug() << ">>>>waitForDone";
     waitForDone = true;
-    timeoutTimer = startTimer(1000);
+    timeoutTimer = startTimer(5000);
 }
 
 void LayoutTestController::notifyDone()
index aba764d..fa9f5d2 100644 (file)
 #include <qdir.h>
 #include <qdebug.h>
 
+#include <signal.h>
+
 void messageHandler(QtMsgType, const char *)
 {
     // do nothing
 }
 
+static void crashHandler(int sig)
+{
+    fprintf(stderr, "%s\n", strsignal(sig));
+    exit(128 + sig);
+}
 
 int main(int argc, char* argv[])
 {
     QApplication app(argc, argv);
 
+    signal(SIGILL, crashHandler);    /* 4:   illegal instruction (not reset when caught) */
+    signal(SIGTRAP, crashHandler);   /* 5:   trace trap (not reset when caught) */
+    signal(SIGFPE, crashHandler);    /* 8:   floating point exception */
+    signal(SIGBUS, crashHandler);    /* 10:  bus error */
+    signal(SIGSEGV, crashHandler);   /* 11:  segmentation violation */
+    signal(SIGSYS, crashHandler);    /* 12:  bad argument to system call */
+    signal(SIGPIPE, crashHandler);   /* 13:  write on a pipe with no reader */
+    signal(SIGXCPU, crashHandler);   /* 24:  exceeded CPU time limit */
+    signal(SIGXFSZ, crashHandler);   /* 25:  exceeded file size limit */
+    
     QStringList args = app.arguments();
     if (args.count() < 2) {
         qDebug() << "Usage: DumpRenderTree [-v] filename";
index 0798b22..f93d12d 100644 (file)
@@ -1,6 +1,4 @@
 # These tests hang forever
-editing/selection/extend-by-word-002.html
-tables/mozilla/core/col_widths_fix_autoFixPer.html
 
 # tests that currently crash
 fast/borders/border-radius-huge-assert.html