diff --git a/examples/webengine/quicknanobrowser/quicknanobrowser.pro b/examples/webengine/quicknanobrowser/quicknanobrowser.pro
index 0ea2e60e219ce16cabbda922d6ea63c23026e1fc..b5a26cc683cfaf6ff0a11b152c08a33390bca8ab 100644
--- a/examples/webengine/quicknanobrowser/quicknanobrowser.pro
+++ b/examples/webengine/quicknanobrowser/quicknanobrowser.pro
@@ -1,8 +1,6 @@
 TEMPLATE = app
 TARGET = quicknanobrowser
 
-macx: CONFIG -= app_bundle
-
 HEADERS = quickwindow.h \
           util.h
 SOURCES = quickwindow.cpp \
diff --git a/examples/webengine/quicknanobrowser/quickwindow.qml b/examples/webengine/quicknanobrowser/quickwindow.qml
index 183e41f4f16352e0940dbb84d709f48af336087a..ea637e44b2588bf788b9717a5138bb68f2972b81 100644
--- a/examples/webengine/quicknanobrowser/quickwindow.qml
+++ b/examples/webengine/quicknanobrowser/quickwindow.qml
@@ -40,7 +40,6 @@
 
 import QtQuick 2.1
 import QtWebEngine 1.0
-import QtWebEngine.experimental 1.0
 import QtQuick.Controls 1.0
 import QtQuick.Controls.Styles 1.0
 import QtQuick.Layouts 1.0
@@ -52,27 +51,16 @@ ApplicationWindow {
     function load(url) { currentWebView.url = url }
     property Item currentWebView: tabs.currentIndex < tabs.count ? tabs.getTab(tabs.currentIndex).item : null
 
-    property bool isFullScreen: visibility == Window.FullScreen
-    onIsFullScreenChanged: {
-        // This is for the case where the system forces us to leave fullscreen.
-        if (currentWebView)
-            currentWebView.state = isFullScreen ? "FullScreen" : ""
-    }
-
     height: 600
     width: 800
     visible: true
     title: currentWebView && currentWebView.title
 
-    // Make sure the Qt.WindowFullscreenButtonHint is set on Mac.
-    Component.onCompleted: flags = flags | Qt.WindowFullscreenButtonHint
-
     // Create a styleItem to determine the platform.
     // When using style "mac", ToolButtons are not supposed to accept focus.
     StyleItem { id: styleItem }
     property bool platformIsMac: styleItem.style == "mac"
 
-
     Action {
         id: focus
         shortcut: "Ctrl+L"
@@ -106,14 +94,6 @@ ApplicationWindow {
         }
     }
 
-    Action {
-        shortcut: "Escape"
-        onTriggered: {
-            if (browserWindow.isFullScreen)
-                browserWindow.showNormal()
-        }
-    }
-
     toolBar: ToolBar {
         id: navigationBar
             RowLayout {
@@ -196,51 +176,7 @@ ApplicationWindow {
             id: tabComponent
             WebEngineView {
                 id: webEngineView
-                function adoptHandle(viewHandle) { experimental.adoptHandle(viewHandle) }
-
                 focus: true
-
-                states: [
-                    State {
-                        name: "FullScreen"
-                        PropertyChanges {
-                            target: tabs
-                            frameVisible: false
-                            tabsVisible: false
-                        }
-                        PropertyChanges {
-                            target: navigationBar
-                            visible: false
-                        }
-                    }
-                ]
-
-                experimental {
-                    isFullScreen: webEngineView.state == "FullScreen" && browserWindow.isFullScreen
-                    onFullScreenRequested: {
-                        if (fullScreen) {
-                            webEngineView.state = "FullScreen"
-                            browserWindow.showFullScreen();
-                        } else {
-                            webEngineView.state = ""
-                            browserWindow.showNormal();
-                        }
-                    }
-
-                    onNewViewRequested: {
-                        if (request.popup)
-                            print("Warning: Blocked a popup window.")
-                        else if (request.destination == WebEngineView.NewViewInTab) {
-                            var tab = tabs.createEmptyTab()
-                            request.openIn(tab.item)
-                        } else {
-                            var component = Qt.createComponent("quickwindow.qml")
-                            var window = component.createObject()
-                            request.openIn(window.currentWebView)
-                        }
-                    }
-                    extraContextMenuEntriesComponent: ContextMenuExtras {}
-                }
             }
         }
     }
diff --git a/examples/webengine/quicknanobrowser/resources.qrc b/examples/webengine/quicknanobrowser/resources.qrc
index 1befb4fd1c3d1952b21de87da993f516eb365b10..54920772660df359895ec98f6e405eeb4510ceea 100644
--- a/examples/webengine/quicknanobrowser/resources.qrc
+++ b/examples/webengine/quicknanobrowser/resources.qrc
@@ -1,7 +1,6 @@
 <!DOCTYPE RCC><RCC version="1.0">
     <qresource prefix="/">
         <file>quickwindow.qml</file>
-        <file>ContextMenuExtras.qml</file>
     </qresource>
     <qresource prefix="icons">
         <file alias="go-next.png">icons/go-next.png</file>
diff --git a/examples/webengine/quicknanobrowser/util.h b/examples/webengine/quicknanobrowser/util.h
index ea0ae8b2eeabc6eb289bb8c881b736e444547e84..bad41d6a75023b5a69f6336552ad60cad504266d 100644
--- a/examples/webengine/quicknanobrowser/util.h
+++ b/examples/webengine/quicknanobrowser/util.h
@@ -59,7 +59,7 @@ QUrl startupUrl()
     QUrl ret;
     QStringList args(qApp->arguments());
     args.takeFirst();
-    Q_FOREACH(const QString& arg, args) {
+    Q_FOREACH (const QString& arg, args) {
         if (arg.startsWith(QLatin1Char('-')))
              continue;
         ret = urlFromUserInput(arg);
diff --git a/examples/webengine/quicknanobrowser/ContextMenuExtras.qml b/tests/quicktestbrowser/ContextMenuExtras.qml
similarity index 100%
rename from examples/webengine/quicknanobrowser/ContextMenuExtras.qml
rename to tests/quicktestbrowser/ContextMenuExtras.qml
diff --git a/tests/quicktestbrowser/main.cpp b/tests/quicktestbrowser/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6c2f91de6dd9397800213f7e725429cc692bbc96
--- /dev/null
+++ b/tests/quicktestbrowser/main.cpp
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights.  These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "quickwindow.h"
+#ifndef QT_NO_WIDGETS
+#include <QtWidgets/QApplication>
+typedef QApplication Application;
+#else
+#include <QtGui/QGuiApplication>
+typedef QGuiApplication Application;
+#endif
+#include <QtQuick/private/qsgcontext_p.h>
+
+int main(int argc, char **argv)
+{
+    Application app(argc, argv);
+
+    // This is currently needed by all QtWebEngine application using the HW accelerated QQuickWebView.
+    // It enables sharing between the QOpenGLContext of all QQuickWindows of the application.
+    // We have to do so until we expose a public API for it, or chose enable it by default in Qt 5.3.0.
+    QOpenGLContext shareContext;
+    shareContext.create();
+    QSGContext::setSharedOpenGLContext(&shareContext);
+
+    ApplicationEngine appEngine;
+
+    return app.exec();
+}
diff --git a/tests/quicktestbrowser/quicktestbrowser.pro b/tests/quicktestbrowser/quicktestbrowser.pro
new file mode 100644
index 0000000000000000000000000000000000000000..83baa73f16a4f55fe28c47ce6c70474430d45da5
--- /dev/null
+++ b/tests/quicktestbrowser/quicktestbrowser.pro
@@ -0,0 +1,21 @@
+TEMPLATE = app
+TARGET = quicktestbrowser
+
+macx: CONFIG -= app_bundle
+
+HEADERS = quickwindow.h \
+          util.h
+SOURCES = quickwindow.cpp \
+          main.cpp
+
+OTHER_FILES += ContextMenuExtras.qml \
+               quickwindow.qml
+
+RESOURCES += resources.qrc
+
+QT += qml quick
+QT_PRIVATE += quick-private gui-private core-private
+
+qtHaveModule(widgets) {
+    QT += widgets # QApplication is required to get native styling with QtQuickControls
+}
diff --git a/tests/quicktestbrowser/quickwindow.cpp b/tests/quicktestbrowser/quickwindow.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ec7b6f94a9448478ba53b9a3ce0d751930e172a4
--- /dev/null
+++ b/tests/quicktestbrowser/quickwindow.cpp
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights.  These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "quickwindow.h"
+
+#include "util.h"
+
+#include <QFileInfo>
+#include <QObject>
+#include <QQmlContext>
+#include <QQmlEngine>
+#include <QUrl>
+
+class Utils : public QObject {
+    Q_OBJECT
+public:
+    Utils(QObject* parent = 0) : QObject(parent) { }
+    Q_INVOKABLE static QUrl fromUserInput(const QString& userInput) { return urlFromUserInput(userInput); }
+};
+
+#include "quickwindow.moc"
+
+ApplicationEngine::ApplicationEngine()
+{
+    rootContext()->setContextProperty("utils", new Utils(this));
+    load(QUrl("qrc:/quickwindow.qml"));
+    QMetaObject::invokeMethod(rootObjects().first(), "load", Q_ARG(QVariant, startupUrl()));
+}
diff --git a/tests/quicktestbrowser/quickwindow.h b/tests/quicktestbrowser/quickwindow.h
new file mode 100644
index 0000000000000000000000000000000000000000..ed25a23b8bac16d96d60f0e78671cd24360f4af0
--- /dev/null
+++ b/tests/quicktestbrowser/quickwindow.h
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights.  These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QUICKWINDOW_H
+#define QUICKWINDOW_H
+
+#include <QQmlApplicationEngine>
+
+class QWebEngineView;
+
+class ApplicationEngine : public QQmlApplicationEngine {
+    Q_OBJECT
+public:
+    ApplicationEngine();
+};
+
+#endif // QUICKWINDOW_H
diff --git a/tests/quicktestbrowser/quickwindow.qml b/tests/quicktestbrowser/quickwindow.qml
new file mode 100644
index 0000000000000000000000000000000000000000..183e41f4f16352e0940dbb84d709f48af336087a
--- /dev/null
+++ b/tests/quicktestbrowser/quickwindow.qml
@@ -0,0 +1,247 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * 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.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) 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 THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT
+** OWNER OR 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."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import QtWebEngine 1.0
+import QtWebEngine.experimental 1.0
+import QtQuick.Controls 1.0
+import QtQuick.Controls.Styles 1.0
+import QtQuick.Layouts 1.0
+import QtQuick.Window 2.1
+import QtQuick.Controls.Private 1.0
+
+ApplicationWindow {
+    id: browserWindow
+    function load(url) { currentWebView.url = url }
+    property Item currentWebView: tabs.currentIndex < tabs.count ? tabs.getTab(tabs.currentIndex).item : null
+
+    property bool isFullScreen: visibility == Window.FullScreen
+    onIsFullScreenChanged: {
+        // This is for the case where the system forces us to leave fullscreen.
+        if (currentWebView)
+            currentWebView.state = isFullScreen ? "FullScreen" : ""
+    }
+
+    height: 600
+    width: 800
+    visible: true
+    title: currentWebView && currentWebView.title
+
+    // Make sure the Qt.WindowFullscreenButtonHint is set on Mac.
+    Component.onCompleted: flags = flags | Qt.WindowFullscreenButtonHint
+
+    // Create a styleItem to determine the platform.
+    // When using style "mac", ToolButtons are not supposed to accept focus.
+    StyleItem { id: styleItem }
+    property bool platformIsMac: styleItem.style == "mac"
+
+
+    Action {
+        id: focus
+        shortcut: "Ctrl+L"
+        onTriggered: {
+            addressBar.forceActiveFocus();
+            addressBar.selectAll();
+        }
+    }
+    Action {
+        shortcut: "Ctrl+R"
+        onTriggered: {
+            if (currentWebView)
+                currentWebView.reload()
+        }
+    }
+    Action {
+        shortcut: "Ctrl+T"
+        onTriggered: {
+            tabs.createEmptyTab()
+            addressBar.forceActiveFocus();
+            addressBar.selectAll();
+        }
+    }
+    Action {
+        shortcut: "Ctrl+W"
+        onTriggered: {
+            if (tabs.count == 1)
+                browserWindow.close()
+            else
+                tabs.removeTab(tabs.currentIndex)
+        }
+    }
+
+    Action {
+        shortcut: "Escape"
+        onTriggered: {
+            if (browserWindow.isFullScreen)
+                browserWindow.showNormal()
+        }
+    }
+
+    toolBar: ToolBar {
+        id: navigationBar
+            RowLayout {
+                anchors.fill: parent;
+                ToolButton {
+                    id: backButton
+                    iconSource: "icons/go-previous.png"
+                    onClicked: currentWebView.goBack()
+                    enabled: currentWebView && currentWebView.canGoBack
+                    activeFocusOnTab: !browserWindow.platformIsMac
+                }
+                ToolButton {
+                    id: forwardButton
+                    iconSource: "icons/go-next.png"
+                    onClicked: currentWebView.goForward()
+                    enabled: currentWebView && currentWebView.canGoForward
+                    activeFocusOnTab: !browserWindow.platformIsMac
+                }
+                ToolButton {
+                    id: reloadButton
+                    iconSource: currentWebView && currentWebView.loading ? "icons/process-stop.png" : "icons/view-refresh.png"
+                    onClicked: currentWebView && currentWebView.loading ? currentWebView.stop() : currentWebView.reload()
+                    activeFocusOnTab: !browserWindow.platformIsMac
+                }
+                TextField {
+                    id: addressBar
+                    Image {
+                        anchors.verticalCenter: addressBar.verticalCenter;
+                        x: 5
+                        z: 2
+                        id: faviconImage
+                        width: 16; height: 16
+                        source: currentWebView && currentWebView.icon
+                    }
+                    style: TextFieldStyle {
+                        padding {
+                            left: 26;
+                        }
+                    }
+                    focus: true
+                    Layout.fillWidth: true
+                    text: currentWebView && currentWebView.url
+                    onAccepted: currentWebView.url = utils.fromUserInput(text)
+                }
+            }
+            ProgressBar {
+                id: progressBar
+                height: 3
+                anchors {
+                    left: parent.left
+                    top: parent.bottom
+                    right: parent.right
+                    leftMargin: -parent.leftMargin
+                    rightMargin: -parent.rightMargin
+                }
+                style: ProgressBarStyle {
+                    background: Item {}
+                }
+                z: -2;
+                minimumValue: 0
+                maximumValue: 100
+                value: (currentWebView && currentWebView.loadProgress < 100) ? currentWebView.loadProgress : 0
+            }
+    }
+
+    TabView {
+        id: tabs
+        function createEmptyTab() {
+            var tab = addTab("", tabComponent)
+            // We must do this first to make sure that tab.active gets set so that tab.item gets instantiated immediately.
+            tabs.currentIndex = tabs.count - 1
+            tab.title = Qt.binding(function() { return tab.item.title })
+            return tab
+        }
+
+        anchors.fill: parent
+        Component.onCompleted: createEmptyTab()
+
+        Component {
+            id: tabComponent
+            WebEngineView {
+                id: webEngineView
+                function adoptHandle(viewHandle) { experimental.adoptHandle(viewHandle) }
+
+                focus: true
+
+                states: [
+                    State {
+                        name: "FullScreen"
+                        PropertyChanges {
+                            target: tabs
+                            frameVisible: false
+                            tabsVisible: false
+                        }
+                        PropertyChanges {
+                            target: navigationBar
+                            visible: false
+                        }
+                    }
+                ]
+
+                experimental {
+                    isFullScreen: webEngineView.state == "FullScreen" && browserWindow.isFullScreen
+                    onFullScreenRequested: {
+                        if (fullScreen) {
+                            webEngineView.state = "FullScreen"
+                            browserWindow.showFullScreen();
+                        } else {
+                            webEngineView.state = ""
+                            browserWindow.showNormal();
+                        }
+                    }
+
+                    onNewViewRequested: {
+                        if (request.popup)
+                            print("Warning: Blocked a popup window.")
+                        else if (request.destination == WebEngineView.NewViewInTab) {
+                            var tab = tabs.createEmptyTab()
+                            request.openIn(tab.item)
+                        } else {
+                            var component = Qt.createComponent("quickwindow.qml")
+                            var window = component.createObject()
+                            request.openIn(window.currentWebView)
+                        }
+                    }
+                    extraContextMenuEntriesComponent: ContextMenuExtras {}
+                }
+            }
+        }
+    }
+}
diff --git a/tests/quicktestbrowser/resources.qrc b/tests/quicktestbrowser/resources.qrc
new file mode 100644
index 0000000000000000000000000000000000000000..166d2bc1e0dd05ef6e8449e8dea3231d6395f20c
--- /dev/null
+++ b/tests/quicktestbrowser/resources.qrc
@@ -0,0 +1,13 @@
+<!DOCTYPE RCC><RCC version="1.0">
+    <qresource prefix="/">
+        <file>quickwindow.qml</file>
+        <file>ContextMenuExtras.qml</file>
+    </qresource>
+    <qresource prefix="icons">
+        <!-- To the risk of this breaking more often, do not duplicate the resources since this application won't be deployed -->
+        <file alias="go-next.png">../../examples/webengine/quicknanobrowser/icons/go-next.png</file>
+        <file alias="go-previous.png">../../examples/webengine/quicknanobrowser/icons/go-previous.png</file>
+        <file alias="process-stop.png">../../examples/webengine/quicknanobrowser/icons/process-stop.png</file>
+        <file alias="view-refresh.png">../../examples/webengine/quicknanobrowser/icons/view-refresh.png</file>
+    </qresource>
+</RCC>
diff --git a/tests/quicktestbrowser/util.h b/tests/quicktestbrowser/util.h
new file mode 100644
index 0000000000000000000000000000000000000000..bad41d6a75023b5a69f6336552ad60cad504266d
--- /dev/null
+++ b/tests/quicktestbrowser/util.h
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights.  These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef UTIL_H
+#define UTIL_H
+
+#include <QtCore/QCoreApplication>
+#include <QtCore/QFileInfo>
+#include <QtCore/QUrl>
+#include <QtCore/QStringList>
+
+QUrl urlFromUserInput(const QString& userInput)
+{
+    QFileInfo fileInfo(userInput);
+    if (fileInfo.exists())
+        return QUrl(fileInfo.absoluteFilePath());
+    return QUrl::fromUserInput(userInput);
+}
+
+QUrl startupUrl()
+{
+    QUrl ret;
+    QStringList args(qApp->arguments());
+    args.takeFirst();
+    Q_FOREACH (const QString& arg, args) {
+        if (arg.startsWith(QLatin1Char('-')))
+             continue;
+        ret = urlFromUserInput(arg);
+        if (ret.isValid())
+            return ret;
+    }
+    return QUrl(QStringLiteral("http://qt-project.org/"));
+}
+
+
+#endif // UTIL_H
diff --git a/tests/tests.pro b/tests/tests.pro
index 42fe80815f8b2715e95d47d806f79d47b7ac8368..2144a15e3d311ce74bf50d485d1b06f2c8e1849e 100644
--- a/tests/tests.pro
+++ b/tests/tests.pro
@@ -1,3 +1,3 @@
 TEMPLATE = subdirs
-SUBDIRS +=  auto
+SUBDIRS +=  auto quicktestbrowser