[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.15.1-1414-gc69ee75

eric at webkit.org eric at webkit.org
Thu Oct 29 20:44:00 UTC 2009


The following commit has been merged in the webkit-1.1 branch:
commit c3c24b7ab412640c4f001ca84ec729e5957b0d6a
Author: eric at webkit.org <eric at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Oct 13 22:51:12 2009 +0000

    2009-10-13  Andras Becsi  <becsi.andras at stud.u-szeged.hu>
    
            Reviewed by Simon Hausmann.
    
            [Qt] Refactor LayoutTestController, EventSender, TextInputController and WorkQueueItem classes
            out of jsobjects into separate files to get a more structured DumpRenderTree implementation.
            This is done in preparation of implementing missing features in DRT.
            No functionality changes made yet.
    
            * DumpRenderTree/qt/DumpRenderTree.cpp:
            * DumpRenderTree/qt/DumpRenderTree.pro:
            * DumpRenderTree/qt/EventSenderQt.cpp: Added.
            (EventSender::EventSender):
            (EventSender::mouseDown):
            (EventSender::mouseUp):
            (EventSender::mouseMoveTo):
            (EventSender::leapForward):
            (EventSender::keyDown):
            (EventSender::contextClick):
            (EventSender::scheduleAsynchronousClick):
            (EventSender::frameUnderMouse):
            * DumpRenderTree/qt/EventSenderQt.h: Added.
            (EventSender::clearKillRing):
            * DumpRenderTree/qt/LayoutTestControllerQt.cpp: Added.
            (LayoutTestController::LayoutTestController):
            (LayoutTestController::reset):
            (LayoutTestController::processWork):
            (LayoutTestController::maybeDump):
            (LayoutTestController::waitUntilDone):
            (LayoutTestController::notifyDone):
            (LayoutTestController::windowCount):
            (LayoutTestController::clearBackForwardList):
            (LayoutTestController::dumpEditingCallbacks):
            (LayoutTestController::dumpResourceLoadCallbacks):
            (LayoutTestController::queueBackNavigation):
            (LayoutTestController::queueForwardNavigation):
            (LayoutTestController::queueLoad):
            (LayoutTestController::queueReload):
            (LayoutTestController::queueScript):
            (LayoutTestController::provisionalLoad):
            (LayoutTestController::timerEvent):
            (LayoutTestController::encodeHostName):
            (LayoutTestController::decodeHostName):
            (LayoutTestController::setJavaScriptProfilingEnabled):
            (LayoutTestController::setFixedContentsSize):
            (LayoutTestController::setPrivateBrowsingEnabled):
            (LayoutTestController::setPopupBlockingEnabled):
            (LayoutTestController::pauseAnimationAtTimeOnElementWithId):
            (LayoutTestController::pauseTransitionAtTimeOnElementWithId):
            (LayoutTestController::numberOfActiveAnimations):
            (LayoutTestController::disableImageLoading):
            (LayoutTestController::dispatchPendingLoadRequests):
            (LayoutTestController::setDatabaseQuota):
            (LayoutTestController::clearAllDatabases):
            (LayoutTestController::whiteListAccessFromOrigin):
            (LayoutTestController::waitForPolicyDelegate):
            (LayoutTestController::overridePreference):
            * DumpRenderTree/qt/LayoutTestControllerQt.h: Added.
            (LayoutTestController::isLoading):
            (LayoutTestController::setLoading):
            (LayoutTestController::shouldDumpAsText):
            (LayoutTestController::shouldDumpBackForwardList):
            (LayoutTestController::shouldDumpChildrenAsText):
            (LayoutTestController::shouldDumpDatabaseCallbacks):
            (LayoutTestController::shouldDumpStatusCallbacks):
            (LayoutTestController::shouldWaitUntilDone):
            (LayoutTestController::canOpenWindows):
            (LayoutTestController::shouldDumpTitleChanges):
            (LayoutTestController::waitForPolicy):
            (LayoutTestController::dumpAsText):
            (LayoutTestController::dumpChildFramesAsText):
            (LayoutTestController::dumpDatabaseCallbacks):
            (LayoutTestController::dumpStatusCallbacks):
            (LayoutTestController::setCanOpenWindows):
            (LayoutTestController::dumpBackForwardList):
            (LayoutTestController::setCloseRemainingWindowsWhenComplete):
            (LayoutTestController::display):
            (LayoutTestController::dumpTitleChanges):
            (LayoutTestController::dumpSelectionRect):
            * DumpRenderTree/qt/TextInputControllerQt.cpp: Added.
            (TextInputController::TextInputController):
            (TextInputController::doCommand):
            * DumpRenderTree/qt/TextInputControllerQt.h: Added.
            * DumpRenderTree/qt/WorkQueue.cpp:
            * DumpRenderTree/qt/WorkQueue.h:
            * DumpRenderTree/qt/WorkQueueItem.h:
            * DumpRenderTree/qt/WorkQueueItemQt.cpp: Added.
            (findFrameNamed):
            (LoadItem::invoke):
            (ReloadItem::invoke):
            (ScriptItem::invoke):
            (BackForwardItem::invoke):
            * DumpRenderTree/qt/jsobjects.cpp: Move all the above classes into separate files
            * DumpRenderTree/qt/jsobjects.h:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@49519 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
index e14099e..5600a36 100644
--- a/WebKitTools/ChangeLog
+++ b/WebKitTools/ChangeLog
@@ -1,3 +1,98 @@
+2009-10-13  Andras Becsi  <becsi.andras at stud.u-szeged.hu>
+
+        Reviewed by Simon Hausmann.
+
+        [Qt] Refactor LayoutTestController, EventSender, TextInputController and WorkQueueItem classes
+        out of jsobjects into separate files to get a more structured DumpRenderTree implementation.
+        This is done in preparation of implementing missing features in DRT.
+        No functionality changes made yet.
+
+        * DumpRenderTree/qt/DumpRenderTree.cpp:
+        * DumpRenderTree/qt/DumpRenderTree.pro:
+        * DumpRenderTree/qt/EventSenderQt.cpp: Added.
+        (EventSender::EventSender):
+        (EventSender::mouseDown):
+        (EventSender::mouseUp):
+        (EventSender::mouseMoveTo):
+        (EventSender::leapForward):
+        (EventSender::keyDown):
+        (EventSender::contextClick):
+        (EventSender::scheduleAsynchronousClick):
+        (EventSender::frameUnderMouse):
+        * DumpRenderTree/qt/EventSenderQt.h: Added.
+        (EventSender::clearKillRing):
+        * DumpRenderTree/qt/LayoutTestControllerQt.cpp: Added.
+        (LayoutTestController::LayoutTestController):
+        (LayoutTestController::reset):
+        (LayoutTestController::processWork):
+        (LayoutTestController::maybeDump):
+        (LayoutTestController::waitUntilDone):
+        (LayoutTestController::notifyDone):
+        (LayoutTestController::windowCount):
+        (LayoutTestController::clearBackForwardList):
+        (LayoutTestController::dumpEditingCallbacks):
+        (LayoutTestController::dumpResourceLoadCallbacks):
+        (LayoutTestController::queueBackNavigation):
+        (LayoutTestController::queueForwardNavigation):
+        (LayoutTestController::queueLoad):
+        (LayoutTestController::queueReload):
+        (LayoutTestController::queueScript):
+        (LayoutTestController::provisionalLoad):
+        (LayoutTestController::timerEvent):
+        (LayoutTestController::encodeHostName):
+        (LayoutTestController::decodeHostName):
+        (LayoutTestController::setJavaScriptProfilingEnabled):
+        (LayoutTestController::setFixedContentsSize):
+        (LayoutTestController::setPrivateBrowsingEnabled):
+        (LayoutTestController::setPopupBlockingEnabled):
+        (LayoutTestController::pauseAnimationAtTimeOnElementWithId):
+        (LayoutTestController::pauseTransitionAtTimeOnElementWithId):
+        (LayoutTestController::numberOfActiveAnimations):
+        (LayoutTestController::disableImageLoading):
+        (LayoutTestController::dispatchPendingLoadRequests):
+        (LayoutTestController::setDatabaseQuota):
+        (LayoutTestController::clearAllDatabases):
+        (LayoutTestController::whiteListAccessFromOrigin):
+        (LayoutTestController::waitForPolicyDelegate):
+        (LayoutTestController::overridePreference):
+        * DumpRenderTree/qt/LayoutTestControllerQt.h: Added.
+        (LayoutTestController::isLoading):
+        (LayoutTestController::setLoading):
+        (LayoutTestController::shouldDumpAsText):
+        (LayoutTestController::shouldDumpBackForwardList):
+        (LayoutTestController::shouldDumpChildrenAsText):
+        (LayoutTestController::shouldDumpDatabaseCallbacks):
+        (LayoutTestController::shouldDumpStatusCallbacks):
+        (LayoutTestController::shouldWaitUntilDone):
+        (LayoutTestController::canOpenWindows):
+        (LayoutTestController::shouldDumpTitleChanges):
+        (LayoutTestController::waitForPolicy):
+        (LayoutTestController::dumpAsText):
+        (LayoutTestController::dumpChildFramesAsText):
+        (LayoutTestController::dumpDatabaseCallbacks):
+        (LayoutTestController::dumpStatusCallbacks):
+        (LayoutTestController::setCanOpenWindows):
+        (LayoutTestController::dumpBackForwardList):
+        (LayoutTestController::setCloseRemainingWindowsWhenComplete):
+        (LayoutTestController::display):
+        (LayoutTestController::dumpTitleChanges):
+        (LayoutTestController::dumpSelectionRect):
+        * DumpRenderTree/qt/TextInputControllerQt.cpp: Added.
+        (TextInputController::TextInputController):
+        (TextInputController::doCommand):
+        * DumpRenderTree/qt/TextInputControllerQt.h: Added.
+        * DumpRenderTree/qt/WorkQueue.cpp:
+        * DumpRenderTree/qt/WorkQueue.h:
+        * DumpRenderTree/qt/WorkQueueItem.h:
+        * DumpRenderTree/qt/WorkQueueItemQt.cpp: Added.
+        (findFrameNamed):
+        (LoadItem::invoke):
+        (ReloadItem::invoke):
+        (ScriptItem::invoke):
+        (BackForwardItem::invoke):
+        * DumpRenderTree/qt/jsobjects.cpp: Move all the above classes into separate files
+        * DumpRenderTree/qt/jsobjects.h:
+
 2009-10-13  Dmitry Titov  <dimich at chromium.org>
 
         Not reviewed, adding myself to the list of reviewers.
diff --git a/WebKitTools/DumpRenderTree/qt/DumpRenderTree.cpp b/WebKitTools/DumpRenderTree/qt/DumpRenderTree.cpp
index 83626ac..064baf3 100644
--- a/WebKitTools/DumpRenderTree/qt/DumpRenderTree.cpp
+++ b/WebKitTools/DumpRenderTree/qt/DumpRenderTree.cpp
@@ -30,6 +30,9 @@
  */
 
 #include "DumpRenderTree.h"
+#include "EventSenderQt.h"
+#include "LayoutTestControllerQt.h"
+#include "TextInputControllerQt.h"
 #include "jsobjects.h"
 #include "testplugin.h"
 #include "WorkQueue.h"
diff --git a/WebKitTools/DumpRenderTree/qt/DumpRenderTree.pro b/WebKitTools/DumpRenderTree/qt/DumpRenderTree.pro
index 0daf8bd..571313c 100644
--- a/WebKitTools/DumpRenderTree/qt/DumpRenderTree.pro
+++ b/WebKitTools/DumpRenderTree/qt/DumpRenderTree.pro
@@ -12,8 +12,23 @@ PKGCONFIG += fontconfig
 QT = core gui network
 macx: QT += xml
 
-HEADERS = WorkQueue.h WorkQueueItem.h DumpRenderTree.h jsobjects.h testplugin.h
-SOURCES = WorkQueue.cpp DumpRenderTree.cpp main.cpp jsobjects.cpp testplugin.cpp
+HEADERS = WorkQueue.h \
+    WorkQueueItem.h \
+    DumpRenderTree.h \
+    EventSenderQt.h \
+    TextInputControllerQt.h \
+    LayoutTestControllerQt.h \
+    jsobjects.h \
+    testplugin.h
+SOURCES = WorkQueue.cpp \
+    DumpRenderTree.cpp \
+    EventSenderQt.cpp \
+    TextInputControllerQt.cpp \
+    WorkQueueItemQt.cpp \
+    LayoutTestControllerQt.cpp \
+    main.cpp \
+    jsobjects.cpp \
+    testplugin.cpp
 
 unix:!mac {
     QMAKE_RPATHDIR = $$OUTPUT_DIR/lib $$QMAKE_RPATHDIR
diff --git a/WebKitTools/DumpRenderTree/qt/EventSenderQt.cpp b/WebKitTools/DumpRenderTree/qt/EventSenderQt.cpp
new file mode 100644
index 0000000..bbefed9
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/qt/EventSenderQt.cpp
@@ -0,0 +1,260 @@
+/*
+ * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
+ * Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "config.h"
+#include "EventSenderQt.h"
+
+//#include <QtDebug>
+EventSender::EventSender(QWebPage* parent)
+    : QObject(parent)
+{
+    m_page = parent;
+}
+
+void EventSender::mouseDown(int button)
+{
+    Qt::MouseButton mouseButton;
+    switch (button) {
+    case 0:
+        mouseButton = Qt::LeftButton;
+        break;
+    case 1:
+        mouseButton = Qt::MidButton;
+        break;
+    case 2:
+        mouseButton = Qt::RightButton;
+        break;
+    case 3:
+        // fast/events/mouse-click-events expects the 4th button to be treated as the middle button
+        mouseButton = Qt::MidButton;
+        break;
+    default:
+        mouseButton = Qt::LeftButton;
+        break;
+    }
+
+//     qDebug() << "EventSender::mouseDown" << frame;
+    QMouseEvent event(QEvent::MouseButtonPress, m_mousePos, mouseButton, mouseButton, Qt::NoModifier);
+    QApplication::sendEvent(m_page, &event);
+}
+
+void EventSender::mouseUp(int button)
+{
+    Qt::MouseButton mouseButton;
+    switch (button) {
+    case 0:
+        mouseButton = Qt::LeftButton;
+        break;
+    case 1:
+        mouseButton = Qt::MidButton;
+        break;
+    case 2:
+        mouseButton = Qt::RightButton;
+        break;
+    case 3:
+        // fast/events/mouse-click-events expects the 4th button to be treated as the middle button
+        mouseButton = Qt::MidButton;
+        break;
+    default:
+        mouseButton = Qt::LeftButton;
+        break;
+    }
+
+//     qDebug() << "EventSender::mouseUp" << frame;
+    QMouseEvent event(QEvent::MouseButtonRelease, m_mousePos, mouseButton, mouseButton, Qt::NoModifier);
+    QApplication::sendEvent(m_page, &event);
+}
+
+void EventSender::mouseMoveTo(int x, int y)
+{
+//     qDebug() << "EventSender::mouseMoveTo" << x << y;
+    m_mousePos = QPoint(x, y);
+    QMouseEvent event(QEvent::MouseMove, m_mousePos, Qt::NoButton, Qt::NoButton, Qt::NoModifier);
+    QApplication::sendEvent(m_page, &event);
+}
+
+void EventSender::leapForward(int ms)
+{
+    m_timeLeap += ms;
+    //qDebug() << "EventSender::leapForward" << ms;
+}
+
+void EventSender::keyDown(const QString& string, const QStringList& modifiers)
+{
+    QString s = string;
+    Qt::KeyboardModifiers modifs = 0;
+    for (int i = 0; i < modifiers.size(); ++i) {
+        const QString& m = modifiers.at(i);
+        if (m == "ctrlKey")
+            modifs |= Qt::ControlModifier;
+        else if (m == "shiftKey")
+            modifs |= Qt::ShiftModifier;
+        else if (m == "altKey")
+            modifs |= Qt::AltModifier;
+        else if (m == "metaKey")
+            modifs |= Qt::MetaModifier;
+    }
+    int code = 0;
+    if (string.length() == 1) {
+        code = string.unicode()->unicode();
+        //qDebug() << ">>>>>>>>> keyDown" << code << (char)code;
+        // map special keycodes used by the tests to something that works for Qt/X11
+        if (code == '\t') {
+            code = Qt::Key_Tab;
+            if (modifs == Qt::ShiftModifier)
+                code = Qt::Key_Backtab;
+            s = QString();
+        } else if (code == 127) {
+            code = Qt::Key_Backspace;
+            if (modifs == Qt::AltModifier)
+                modifs = Qt::ControlModifier;
+            s = QString();
+        } else if (code == 'o' && modifs == Qt::ControlModifier) {
+            s = QLatin1String("\n");
+            code = '\n';
+            modifs = 0;
+        } else if (code == 'y' && modifs == Qt::ControlModifier) {
+            s = QLatin1String("c");
+            code = 'c';
+        } else if (code == 'k' && modifs == Qt::ControlModifier) {
+            s = QLatin1String("x");
+            code = 'x';
+        } else if (code == 'a' && modifs == Qt::ControlModifier) {
+            s = QString();
+            code = Qt::Key_Home;
+            modifs = 0;
+        } else if (code == 0xf702) {
+            s = QString();
+            code = Qt::Key_Left;
+            if (modifs & Qt::MetaModifier) {
+                code = Qt::Key_Home;
+                modifs &= ~Qt::MetaModifier;
+            }
+        } else if (code == 0xf703) {
+            s = QString();
+            code = Qt::Key_Right;
+            if (modifs & Qt::MetaModifier) {
+                code = Qt::Key_End;
+                modifs &= ~Qt::MetaModifier;
+            }
+        } else if (code == 0xf700) {
+            s = QString();
+            code = Qt::Key_Up;
+            if (modifs & Qt::MetaModifier) {
+                code = Qt::Key_PageUp;
+                modifs &= ~Qt::MetaModifier;
+            }
+        } else if (code == 0xf701) {
+            s = QString();
+            code = Qt::Key_Down;
+            if (modifs & Qt::MetaModifier) {
+                code = Qt::Key_PageDown;
+                modifs &= ~Qt::MetaModifier;
+            }
+        } else if (code == 'a' && modifs == Qt::ControlModifier) {
+            s = QString();
+            code = Qt::Key_Home;
+            modifs = 0;
+        } else
+            code = string.unicode()->toUpper().unicode();
+    } else {
+        //qDebug() << ">>>>>>>>> keyDown" << string;
+
+        if (string.startsWith(QLatin1Char('F')) && string.count() <= 3) {
+            s = s.mid(1);
+            int functionKey = s.toInt();
+            Q_ASSERT(functionKey >= 1 && functionKey <= 35);
+            code = Qt::Key_F1 + (functionKey - 1);
+        // map special keycode strings used by the tests to something that works for Qt/X11
+        } else if (string == QLatin1String("leftArrow")) {
+            s = QString();
+            code = Qt::Key_Left;
+        } else if (string == QLatin1String("rightArrow")) {
+            s = QString();
+            code = Qt::Key_Right;
+        } else if (string == QLatin1String("upArrow")) {
+            s = QString();
+            code = Qt::Key_Up;
+        } else if (string == QLatin1String("downArrow")) {
+            s = QString();
+            code = Qt::Key_Down;
+        } else if (string == QLatin1String("pageUp")) {
+            s = QString();
+            code = Qt::Key_PageUp;
+        } else if (string == QLatin1String("pageDown")) {
+            s = QString();
+            code = Qt::Key_PageDown;
+        } else if (string == QLatin1String("home")) {
+            s = QString();
+            code = Qt::Key_Home;
+        } else if (string == QLatin1String("end")) {
+            s = QString();
+            code = Qt::Key_End;
+        } else if (string == QLatin1String("delete")) {
+            s = QString();
+            code = Qt::Key_Delete;
+        }
+    }
+    QKeyEvent event(QEvent::KeyPress, code, modifs, s);
+    QApplication::sendEvent(m_page, &event);
+    QKeyEvent event2(QEvent::KeyRelease, code, modifs, s);
+    QApplication::sendEvent(m_page, &event2);
+}
+
+void EventSender::contextClick()
+{
+    QMouseEvent event(QEvent::MouseButtonPress, m_mousePos, Qt::RightButton, Qt::RightButton, Qt::NoModifier);
+    QApplication::sendEvent(m_page, &event);
+    QMouseEvent event2(QEvent::MouseButtonRelease, m_mousePos, Qt::RightButton, Qt::RightButton, Qt::NoModifier);
+    QApplication::sendEvent(m_page, &event2);
+}
+
+void EventSender::scheduleAsynchronousClick()
+{
+    QMouseEvent* event = new QMouseEvent(QEvent::MouseButtonPress, m_mousePos, Qt::LeftButton, Qt::RightButton, Qt::NoModifier);
+    QApplication::postEvent(m_page, event);
+    QMouseEvent* event2 = new QMouseEvent(QEvent::MouseButtonRelease, m_mousePos, Qt::LeftButton, Qt::RightButton, Qt::NoModifier);
+    QApplication::postEvent(m_page, event2);
+}
+
+QWebFrame* EventSender::frameUnderMouse() const
+{
+    QWebFrame* frame = m_page->mainFrame();
+
+redo:
+    QList<QWebFrame*> children = frame->childFrames();
+    for (int i = 0; i < children.size(); ++i) {
+        if (children.at(i)->geometry().contains(m_mousePos)) {
+            frame = children.at(i);
+            goto redo;
+        }
+    }
+    if (frame->geometry().contains(m_mousePos))
+        return frame;
+    return 0;
+}
diff --git a/WebKitTools/DumpRenderTree/qt/EventSenderQt.h b/WebKitTools/DumpRenderTree/qt/EventSenderQt.h
new file mode 100644
index 0000000..fd74455
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/qt/EventSenderQt.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
+ * Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef EventSenderQt_h
+#define EventSenderQt_h
+
+#include <QApplication>
+#include <QEvent>
+#include <QMouseEvent>
+#include <QObject>
+#include <QPoint>
+#include <QString>
+#include <QStringList>
+
+#include <qwebpage.h>
+#include <qwebframe.h>
+
+class EventSender : public QObject {
+    Q_OBJECT
+public:
+    EventSender(QWebPage* parent);
+
+public slots:
+    void mouseDown(int button = 0);
+    void mouseUp(int button = 0);
+    void mouseMoveTo(int x, int y);
+    void leapForward(int ms);
+    void keyDown(const QString& string, const QStringList& modifiers = QStringList());
+    void clearKillRing() {}
+    void contextClick();
+    void scheduleAsynchronousClick();
+
+private:
+    QPoint m_mousePos;
+    QWebPage* m_page;
+    int m_timeLeap;
+    QWebFrame* frameUnderMouse() const;
+};
+#endif //  EventSenderQt_h
diff --git a/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp b/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp
new file mode 100644
index 0000000..3b12198
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp
@@ -0,0 +1,299 @@
+/*
+ * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
+ * Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "config.h"
+#include "LayoutTestControllerQt.h"
+
+#include "DumpRenderTree.h"
+#include "WorkQueue.h"
+#include "WorkQueueItem.h"
+
+extern void qt_dump_editing_callbacks(bool b);
+extern void qt_dump_resource_load_callbacks(bool b);
+extern void qt_drt_setJavaScriptProfilingEnabled(QWebFrame*, bool enabled);
+extern bool qt_drt_pauseAnimation(QWebFrame*, const QString& name, double time, const QString& elementId);
+extern bool qt_drt_pauseTransitionOfProperty(QWebFrame*, const QString& name, double time, const QString& elementId);
+extern int qt_drt_numberOfActiveAnimations(QWebFrame*);
+
+LayoutTestController::LayoutTestController(WebCore::DumpRenderTree* drt)
+    : QObject()
+    , m_drt(drt)
+{
+    reset();
+}
+
+void LayoutTestController::reset()
+{
+    m_isLoading = true;
+    m_textDump = false;
+    m_dumpBackForwardList = false;
+    m_dumpChildrenAsText = false;
+    m_canOpenWindows = false;
+    m_waitForDone = false;
+    m_dumpTitleChanges = false;
+    m_dumpDatabaseCallbacks = false;
+    m_dumpStatusCallbacks = false;
+    m_timeoutTimer.stop();
+    m_topLoadingFrame = 0;
+    m_waitForPolicy = false;
+    qt_dump_editing_callbacks(false);
+    qt_dump_resource_load_callbacks(false);
+}
+
+void LayoutTestController::processWork()
+{
+    // qDebug() << ">>>processWork";
+
+    // if we didn't start a new load, then we finished all the commands, so we're ready to dump state
+    if (!WorkQueue::shared()->processWork() && !shouldWaitUntilDone()) {
+        emit done();
+        m_isLoading = false;
+    }
+}
+
+// Called on loadFinished on mainFrame.
+void LayoutTestController::maybeDump(bool success)
+{
+    Q_ASSERT(sender() == m_topLoadingFrame);
+
+    // as the function is called on loadFinished, the test might
+    // already have dumped and thus no longer be active, thus
+    // bail out here.
+    if (!m_isLoading)
+        return;
+
+    m_topLoadingFrame = 0;
+    WorkQueue::shared()->setFrozen(true); // first complete load freezes the queue for the rest of this test
+
+    if (!shouldWaitUntilDone()) {
+        if (WorkQueue::shared()->count())
+            QTimer::singleShot(0, this, SLOT(processWork()));
+        else {
+            if (success)
+                emit done();
+            m_isLoading = false;
+        }
+    }
+}
+
+void LayoutTestController::waitUntilDone()
+{
+    //qDebug() << ">>>>waitForDone";
+    m_waitForDone = true;
+    m_timeoutTimer.start(11000, this);
+}
+
+void LayoutTestController::notifyDone()
+{
+    qDebug() << ">>>>notifyDone";
+    if (!m_timeoutTimer.isActive())
+        return;
+    m_timeoutTimer.stop();
+    emit done();
+    m_isLoading = false;
+    m_waitForDone = false;
+    m_waitForPolicy = false;
+}
+
+int LayoutTestController::windowCount()
+{
+    return m_drt->windowCount();
+}
+
+void LayoutTestController::clearBackForwardList()
+{
+    m_drt->webPage()->history()->clear();
+}
+
+void LayoutTestController::dumpEditingCallbacks()
+{
+    qDebug() << ">>>dumpEditingCallbacks";
+    qt_dump_editing_callbacks(true);
+}
+
+void LayoutTestController::dumpResourceLoadCallbacks()
+{
+    qt_dump_resource_load_callbacks(true);
+}
+
+void LayoutTestController::queueBackNavigation(int howFarBackward)
+{
+    //qDebug() << ">>>queueBackNavigation" << howFarBackward;
+    WorkQueue::shared()->queue(new BackItem(howFarBackward, m_drt->webPage()));
+}
+
+void LayoutTestController::queueForwardNavigation(int howFarForward)
+{
+    //qDebug() << ">>>queueForwardNavigation" << howFarForward;
+    WorkQueue::shared()->queue(new ForwardItem(howFarForward, m_drt->webPage()));
+}
+
+void LayoutTestController::queueLoad(const QString& url, const QString& target)
+{
+    //qDebug() << ">>>queueLoad" << url << target;
+    QUrl mainResourceUrl = m_drt->webPage()->mainFrame()->url();
+    QString absoluteUrl = mainResourceUrl.resolved(QUrl(url)).toEncoded();
+    WorkQueue::shared()->queue(new LoadItem(absoluteUrl, target, m_drt->webPage()));
+}
+
+void LayoutTestController::queueReload()
+{
+    //qDebug() << ">>>queueReload";
+    WorkQueue::shared()->queue(new ReloadItem(m_drt->webPage()));
+}
+
+void LayoutTestController::queueScript(const QString &url)
+{
+    //qDebug() << ">>>queueScript" << url;
+    WorkQueue::shared()->queue(new ScriptItem(url, m_drt->webPage()));
+}
+
+void LayoutTestController::provisionalLoad()
+{
+    QWebFrame* frame = qobject_cast<QWebFrame*>(sender());
+    if (!m_topLoadingFrame && m_isLoading)
+        m_topLoadingFrame = frame;
+}
+
+void LayoutTestController::timerEvent(QTimerEvent *ev)
+{
+    if (ev->timerId() == m_timeoutTimer.timerId()) {
+        //qDebug() << ">>>>>>>>>>>>> timeout";
+        notifyDone();
+    } else
+        QObject::timerEvent(ev);
+}
+
+QString LayoutTestController::encodeHostName(const QString& host)
+{
+    QString encoded = QString::fromLatin1(QUrl::toAce(host + QLatin1String(".no")));
+    encoded.truncate(encoded.length() - 3); // strip .no
+    return encoded;
+}
+
+QString LayoutTestController::decodeHostName(const QString& host)
+{
+    QString decoded = QUrl::fromAce(host.toLatin1() + QByteArray(".no"));
+    decoded.truncate(decoded.length() - 3);
+    return decoded;
+}
+
+void LayoutTestController::setJavaScriptProfilingEnabled(bool enable)
+{
+    m_topLoadingFrame->page()->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
+    qt_drt_setJavaScriptProfilingEnabled(m_topLoadingFrame, enable);
+}
+
+void LayoutTestController::setFixedContentsSize(int width, int height)
+{
+    m_topLoadingFrame->page()->setFixedContentsSize(QSize(width, height));
+}
+
+void LayoutTestController::setPrivateBrowsingEnabled(bool enable)
+{
+    m_drt->webPage()->settings()->setAttribute(QWebSettings::PrivateBrowsingEnabled, enable);
+}
+
+void LayoutTestController::setPopupBlockingEnabled(bool enable)
+{
+    m_drt->webPage()->settings()->setAttribute(QWebSettings::JavascriptCanOpenWindows, !enable);
+}
+
+bool LayoutTestController::pauseAnimationAtTimeOnElementWithId(const QString& animationName,
+                                                               double time,
+                                                               const QString& elementId)
+{
+    QWebFrame* frame = m_drt->webPage()->mainFrame();
+    Q_ASSERT(frame);
+    return qt_drt_pauseAnimation(frame, animationName, time, elementId);
+}
+
+bool LayoutTestController::pauseTransitionAtTimeOnElementWithId(const QString& propertyName,
+                                                                double time,
+                                                                const QString& elementId)
+{
+    QWebFrame* frame = m_drt->webPage()->mainFrame();
+    Q_ASSERT(frame);
+    return qt_drt_pauseTransitionOfProperty(frame, propertyName, time, elementId);
+}
+
+unsigned LayoutTestController::numberOfActiveAnimations() const
+{
+    QWebFrame* frame = m_drt->webPage()->mainFrame();
+    Q_ASSERT(frame);
+    return qt_drt_numberOfActiveAnimations(frame);
+}
+
+void LayoutTestController::disableImageLoading()
+{
+    // FIXME: Implement for testing fix for https://bugs.webkit.org/show_bug.cgi?id=27896
+    // Also need to make sure image loading is re-enabled for each new test.
+}
+
+void LayoutTestController::dispatchPendingLoadRequests()
+{
+    // FIXME: Implement for testing fix for 6727495
+}
+
+void LayoutTestController::setDatabaseQuota(int size)
+{
+    if (!m_topLoadingFrame)
+        return;
+    m_topLoadingFrame->securityOrigin().setDatabaseQuota(size);
+}
+
+void LayoutTestController::clearAllDatabases()
+{
+    QWebDatabase::removeAllDatabases();
+}
+
+void LayoutTestController::whiteListAccessFromOrigin(const QString& sourceOrigin, const QString& destinationProtocol, const QString& destinationHost, bool allowDestinationSubdomains)
+{
+    QWebSecurityOrigin::whiteListAccessFromOrigin(sourceOrigin, destinationProtocol, destinationHost, allowDestinationSubdomains);
+}
+
+void LayoutTestController::waitForPolicyDelegate()
+{
+    m_waitForPolicy = true;
+    waitUntilDone();
+}
+
+void LayoutTestController::overridePreference(const QString& name, const QVariant& value)
+{
+    QWebSettings* settings = m_topLoadingFrame->page()->settings();
+
+    if (name == "WebKitJavaScriptEnabled")
+        settings->setAttribute(QWebSettings::JavascriptEnabled, value.toBool());
+    else if (name == "WebKitTabToLinksPreferenceKey")
+        settings->setAttribute(QWebSettings::LinksIncludedInFocusChain, value.toBool());
+    else if (name == "WebKitOfflineWebApplicationCacheEnabled")
+        settings->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled, value.toBool());
+    else if (name == "WebKitDefaultFontSize")
+        settings->setFontSize(QWebSettings::DefaultFontSize, value.toInt());
+}
+
diff --git a/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.h b/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.h
new file mode 100644
index 0000000..0be5196
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.h
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
+ * Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef LayoutTestControllerQt_h
+#define LayoutTestControllerQt_h
+
+#include <QBasicTimer>
+#include <QObject>
+#include <QSize>
+#include <QString>
+#include <QtDebug>
+#include <QTimer>
+#include <QTimerEvent>
+#include <QVariant>
+
+#include <qwebdatabase.h>
+#include <qwebframe.h>
+#include <qwebhistory.h>
+#include <qwebpage.h>
+#include <qwebsecurityorigin.h>
+
+class QWebFrame;
+namespace WebCore {
+    class DumpRenderTree;
+}
+class LayoutTestController : public QObject {
+    Q_OBJECT
+public:
+    LayoutTestController(WebCore::DumpRenderTree* drt);
+
+    bool isLoading() const { return m_isLoading; }
+    void setLoading(bool loading) { m_isLoading = loading; }
+
+    bool shouldDumpAsText() const { return m_textDump; }
+    bool shouldDumpBackForwardList() const { return m_dumpBackForwardList; }
+    bool shouldDumpChildrenAsText() const { return m_dumpChildrenAsText; }
+    bool shouldDumpDatabaseCallbacks() const { return m_dumpDatabaseCallbacks; }
+    bool shouldDumpStatusCallbacks() const { return m_dumpStatusCallbacks; }
+    bool shouldWaitUntilDone() const { return m_waitForDone; }
+    bool canOpenWindows() const { return m_canOpenWindows; }
+    bool shouldDumpTitleChanges() const { return m_dumpTitleChanges; }
+    bool waitForPolicy() const { return m_waitForPolicy; }
+
+    void reset();
+
+protected:
+    void timerEvent(QTimerEvent*);
+
+signals:
+    void done();
+
+public slots:
+    void maybeDump(bool ok);
+    void dumpAsText() { m_textDump = true; }
+    void dumpChildFramesAsText() { m_dumpChildrenAsText = true; }
+    void dumpDatabaseCallbacks() { m_dumpDatabaseCallbacks = true; }
+    void dumpStatusCallbacks() { m_dumpStatusCallbacks = true; }
+    void setCanOpenWindows() { m_canOpenWindows = true; }
+    void waitUntilDone();
+    void notifyDone();
+    void dumpBackForwardList() { m_dumpBackForwardList = true; }
+    void dumpEditingCallbacks();
+    void dumpResourceLoadCallbacks();
+    void queueBackNavigation(int howFarBackward);
+    void queueForwardNavigation(int howFarForward);
+    void queueLoad(const QString& url, const QString& target = QString());
+    void queueReload();
+    void queueScript(const QString& url);
+    void provisionalLoad();
+    void setCloseRemainingWindowsWhenComplete(bool = false) {}
+    int windowCount();
+    void display() {}
+    void clearBackForwardList();
+    void dumpTitleChanges() { m_dumpTitleChanges = true; }
+    QString encodeHostName(const QString& host);
+    QString decodeHostName(const QString& host);
+    void dumpSelectionRect() const {}
+    void setJavaScriptProfilingEnabled(bool enable);
+    void setFixedContentsSize(int width, int height);
+    void setPrivateBrowsingEnabled(bool enable);
+    void setPopupBlockingEnabled(bool enable);
+
+    bool pauseAnimationAtTimeOnElementWithId(const QString& animationName, double time, const QString& elementId);
+    bool pauseTransitionAtTimeOnElementWithId(const QString& propertyName, double time, const QString& elementId);
+    unsigned numberOfActiveAnimations() const;
+
+    void whiteListAccessFromOrigin(const QString& sourceOrigin, const QString& destinationProtocol, const QString& destinationHost, bool allowDestinationSubdomains);
+
+    void dispatchPendingLoadRequests();
+    void disableImageLoading();
+
+    void setDatabaseQuota(int size);
+    void clearAllDatabases();
+
+    void waitForPolicyDelegate();
+    void overridePreference(const QString& name, const QVariant& value);
+
+private slots:
+    void processWork();
+
+private:
+    bool m_isLoading;
+    bool m_textDump;
+    bool m_dumpBackForwardList;
+    bool m_dumpChildrenAsText;
+    bool m_canOpenWindows;
+    bool m_waitForDone;
+    bool m_dumpTitleChanges;
+    bool m_dumpDatabaseCallbacks;
+    bool m_dumpStatusCallbacks;
+    bool m_waitForPolicy;
+
+    QBasicTimer m_timeoutTimer;
+    QWebFrame* m_topLoadingFrame;
+    WebCore::DumpRenderTree* m_drt;
+};
+
+#endif // LayoutTestControllerQt_h
diff --git a/WebKitTools/DumpRenderTree/qt/TextInputControllerQt.cpp b/WebKitTools/DumpRenderTree/qt/TextInputControllerQt.cpp
new file mode 100644
index 0000000..7b8f120
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/qt/TextInputControllerQt.cpp
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
+ * Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "config.h"
+#include "TextInputControllerQt.h"
+
+#include <QApplication>
+#include <QKeyEvent>
+
+TextInputController::TextInputController(QWebPage* parent)
+    : QObject(parent)
+{
+}
+
+void TextInputController::doCommand(const QString& command)
+{
+    Qt::KeyboardModifiers modifiers = Qt::NoModifier;
+    int keycode = 0;
+    if (command == "moveBackwardAndModifySelection:") {
+        modifiers |= Qt::ShiftModifier;
+        keycode = Qt::Key_Left;
+    } else if (command =="moveDown:") {
+        keycode = Qt::Key_Down;
+    } else if (command =="moveDownAndModifySelection:") {
+        modifiers |= Qt::ShiftModifier;
+        keycode = Qt::Key_Down;
+    } else if (command =="moveForward:") {
+        keycode = Qt::Key_Right;
+    } else if (command =="moveForwardAndModifySelection:") {
+        modifiers |= Qt::ShiftModifier;
+        keycode = Qt::Key_Right;
+    } else if (command =="moveLeft:") {
+        keycode = Qt::Key_Left;
+    } else if (command =="moveLeftAndModifySelection:") {
+        modifiers |= Qt::ShiftModifier;
+        keycode = Qt::Key_Left;
+    } else if (command =="moveRight:") {
+        keycode = Qt::Key_Right;
+    } else if (command =="moveRightAndModifySelection:") {
+        modifiers |= Qt::ShiftModifier;
+        keycode = Qt::Key_Right;
+    } else if (command =="moveToBeginningOfDocument:") {
+        modifiers |= Qt::ControlModifier;
+        keycode = Qt::Key_Home;
+    } else if (command =="moveToBeginningOfLine:") {
+        keycode = Qt::Key_Home;
+//     } else if (command =="moveToBeginningOfParagraph:") {
+    } else if (command =="moveToEndOfDocument:") {
+        modifiers |= Qt::ControlModifier;
+        keycode = Qt::Key_End;
+    } else if (command =="moveToEndOfLine:") {
+        keycode = Qt::Key_End;
+//     } else if (command =="moveToEndOfParagraph:") {
+    } else if (command =="moveUp:") {
+        keycode = Qt::Key_Up;
+    } else if (command =="moveUpAndModifySelection:") {
+        modifiers |= Qt::ShiftModifier;
+        keycode = Qt::Key_Up;
+    } else if (command =="moveWordBackward:") {
+        modifiers |= Qt::ControlModifier;
+        keycode = Qt::Key_Up;
+    } else if (command =="moveWordBackwardAndModifySelection:") {
+        modifiers |= Qt::ShiftModifier;
+        modifiers |= Qt::ControlModifier;
+        keycode = Qt::Key_Left;
+    } else if (command =="moveWordForward:") {
+        modifiers |= Qt::ControlModifier;
+        keycode = Qt::Key_Right;
+    } else if (command =="moveWordForwardAndModifySelection:") {
+        modifiers |= Qt::ControlModifier;
+        modifiers |= Qt::ShiftModifier;
+        keycode = Qt::Key_Right;
+    } else if (command =="moveWordLeft:") {
+        modifiers |= Qt::ControlModifier;
+        keycode = Qt::Key_Left;
+    } else if (command =="moveWordRight:") {
+        modifiers |= Qt::ControlModifier;
+        keycode = Qt::Key_Left;
+    } else if (command =="moveWordRightAndModifySelection:") {
+        modifiers |= Qt::ShiftModifier;
+        modifiers |= Qt::ControlModifier;
+        keycode = Qt::Key_Right;
+    } else if (command =="moveWordLeftAndModifySelection:") {
+        modifiers |= Qt::ShiftModifier;
+        modifiers |= Qt::ControlModifier;
+        keycode = Qt::Key_Left;
+    } else if (command =="pageDown:") {
+        keycode = Qt::Key_PageDown;
+    } else if (command =="pageUp:") {
+        keycode = Qt::Key_PageUp;
+    } else if (command == "deleteWordBackward:") {
+        modifiers |= Qt::ControlModifier;
+        keycode = Qt::Key_Backspace;
+    } else if (command == "deleteBackward:") {
+        keycode = Qt::Key_Backspace;
+    } else if (command == "deleteForward:") {
+        keycode = Qt::Key_Delete;
+    }
+
+    QKeyEvent event(QEvent::KeyPress, keycode, modifiers);
+    QApplication::sendEvent(parent(), &event);
+    QKeyEvent event2(QEvent::KeyRelease, keycode, modifiers);
+    QApplication::sendEvent(parent(), &event2);
+}
diff --git a/WebKitTools/DumpRenderTree/qt/TextInputControllerQt.h b/WebKitTools/DumpRenderTree/qt/TextInputControllerQt.h
new file mode 100644
index 0000000..7c7433e
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/qt/TextInputControllerQt.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
+ * Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef TextInputControllerQt_h
+#define TextInputControllerQt_h
+
+#include <QList>
+#include <QObject>
+#include <QString>
+#include "qwebpage.h"
+
+class TextInputController : public QObject {
+    Q_OBJECT
+public:
+    TextInputController(QWebPage* parent);
+
+public slots:
+    void doCommand(const QString& command);
+//     void setMarkedText(const QString& str, int from, int length);
+//     bool hasMarkedText();
+//     void unmarkText();
+//     QList<int> markedRange();
+//     QList<int> selectedRange();
+//     void validAttributesForMarkedText();
+//     void inserText(const QString&);
+//     void firstRectForCharacterRange();
+//     void characterIndexForPoint(int, int);
+//     void substringFromRange(int, int);
+//     void conversationIdentifier();
+};
+#endif // TextInputControllerQt_h
diff --git a/WebKitTools/DumpRenderTree/qt/WorkQueue.cpp b/WebKitTools/DumpRenderTree/qt/WorkQueue.cpp
index ae24e0d..f8448e4 100644
--- a/WebKitTools/DumpRenderTree/qt/WorkQueue.cpp
+++ b/WebKitTools/DumpRenderTree/qt/WorkQueue.cpp
@@ -30,8 +30,6 @@
 #include "config.h"
 #include "WorkQueue.h"
 
-#include "WorkQueueItem.h"
-
 static const unsigned queueLength = 1024;
 
 static WorkQueueItem* theQueue[queueLength];
diff --git a/WebKitTools/DumpRenderTree/qt/WorkQueue.h b/WebKitTools/DumpRenderTree/qt/WorkQueue.h
index 8adbfcd..902ba0d 100644
--- a/WebKitTools/DumpRenderTree/qt/WorkQueue.h
+++ b/WebKitTools/DumpRenderTree/qt/WorkQueue.h
@@ -30,7 +30,7 @@
 #ifndef WorkQueue_h
 #define WorkQueue_h
 
-class WorkQueueItem;
+#include "WorkQueueItem.h"
 
 class WorkQueue {
 public:
diff --git a/WebKitTools/DumpRenderTree/qt/WorkQueueItem.h b/WebKitTools/DumpRenderTree/qt/WorkQueueItem.h
index 0e10f62..9819ec0 100644
--- a/WebKitTools/DumpRenderTree/qt/WorkQueueItem.h
+++ b/WebKitTools/DumpRenderTree/qt/WorkQueueItem.h
@@ -30,8 +30,9 @@
 #ifndef WorkQueueItem_h
 #define WorkQueueItem_h
 
-#include <qstring.h>
-#include <qpointer.h>
+#include <QPointer>
+#include <QString>
+#include <qwebframe.h>
 #include <qwebpage.h>
 
 class WorkQueueItem {
diff --git a/WebKitTools/DumpRenderTree/qt/WorkQueueItemQt.cpp b/WebKitTools/DumpRenderTree/qt/WorkQueueItemQt.cpp
new file mode 100644
index 0000000..807a6a4
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/qt/WorkQueueItemQt.cpp
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
+ * Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "config.h"
+#include "WorkQueueItem.h"
+
+QWebFrame* findFrameNamed(const QString& frameName, QWebFrame* frame)
+{
+    if (frame->frameName() == frameName)
+        return frame;
+
+    foreach (QWebFrame* childFrame, frame->childFrames())
+        if (QWebFrame* f = findFrameNamed(frameName, childFrame))
+            return f;
+
+    return 0;
+}
+
+bool LoadItem::invoke() const
+{
+    //qDebug() << ">>>LoadItem::invoke";
+    Q_ASSERT(m_webPage);
+
+    QWebFrame* frame = 0;
+    const QString t = target();
+    if (t.isEmpty())
+        frame = m_webPage->mainFrame();
+    else
+        frame = findFrameNamed(t, m_webPage->mainFrame());
+
+    if (!frame)
+        return false;
+
+    frame->load(url());
+    return true;
+}
+
+bool ReloadItem::invoke() const
+{
+    //qDebug() << ">>>ReloadItem::invoke";
+    Q_ASSERT(m_webPage);
+    m_webPage->triggerAction(QWebPage::Reload);
+    return true;
+}
+
+bool ScriptItem::invoke() const
+{
+    //qDebug() << ">>>ScriptItem::invoke";
+    Q_ASSERT(m_webPage);
+    m_webPage->mainFrame()->evaluateJavaScript(script());
+    return true;
+}
+
+bool BackForwardItem::invoke() const
+{
+    //qDebug() << ">>>BackForwardItem::invoke";
+    Q_ASSERT(m_webPage);
+    if (!m_howFar)
+        return false;
+
+    if (m_howFar > 0) {
+        for (int i = 0; i != m_howFar; ++i)
+            m_webPage->triggerAction(QWebPage::Forward);
+    } else {
+        for (int i = 0; i != m_howFar; --i)
+            m_webPage->triggerAction(QWebPage::Back);
+    }
+    return true;
+}
diff --git a/WebKitTools/DumpRenderTree/qt/jsobjects.cpp b/WebKitTools/DumpRenderTree/qt/jsobjects.cpp
index b2d8528..e747aeb 100644
--- a/WebKitTools/DumpRenderTree/qt/jsobjects.cpp
+++ b/WebKitTools/DumpRenderTree/qt/jsobjects.cpp
@@ -27,672 +27,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include <jsobjects.h>
-
-#include "DumpRenderTree.h"
-#include "WorkQueue.h"
-#include "WorkQueueItem.h"
-
-#include <qapplication.h>
-#include <qevent.h>
-#include <qtimer.h>
-#include <qwebdatabase.h>
-#include <qwebframe.h>
-#include <qwebhistory.h>
 #include <qwebpage.h>
-#include <qwebsecurityorigin.h>
-
-extern void qt_dump_editing_callbacks(bool b);
-extern void qt_dump_resource_load_callbacks(bool b);
-extern void qt_drt_setJavaScriptProfilingEnabled(QWebFrame*, bool enabled);
-extern bool qt_drt_pauseAnimation(QWebFrame*, const QString &name, double time, const QString &elementId);
-extern bool qt_drt_pauseTransitionOfProperty(QWebFrame*, const QString &name, double time, const QString &elementId);
-extern int qt_drt_numberOfActiveAnimations(QWebFrame*);
-
-QWebFrame* findFrameNamed(const QString &frameName, QWebFrame* frame)
-{
-    if (frame->frameName() == frameName)
-        return frame;
-
-    foreach (QWebFrame *childFrame, frame->childFrames())
-        if (QWebFrame *f = findFrameNamed(frameName, childFrame))
-            return f;
-
-    return 0;
-}
-
-bool LoadItem::invoke() const
-{
-    //qDebug() << ">>>LoadItem::invoke";
-    Q_ASSERT(m_webPage);
-
-    QWebFrame* frame = 0;
-    const QString t = target();
-    if (t.isEmpty())
-        frame = m_webPage->mainFrame();
-    else
-        frame = findFrameNamed(t, m_webPage->mainFrame());
-
-    if (!frame)
-        return false;
-
-    frame->load(url());
-    return true;
-}
-
-bool ReloadItem::invoke() const
-{
-    //qDebug() << ">>>ReloadItem::invoke";
-    Q_ASSERT(m_webPage);
-    m_webPage->triggerAction(QWebPage::Reload);
-    return true;
-}
-
-bool ScriptItem::invoke() const
-{
-    //qDebug() << ">>>ScriptItem::invoke";
-    Q_ASSERT(m_webPage);
-    m_webPage->mainFrame()->evaluateJavaScript(script());
-    return true;
-}
-
-bool BackForwardItem::invoke() const
-{
-    //qDebug() << ">>>BackForwardItem::invoke";
-    Q_ASSERT(m_webPage);
-    if (!m_howFar)
-        return false;
-
-    if (m_howFar > 0) {
-        for (int i = 0; i != m_howFar; ++i)
-            m_webPage->triggerAction(QWebPage::Forward);
-    } else {
-        for (int i = 0; i != m_howFar; --i)
-            m_webPage->triggerAction(QWebPage::Back);
-    }
-    return true;
-}
-
-LayoutTestController::LayoutTestController(WebCore::DumpRenderTree *drt)
-    : QObject()
-    , m_drt(drt)
-{
-    reset();
-}
-
-void LayoutTestController::reset()
-{
-    m_isLoading = true;
-    m_textDump = false;
-    m_dumpBackForwardList = false;
-    m_dumpChildrenAsText = false;
-    m_canOpenWindows = false;
-    m_waitForDone = false;
-    m_dumpTitleChanges = false;
-    m_dumpDatabaseCallbacks = false;
-    m_dumpStatusCallbacks = false;
-    m_timeoutTimer.stop();
-    m_topLoadingFrame = 0;
-    m_waitForPolicy = false;
-    qt_dump_editing_callbacks(false);
-    qt_dump_resource_load_callbacks(false);
-}
-
-void LayoutTestController::processWork()
-{
-    qDebug() << ">>>processWork";
-
-    // if we didn't start a new load, then we finished all the commands, so we're ready to dump state
-    if (!WorkQueue::shared()->processWork() && !shouldWaitUntilDone()) {
-        emit done();
-        m_isLoading = false;
-    }
-}
-
-// Called on loadFinished on mainFrame.
-void LayoutTestController::maybeDump(bool success)
-{
-    Q_ASSERT(sender() == m_topLoadingFrame);
-
-    // as the function is called on loadFinished, the test might
-    // already have dumped and thus no longer be active, thus
-    // bail out here.
-    if (!m_isLoading)
-        return;
-
-    m_topLoadingFrame = 0;
-    WorkQueue::shared()->setFrozen(true); // first complete load freezes the queue for the rest of this test
-
-    if (!shouldWaitUntilDone()) {
-        if (WorkQueue::shared()->count())
-            QTimer::singleShot(0, this, SLOT(processWork()));
-        else {
-            if (success)
-                emit done();
-            m_isLoading = false;
-        }
-    }
-}
-
-void LayoutTestController::waitUntilDone()
-{
-    //qDebug() << ">>>>waitForDone";
-    m_waitForDone = true;
-    m_timeoutTimer.start(11000, this);
-}
-
-void LayoutTestController::notifyDone()
-{
-    //qDebug() << ">>>>notifyDone";
-    if (!m_timeoutTimer.isActive())
-        return;
-    m_timeoutTimer.stop();
-    emit done();
-    m_isLoading = false;
-    m_waitForDone = false;
-    m_waitForPolicy = false;
-}
-
-int LayoutTestController::windowCount()
-{
-    return m_drt->windowCount();
-}
-
-void LayoutTestController::clearBackForwardList()
-{
-    m_drt->webPage()->history()->clear();
-}
-
-void LayoutTestController::dumpEditingCallbacks()
-{
-    qDebug() << ">>>dumpEditingCallbacks";
-    qt_dump_editing_callbacks(true);
-}
-
-void LayoutTestController::dumpResourceLoadCallbacks()
-{
-    qt_dump_resource_load_callbacks(true);
-}
-
-void LayoutTestController::queueBackNavigation(int howFarBackward)
-{
-    //qDebug() << ">>>queueBackNavigation" << howFarBackward;
-    WorkQueue::shared()->queue(new BackItem(howFarBackward, m_drt->webPage()));
-}
-
-void LayoutTestController::queueForwardNavigation(int howFarForward)
-{
-    //qDebug() << ">>>queueForwardNavigation" << howFarForward;
-    WorkQueue::shared()->queue(new ForwardItem(howFarForward, m_drt->webPage()));
-}
-
-void LayoutTestController::queueLoad(const QString &url, const QString &target)
-{
-    //qDebug() << ">>>queueLoad" << url << target;
-    QUrl mainResourceUrl = m_drt->webPage()->mainFrame()->url();
-    QString absoluteUrl = mainResourceUrl.resolved(QUrl(url)).toEncoded();
-    WorkQueue::shared()->queue(new LoadItem(absoluteUrl, target, m_drt->webPage()));
-}
-
-void LayoutTestController::queueReload()
-{
-    //qDebug() << ">>>queueReload";
-    WorkQueue::shared()->queue(new ReloadItem(m_drt->webPage()));
-}
-
-void LayoutTestController::queueScript(const QString &url)
-{
-    //qDebug() << ">>>queueScript" << url;
-    WorkQueue::shared()->queue(new ScriptItem(url, m_drt->webPage()));
-}
-
-void LayoutTestController::provisionalLoad()
-{
-    QWebFrame* frame = qobject_cast<QWebFrame*>(sender());
-    if (!m_topLoadingFrame && m_isLoading)
-        m_topLoadingFrame = frame;
-}
-
-void LayoutTestController::timerEvent(QTimerEvent *ev)
-{
-    if (ev->timerId() == m_timeoutTimer.timerId()) {
-        qDebug() << ">>>>>>>>>>>>> timeout";
-        notifyDone();
-    } else
-        QObject::timerEvent(ev);
-}
-
-QString LayoutTestController::encodeHostName(const QString &host)
-{
-    QString encoded = QString::fromLatin1(QUrl::toAce(host + QLatin1String(".no")));
-    encoded.truncate(encoded.length() - 3); // strip .no
-    return encoded;
-}
-
-QString LayoutTestController::decodeHostName(const QString &host)
-{
-    QString decoded = QUrl::fromAce(host.toLatin1() + QByteArray(".no"));
-    decoded.truncate(decoded.length() - 3);
-    return decoded;
-}
-
-void LayoutTestController::setJavaScriptProfilingEnabled(bool enable)
-{
-    m_topLoadingFrame->page()->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
-    qt_drt_setJavaScriptProfilingEnabled(m_topLoadingFrame, enable);
-}
-
-void LayoutTestController::setFixedContentsSize(int width, int height)
-{
-    m_topLoadingFrame->page()->setFixedContentsSize(QSize(width, height));
-}
-
-void LayoutTestController::setPrivateBrowsingEnabled(bool enable)
-{
-    m_drt->webPage()->settings()->setAttribute(QWebSettings::PrivateBrowsingEnabled, enable);
-}
-
-void LayoutTestController::setPopupBlockingEnabled(bool enable)
-{
-    m_drt->webPage()->settings()->setAttribute(QWebSettings::JavascriptCanOpenWindows, !enable);
-}
-
-bool LayoutTestController::pauseAnimationAtTimeOnElementWithId(const QString &animationName,
-                                                               double time,
-                                                               const QString &elementId)
-{
-    QWebFrame* frame = m_drt->webPage()->mainFrame();
-    Q_ASSERT(frame);
-    return qt_drt_pauseAnimation(frame, animationName, time, elementId);
-}
-
-bool LayoutTestController::pauseTransitionAtTimeOnElementWithId(const QString &propertyName,
-                                                                double time,
-                                                                const QString &elementId)
-{
-    QWebFrame* frame = m_drt->webPage()->mainFrame();
-    Q_ASSERT(frame);
-    return qt_drt_pauseTransitionOfProperty(frame, propertyName, time, elementId);
-}
-
-unsigned LayoutTestController::numberOfActiveAnimations() const
-{
-    QWebFrame* frame = m_drt->webPage()->mainFrame();
-    Q_ASSERT(frame);
-    return qt_drt_numberOfActiveAnimations(frame);
-}
-
-void LayoutTestController::disableImageLoading()
-{
-    // FIXME: Implement for testing fix for https://bugs.webkit.org/show_bug.cgi?id=27896
-    // Also need to make sure image loading is re-enabled for each new test.
-}
-
-void LayoutTestController::dispatchPendingLoadRequests()
-{
-    // FIXME: Implement for testing fix for 6727495
-}
-
-void LayoutTestController::setDatabaseQuota(int size)
-{
-    if (!m_topLoadingFrame)
-        return;
-    m_topLoadingFrame->securityOrigin().setDatabaseQuota(size);
-}
-
-void LayoutTestController::clearAllDatabases()
-{
-    QWebDatabase::removeAllDatabases();
-}
-
-void LayoutTestController::whiteListAccessFromOrigin(const QString& sourceOrigin, const QString& destinationProtocol, const QString& destinationHost, bool allowDestinationSubdomains)
-{
-    QWebSecurityOrigin::whiteListAccessFromOrigin(sourceOrigin, destinationProtocol, destinationHost, allowDestinationSubdomains);
-}
-
-void LayoutTestController::waitForPolicyDelegate()
-{
-    m_waitForPolicy = true;
-    waitUntilDone();
-}
-
-void LayoutTestController::overridePreference(const QString& name, const QVariant& value)
-{
-    QWebSettings* settings = m_topLoadingFrame->page()->settings();
-
-    if (name == "WebKitJavaScriptEnabled")
-        settings->setAttribute(QWebSettings::JavascriptEnabled, value.toBool());
-    else if (name == "WebKitTabToLinksPreferenceKey")
-        settings->setAttribute(QWebSettings::LinksIncludedInFocusChain, value.toBool());
-    else if (name == "WebKitOfflineWebApplicationCacheEnabled")
-        settings->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled, value.toBool());
-    else if (name == "WebKitDefaultFontSize")
-        settings->setFontSize(QWebSettings::DefaultFontSize, value.toInt());
-}
-
-EventSender::EventSender(QWebPage *parent)
-    : QObject(parent)
-{
-    m_page = parent;
-}
-
-void EventSender::mouseDown(int button)
-{
-    Qt::MouseButton mouseButton;
-    switch (button) {
-    case 0:
-        mouseButton = Qt::LeftButton;
-        break;
-    case 1:
-        mouseButton = Qt::MidButton;
-        break;
-    case 2:
-        mouseButton = Qt::RightButton;
-        break;
-    case 3:
-        // fast/events/mouse-click-events expects the 4th button to be treated as the middle button
-        mouseButton = Qt::MidButton;
-        break;
-    default:
-        mouseButton = Qt::LeftButton;
-        break;
-    }
-
-//     qDebug() << "EventSender::mouseDown" << frame;
-    QMouseEvent event(QEvent::MouseButtonPress, m_mousePos, mouseButton, mouseButton, Qt::NoModifier);
-    QApplication::sendEvent(m_page, &event);
-}
-
-void EventSender::mouseUp(int button)
-{
-    Qt::MouseButton mouseButton;
-    switch (button) {
-    case 0:
-        mouseButton = Qt::LeftButton;
-        break;
-    case 1:
-        mouseButton = Qt::MidButton;
-        break;
-    case 2:
-        mouseButton = Qt::RightButton;
-        break;
-    case 3:
-        // fast/events/mouse-click-events expects the 4th button to be treated as the middle button
-        mouseButton = Qt::MidButton;
-        break;
-    default:
-        mouseButton = Qt::LeftButton;
-        break;
-    }
-
-//     qDebug() << "EventSender::mouseUp" << frame;
-    QMouseEvent event(QEvent::MouseButtonRelease, m_mousePos, mouseButton, mouseButton, Qt::NoModifier);
-    QApplication::sendEvent(m_page, &event);
-}
-
-void EventSender::mouseMoveTo(int x, int y)
-{
-//     qDebug() << "EventSender::mouseMoveTo" << x << y;
-    m_mousePos = QPoint(x, y);
-    QMouseEvent event(QEvent::MouseMove, m_mousePos, Qt::NoButton, Qt::NoButton, Qt::NoModifier);
-    QApplication::sendEvent(m_page, &event);
-}
-
-void EventSender::leapForward(int ms)
-{
-    m_timeLeap += ms;
-    qDebug() << "EventSender::leapForward" << ms;
-}
-
-void EventSender::keyDown(const QString &string, const QStringList &modifiers)
-{
-    QString s = string;
-    Qt::KeyboardModifiers modifs = 0;
-    for (int i = 0; i < modifiers.size(); ++i) {
-        const QString &m = modifiers.at(i);
-        if (m == "ctrlKey")
-            modifs |= Qt::ControlModifier;
-        else if (m == "shiftKey")
-            modifs |= Qt::ShiftModifier;
-        else if (m == "altKey")
-            modifs |= Qt::AltModifier;
-        else if (m == "metaKey")
-            modifs |= Qt::MetaModifier;
-    }
-    int code = 0;
-    if (string.length() == 1) {
-        code = string.unicode()->unicode();
-        qDebug() << ">>>>>>>>> keyDown" << code << (char)code;
-        // map special keycodes used by the tests to something that works for Qt/X11
-        if (code == '\t') {
-            code = Qt::Key_Tab;
-            if (modifs == Qt::ShiftModifier)
-                code = Qt::Key_Backtab;
-            s = QString();
-        } else if (code == 127) {
-            code = Qt::Key_Backspace;
-            if (modifs == Qt::AltModifier)
-                modifs = Qt::ControlModifier;
-            s = QString();
-        } else if (code == 'o' && modifs == Qt::ControlModifier) {
-            s = QLatin1String("\n");
-            code = '\n';
-            modifs = 0;
-        } else if (code == 'y' && modifs == Qt::ControlModifier) {
-            s = QLatin1String("c");
-            code = 'c';
-        } else if (code == 'k' && modifs == Qt::ControlModifier) {
-            s = QLatin1String("x");
-            code = 'x';
-        } else if (code == 'a' && modifs == Qt::ControlModifier) {
-            s = QString();
-            code = Qt::Key_Home;
-            modifs = 0;
-        } else if (code == 0xf702) {
-            s = QString();
-            code = Qt::Key_Left;
-            if (modifs & Qt::MetaModifier) {
-                code = Qt::Key_Home;
-                modifs &= ~Qt::MetaModifier;
-            }
-        } else if (code == 0xf703) {
-            s = QString();
-            code = Qt::Key_Right;
-            if (modifs & Qt::MetaModifier) {
-                code = Qt::Key_End;
-                modifs &= ~Qt::MetaModifier;
-            }
-        } else if (code == 0xf700) {
-            s = QString();
-            code = Qt::Key_Up;
-            if (modifs & Qt::MetaModifier) {
-                code = Qt::Key_PageUp;
-                modifs &= ~Qt::MetaModifier;
-            }
-        } else if (code == 0xf701) {
-            s = QString();
-            code = Qt::Key_Down;
-            if (modifs & Qt::MetaModifier) {
-                code = Qt::Key_PageDown;
-                modifs &= ~Qt::MetaModifier;
-            }
-        } else if (code == 'a' && modifs == Qt::ControlModifier) {
-            s = QString();
-            code = Qt::Key_Home;
-            modifs = 0;
-        } else
-            code = string.unicode()->toUpper().unicode();
-    } else {
-        qDebug() << ">>>>>>>>> keyDown" << string;
-
-        if (string.startsWith(QLatin1Char('F')) && string.count() <= 3) {
-            s = s.mid(1);
-            int functionKey = s.toInt();
-            Q_ASSERT(functionKey >= 1 && functionKey <= 35);
-            code = Qt::Key_F1 + (functionKey - 1);
-        // map special keycode strings used by the tests to something that works for Qt/X11
-        } else if (string == QLatin1String("leftArrow")) {
-            s = QString();
-            code = Qt::Key_Left;
-        } else if (string == QLatin1String("rightArrow")) {
-            s = QString();
-            code = Qt::Key_Right;
-        } else if (string == QLatin1String("upArrow")) {
-            s = QString();
-            code = Qt::Key_Up;
-        } else if (string == QLatin1String("downArrow")) {
-            s = QString();
-            code = Qt::Key_Down;
-        } else if (string == QLatin1String("pageUp")) {
-            s = QString();
-            code = Qt::Key_PageUp;
-        } else if (string == QLatin1String("pageDown")) {
-            s = QString();
-            code = Qt::Key_PageDown;
-        } else if (string == QLatin1String("home")) {
-            s = QString();
-            code = Qt::Key_Home;
-        } else if (string == QLatin1String("end")) {
-            s = QString();
-            code = Qt::Key_End;
-        } else if (string == QLatin1String("delete")) {
-            s = QString();
-            code = Qt::Key_Delete;
-        }
-    }
-    QKeyEvent event(QEvent::KeyPress, code, modifs, s);
-    QApplication::sendEvent(m_page, &event);
-    QKeyEvent event2(QEvent::KeyRelease, code, modifs, s);
-    QApplication::sendEvent(m_page, &event2);
-}
-
-void EventSender::contextClick()
-{
-    QMouseEvent event(QEvent::MouseButtonPress, m_mousePos, Qt::RightButton, Qt::RightButton, Qt::NoModifier);
-    QApplication::sendEvent(m_page, &event);
-    QMouseEvent event2(QEvent::MouseButtonRelease, m_mousePos, Qt::RightButton, Qt::RightButton, Qt::NoModifier);
-    QApplication::sendEvent(m_page, &event2);
-}
-
-void EventSender::scheduleAsynchronousClick()
-{
-    QMouseEvent* event = new QMouseEvent(QEvent::MouseButtonPress, m_mousePos, Qt::LeftButton, Qt::RightButton, Qt::NoModifier);
-    QApplication::postEvent(m_page, event);
-    QMouseEvent* event2 = new QMouseEvent(QEvent::MouseButtonRelease, m_mousePos, Qt::LeftButton, Qt::RightButton, Qt::NoModifier);
-    QApplication::postEvent(m_page, event2);
-}
-
-QWebFrame* EventSender::frameUnderMouse() const
-{
-    QWebFrame* frame = m_page->mainFrame();
-
-redo:
-    QList<QWebFrame*> children = frame->childFrames();
-    for (int i = 0; i < children.size(); ++i) {
-        if (children.at(i)->geometry().contains(m_mousePos)) {
-            frame = children.at(i);
-            goto redo;
-        }
-    }
-    if (frame->geometry().contains(m_mousePos))
-        return frame;
-    return 0;
-}
-
-
-TextInputController::TextInputController(QWebPage *parent)
-    : QObject(parent)
-{
-}
-
-void TextInputController::doCommand(const QString &command)
-{
-    Qt::KeyboardModifiers modifiers = Qt::NoModifier;
-    int keycode = 0;
-    if (command == "moveBackwardAndModifySelection:") {
-        modifiers |= Qt::ShiftModifier;
-        keycode = Qt::Key_Left;
-    } else if (command =="moveDown:") {
-        keycode = Qt::Key_Down;
-    } else if (command =="moveDownAndModifySelection:") {
-        modifiers |= Qt::ShiftModifier;
-        keycode = Qt::Key_Down;
-    } else if (command =="moveForward:") {
-        keycode = Qt::Key_Right;
-    } else if (command =="moveForwardAndModifySelection:") {
-        modifiers |= Qt::ShiftModifier;
-        keycode = Qt::Key_Right;
-    } else if (command =="moveLeft:") {
-        keycode = Qt::Key_Left;
-    } else if (command =="moveLeftAndModifySelection:") {
-        modifiers |= Qt::ShiftModifier;
-        keycode = Qt::Key_Left;
-    } else if (command =="moveRight:") {
-        keycode = Qt::Key_Right;
-    } else if (command =="moveRightAndModifySelection:") {
-        modifiers |= Qt::ShiftModifier;
-        keycode = Qt::Key_Right;
-    } else if (command =="moveToBeginningOfDocument:") {
-        modifiers |= Qt::ControlModifier;
-        keycode = Qt::Key_Home;
-    } else if (command =="moveToBeginningOfLine:") {
-        keycode = Qt::Key_Home;
-//     } else if (command =="moveToBeginningOfParagraph:") {
-    } else if (command =="moveToEndOfDocument:") {
-        modifiers |= Qt::ControlModifier;
-        keycode = Qt::Key_End;
-    } else if (command =="moveToEndOfLine:") {
-        keycode = Qt::Key_End;
-//     } else if (command =="moveToEndOfParagraph:") {
-    } else if (command =="moveUp:") {
-        keycode = Qt::Key_Up;
-    } else if (command =="moveUpAndModifySelection:") {
-        modifiers |= Qt::ShiftModifier;
-        keycode = Qt::Key_Up;
-    } else if (command =="moveWordBackward:") {
-        modifiers |= Qt::ControlModifier;
-        keycode = Qt::Key_Up;
-    } else if (command =="moveWordBackwardAndModifySelection:") {
-        modifiers |= Qt::ShiftModifier;
-        modifiers |= Qt::ControlModifier;
-        keycode = Qt::Key_Left;
-    } else if (command =="moveWordForward:") {
-        modifiers |= Qt::ControlModifier;
-        keycode = Qt::Key_Right;
-    } else if (command =="moveWordForwardAndModifySelection:") {
-        modifiers |= Qt::ControlModifier;
-        modifiers |= Qt::ShiftModifier;
-        keycode = Qt::Key_Right;
-    } else if (command =="moveWordLeft:") {
-        modifiers |= Qt::ControlModifier;
-        keycode = Qt::Key_Left;
-    } else if (command =="moveWordRight:") {
-        modifiers |= Qt::ControlModifier;
-        keycode = Qt::Key_Left;
-    } else if (command =="moveWordRightAndModifySelection:") {
-        modifiers |= Qt::ShiftModifier;
-        modifiers |= Qt::ControlModifier;
-        keycode = Qt::Key_Right;
-    } else if (command =="moveWordLeftAndModifySelection:") {
-        modifiers |= Qt::ShiftModifier;
-        modifiers |= Qt::ControlModifier;
-        keycode = Qt::Key_Left;
-    } else if (command =="pageDown:") {
-        keycode = Qt::Key_PageDown;
-    } else if (command =="pageUp:") {
-        keycode = Qt::Key_PageUp;
-    } else if (command == "deleteWordBackward:") {
-        modifiers |= Qt::ControlModifier;
-        keycode = Qt::Key_Backspace;
-    } else if (command == "deleteBackward:") {
-        keycode = Qt::Key_Backspace;
-    } else if (command == "deleteForward:") {
-        keycode = Qt::Key_Delete;
-    }
-    QKeyEvent event(QEvent::KeyPress, keycode, modifiers);
-    QApplication::sendEvent(parent(), &event);
-    QKeyEvent event2(QEvent::KeyRelease, keycode, modifiers);
-    QApplication::sendEvent(parent(), &event2);
-}
 
 GCController::GCController(QWebPage* parent)
     : QObject(parent)
diff --git a/WebKitTools/DumpRenderTree/qt/jsobjects.h b/WebKitTools/DumpRenderTree/qt/jsobjects.h
index c076bb9..3ee566b 100644
--- a/WebKitTools/DumpRenderTree/qt/jsobjects.h
+++ b/WebKitTools/DumpRenderTree/qt/jsobjects.h
@@ -29,156 +29,9 @@
 #ifndef JSOBJECTS_H
 #define JSOBJECTS_H
 
-#include <qobject.h>
-#include <qdebug.h>
-#include <qpoint.h>
-#include <qstringlist.h>
-#include <qsize.h>
-#include <qbasictimer.h>
-
-class QWebFrame;
-namespace WebCore {
-    class DumpRenderTree;
-}
-class LayoutTestController : public QObject
-{
-    Q_OBJECT
-public:
-    LayoutTestController(WebCore::DumpRenderTree *drt);
-
-    bool isLoading() const { return m_isLoading; }
-    void setLoading(bool loading) { m_isLoading = loading; }
-
-    bool shouldDumpAsText() const { return m_textDump; }
-    bool shouldDumpBackForwardList() const { return m_dumpBackForwardList; }
-    bool shouldDumpChildrenAsText() const { return m_dumpChildrenAsText; }
-    bool shouldDumpDatabaseCallbacks() const { return m_dumpDatabaseCallbacks; }
-    bool shouldDumpStatusCallbacks() const { return m_dumpStatusCallbacks; }
-    bool shouldWaitUntilDone() const { return m_waitForDone; }
-    bool canOpenWindows() const { return m_canOpenWindows; }
-    bool shouldDumpTitleChanges() const { return m_dumpTitleChanges; }
-    bool waitForPolicy() const { return m_waitForPolicy; }
-
-    void reset();
-
-protected:
-    void timerEvent(QTimerEvent *);
-
-signals:
-    void done();
-
-public slots:
-    void maybeDump(bool ok);
-    void dumpAsText() { m_textDump = true; }
-    void dumpChildFramesAsText() { m_dumpChildrenAsText = true; }
-    void dumpDatabaseCallbacks() { m_dumpDatabaseCallbacks = true; }
-    void dumpStatusCallbacks() { m_dumpStatusCallbacks = true; }
-    void setCanOpenWindows() { m_canOpenWindows = true; }
-    void waitUntilDone();
-    void notifyDone();
-    void dumpBackForwardList() { m_dumpBackForwardList = true; }
-    void dumpEditingCallbacks();
-    void dumpResourceLoadCallbacks();
-    void queueBackNavigation(int howFarBackward);
-    void queueForwardNavigation(int howFarForward);
-    void queueLoad(const QString &url, const QString &target = QString());
-    void queueReload();
-    void queueScript(const QString &url);
-    void provisionalLoad();
-    void setCloseRemainingWindowsWhenComplete(bool=false) {}
-    int windowCount();
-    void display() {}
-    void clearBackForwardList();
-    void dumpTitleChanges() { m_dumpTitleChanges = true; }
-    QString encodeHostName(const QString &host);
-    QString decodeHostName(const QString &host);
-    void dumpSelectionRect() const {}
-    void setJavaScriptProfilingEnabled(bool enable);
-    void setFixedContentsSize(int width, int height);
-    void setPrivateBrowsingEnabled(bool enable);
-    void setPopupBlockingEnabled(bool enable);
-
-    bool pauseAnimationAtTimeOnElementWithId(const QString &animationName, double time, const QString &elementId);
-    bool pauseTransitionAtTimeOnElementWithId(const QString &propertyName, double time, const QString &elementId);
-    unsigned numberOfActiveAnimations() const;
-
-    void whiteListAccessFromOrigin(const QString& sourceOrigin, const QString& destinationProtocol, const QString& destinationHost, bool allowDestinationSubdomains);
-
-    void dispatchPendingLoadRequests();
-    void disableImageLoading();
-
-    void setDatabaseQuota(int size);
-    void clearAllDatabases();
-
-    void waitForPolicyDelegate();
-    void overridePreference(const QString& name, const QVariant& value);
-
-private slots:
-    void processWork();
-
-private:
-    bool m_isLoading;
-    bool m_textDump;
-    bool m_dumpBackForwardList;
-    bool m_dumpChildrenAsText;
-    bool m_canOpenWindows;
-    bool m_waitForDone;
-    bool m_dumpTitleChanges;
-    bool m_dumpDatabaseCallbacks;
-    bool m_dumpStatusCallbacks;
-    bool m_waitForPolicy;
-
-    QBasicTimer m_timeoutTimer;
-    QWebFrame *m_topLoadingFrame;
-    WebCore::DumpRenderTree *m_drt;
-};
+#include <QObject>
 
 class QWebPage;
-class QWebFrame;
-
-class EventSender : public QObject
-{
-    Q_OBJECT
-public:
-    EventSender(QWebPage *parent);
-
-public slots:
-    void mouseDown(int button = 0);
-    void mouseUp(int button = 0);
-    void mouseMoveTo(int x, int y);
-    void leapForward(int ms);
-    void keyDown(const QString &string, const QStringList &modifiers=QStringList());
-    void clearKillRing() {}
-    void contextClick();
-    void scheduleAsynchronousClick();
-
-private:
-    QPoint m_mousePos;
-    QWebPage *m_page;
-    int m_timeLeap;
-    QWebFrame *frameUnderMouse() const;
-};
-
-class TextInputController : public QObject
-{
-    Q_OBJECT
-public:
-    TextInputController(QWebPage *parent);
-
-public slots:
-    void doCommand(const QString &command);
-//     void setMarkedText(const QString &str, int from, int length);
-//     bool hasMarkedText();
-//     void unmarkText();
-//     QList<int> markedRange();
-//     QList<int> selectedRange();
-//     void validAttributesForMarkedText();
-//     void inserText(const QString &);
-//     void firstRectForCharacterRange();
-//     void characterIndexForPoint(int, int);
-//     void substringFromRange(int, int);
-//     void conversationIdentifier();
-};
 
 class GCController : public QObject
 {

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list