diff --git a/examples/webenginewidgets/demobrowser/Info_mac.plist b/examples/webenginewidgets/demobrowser/Info_mac.plist
deleted file mode 100644
index 25443f7bef577cb3be8eb14fef708d2f758814e2..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/Info_mac.plist
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
-<plist version="1.0">
-<dict>
-        <key>NSPrincipalClass</key>
-        <string>NSApplication</string>
-        <key>CFBundleIconFile</key>
-        <string>@ICON@</string>
-        <key>CFBundlePackageType</key>
-        <string>APPL</string>
-        <key>CFBundleGetInfoString</key>
-        <string>Created by Qt/QMake</string>
-        <key>CFBundleIdentifier</key>
-        <string>com.trolltech.DemoBrowser</string>
-        <key>CFBundleSignature</key>
-        <string>ttxt</string>
-        <key>CFBundleExecutable</key>
-        <string>@EXECUTABLE@</string>
-        <key>CFBundleDocumentTypes</key>
-        <array>
-                <dict>
-                        <key>CFBundleTypeExtensions</key>
-                        <array>
-                                <string>html</string>
-                                <string>htm</string>
-                                <string>shtml</string>
-                                <string>xht</string>
-                                <string>xhtml</string>
-                        </array>
-                        <key>CFBundleTypeIconFile</key>
-                        <string>@ICON@</string>
-                        <key>CFBundleTypeName</key>
-                        <string>HTML Document</string>
-                        <key>CFBundleTypeOSTypes</key>
-                        <array>
-                                <string>HTML</string>
-                        </array>
-                        <key>CFBundleTypeRole</key>
-                        <string>Viewer</string>
-                </dict>
-        </array>
-        <key>NOTE</key>
-        <string>DemoBrowser by The Qt Company Ltd.</string>
-        <key>NSSupportsAutomaticGraphicsSwitching</key>
-        <string>YES</string>
-</dict>
-</plist>
diff --git a/examples/webenginewidgets/demobrowser/addbookmarkdialog.ui b/examples/webenginewidgets/demobrowser/addbookmarkdialog.ui
deleted file mode 100644
index 3460d7bb892599689ec78e7de9f2cbd5fa343989..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/addbookmarkdialog.ui
+++ /dev/null
@@ -1,98 +0,0 @@
-<ui version="4.0" >
- <class>AddBookmarkDialog</class>
- <widget class="QDialog" name="AddBookmarkDialog" >
-  <property name="geometry" >
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>240</width>
-    <height>168</height>
-   </rect>
-  </property>
-  <property name="windowTitle" >
-   <string>Add Bookmark</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout" >
-   <item>
-    <widget class="QLabel" name="label" >
-     <property name="text" >
-      <string>Type a name for the bookmark, and choose where to keep it.</string>
-     </property>
-     <property name="textFormat" >
-      <enum>Qt::PlainText</enum>
-     </property>
-     <property name="wordWrap" >
-      <bool>true</bool>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QLineEdit" name="name" />
-   </item>
-   <item>
-    <widget class="QComboBox" name="location" />
-   </item>
-   <item>
-    <spacer name="verticalSpacer" >
-     <property name="orientation" >
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0" >
-      <size>
-       <width>20</width>
-       <height>2</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox" >
-     <property name="orientation" >
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons" >
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-     <property name="centerButtons" >
-      <bool>false</bool>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>AddBookmarkDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel" >
-     <x>248</x>
-     <y>254</y>
-    </hint>
-    <hint type="destinationlabel" >
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>AddBookmarkDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel" >
-     <x>316</x>
-     <y>260</y>
-    </hint>
-    <hint type="destinationlabel" >
-     <x>286</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/examples/webenginewidgets/demobrowser/autosaver.cpp b/examples/webenginewidgets/demobrowser/autosaver.cpp
deleted file mode 100644
index 005e291bd6fe83b4dc4294c0226b48dda82022f3..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/autosaver.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "autosaver.h"
-
-#include <QtCore/QDir>
-#include <QtCore/QCoreApplication>
-#include <QtCore/QMetaObject>
-#include <QtDebug>
-
-#define AUTOSAVE_IN  1000 * 3  // seconds
-#define MAXWAIT      1000 * 15 // seconds
-
-AutoSaver::AutoSaver(QObject *parent) : QObject(parent)
-{
-    Q_ASSERT(parent);
-}
-
-AutoSaver::~AutoSaver()
-{
-    if (m_timer.isActive())
-        qWarning() << "AutoSaver: still active when destroyed, changes not saved.";
-}
-
-void AutoSaver::changeOccurred()
-{
-    if (m_firstChange.isNull())
-        m_firstChange.start();
-
-    if (m_firstChange.elapsed() > MAXWAIT) {
-        saveIfNeccessary();
-    } else {
-        m_timer.start(AUTOSAVE_IN, this);
-    }
-}
-
-void AutoSaver::timerEvent(QTimerEvent *event)
-{
-    if (event->timerId() == m_timer.timerId()) {
-        saveIfNeccessary();
-    } else {
-        QObject::timerEvent(event);
-    }
-}
-
-void AutoSaver::saveIfNeccessary()
-{
-    if (!m_timer.isActive())
-        return;
-    m_timer.stop();
-    m_firstChange = QTime();
-    if (!QMetaObject::invokeMethod(parent(), "save", Qt::DirectConnection)) {
-        qWarning() << "AutoSaver: error invoking slot save() on parent";
-    }
-}
diff --git a/examples/webenginewidgets/demobrowser/autosaver.h b/examples/webenginewidgets/demobrowser/autosaver.h
deleted file mode 100644
index be6eeeb4c5335db36789b68d4ce37b52ccd58340..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/autosaver.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef AUTOSAVER_H
-#define AUTOSAVER_H
-
-#include <QtCore/QObject>
-#include <QtCore/QBasicTimer>
-#include <QtCore/QTime>
-
-/*
-    This class will call the save() slot on the parent object when the parent changes.
-    It will wait several seconds after changed() to combining multiple changes and
-    prevent continuous writing to disk.
-  */
-class AutoSaver : public QObject {
-
-Q_OBJECT
-
-public:
-    AutoSaver(QObject *parent);
-    ~AutoSaver();
-    void saveIfNeccessary();
-
-public slots:
-    void changeOccurred();
-
-protected:
-    void timerEvent(QTimerEvent *event);
-
-private:
-    QBasicTimer m_timer;
-    QTime m_firstChange;
-
-};
-
-#endif // AUTOSAVER_H
diff --git a/examples/webenginewidgets/demobrowser/bookmarks.cpp b/examples/webenginewidgets/demobrowser/bookmarks.cpp
deleted file mode 100644
index 3d6d9c2940de45ce3768ce3c0dc992610c14e9f1..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/bookmarks.cpp
+++ /dev/null
@@ -1,993 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "bookmarks.h"
-
-#include "autosaver.h"
-#include "browserapplication.h"
-#include "history.h"
-#include "xbel.h"
-
-#include <QtCore/QBuffer>
-#include <QtCore/QFile>
-#include <QtCore/QMimeData>
-
-#include <QtGui/QDesktopServices>
-#include <QtGui/QDragEnterEvent>
-#include <QtGui/QIcon>
-#include <QtWidgets/QFileDialog>
-#include <QtWidgets/QHeaderView>
-#include <QtWidgets/QMessageBox>
-#include <QtWidgets/QToolButton>
-
-#include <QtCore/QDebug>
-
-#define BOOKMARKBAR "Bookmarks Bar"
-#define BOOKMARKMENU "Bookmarks Menu"
-
-BookmarksManager::BookmarksManager(QObject *parent)
-    : QObject(parent)
-    , m_loaded(false)
-    , m_saveTimer(new AutoSaver(this))
-    , m_bookmarkRootNode(0)
-    , m_bookmarkModel(0)
-{
-    connect(this, SIGNAL(entryAdded(BookmarkNode*)),
-            m_saveTimer, SLOT(changeOccurred()));
-    connect(this, SIGNAL(entryRemoved(BookmarkNode*,int,BookmarkNode*)),
-            m_saveTimer, SLOT(changeOccurred()));
-    connect(this, SIGNAL(entryChanged(BookmarkNode*)),
-            m_saveTimer, SLOT(changeOccurred()));
-}
-
-BookmarksManager::~BookmarksManager()
-{
-    m_saveTimer->saveIfNeccessary();
-}
-
-void BookmarksManager::changeExpanded()
-{
-    m_saveTimer->changeOccurred();
-}
-
-void BookmarksManager::load()
-{
-    if (m_loaded)
-        return;
-    m_loaded = true;
-
-    QString dir = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
-    QString bookmarkFile = dir + QLatin1String("/bookmarks.xbel");
-    if (!QFile::exists(bookmarkFile))
-        bookmarkFile = QLatin1String(":defaultbookmarks.xbel");
-
-    XbelReader reader;
-    m_bookmarkRootNode = reader.read(bookmarkFile);
-    if (reader.error() != QXmlStreamReader::NoError) {
-        QMessageBox::warning(0, QLatin1String("Loading Bookmark"),
-            tr("Error when loading bookmarks on line %1, column %2:\n"
-               "%3").arg(reader.lineNumber()).arg(reader.columnNumber()).arg(reader.errorString()));
-    }
-
-    BookmarkNode *toolbar = 0;
-    BookmarkNode *menu = 0;
-    QList<BookmarkNode*> others;
-    for (int i = m_bookmarkRootNode->children().count() - 1; i >= 0; --i) {
-        BookmarkNode *node = m_bookmarkRootNode->children().at(i);
-        if (node->type() == BookmarkNode::Folder) {
-            // Automatically convert
-            if (node->title == tr("Toolbar Bookmarks") && !toolbar) {
-                node->title = tr(BOOKMARKBAR);
-            }
-            if (node->title == tr(BOOKMARKBAR) && !toolbar) {
-                toolbar = node;
-            }
-
-            // Automatically convert
-            if (node->title == tr("Menu") && !menu) {
-                node->title = tr(BOOKMARKMENU);
-            }
-            if (node->title == tr(BOOKMARKMENU) && !menu) {
-                menu = node;
-            }
-        } else {
-            others.append(node);
-        }
-        m_bookmarkRootNode->remove(node);
-    }
-    Q_ASSERT(m_bookmarkRootNode->children().count() == 0);
-    if (!toolbar) {
-        toolbar = new BookmarkNode(BookmarkNode::Folder, m_bookmarkRootNode);
-        toolbar->title = tr(BOOKMARKBAR);
-    } else {
-        m_bookmarkRootNode->add(toolbar);
-    }
-
-    if (!menu) {
-        menu = new BookmarkNode(BookmarkNode::Folder, m_bookmarkRootNode);
-        menu->title = tr(BOOKMARKMENU);
-    } else {
-        m_bookmarkRootNode->add(menu);
-    }
-
-    for (int i = 0; i < others.count(); ++i)
-        menu->add(others.at(i));
-}
-
-void BookmarksManager::save() const
-{
-    if (!m_loaded)
-        return;
-
-    XbelWriter writer;
-    QString dir = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
-    QString bookmarkFile = dir + QLatin1String("/bookmarks.xbel");
-    if (!writer.write(bookmarkFile, m_bookmarkRootNode))
-        qWarning() << "BookmarkManager: error saving to" << bookmarkFile;
-}
-
-void BookmarksManager::addBookmark(BookmarkNode *parent, BookmarkNode *node, int row)
-{
-    if (!m_loaded)
-        return;
-    Q_ASSERT(parent);
-    InsertBookmarksCommand *command = new InsertBookmarksCommand(this, parent, node, row);
-    m_commands.push(command);
-}
-
-void BookmarksManager::removeBookmark(BookmarkNode *node)
-{
-    if (!m_loaded)
-        return;
-
-    Q_ASSERT(node);
-    BookmarkNode *parent = node->parent();
-    int row = parent->children().indexOf(node);
-    RemoveBookmarksCommand *command = new RemoveBookmarksCommand(this, parent, row);
-    m_commands.push(command);
-}
-
-void BookmarksManager::setTitle(BookmarkNode *node, const QString &newTitle)
-{
-    if (!m_loaded)
-        return;
-
-    Q_ASSERT(node);
-    ChangeBookmarkCommand *command = new ChangeBookmarkCommand(this, node, newTitle, true);
-    m_commands.push(command);
-}
-
-void BookmarksManager::setUrl(BookmarkNode *node, const QString &newUrl)
-{
-    if (!m_loaded)
-        return;
-
-    Q_ASSERT(node);
-    ChangeBookmarkCommand *command = new ChangeBookmarkCommand(this, node, newUrl, false);
-    m_commands.push(command);
-}
-
-BookmarkNode *BookmarksManager::bookmarks()
-{
-    if (!m_loaded)
-        load();
-    return m_bookmarkRootNode;
-}
-
-BookmarkNode *BookmarksManager::menu()
-{
-    if (!m_loaded)
-        load();
-
-    for (int i = m_bookmarkRootNode->children().count() - 1; i >= 0; --i) {
-        BookmarkNode *node = m_bookmarkRootNode->children().at(i);
-        if (node->title == tr(BOOKMARKMENU))
-            return node;
-    }
-    Q_ASSERT(false);
-    return 0;
-}
-
-BookmarkNode *BookmarksManager::toolbar()
-{
-    if (!m_loaded)
-        load();
-
-    for (int i = m_bookmarkRootNode->children().count() - 1; i >= 0; --i) {
-        BookmarkNode *node = m_bookmarkRootNode->children().at(i);
-        if (node->title == tr(BOOKMARKBAR))
-            return node;
-    }
-    Q_ASSERT(false);
-    return 0;
-}
-
-BookmarksModel *BookmarksManager::bookmarksModel()
-{
-    if (!m_bookmarkModel)
-        m_bookmarkModel = new BookmarksModel(this, this);
-    return m_bookmarkModel;
-}
-
-void BookmarksManager::importBookmarks()
-{
-    QString fileName = QFileDialog::getOpenFileName(0, tr("Open File"),
-                                                     QString(),
-                                                     tr("XBEL (*.xbel *.xml)"));
-    if (fileName.isEmpty())
-        return;
-
-    XbelReader reader;
-    BookmarkNode *importRootNode = reader.read(fileName);
-    if (reader.error() != QXmlStreamReader::NoError) {
-        QMessageBox::warning(0, QLatin1String("Loading Bookmark"),
-            tr("Error when loading bookmarks on line %1, column %2:\n"
-               "%3").arg(reader.lineNumber()).arg(reader.columnNumber()).arg(reader.errorString()));
-    }
-
-    importRootNode->setType(BookmarkNode::Folder);
-    importRootNode->title = (tr("Imported %1").arg(QDate::currentDate().toString(Qt::SystemLocaleShortDate)));
-    addBookmark(menu(), importRootNode);
-}
-
-void BookmarksManager::exportBookmarks()
-{
-    QString fileName = QFileDialog::getSaveFileName(0, tr("Save File"),
-                                tr("%1 Bookmarks.xbel").arg(QCoreApplication::applicationName()),
-                                tr("XBEL (*.xbel *.xml)"));
-    if (fileName.isEmpty())
-        return;
-
-    XbelWriter writer;
-    if (!writer.write(fileName, m_bookmarkRootNode))
-        QMessageBox::critical(0, tr("Export error"), tr("error saving bookmarks"));
-}
-
-RemoveBookmarksCommand::RemoveBookmarksCommand(BookmarksManager *m_bookmarkManagaer, BookmarkNode *parent, int row)
-    : QUndoCommand(BookmarksManager::tr("Remove Bookmark"))
-    , m_row(row)
-    , m_bookmarkManagaer(m_bookmarkManagaer)
-    , m_node(parent->children().value(row))
-    , m_parent(parent)
-    , m_done(false)
-{
-}
-
-RemoveBookmarksCommand::~RemoveBookmarksCommand()
-{
-    if (m_done && !m_node->parent()) {
-        delete m_node;
-    }
-}
-
-void RemoveBookmarksCommand::undo()
-{
-    m_parent->add(m_node, m_row);
-    emit m_bookmarkManagaer->entryAdded(m_node);
-    m_done = false;
-}
-
-void RemoveBookmarksCommand::redo()
-{
-    m_parent->remove(m_node);
-    emit m_bookmarkManagaer->entryRemoved(m_parent, m_row, m_node);
-    m_done = true;
-}
-
-InsertBookmarksCommand::InsertBookmarksCommand(BookmarksManager *m_bookmarkManagaer,
-                BookmarkNode *parent, BookmarkNode *node, int row)
-    : RemoveBookmarksCommand(m_bookmarkManagaer, parent, row)
-{
-    setText(BookmarksManager::tr("Insert Bookmark"));
-    m_node = node;
-}
-
-ChangeBookmarkCommand::ChangeBookmarkCommand(BookmarksManager *m_bookmarkManagaer, BookmarkNode *node,
-                        const QString &newValue, bool title)
-    : QUndoCommand()
-    , m_bookmarkManagaer(m_bookmarkManagaer)
-    , m_title(title)
-    , m_newValue(newValue)
-    , m_node(node)
-{
-    if (m_title) {
-        m_oldValue = m_node->title;
-        setText(BookmarksManager::tr("Name Change"));
-    } else {
-        m_oldValue = m_node->url;
-        setText(BookmarksManager::tr("Address Change"));
-    }
-}
-
-void ChangeBookmarkCommand::undo()
-{
-    if (m_title)
-        m_node->title = m_oldValue;
-    else
-        m_node->url = m_oldValue;
-    emit m_bookmarkManagaer->entryChanged(m_node);
-}
-
-void ChangeBookmarkCommand::redo()
-{
-    if (m_title)
-        m_node->title = m_newValue;
-    else
-        m_node->url = m_newValue;
-    emit m_bookmarkManagaer->entryChanged(m_node);
-}
-
-BookmarksModel::BookmarksModel(BookmarksManager *bookmarkManager, QObject *parent)
-    : QAbstractItemModel(parent)
-    , m_endMacro(false)
-    , m_bookmarksManager(bookmarkManager)
-{
-    connect(bookmarkManager, SIGNAL(entryAdded(BookmarkNode*)),
-            this, SLOT(entryAdded(BookmarkNode*)));
-    connect(bookmarkManager, SIGNAL(entryRemoved(BookmarkNode*,int,BookmarkNode*)),
-            this, SLOT(entryRemoved(BookmarkNode*,int,BookmarkNode*)));
-    connect(bookmarkManager, SIGNAL(entryChanged(BookmarkNode*)),
-            this, SLOT(entryChanged(BookmarkNode*)));
-}
-
-QModelIndex BookmarksModel::index(BookmarkNode *node) const
-{
-    BookmarkNode *parent = node->parent();
-    if (!parent)
-        return QModelIndex();
-    return createIndex(parent->children().indexOf(node), 0, node);
-}
-
-void BookmarksModel::entryAdded(BookmarkNode *item)
-{
-    Q_ASSERT(item && item->parent());
-    int row = item->parent()->children().indexOf(item);
-    BookmarkNode *parent = item->parent();
-    // item was already added so remove beore beginInsertRows is called
-    parent->remove(item);
-    beginInsertRows(index(parent), row, row);
-    parent->add(item, row);
-    endInsertRows();
-}
-
-void BookmarksModel::entryRemoved(BookmarkNode *parent, int row, BookmarkNode *item)
-{
-    // item was already removed, re-add so beginRemoveRows works
-    parent->add(item, row);
-    beginRemoveRows(index(parent), row, row);
-    parent->remove(item);
-    endRemoveRows();
-}
-
-void BookmarksModel::entryChanged(BookmarkNode *item)
-{
-    QModelIndex idx = index(item);
-    emit dataChanged(idx, idx);
-}
-
-bool BookmarksModel::removeRows(int row, int count, const QModelIndex &parent)
-{
-    if (row < 0 || count <= 0 || row + count > rowCount(parent))
-        return false;
-
-    BookmarkNode *bookmarkNode = node(parent);
-    for (int i = row + count - 1; i >= row; --i) {
-        BookmarkNode *node = bookmarkNode->children().at(i);
-        if (node == m_bookmarksManager->menu()
-            || node == m_bookmarksManager->toolbar())
-            continue;
-
-        m_bookmarksManager->removeBookmark(node);
-    }
-    if (m_endMacro) {
-        m_bookmarksManager->undoRedoStack()->endMacro();
-        m_endMacro = false;
-    }
-    return true;
-}
-
-QVariant BookmarksModel::headerData(int section, Qt::Orientation orientation, int role) const
-{
-    if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
-        switch (section) {
-            case 0: return tr("Title");
-            case 1: return tr("Address");
-        }
-    }
-    return QAbstractItemModel::headerData(section, orientation, role);
-}
-
-QVariant BookmarksModel::data(const QModelIndex &index, int role) const
-{
-    if (!index.isValid() || index.model() != this)
-        return QVariant();
-
-    const BookmarkNode *bookmarkNode = node(index);
-    switch (role) {
-    case Qt::EditRole:
-    case Qt::DisplayRole:
-        if (bookmarkNode->type() == BookmarkNode::Separator) {
-            switch (index.column()) {
-            case 0: return QString(50, 0xB7);
-            case 1: return QString();
-            }
-        }
-
-        switch (index.column()) {
-        case 0: return bookmarkNode->title;
-        case 1: return bookmarkNode->url;
-        }
-        break;
-    case BookmarksModel::UrlRole:
-        return QUrl(bookmarkNode->url);
-        break;
-    case BookmarksModel::UrlStringRole:
-        return bookmarkNode->url;
-        break;
-    case BookmarksModel::TypeRole:
-        return bookmarkNode->type();
-        break;
-    case BookmarksModel::SeparatorRole:
-        return (bookmarkNode->type() == BookmarkNode::Separator);
-        break;
-    case Qt::DecorationRole:
-        if (index.column() == 0) {
-            if (bookmarkNode->type() == BookmarkNode::Folder)
-                return QApplication::style()->standardIcon(QStyle::SP_DirIcon);
-            return BrowserApplication::instance()->icon(bookmarkNode->url);
-        }
-    }
-
-    return QVariant();
-}
-
-int BookmarksModel::columnCount(const QModelIndex &parent) const
-{
-    return (parent.column() > 0) ? 0 : 2;
-}
-
-int BookmarksModel::rowCount(const QModelIndex &parent) const
-{
-    if (parent.column() > 0)
-        return 0;
-
-    if (!parent.isValid())
-        return m_bookmarksManager->bookmarks()->children().count();
-
-    const BookmarkNode *item = static_cast<BookmarkNode*>(parent.internalPointer());
-    return item->children().count();
-}
-
-QModelIndex BookmarksModel::index(int row, int column, const QModelIndex &parent) const
-{
-    if (row < 0 || column < 0 || row >= rowCount(parent) || column >= columnCount(parent))
-        return QModelIndex();
-
-    // get the parent node
-    BookmarkNode *parentNode = node(parent);
-    return createIndex(row, column, parentNode->children().at(row));
-}
-
-QModelIndex BookmarksModel::parent(const QModelIndex &index) const
-{
-    if (!index.isValid())
-        return QModelIndex();
-
-    BookmarkNode *itemNode = node(index);
-    BookmarkNode *parentNode = (itemNode ? itemNode->parent() : 0);
-    if (!parentNode || parentNode == m_bookmarksManager->bookmarks())
-        return QModelIndex();
-
-    // get the parent's row
-    BookmarkNode *grandParentNode = parentNode->parent();
-    int parentRow = grandParentNode->children().indexOf(parentNode);
-    Q_ASSERT(parentRow >= 0);
-    return createIndex(parentRow, 0, parentNode);
-}
-
-bool BookmarksModel::hasChildren(const QModelIndex &parent) const
-{
-    if (!parent.isValid())
-        return true;
-    const BookmarkNode *parentNode = node(parent);
-    return (parentNode->type() == BookmarkNode::Folder);
-}
-
-Qt::ItemFlags BookmarksModel::flags(const QModelIndex &index) const
-{
-    if (!index.isValid())
-        return Qt::NoItemFlags;
-
-    Qt::ItemFlags flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled;
-
-    BookmarkNode *bookmarkNode = node(index);
-
-    if (bookmarkNode != m_bookmarksManager->menu()
-        && bookmarkNode != m_bookmarksManager->toolbar()) {
-        flags |= Qt::ItemIsDragEnabled;
-        if (bookmarkNode->type() != BookmarkNode::Separator)
-            flags |= Qt::ItemIsEditable;
-    }
-    if (hasChildren(index))
-        flags |= Qt::ItemIsDropEnabled;
-    return flags;
-}
-
-Qt::DropActions BookmarksModel::supportedDropActions () const
-{
-    return Qt::CopyAction | Qt::MoveAction;
-}
-
-#define MIMETYPE QLatin1String("application/bookmarks.xbel")
-
-QStringList BookmarksModel::mimeTypes() const
-{
-    QStringList types;
-    types << MIMETYPE;
-    return types;
-}
-
-QMimeData *BookmarksModel::mimeData(const QModelIndexList &indexes) const
-{
-    QMimeData *mimeData = new QMimeData();
-    QByteArray data;
-    QDataStream stream(&data, QIODevice::WriteOnly);
-    foreach (QModelIndex index, indexes) {
-        if (index.column() != 0 || !index.isValid())
-            continue;
-        QByteArray encodedData;
-        QBuffer buffer(&encodedData);
-        buffer.open(QBuffer::ReadWrite);
-        XbelWriter writer;
-        const BookmarkNode *parentNode = node(index);
-        writer.write(&buffer, parentNode);
-        stream << encodedData;
-    }
-    mimeData->setData(MIMETYPE, data);
-    return mimeData;
-}
-
-bool BookmarksModel::dropMimeData(const QMimeData *data,
-     Qt::DropAction action, int row, int column, const QModelIndex &parent)
-{
-    if (action == Qt::IgnoreAction)
-        return true;
-
-    if (!data->hasFormat(MIMETYPE)
-        || column > 0)
-        return false;
-
-    QByteArray ba = data->data(MIMETYPE);
-    QDataStream stream(&ba, QIODevice::ReadOnly);
-    if (stream.atEnd())
-        return false;
-
-    QUndoStack *undoStack = m_bookmarksManager->undoRedoStack();
-    undoStack->beginMacro(QLatin1String("Move Bookmarks"));
-
-    while (!stream.atEnd()) {
-        QByteArray encodedData;
-        stream >> encodedData;
-        QBuffer buffer(&encodedData);
-        buffer.open(QBuffer::ReadOnly);
-
-        XbelReader reader;
-        BookmarkNode *rootNode = reader.read(&buffer);
-        QList<BookmarkNode*> children = rootNode->children();
-        for (int i = 0; i < children.count(); ++i) {
-            BookmarkNode *bookmarkNode = children.at(i);
-            rootNode->remove(bookmarkNode);
-            row = qMax(0, row);
-            BookmarkNode *parentNode = node(parent);
-            m_bookmarksManager->addBookmark(parentNode, bookmarkNode, row);
-            m_endMacro = true;
-        }
-        delete rootNode;
-    }
-    return true;
-}
-
-bool BookmarksModel::setData(const QModelIndex &index, const QVariant &value, int role)
-{
-    if (!index.isValid() || (flags(index) & Qt::ItemIsEditable) == 0)
-        return false;
-
-    BookmarkNode *item = node(index);
-
-    switch (role) {
-    case Qt::EditRole:
-    case Qt::DisplayRole:
-        if (index.column() == 0) {
-            m_bookmarksManager->setTitle(item, value.toString());
-            break;
-        }
-        if (index.column() == 1) {
-            m_bookmarksManager->setUrl(item, value.toString());
-            break;
-        }
-        return false;
-    case BookmarksModel::UrlRole:
-        m_bookmarksManager->setUrl(item, value.toUrl().toString());
-        break;
-    case BookmarksModel::UrlStringRole:
-        m_bookmarksManager->setUrl(item, value.toString());
-        break;
-    default:
-        break;
-        return false;
-    }
-
-    return true;
-}
-
-BookmarkNode *BookmarksModel::node(const QModelIndex &index) const
-{
-    BookmarkNode *itemNode = static_cast<BookmarkNode*>(index.internalPointer());
-    if (!itemNode)
-        return m_bookmarksManager->bookmarks();
-    return itemNode;
-}
-
-
-AddBookmarkProxyModel::AddBookmarkProxyModel(QObject *parent)
-    : QSortFilterProxyModel(parent)
-{
-}
-
-int AddBookmarkProxyModel::columnCount(const QModelIndex &parent) const
-{
-    return qMin(1, QSortFilterProxyModel::columnCount(parent));
-}
-
-bool AddBookmarkProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
-{
-    QModelIndex idx = sourceModel()->index(source_row, 0, source_parent);
-    return sourceModel()->hasChildren(idx);
-}
-
-AddBookmarkDialog::AddBookmarkDialog(const QString &url, const QString &title, QWidget *parent, BookmarksManager *bookmarkManager)
-    : QDialog(parent)
-    , m_url(url)
-    , m_bookmarksManager(bookmarkManager)
-{
-    setWindowFlags(Qt::Sheet);
-    if (!m_bookmarksManager)
-        m_bookmarksManager = BrowserApplication::bookmarksManager();
-    setupUi(this);
-    QTreeView *view = new QTreeView(this);
-    m_proxyModel = new AddBookmarkProxyModel(this);
-    BookmarksModel *model = m_bookmarksManager->bookmarksModel();
-    m_proxyModel->setSourceModel(model);
-    view->setModel(m_proxyModel);
-    view->expandAll();
-    view->header()->setStretchLastSection(true);
-    view->header()->hide();
-    view->setItemsExpandable(false);
-    view->setRootIsDecorated(false);
-    view->setIndentation(10);
-    location->setModel(m_proxyModel);
-    view->show();
-    location->setView(view);
-    BookmarkNode *menu = m_bookmarksManager->menu();
-    QModelIndex idx = m_proxyModel->mapFromSource(model->index(menu));
-    view->setCurrentIndex(idx);
-    location->setCurrentIndex(idx.row());
-    name->setText(title);
-}
-
-void AddBookmarkDialog::accept()
-{
-    QModelIndex index = location->view()->currentIndex();
-    index = m_proxyModel->mapToSource(index);
-    if (!index.isValid())
-        index = m_bookmarksManager->bookmarksModel()->index(0, 0);
-    BookmarkNode *parent = m_bookmarksManager->bookmarksModel()->node(index);
-    BookmarkNode *bookmark = new BookmarkNode(BookmarkNode::Bookmark);
-    bookmark->url = m_url;
-    bookmark->title = name->text();
-    m_bookmarksManager->addBookmark(parent, bookmark);
-    QDialog::accept();
-}
-
-BookmarksMenu::BookmarksMenu(QWidget *parent)
-    : ModelMenu(parent)
-    , m_bookmarksManager(0)
-{
-    connect(this, SIGNAL(activated(QModelIndex)),
-            this, SLOT(activated(QModelIndex)));
-    setMaxRows(-1);
-    setHoverRole(BookmarksModel::UrlStringRole);
-    setSeparatorRole(BookmarksModel::SeparatorRole);
-}
-
-void BookmarksMenu::activated(const QModelIndex &index)
-{
-    emit openUrl(index.data(BookmarksModel::UrlRole).toUrl());
-}
-
-bool BookmarksMenu::prePopulated()
-{
-    m_bookmarksManager = BrowserApplication::bookmarksManager();
-    setModel(m_bookmarksManager->bookmarksModel());
-    setRootIndex(m_bookmarksManager->bookmarksModel()->index(1, 0));
-    // initial actions
-    for (int i = 0; i < m_initialActions.count(); ++i)
-        addAction(m_initialActions.at(i));
-    if (!m_initialActions.isEmpty())
-        addSeparator();
-    createMenu(model()->index(0, 0), 1, this);
-    return true;
-}
-
-void BookmarksMenu::setInitialActions(QList<QAction*> actions)
-{
-    m_initialActions = actions;
-    for (int i = 0; i < m_initialActions.count(); ++i)
-        addAction(m_initialActions.at(i));
-}
-
-BookmarksDialog::BookmarksDialog(QWidget *parent, BookmarksManager *manager)
-    : QDialog(parent)
-{
-    m_bookmarksManager = manager;
-    if (!m_bookmarksManager)
-        m_bookmarksManager = BrowserApplication::bookmarksManager();
-    setupUi(this);
-
-    tree->setUniformRowHeights(true);
-    tree->setSelectionBehavior(QAbstractItemView::SelectRows);
-    tree->setSelectionMode(QAbstractItemView::ContiguousSelection);
-    tree->setTextElideMode(Qt::ElideMiddle);
-    m_bookmarksModel = m_bookmarksManager->bookmarksModel();
-    m_proxyModel = new TreeProxyModel(this);
-    connect(search, SIGNAL(textChanged(QString)),
-            m_proxyModel, SLOT(setFilterFixedString(QString)));
-    connect(removeButton, SIGNAL(clicked()), tree, SLOT(removeOne()));
-    m_proxyModel->setSourceModel(m_bookmarksModel);
-    tree->setModel(m_proxyModel);
-    tree->setDragDropMode(QAbstractItemView::InternalMove);
-    tree->setExpanded(m_proxyModel->index(0, 0), true);
-    tree->setAlternatingRowColors(true);
-    QFontMetrics fm(font());
-    int header = fm.width(QLatin1Char('m')) * 40;
-    tree->header()->resizeSection(0, header);
-    tree->header()->setStretchLastSection(true);
-    connect(tree, SIGNAL(activated(QModelIndex)),
-            this, SLOT(open()));
-    tree->setContextMenuPolicy(Qt::CustomContextMenu);
-    connect(tree, SIGNAL(customContextMenuRequested(QPoint)),
-            this, SLOT(customContextMenuRequested(QPoint)));
-    connect(addFolderButton, SIGNAL(clicked()),
-            this, SLOT(newFolder()));
-    expandNodes(m_bookmarksManager->bookmarks());
-    setAttribute(Qt::WA_DeleteOnClose);
-}
-
-BookmarksDialog::~BookmarksDialog()
-{
-    if (saveExpandedNodes(tree->rootIndex()))
-        m_bookmarksManager->changeExpanded();
-}
-
-bool BookmarksDialog::saveExpandedNodes(const QModelIndex &parent)
-{
-    bool changed = false;
-    for (int i = 0; i < m_proxyModel->rowCount(parent); ++i) {
-        QModelIndex child = m_proxyModel->index(i, 0, parent);
-        QModelIndex sourceIndex = m_proxyModel->mapToSource(child);
-        BookmarkNode *childNode = m_bookmarksModel->node(sourceIndex);
-        bool wasExpanded = childNode->expanded;
-        if (tree->isExpanded(child)) {
-            childNode->expanded = true;
-            changed |= saveExpandedNodes(child);
-        } else {
-            childNode->expanded = false;
-        }
-        changed |= (wasExpanded != childNode->expanded);
-    }
-    return changed;
-}
-
-void BookmarksDialog::expandNodes(BookmarkNode *node)
-{
-    for (int i = 0; i < node->children().count(); ++i) {
-        BookmarkNode *childNode = node->children()[i];
-        if (childNode->expanded) {
-            QModelIndex idx = m_bookmarksModel->index(childNode);
-            idx = m_proxyModel->mapFromSource(idx);
-            tree->setExpanded(idx, true);
-            expandNodes(childNode);
-        }
-    }
-}
-
-void BookmarksDialog::customContextMenuRequested(const QPoint &pos)
-{
-    QMenu menu;
-    QModelIndex index = tree->indexAt(pos);
-    index = index.sibling(index.row(), 0);
-    if (index.isValid() && !tree->model()->hasChildren(index)) {
-        menu.addAction(tr("Open"), this, SLOT(open()));
-        menu.addSeparator();
-    }
-    menu.addAction(tr("Delete"), tree, SLOT(removeOne()));
-    menu.exec(QCursor::pos());
-}
-
-void BookmarksDialog::open()
-{
-    QModelIndex index = tree->currentIndex();
-    if (!index.parent().isValid())
-        return;
-    emit openUrl(index.sibling(index.row(), 1).data(BookmarksModel::UrlRole).toUrl());
-}
-
-void BookmarksDialog::newFolder()
-{
-    QModelIndex currentIndex = tree->currentIndex();
-    QModelIndex idx = currentIndex;
-    if (idx.isValid() && !idx.model()->hasChildren(idx))
-        idx = idx.parent();
-    if (!idx.isValid())
-        idx = tree->rootIndex();
-    idx = m_proxyModel->mapToSource(idx);
-    BookmarkNode *parent = m_bookmarksManager->bookmarksModel()->node(idx);
-    BookmarkNode *node = new BookmarkNode(BookmarkNode::Folder);
-    node->title = tr("New Folder");
-    m_bookmarksManager->addBookmark(parent, node, currentIndex.row() + 1);
-}
-
-BookmarksToolBar::BookmarksToolBar(BookmarksModel *model, QWidget *parent)
-    : QToolBar(tr("Bookmark"), parent)
-    , m_bookmarksModel(model)
-{
-    connect(this, SIGNAL(actionTriggered(QAction*)), this, SLOT(triggered(QAction*)));
-    setRootIndex(model->index(0, 0));
-    connect(m_bookmarksModel, SIGNAL(modelReset()), this, SLOT(build()));
-    connect(m_bookmarksModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(build()));
-    connect(m_bookmarksModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(build()));
-    connect(m_bookmarksModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(build()));
-    setAcceptDrops(true);
-}
-
-void BookmarksToolBar::dragEnterEvent(QDragEnterEvent *event)
-{
-    const QMimeData *mimeData = event->mimeData();
-    if (mimeData->hasUrls())
-        event->acceptProposedAction();
-    QToolBar::dragEnterEvent(event);
-}
-
-void BookmarksToolBar::dropEvent(QDropEvent *event)
-{
-    const QMimeData *mimeData = event->mimeData();
-    if (mimeData->hasUrls() && mimeData->hasText()) {
-        QList<QUrl> urls = mimeData->urls();
-        QAction *action = actionAt(event->pos());
-        QString dropText;
-        if (action)
-            dropText = action->text();
-        int row = -1;
-        QModelIndex parentIndex = m_root;
-        for (int i = 0; i < m_bookmarksModel->rowCount(m_root); ++i) {
-            QModelIndex idx = m_bookmarksModel->index(i, 0, m_root);
-            QString title = idx.data().toString();
-            if (title == dropText) {
-                row = i;
-                if (m_bookmarksModel->hasChildren(idx)) {
-                    parentIndex = idx;
-                    row = -1;
-                }
-                break;
-            }
-        }
-        BookmarkNode *bookmark = new BookmarkNode(BookmarkNode::Bookmark);
-        bookmark->url = urls.at(0).toString();
-        bookmark->title = mimeData->text();
-
-        BookmarkNode *parent = m_bookmarksModel->node(parentIndex);
-        BookmarksManager *bookmarksManager = m_bookmarksModel->bookmarksManager();
-        bookmarksManager->addBookmark(parent, bookmark, row);
-        event->acceptProposedAction();
-    }
-    QToolBar::dropEvent(event);
-}
-
-
-void BookmarksToolBar::setRootIndex(const QModelIndex &index)
-{
-    m_root = index;
-    build();
-}
-
-QModelIndex BookmarksToolBar::rootIndex() const
-{
-    return m_root;
-}
-
-void BookmarksToolBar::build()
-{
-    clear();
-    for (int i = 0; i < m_bookmarksModel->rowCount(m_root); ++i) {
-        QModelIndex idx = m_bookmarksModel->index(i, 0, m_root);
-        if (m_bookmarksModel->hasChildren(idx)) {
-            QToolButton *button = new QToolButton(this);
-            button->setPopupMode(QToolButton::InstantPopup);
-            button->setArrowType(Qt::DownArrow);
-            button->setText(idx.data().toString());
-            ModelMenu *menu = new ModelMenu(this);
-            connect(menu, SIGNAL(activated(QModelIndex)),
-                    this, SLOT(activated(QModelIndex)));
-            menu->setModel(m_bookmarksModel);
-            menu->setRootIndex(idx);
-            menu->addAction(new QAction(menu));
-            button->setMenu(menu);
-            button->setToolButtonStyle(Qt::ToolButtonTextOnly);
-            QAction *a = addWidget(button);
-            a->setText(idx.data().toString());
-        } else {
-            QAction *action = addAction(idx.data().toString());
-            action->setData(idx.data(BookmarksModel::UrlRole));
-        }
-    }
-}
-
-void BookmarksToolBar::triggered(QAction *action)
-{
-    QVariant v = action->data();
-    if (v.canConvert<QUrl>()) {
-        emit openUrl(v.toUrl());
-    }
-}
-
-void BookmarksToolBar::activated(const QModelIndex &index)
-{
-    emit openUrl(index.data(BookmarksModel::UrlRole).toUrl());
-}
diff --git a/examples/webenginewidgets/demobrowser/bookmarks.h b/examples/webenginewidgets/demobrowser/bookmarks.h
deleted file mode 100644
index 922e7ce395b7aaec779cf3a6701be52115eeaf5c..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/bookmarks.h
+++ /dev/null
@@ -1,318 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef BOOKMARKS_H
-#define BOOKMARKS_H
-
-#include <QtCore/QObject>
-#include <QtCore/QAbstractItemModel>
-
-#include <QtWidgets/QUndoCommand>
-
-/*!
-    Bookmark manager, owner of the bookmarks, loads, saves and basic tasks
-  */
-class AutoSaver;
-class BookmarkNode;
-class BookmarksModel;
-class BookmarksManager : public QObject
-{
-    Q_OBJECT
-
-signals:
-    void entryAdded(BookmarkNode *item);
-    void entryRemoved(BookmarkNode *parent, int row, BookmarkNode *item);
-    void entryChanged(BookmarkNode *item);
-
-public:
-    BookmarksManager(QObject *parent = 0);
-    ~BookmarksManager();
-
-    void addBookmark(BookmarkNode *parent, BookmarkNode *node, int row = -1);
-    void removeBookmark(BookmarkNode *node);
-    void setTitle(BookmarkNode *node, const QString &newTitle);
-    void setUrl(BookmarkNode *node, const QString &newUrl);
-    void changeExpanded();
-
-    BookmarkNode *bookmarks();
-    BookmarkNode *menu();
-    BookmarkNode *toolbar();
-
-    BookmarksModel *bookmarksModel();
-    QUndoStack *undoRedoStack() { return &m_commands; };
-
-public slots:
-    void importBookmarks();
-    void exportBookmarks();
-
-private slots:
-    void save() const;
-
-private:
-    void load();
-
-    bool m_loaded;
-    AutoSaver *m_saveTimer;
-    BookmarkNode *m_bookmarkRootNode;
-    BookmarksModel *m_bookmarkModel;
-    QUndoStack m_commands;
-
-    friend class RemoveBookmarksCommand;
-    friend class ChangeBookmarkCommand;
-};
-
-class RemoveBookmarksCommand : public QUndoCommand
-{
-
-public:
-    RemoveBookmarksCommand(BookmarksManager *m_bookmarkManagaer, BookmarkNode *parent, int row);
-    ~RemoveBookmarksCommand();
-    void undo();
-    void redo();
-
-protected:
-    int m_row;
-    BookmarksManager *m_bookmarkManagaer;
-    BookmarkNode *m_node;
-    BookmarkNode *m_parent;
-    bool m_done;
-};
-
-class InsertBookmarksCommand : public RemoveBookmarksCommand
-{
-
-public:
-    InsertBookmarksCommand(BookmarksManager *m_bookmarkManagaer,
-        BookmarkNode *parent, BookmarkNode *node, int row);
-    void undo() { RemoveBookmarksCommand::redo(); }
-    void redo() { RemoveBookmarksCommand::undo(); }
-
-};
-
-class ChangeBookmarkCommand : public QUndoCommand
-{
-
-public:
-    ChangeBookmarkCommand(BookmarksManager *m_bookmarkManagaer,
-        BookmarkNode *node, const QString &newValue, bool title);
-    void undo();
-    void redo();
-
-private:
-    BookmarksManager *m_bookmarkManagaer;
-    bool m_title;
-    QString m_oldValue;
-    QString m_newValue;
-    BookmarkNode *m_node;
-};
-
-/*!
-    BookmarksModel is a QAbstractItemModel wrapper around the BookmarkManager
-  */
-class BookmarksModel : public QAbstractItemModel
-{
-    Q_OBJECT
-
-public slots:
-    void entryAdded(BookmarkNode *item);
-    void entryRemoved(BookmarkNode *parent, int row, BookmarkNode *item);
-    void entryChanged(BookmarkNode *item);
-
-public:
-    enum Roles {
-        TypeRole = Qt::UserRole + 1,
-        UrlRole = Qt::UserRole + 2,
-        UrlStringRole = Qt::UserRole + 3,
-        SeparatorRole = Qt::UserRole + 4
-    };
-
-    BookmarksModel(BookmarksManager *bookmarkManager, QObject *parent = 0);
-    inline BookmarksManager *bookmarksManager() const { return m_bookmarksManager; }
-
-    QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
-    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
-    int columnCount(const QModelIndex &parent = QModelIndex()) const;
-    int rowCount(const QModelIndex &parent = QModelIndex()) const;
-    QModelIndex index(int, int, const QModelIndex& = QModelIndex()) const;
-    QModelIndex parent(const QModelIndex& index= QModelIndex()) const;
-    Qt::ItemFlags flags(const QModelIndex &index) const;
-    Qt::DropActions supportedDropActions () const;
-    bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
-    bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
-    QMimeData *mimeData(const QModelIndexList &indexes) const;
-    QStringList mimeTypes() const;
-    bool dropMimeData(const QMimeData *data,
-        Qt::DropAction action, int row, int column, const QModelIndex &parent);
-    bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
-
-    BookmarkNode *node(const QModelIndex &index) const;
-    QModelIndex index(BookmarkNode *node) const;
-
-private:
-
-    bool m_endMacro;
-    BookmarksManager *m_bookmarksManager;
-};
-
-// Menu that is dynamically populated from the bookmarks
-#include "modelmenu.h"
-class BookmarksMenu : public ModelMenu
-{
-    Q_OBJECT
-
-signals:
-    void openUrl(const QUrl &url);
-
-public:
-     BookmarksMenu(QWidget *parent = 0);
-     void setInitialActions(QList<QAction*> actions);
-
-protected:
-    bool prePopulated();
-
-private slots:
-    void activated(const QModelIndex &index);
-
-private:
-    BookmarksManager *m_bookmarksManager;
-    QList<QAction*> m_initialActions;
-};
-
-/*
-    Proxy model that filters out the bookmarks so only the folders
-    are left behind.  Used in the add bookmark dialog combobox.
- */
-#include <QtCore/QSortFilterProxyModel>
-class AddBookmarkProxyModel : public QSortFilterProxyModel
-{
-    Q_OBJECT
-public:
-    AddBookmarkProxyModel(QObject * parent = 0);
-    int columnCount(const QModelIndex & parent = QModelIndex()) const;
-
-protected:
-    bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
-};
-
-/*!
-    Add bookmark dialog
- */
-#include "ui_addbookmarkdialog.h"
-class AddBookmarkDialog : public QDialog, public Ui_AddBookmarkDialog
-{
-    Q_OBJECT
-
-public:
-    AddBookmarkDialog(const QString &url, const QString &title, QWidget *parent = 0, BookmarksManager *bookmarkManager = 0);
-
-private slots:
-    void accept();
-
-private:
-    QString m_url;
-    BookmarksManager *m_bookmarksManager;
-    AddBookmarkProxyModel *m_proxyModel;
-};
-
-#include "ui_bookmarks.h"
-class TreeProxyModel;
-class BookmarksDialog : public QDialog, public Ui_BookmarksDialog
-{
-    Q_OBJECT
-
-signals:
-    void openUrl(const QUrl &url);
-
-public:
-    BookmarksDialog(QWidget *parent = 0, BookmarksManager *manager = 0);
-    ~BookmarksDialog();
-
-private slots:
-    void customContextMenuRequested(const QPoint &pos);
-    void open();
-    void newFolder();
-
-private:
-    void expandNodes(BookmarkNode *node);
-    bool saveExpandedNodes(const QModelIndex &parent);
-
-    BookmarksManager *m_bookmarksManager;
-    BookmarksModel *m_bookmarksModel;
-    TreeProxyModel *m_proxyModel;
-};
-
-#include <QtWidgets/QToolBar>
-class BookmarksToolBar : public QToolBar
-{
-    Q_OBJECT
-
-signals:
-    void openUrl(const QUrl &url);
-
-public:
-    BookmarksToolBar(BookmarksModel *model, QWidget *parent = 0);
-    void setRootIndex(const QModelIndex &index);
-    QModelIndex rootIndex() const;
-
-protected:
-    void dragEnterEvent(QDragEnterEvent *event);
-    void dropEvent(QDropEvent *event);
-
-private slots:
-    void triggered(QAction *action);
-    void activated(const QModelIndex &index);
-    void build();
-
-private:
-    BookmarksModel *m_bookmarksModel;
-    QPersistentModelIndex m_root;
-};
-
-#endif // BOOKMARKS_H
diff --git a/examples/webenginewidgets/demobrowser/bookmarks.ui b/examples/webenginewidgets/demobrowser/bookmarks.ui
deleted file mode 100644
index c893e941d66e4aa55937721fee98f22c2d447d92..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/bookmarks.ui
+++ /dev/null
@@ -1,106 +0,0 @@
-<ui version="4.0" >
- <class>BookmarksDialog</class>
- <widget class="QDialog" name="BookmarksDialog" >
-  <property name="geometry" >
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>758</width>
-    <height>450</height>
-   </rect>
-  </property>
-  <property name="windowTitle" >
-   <string>Bookmarks</string>
-  </property>
-  <layout class="QGridLayout" name="gridLayout" >
-   <item row="0" column="0" >
-    <spacer>
-     <property name="orientation" >
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="sizeHint" stdset="0" >
-      <size>
-       <width>252</width>
-       <height>20</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item row="0" column="1" >
-    <widget class="SearchLineEdit" name="search" />
-   </item>
-   <item row="1" column="0" colspan="2" >
-    <widget class="EditTreeView" name="tree" />
-   </item>
-   <item row="2" column="0" colspan="2" >
-    <layout class="QHBoxLayout" >
-     <item>
-      <widget class="QPushButton" name="removeButton" >
-       <property name="text" >
-        <string>&amp;Remove</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QPushButton" name="addFolderButton" >
-       <property name="text" >
-        <string>Add Folder</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <spacer>
-       <property name="orientation" >
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0" >
-        <size>
-         <width>40</width>
-         <height>20</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-     <item>
-      <widget class="QDialogButtonBox" name="buttonBox" >
-       <property name="standardButtons" >
-        <set>QDialogButtonBox::Ok</set>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-  </layout>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>SearchLineEdit</class>
-   <extends>QLineEdit</extends>
-   <header>searchlineedit.h</header>
-  </customwidget>
-  <customwidget>
-   <class>EditTreeView</class>
-   <extends>QTreeView</extends>
-   <header>edittreeview.h</header>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>BookmarksDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel" >
-     <x>472</x>
-     <y>329</y>
-    </hint>
-    <hint type="destinationlabel" >
-     <x>461</x>
-     <y>356</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/examples/webenginewidgets/demobrowser/browserapplication.cpp b/examples/webenginewidgets/demobrowser/browserapplication.cpp
deleted file mode 100644
index c3f3ef9b9bf0b4e7743d0df8198b1db6ba69cc2b..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/browserapplication.cpp
+++ /dev/null
@@ -1,587 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "browserapplication.h"
-
-#include "bookmarks.h"
-#include "browsermainwindow.h"
-#include "cookiejar.h"
-#include "downloadmanager.h"
-#include "history.h"
-#include "tabwidget.h"
-#include "webview.h"
-
-#include <QtCore/QBuffer>
-#include <QtCore/QDir>
-#include <QtCore/QLibraryInfo>
-#include <QtCore/QSettings>
-#include <QtCore/QTextStream>
-#include <QtCore/QTranslator>
-
-#include <QtGui/QDesktopServices>
-#include <QtGui/QFileOpenEvent>
-#include <QtWidgets/QMessageBox>
-
-#include <QtNetwork/QLocalServer>
-#include <QtNetwork/QLocalSocket>
-#include <QtNetwork/QNetworkProxy>
-#include <QtNetwork/QSslSocket>
-
-#include <QWebEngineProfile>
-#include <QWebEngineSettings>
-#include <QWebEngineScript>
-#include <QWebEngineScriptCollection>
-
-#include <QtCore/QDebug>
-
-DownloadManager *BrowserApplication::s_downloadManager = 0;
-HistoryManager *BrowserApplication::s_historyManager = 0;
-QNetworkAccessManager *BrowserApplication::s_networkAccessManager = 0;
-BookmarksManager *BrowserApplication::s_bookmarksManager = 0;
-
-static void setUserStyleSheet(QWebEngineProfile *profile, const QString &styleSheet, BrowserMainWindow *mainWindow = 0)
-{
-    Q_ASSERT(profile);
-    QString scriptName(QStringLiteral("userStyleSheet"));
-    QWebEngineScript script;
-    QList<QWebEngineScript> styleSheets = profile->scripts()->findScripts(scriptName);
-    if (!styleSheets.isEmpty())
-        script = styleSheets.first();
-    Q_FOREACH (const QWebEngineScript &s, styleSheets)
-        profile->scripts()->remove(s);
-
-    if (script.isNull()) {
-        script.setName(scriptName);
-        script.setInjectionPoint(QWebEngineScript::DocumentReady);
-        script.setRunsOnSubFrames(true);
-        script.setWorldId(QWebEngineScript::ApplicationWorld);
-    }
-    QString source = QString::fromLatin1("(function() {"\
-                                         "var css = document.getElementById(\"_qt_testBrowser_userStyleSheet\");"\
-                                         "if (css == undefined) {"\
-                                         "    css = document.createElement(\"style\");"\
-                                         "    css.type = \"text/css\";"\
-                                         "    css.id = \"_qt_testBrowser_userStyleSheet\";"\
-                                         "    document.head.appendChild(css);"\
-                                         "}"\
-                                         "css.innerText = \"%1\";"\
-                                         "})()").arg(styleSheet);
-    script.setSourceCode(source);
-    profile->scripts()->insert(script);
-    // run the script on the already loaded views
-    // this has to be deferred as it could mess with the storage initialization on startup
-    if (mainWindow)
-        QMetaObject::invokeMethod(mainWindow, "runScriptOnOpenViews", Qt::QueuedConnection, Q_ARG(QString, source));
-}
-
-BrowserApplication::BrowserApplication(int &argc, char **argv)
-    : QApplication(argc, argv)
-    , m_localServer(0)
-    , m_privateProfile(0)
-    , m_privateBrowsing(false)
-{
-    QCoreApplication::setOrganizationName(QLatin1String("Qt"));
-    QCoreApplication::setApplicationName(QLatin1String("demobrowser"));
-    QCoreApplication::setApplicationVersion(QLatin1String("0.1"));
-    QString serverName = QCoreApplication::applicationName()
-        + QString::fromLatin1(QT_VERSION_STR).remove('.') + QLatin1String("webengine");
-    QLocalSocket socket;
-    socket.connectToServer(serverName);
-    if (socket.waitForConnected(500)) {
-        QTextStream stream(&socket);
-        stream << getCommandLineUrlArgument();
-        stream.flush();
-        socket.waitForBytesWritten();
-        return;
-    }
-
-#if defined(Q_OS_OSX)
-    QApplication::setQuitOnLastWindowClosed(false);
-#else
-    QApplication::setQuitOnLastWindowClosed(true);
-#endif
-
-    m_localServer = new QLocalServer(this);
-    connect(m_localServer, SIGNAL(newConnection()),
-            this, SLOT(newLocalSocketConnection()));
-    if (!m_localServer->listen(serverName)
-            && m_localServer->serverError() == QAbstractSocket::AddressInUseError) {
-        QLocalServer::removeServer(serverName);
-        if (!m_localServer->listen(serverName))
-            qWarning("Could not create local socket %s.", qPrintable(serverName));
-    }
-
-#ifndef QT_NO_OPENSSL
-    if (!QSslSocket::supportsSsl()) {
-    QMessageBox::information(0, "Demo Browser",
-                 "This system does not support OpenSSL. SSL websites will not be available.");
-    }
-#endif
-
-    QDesktopServices::setUrlHandler(QLatin1String("http"), this, "openUrl");
-    QString localSysName = QLocale::system().name();
-
-    installTranslator(QLatin1String("qt_") + localSysName);
-
-    QSettings settings;
-    settings.beginGroup(QLatin1String("sessions"));
-    m_lastSession = settings.value(QLatin1String("lastSession")).toByteArray();
-    settings.endGroup();
-
-#if defined(Q_OS_OSX)
-    connect(this, SIGNAL(lastWindowClosed()),
-            this, SLOT(lastWindowClosed()));
-#endif
-
-    QTimer::singleShot(0, this, SLOT(postLaunch()));
-}
-
-BrowserApplication::~BrowserApplication()
-{
-    delete s_downloadManager;
-    for (int i = 0; i < m_mainWindows.size(); ++i) {
-        BrowserMainWindow *window = m_mainWindows.at(i);
-        delete window;
-    }
-    delete s_networkAccessManager;
-    delete s_bookmarksManager;
-}
-
-void BrowserApplication::lastWindowClosed()
-{
-#if defined(Q_OS_OSX)
-    clean();
-    BrowserMainWindow *mw = new BrowserMainWindow;
-    mw->slotHome();
-    m_mainWindows.prepend(mw);
-#endif
-}
-
-BrowserApplication *BrowserApplication::instance()
-{
-    return (static_cast<BrowserApplication *>(QCoreApplication::instance()));
-}
-
-void BrowserApplication::quitBrowser()
-{
-#if defined(Q_OS_OSX)
-    clean();
-    int tabCount = 0;
-    for (int i = 0; i < m_mainWindows.count(); ++i) {
-        tabCount += m_mainWindows.at(i)->tabWidget()->count();
-    }
-
-    if (tabCount > 1) {
-        int ret = QMessageBox::warning(mainWindow(), QString(),
-                           tr("There are %1 windows and %2 tabs open\n"
-                              "Do you want to quit anyway?").arg(m_mainWindows.count()).arg(tabCount),
-                           QMessageBox::Yes | QMessageBox::No,
-                           QMessageBox::No);
-        if (ret == QMessageBox::No)
-            return;
-    }
-
-    exit(0);
-#endif
-}
-
-/*!
-    Any actions that can be delayed until the window is visible
- */
-void BrowserApplication::postLaunch()
-{
-    QString directory = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
-    if (directory.isEmpty())
-        directory = QDir::homePath() + QLatin1String("/.") + QCoreApplication::applicationName();
-#if defined(QWEBENGINESETTINGS_PATHS)
-    QWebEngineSettings::setIconDatabasePath(directory);
-    QWebEngineSettings::setOfflineStoragePath(directory);
-#endif
-
-    setWindowIcon(QIcon(QLatin1String(":demobrowser.svg")));
-
-    loadSettings();
-
-    // newMainWindow() needs to be called in main() for this to happen
-    if (m_mainWindows.count() > 0) {
-        const QString url = getCommandLineUrlArgument();
-        if (!url.isEmpty()) {
-            mainWindow()->loadPage(url);
-        } else {
-            mainWindow()->slotHome();
-        }
-
-    }
-    BrowserApplication::historyManager();
-}
-
-void BrowserApplication::loadSettings()
-{
-    QSettings settings;
-    settings.beginGroup(QLatin1String("websettings"));
-
-    QWebEngineSettings *defaultSettings = QWebEngineSettings::globalSettings();
-    QWebEngineProfile *defaultProfile = QWebEngineProfile::defaultProfile();
-
-    QString standardFontFamily = defaultSettings->fontFamily(QWebEngineSettings::StandardFont);
-    int standardFontSize = defaultSettings->fontSize(QWebEngineSettings::DefaultFontSize);
-    QFont standardFont = QFont(standardFontFamily, standardFontSize);
-    standardFont = qvariant_cast<QFont>(settings.value(QLatin1String("standardFont"), standardFont));
-    defaultSettings->setFontFamily(QWebEngineSettings::StandardFont, standardFont.family());
-    defaultSettings->setFontSize(QWebEngineSettings::DefaultFontSize, standardFont.pointSize());
-
-    QString fixedFontFamily = defaultSettings->fontFamily(QWebEngineSettings::FixedFont);
-    int fixedFontSize = defaultSettings->fontSize(QWebEngineSettings::DefaultFixedFontSize);
-    QFont fixedFont = QFont(fixedFontFamily, fixedFontSize);
-    fixedFont = qvariant_cast<QFont>(settings.value(QLatin1String("fixedFont"), fixedFont));
-    defaultSettings->setFontFamily(QWebEngineSettings::FixedFont, fixedFont.family());
-    defaultSettings->setFontSize(QWebEngineSettings::DefaultFixedFontSize, fixedFont.pointSize());
-
-    defaultSettings->setAttribute(QWebEngineSettings::JavascriptEnabled, settings.value(QLatin1String("enableJavascript"), true).toBool());
-    defaultSettings->setAttribute(QWebEngineSettings::ScrollAnimatorEnabled, settings.value(QLatin1String("enableScrollAnimator"), true).toBool());
-
-    defaultSettings->setAttribute(QWebEngineSettings::PluginsEnabled, settings.value(QLatin1String("enablePlugins"), true).toBool());
-
-    defaultSettings->setAttribute(QWebEngineSettings::FullScreenSupportEnabled, true);
-
-    QString css = settings.value(QLatin1String("userStyleSheet")).toString();
-    setUserStyleSheet(defaultProfile, css, mainWindow());
-
-    defaultProfile->setHttpUserAgent(settings.value(QLatin1String("httpUserAgent")).toString());
-    defaultProfile->setHttpAcceptLanguage(settings.value(QLatin1String("httpAcceptLanguage")).toString());
-
-    switch (settings.value(QLatin1String("faviconDownloadMode"), 1).toInt()) {
-    case 0:
-        defaultSettings->setAttribute(QWebEngineSettings::AutoLoadIconsForPage, false);
-        break;
-    case 1:
-        defaultSettings->setAttribute(QWebEngineSettings::AutoLoadIconsForPage, true);
-        defaultSettings->setAttribute(QWebEngineSettings::TouchIconsEnabled, false);
-        break;
-    case 2:
-        defaultSettings->setAttribute(QWebEngineSettings::AutoLoadIconsForPage, true);
-        defaultSettings->setAttribute(QWebEngineSettings::TouchIconsEnabled, true);
-        break;
-    }
-
-    settings.endGroup();
-    settings.beginGroup(QLatin1String("cookies"));
-
-    QWebEngineProfile::PersistentCookiesPolicy persistentCookiesPolicy =
-            QWebEngineProfile::PersistentCookiesPolicy(settings.value(QLatin1String("persistentCookiesPolicy"),
-                                                                      QWebEngineProfile::AllowPersistentCookies).toInt());
-    defaultProfile->setPersistentCookiesPolicy(persistentCookiesPolicy);
-    QString pdataPath = settings.value(QLatin1String("persistentDataPath")).toString();
-    defaultProfile->setPersistentStoragePath(pdataPath);
-
-    settings.endGroup();
-
-    settings.beginGroup(QLatin1String("proxy"));
-    QNetworkProxy proxy;
-    if (settings.value(QLatin1String("enabled"), false).toBool()) {
-        if (settings.value(QLatin1String("type"), 0).toInt() == 0)
-            proxy = QNetworkProxy::Socks5Proxy;
-        else
-            proxy = QNetworkProxy::HttpProxy;
-        proxy.setHostName(settings.value(QLatin1String("hostName")).toString());
-        proxy.setPort(settings.value(QLatin1String("port"), 1080).toInt());
-        proxy.setUser(settings.value(QLatin1String("userName")).toString());
-        proxy.setPassword(settings.value(QLatin1String("password")).toString());
-        QNetworkProxy::setApplicationProxy(proxy);
-    }
-    settings.endGroup();
-}
-
-QList<BrowserMainWindow*> BrowserApplication::mainWindows()
-{
-    clean();
-    QList<BrowserMainWindow*> list;
-    for (int i = 0; i < m_mainWindows.count(); ++i)
-        list.append(m_mainWindows.at(i));
-    return list;
-}
-
-void BrowserApplication::clean()
-{
-    // cleanup any deleted main windows first
-    for (int i = m_mainWindows.count() - 1; i >= 0; --i)
-        if (m_mainWindows.at(i).isNull())
-            m_mainWindows.removeAt(i);
-}
-
-void BrowserApplication::saveSession()
-{
-    if (m_privateBrowsing)
-        return;
-
-    clean();
-
-    QSettings settings;
-    settings.beginGroup(QLatin1String("sessions"));
-
-    QByteArray data;
-    QBuffer buffer(&data);
-    QDataStream stream(&buffer);
-    buffer.open(QIODevice::ReadWrite);
-
-    stream << m_mainWindows.count();
-    for (int i = 0; i < m_mainWindows.count(); ++i)
-        stream << m_mainWindows.at(i)->saveState();
-    settings.setValue(QLatin1String("lastSession"), data);
-    settings.endGroup();
-}
-
-bool BrowserApplication::canRestoreSession() const
-{
-    return !m_lastSession.isEmpty();
-}
-
-void BrowserApplication::restoreLastSession()
-{
-    QList<QByteArray> windows;
-    QBuffer buffer(&m_lastSession);
-    QDataStream stream(&buffer);
-    buffer.open(QIODevice::ReadOnly);
-    int windowCount;
-    stream >> windowCount;
-    for (int i = 0; i < windowCount; ++i) {
-        QByteArray windowState;
-        stream >> windowState;
-        windows.append(windowState);
-    }
-    for (int i = 0; i < windows.count(); ++i) {
-        BrowserMainWindow *newWindow = 0;
-        if (m_mainWindows.count() == 1
-            && mainWindow()->tabWidget()->count() == 1
-            && mainWindow()->currentTab()->url() == QUrl()) {
-            newWindow = mainWindow();
-        } else {
-            newWindow = newMainWindow();
-        }
-        newWindow->restoreState(windows.at(i));
-    }
-}
-
-bool BrowserApplication::isTheOnlyBrowser() const
-{
-    return (m_localServer != 0);
-}
-
-void BrowserApplication::installTranslator(const QString &name)
-{
-    QTranslator *translator = new QTranslator(this);
-    translator->load(name, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
-    QApplication::installTranslator(translator);
-}
-
-QString BrowserApplication::getCommandLineUrlArgument() const
-{
-    const QStringList args = QCoreApplication::arguments();
-    if (args.count() > 1) {
-        const QString lastArg = args.last();
-        const bool isValidUrl = QUrl::fromUserInput(lastArg).isValid();
-        if (isValidUrl)
-            return lastArg;
-    }
-
-     return QString();
-}
-
-#if defined(Q_OS_OSX)
-bool BrowserApplication::event(QEvent* event)
-{
-    switch (event->type()) {
-    case QEvent::ApplicationActivate: {
-        clean();
-        if (!m_mainWindows.isEmpty()) {
-            BrowserMainWindow *mw = mainWindow();
-            if (mw && !mw->isMinimized()) {
-                mainWindow()->show();
-            }
-            return true;
-        }
-    }
-    case QEvent::FileOpen:
-        if (!m_mainWindows.isEmpty()) {
-            mainWindow()->loadPage(static_cast<QFileOpenEvent *>(event)->file());
-            return true;
-        }
-    default:
-        break;
-    }
-    return QApplication::event(event);
-}
-#endif
-
-void BrowserApplication::openUrl(const QUrl &url)
-{
-    mainWindow()->loadPage(url.toString());
-}
-
-BrowserMainWindow *BrowserApplication::newMainWindow()
-{
-    BrowserMainWindow *browser = new BrowserMainWindow();
-    m_mainWindows.prepend(browser);
-    browser->show();
-    return browser;
-}
-
-BrowserMainWindow *BrowserApplication::mainWindow()
-{
-    clean();
-    if (m_mainWindows.isEmpty())
-        newMainWindow();
-    return m_mainWindows[0];
-}
-
-void BrowserApplication::newLocalSocketConnection()
-{
-    QLocalSocket *socket = m_localServer->nextPendingConnection();
-    if (!socket)
-        return;
-    socket->waitForReadyRead(1000);
-    QTextStream stream(socket);
-    QString url;
-    stream >> url;
-    if (!url.isEmpty()) {
-        QSettings settings;
-        settings.beginGroup(QLatin1String("general"));
-        int openLinksIn = settings.value(QLatin1String("openLinksIn"), 0).toInt();
-        settings.endGroup();
-        if (openLinksIn == 1)
-            newMainWindow();
-        else
-            mainWindow()->tabWidget()->newTab();
-        openUrl(url);
-    }
-    delete socket;
-    mainWindow()->raise();
-    mainWindow()->activateWindow();
-}
-
-CookieJar *BrowserApplication::cookieJar()
-{
-#if defined(QWEBENGINEPAGE_SETNETWORKACCESSMANAGER)
-    return (CookieJar*)networkAccessManager()->cookieJar();
-#else
-    return 0;
-#endif
-}
-
-DownloadManager *BrowserApplication::downloadManager()
-{
-    if (!s_downloadManager) {
-        s_downloadManager = new DownloadManager();
-    }
-    return s_downloadManager;
-}
-
-QNetworkAccessManager *BrowserApplication::networkAccessManager()
-{
-    if (!s_networkAccessManager) {
-        s_networkAccessManager = new QNetworkAccessManager();
-    }
-    return s_networkAccessManager;
-}
-
-HistoryManager *BrowserApplication::historyManager()
-{
-    if (!s_historyManager)
-        s_historyManager = new HistoryManager();
-    return s_historyManager;
-}
-
-BookmarksManager *BrowserApplication::bookmarksManager()
-{
-    if (!s_bookmarksManager) {
-        s_bookmarksManager = new BookmarksManager;
-    }
-    return s_bookmarksManager;
-}
-
-QIcon BrowserApplication::icon(const QUrl &url) const
-{
-#if defined(QTWEBENGINE_ICONDATABASE)
-    QIcon icon = QWebEngineSettings::iconForUrl(url);
-    if (!icon.isNull())
-        return icon.pixmap(16, 16);
-#else
-    Q_UNUSED(url);
-#endif
-    return defaultIcon();
-}
-
-QIcon BrowserApplication::defaultIcon() const
-{
-    if (m_defaultIcon.isNull())
-        m_defaultIcon = QIcon(QLatin1String(":defaulticon.png"));
-    return m_defaultIcon;
-}
-
-void BrowserApplication::setPrivateBrowsing(bool privateBrowsing)
-{
-    if (m_privateBrowsing == privateBrowsing)
-        return;
-    m_privateBrowsing = privateBrowsing;
-    if (privateBrowsing) {
-        if (!m_privateProfile)
-            m_privateProfile = new QWebEngineProfile(this);
-        Q_FOREACH (BrowserMainWindow* window, mainWindows()) {
-            window->tabWidget()->setProfile(m_privateProfile);
-        }
-    } else {
-        Q_FOREACH (BrowserMainWindow* window, mainWindows()) {
-            window->tabWidget()->setProfile(QWebEngineProfile::defaultProfile());
-            window->m_lastSearch = QString();
-            window->tabWidget()->clear();
-        }
-    }
-    emit privateBrowsingChanged(privateBrowsing);
-}
diff --git a/examples/webenginewidgets/demobrowser/browserapplication.h b/examples/webenginewidgets/demobrowser/browserapplication.h
deleted file mode 100644
index 5c75d41b30ac909c3a4ab2df34c38041f638acec..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/browserapplication.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef BROWSERAPPLICATION_H
-#define BROWSERAPPLICATION_H
-
-#include <QtWidgets/QApplication>
-
-#include <QtCore/QUrl>
-#include <QtCore/QPointer>
-
-#include <QtGui/QIcon>
-
-#include <QtNetwork/QAuthenticator>
-
-QT_BEGIN_NAMESPACE
-class QLocalServer;
-class QNetworkAccessManager;
-class QWebEngineProfile;
-QT_END_NAMESPACE
-
-class BookmarksManager;
-class BrowserMainWindow;
-class CookieJar;
-class DownloadManager;
-class HistoryManager;
-class BrowserApplication : public QApplication
-{
-    Q_OBJECT
-
-public:
-    BrowserApplication(int &argc, char **argv);
-    ~BrowserApplication();
-    static BrowserApplication *instance();
-    void loadSettings();
-
-    bool isTheOnlyBrowser() const;
-    BrowserMainWindow *mainWindow();
-    QList<BrowserMainWindow*> mainWindows();
-    QIcon icon(const QUrl &url) const;
-    QIcon defaultIcon() const;
-
-    void saveSession();
-    bool canRestoreSession() const;
-    bool privateBrowsing() const { return m_privateBrowsing; }
-
-    static HistoryManager *historyManager();
-    static CookieJar *cookieJar();
-    static DownloadManager *downloadManager();
-    static QNetworkAccessManager *networkAccessManager();
-    static BookmarksManager *bookmarksManager();
-
-#if defined(Q_OS_OSX)
-    bool event(QEvent *event);
-#endif
-
-public slots:
-    BrowserMainWindow *newMainWindow();
-    void restoreLastSession();
-    void lastWindowClosed();
-    void quitBrowser();
-    void setPrivateBrowsing(bool);
-
-signals:
-    void privateBrowsingChanged(bool);
-
-private slots:
-    void postLaunch();
-    void openUrl(const QUrl &url);
-    void newLocalSocketConnection();
-
-private:
-    void clean();
-    void installTranslator(const QString &name);
-    QString getCommandLineUrlArgument() const;
-
-    static HistoryManager *s_historyManager;
-    static DownloadManager *s_downloadManager;
-    static QNetworkAccessManager *s_networkAccessManager;
-    static BookmarksManager *s_bookmarksManager;
-
-    QList<QPointer<BrowserMainWindow> > m_mainWindows;
-    QLocalServer *m_localServer;
-    QByteArray m_lastSession;
-    QWebEngineProfile *m_privateProfile;
-    bool m_privateBrowsing;
-    mutable QIcon m_defaultIcon;
-
-    QAuthenticator m_lastAuthenticator;
-    QAuthenticator m_lastProxyAuthenticator;
-};
-
-#endif // BROWSERAPPLICATION_H
diff --git a/examples/webenginewidgets/demobrowser/browsermainwindow.cpp b/examples/webenginewidgets/demobrowser/browsermainwindow.cpp
deleted file mode 100644
index 14d49f7f36d800b2bb287c2777ee692f054140ee..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/browsermainwindow.cpp
+++ /dev/null
@@ -1,1032 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "browsermainwindow.h"
-
-#include "autosaver.h"
-#include "bookmarks.h"
-#include "browserapplication.h"
-#include "chasewidget.h"
-#include "downloadmanager.h"
-#include "history.h"
-#include "printtopdfdialog.h"
-#include "settings.h"
-#include "tabwidget.h"
-#include "toolbarsearch.h"
-#include "ui_passworddialog.h"
-#include "webview.h"
-
-#include <QtCore/QSettings>
-
-#include <QtWidgets/QDesktopWidget>
-#include <QtWidgets/QFileDialog>
-#include <QtWidgets/QPlainTextEdit>
-#include <QtPrintSupport/QPrintDialog>
-#include <QtPrintSupport/QPrintPreviewDialog>
-#include <QtPrintSupport/QPrinter>
-#include <QtWidgets/QMenuBar>
-#include <QtWidgets/QMessageBox>
-#include <QtWidgets/QStatusBar>
-#include <QtWidgets/QToolBar>
-#include <QtWidgets/QInputDialog>
-
-#include <QWebEngineHistory>
-#include <QWebEngineProfile>
-#include <QWebEngineSettings>
-
-#include <QtCore/QDebug>
-
-template<typename Arg, typename R, typename C>
-struct InvokeWrapper {
-    R *receiver;
-    void (C::*memberFun)(Arg);
-    void operator()(Arg result) {
-        (receiver->*memberFun)(result);
-    }
-};
-
-template<typename Arg, typename R, typename C>
-InvokeWrapper<Arg, R, C> invoke(R *receiver, void (C::*memberFun)(Arg))
-{
-    InvokeWrapper<Arg, R, C> wrapper = {receiver, memberFun};
-    return wrapper;
-}
-
-const char *BrowserMainWindow::defaultHome = "http://qt.io/";
-
-BrowserMainWindow::BrowserMainWindow(QWidget *parent, Qt::WindowFlags flags)
-    : QMainWindow(parent, flags)
-    , m_tabWidget(new TabWidget(this))
-    , m_autoSaver(new AutoSaver(this))
-    , m_historyBack(0)
-    , m_historyForward(0)
-    , m_stop(0)
-    , m_reload(0)
-    , m_currentPrinter(nullptr)
-{
-    setToolButtonStyle(Qt::ToolButtonFollowStyle);
-    setAttribute(Qt::WA_DeleteOnClose, true);
-    statusBar()->setSizeGripEnabled(true);
-    setupMenu();
-    setupToolBar();
-
-    QWidget *centralWidget = new QWidget(this);
-    BookmarksModel *bookmarksModel = BrowserApplication::bookmarksManager()->bookmarksModel();
-    m_bookmarksToolbar = new BookmarksToolBar(bookmarksModel, this);
-    connect(m_bookmarksToolbar, SIGNAL(openUrl(QUrl)),
-            m_tabWidget, SLOT(loadUrlInCurrentTab(QUrl)));
-    connect(m_bookmarksToolbar->toggleViewAction(), SIGNAL(toggled(bool)),
-            this, SLOT(updateBookmarksToolbarActionText(bool)));
-
-    QVBoxLayout *layout = new QVBoxLayout;
-    layout->setSpacing(0);
-    layout->setMargin(0);
-#if defined(Q_OS_OSX)
-    layout->addWidget(m_bookmarksToolbar);
-    layout->addWidget(new QWidget); // <- OS X tab widget style bug
-#else
-    addToolBarBreak();
-    addToolBar(m_bookmarksToolbar);
-#endif
-    layout->addWidget(m_tabWidget);
-    centralWidget->setLayout(layout);
-    setCentralWidget(centralWidget);
-
-    connect(m_tabWidget, SIGNAL(loadPage(QString)),
-        this, SLOT(loadPage(QString)));
-    connect(m_tabWidget, SIGNAL(setCurrentTitle(QString)),
-        this, SLOT(slotUpdateWindowTitle(QString)));
-    connect(m_tabWidget, SIGNAL(showStatusBarMessage(QString)),
-            statusBar(), SLOT(showMessage(QString)));
-    connect(m_tabWidget, SIGNAL(linkHovered(QString)),
-            statusBar(), SLOT(showMessage(QString)));
-    connect(m_tabWidget, SIGNAL(loadProgress(int)),
-            this, SLOT(slotLoadProgress(int)));
-    connect(m_tabWidget, SIGNAL(tabsChanged()),
-            m_autoSaver, SLOT(changeOccurred()));
-    connect(m_tabWidget, SIGNAL(geometryChangeRequested(QRect)),
-            this, SLOT(geometryChangeRequested(QRect)));
-#if defined(QWEBENGINEPAGE_PRINTREQUESTED)
-    connect(m_tabWidget, SIGNAL(printRequested(QWebEngineFrame*)),
-            this, SLOT(printRequested(QWebEngineFrame*)));
-#endif
-    connect(m_tabWidget, SIGNAL(menuBarVisibilityChangeRequested(bool)),
-            menuBar(), SLOT(setVisible(bool)));
-    connect(m_tabWidget, SIGNAL(statusBarVisibilityChangeRequested(bool)),
-            statusBar(), SLOT(setVisible(bool)));
-    connect(m_tabWidget, SIGNAL(toolBarVisibilityChangeRequested(bool)),
-            m_navigationBar, SLOT(setVisible(bool)));
-    connect(m_tabWidget, SIGNAL(toolBarVisibilityChangeRequested(bool)),
-            m_bookmarksToolbar, SLOT(setVisible(bool)));
-
-    connect(m_tabWidget, SIGNAL(lastTabClosed()),
-            m_tabWidget, SLOT(newTab()));
-
-    slotUpdateWindowTitle();
-    loadDefaultState();
-    m_tabWidget->newTab();
-
-    int size = m_tabWidget->lineEditStack()->sizeHint().height();
-    m_navigationBar->setIconSize(QSize(size, size));
-
-}
-
-BrowserMainWindow::~BrowserMainWindow()
-{
-    m_autoSaver->changeOccurred();
-    m_autoSaver->saveIfNeccessary();
-}
-
-void BrowserMainWindow::loadDefaultState()
-{
-    QSettings settings;
-    settings.beginGroup(QLatin1String("BrowserMainWindow"));
-    QByteArray data = settings.value(QLatin1String("defaultState")).toByteArray();
-    restoreState(data);
-    settings.endGroup();
-}
-
-QSize BrowserMainWindow::sizeHint() const
-{
-    QRect desktopRect = QApplication::desktop()->screenGeometry();
-    QSize size = desktopRect.size() * qreal(0.9);
-    return size;
-}
-
-void BrowserMainWindow::save()
-{
-    BrowserApplication::instance()->saveSession();
-
-    QSettings settings;
-    settings.beginGroup(QLatin1String("BrowserMainWindow"));
-    QByteArray data = saveState(false);
-    settings.setValue(QLatin1String("defaultState"), data);
-    settings.endGroup();
-}
-
-static const qint32 BrowserMainWindowMagic = 0xba;
-
-QByteArray BrowserMainWindow::saveState(bool withTabs) const
-{
-    int version = 2;
-    QByteArray data;
-    QDataStream stream(&data, QIODevice::WriteOnly);
-
-    stream << qint32(BrowserMainWindowMagic);
-    stream << qint32(version);
-
-    stream << size();
-    stream << !m_navigationBar->isHidden();
-    stream << !m_bookmarksToolbar->isHidden();
-    stream << !statusBar()->isHidden();
-    if (withTabs)
-        stream << tabWidget()->saveState();
-    else
-        stream << QByteArray();
-    return data;
-}
-
-bool BrowserMainWindow::restoreState(const QByteArray &state)
-{
-    int version = 2;
-    QByteArray sd = state;
-    QDataStream stream(&sd, QIODevice::ReadOnly);
-    if (stream.atEnd())
-        return false;
-
-    qint32 marker;
-    qint32 v;
-    stream >> marker;
-    stream >> v;
-    if (marker != BrowserMainWindowMagic || v != version)
-        return false;
-
-    QSize size;
-    bool showToolbar;
-    bool showBookmarksBar;
-    bool showStatusbar;
-    QByteArray tabState;
-
-    stream >> size;
-    stream >> showToolbar;
-    stream >> showBookmarksBar;
-    stream >> showStatusbar;
-    stream >> tabState;
-
-    resize(size);
-
-    m_navigationBar->setVisible(showToolbar);
-    updateToolbarActionText(showToolbar);
-
-    m_bookmarksToolbar->setVisible(showBookmarksBar);
-    updateBookmarksToolbarActionText(showBookmarksBar);
-
-    statusBar()->setVisible(showStatusbar);
-    updateStatusbarActionText(showStatusbar);
-
-    if (!tabWidget()->restoreState(tabState))
-        return false;
-
-    return true;
-}
-
-void BrowserMainWindow::runScriptOnOpenViews(const QString &source)
-{
-    for (int i =0; i < tabWidget()->count(); ++i)
-        tabWidget()->webView(i)->page()->runJavaScript(source);
-}
-
-void BrowserMainWindow::setupMenu()
-{
-    new QShortcut(QKeySequence(Qt::Key_F6), this, SLOT(slotSwapFocus()));
-
-    // File
-    QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
-
-    fileMenu->addAction(tr("&New Window"), this, SLOT(slotFileNew()), QKeySequence::New);
-    fileMenu->addAction(m_tabWidget->newTabAction());
-    fileMenu->addAction(tr("&Open File..."), this, SLOT(slotFileOpen()), QKeySequence::Open);
-    fileMenu->addAction(tr("Open &Location..."), this,
-                SLOT(slotSelectLineEdit()), QKeySequence(Qt::ControlModifier + Qt::Key_L));
-    fileMenu->addSeparator();
-    fileMenu->addAction(m_tabWidget->closeTabAction());
-    fileMenu->addSeparator();
-#if defined(QWEBENGINE_SAVE_AS_FILE)
-    fileMenu->addAction(tr("&Save As..."), this,
-                SLOT(slotFileSaveAs()), QKeySequence(QKeySequence::Save));
-    fileMenu->addSeparator();
-#endif
-    BookmarksManager *bookmarksManager = BrowserApplication::bookmarksManager();
-    fileMenu->addAction(tr("&Import Bookmarks..."), bookmarksManager, SLOT(importBookmarks()));
-    fileMenu->addAction(tr("&Export Bookmarks..."), bookmarksManager, SLOT(exportBookmarks()));
-    fileMenu->addSeparator();
-#if defined(QWEBENGINEPAGE_PRINT)
-    fileMenu->addAction(tr("P&rint Preview..."), this, SLOT(slotFilePrintPreview()));
-#endif
-    fileMenu->addAction(tr("&Print..."), this, SLOT(slotFilePrint()), QKeySequence::Print);
-    fileMenu->addAction(tr("&Print to PDF..."), this, SLOT(slotFilePrintToPDF()));
-    fileMenu->addSeparator();
-
-    QAction *action = fileMenu->addAction(tr("Private &Browsing..."), this, SLOT(slotPrivateBrowsing()));
-    action->setCheckable(true);
-    action->setChecked(BrowserApplication::instance()->privateBrowsing());
-    connect(BrowserApplication::instance(), SIGNAL(privateBrowsingChanged(bool)), action, SLOT(setChecked(bool)));
-    fileMenu->addSeparator();
-
-#if defined(Q_OS_OSX)
-    fileMenu->addAction(tr("&Quit"), BrowserApplication::instance(), SLOT(quitBrowser()), QKeySequence(Qt::CTRL | Qt::Key_Q));
-#else
-    fileMenu->addAction(tr("&Quit"), this, SLOT(close()), QKeySequence(Qt::CTRL | Qt::Key_Q));
-#endif
-
-    // Edit
-    QMenu *editMenu = menuBar()->addMenu(tr("&Edit"));
-    QAction *m_undo = editMenu->addAction(tr("&Undo"));
-    m_undo->setShortcuts(QKeySequence::Undo);
-    m_tabWidget->addWebAction(m_undo, QWebEnginePage::Undo);
-    QAction *m_redo = editMenu->addAction(tr("&Redo"));
-    m_redo->setShortcuts(QKeySequence::Redo);
-    m_tabWidget->addWebAction(m_redo, QWebEnginePage::Redo);
-    editMenu->addSeparator();
-    QAction *m_cut = editMenu->addAction(tr("Cu&t"));
-    m_cut->setShortcuts(QKeySequence::Cut);
-    m_tabWidget->addWebAction(m_cut, QWebEnginePage::Cut);
-    QAction *m_copy = editMenu->addAction(tr("&Copy"));
-    m_copy->setShortcuts(QKeySequence::Copy);
-    m_tabWidget->addWebAction(m_copy, QWebEnginePage::Copy);
-    QAction *m_paste = editMenu->addAction(tr("&Paste"));
-    m_paste->setShortcuts(QKeySequence::Paste);
-    m_tabWidget->addWebAction(m_paste, QWebEnginePage::Paste);
-    editMenu->addSeparator();
-
-    QAction *m_find = editMenu->addAction(tr("&Find"));
-    m_find->setShortcuts(QKeySequence::Find);
-    connect(m_find, SIGNAL(triggered()), this, SLOT(slotEditFind()));
-
-    QAction *m_findNext = editMenu->addAction(tr("&Find Next"));
-    m_findNext->setShortcuts(QKeySequence::FindNext);
-    connect(m_findNext, SIGNAL(triggered()), this, SLOT(slotEditFindNext()));
-
-    QAction *m_findPrevious = editMenu->addAction(tr("&Find Previous"));
-    m_findPrevious->setShortcuts(QKeySequence::FindPrevious);
-    connect(m_findPrevious, SIGNAL(triggered()), this, SLOT(slotEditFindPrevious()));
-    editMenu->addSeparator();
-
-    editMenu->addAction(tr("&Preferences"), this, SLOT(slotPreferences()), tr("Ctrl+,"));
-
-    // View
-    QMenu *viewMenu = menuBar()->addMenu(tr("&View"));
-
-    m_viewBookmarkBar = new QAction(this);
-    updateBookmarksToolbarActionText(true);
-    m_viewBookmarkBar->setShortcut(tr("Shift+Ctrl+B"));
-    connect(m_viewBookmarkBar, SIGNAL(triggered()), this, SLOT(slotViewBookmarksBar()));
-    viewMenu->addAction(m_viewBookmarkBar);
-
-    m_viewToolbar = new QAction(this);
-    updateToolbarActionText(true);
-    m_viewToolbar->setShortcut(tr("Ctrl+|"));
-    connect(m_viewToolbar, SIGNAL(triggered()), this, SLOT(slotViewToolbar()));
-    viewMenu->addAction(m_viewToolbar);
-
-    m_viewStatusbar = new QAction(this);
-    updateStatusbarActionText(true);
-    m_viewStatusbar->setShortcut(tr("Ctrl+/"));
-    connect(m_viewStatusbar, SIGNAL(triggered()), this, SLOT(slotViewStatusbar()));
-    viewMenu->addAction(m_viewStatusbar);
-
-    viewMenu->addSeparator();
-
-    m_stop = viewMenu->addAction(tr("&Stop"));
-    QList<QKeySequence> shortcuts;
-    shortcuts.append(QKeySequence(Qt::CTRL | Qt::Key_Period));
-    shortcuts.append(Qt::Key_Escape);
-    m_stop->setShortcuts(shortcuts);
-    m_tabWidget->addWebAction(m_stop, QWebEnginePage::Stop);
-
-    m_reload = viewMenu->addAction(tr("Reload Page"));
-    m_reload->setShortcuts(QKeySequence::Refresh);
-    m_tabWidget->addWebAction(m_reload, QWebEnginePage::Reload);
-
-    viewMenu->addAction(tr("Zoom &In"), this, SLOT(slotViewZoomIn()), QKeySequence(Qt::CTRL | Qt::Key_Plus));
-    viewMenu->addAction(tr("Zoom &Out"), this, SLOT(slotViewZoomOut()), QKeySequence(Qt::CTRL | Qt::Key_Minus));
-    viewMenu->addAction(tr("Reset &Zoom"), this, SLOT(slotViewResetZoom()), QKeySequence(Qt::CTRL | Qt::Key_0));
-
-    viewMenu->addSeparator();
-    QAction *m_pageSource = viewMenu->addAction(tr("Page S&ource"));
-    m_pageSource->setShortcut(QKeySequence(Qt::CTRL | Qt::ALT | Qt::Key_U));
-    m_tabWidget->addWebAction(m_pageSource, QWebEnginePage::ViewSource);
-
-    QAction *a = viewMenu->addAction(tr("&Full Screen"), this, SLOT(slotViewFullScreen(bool)),  Qt::Key_F11);
-    a->setCheckable(true);
-
-    // History
-    HistoryMenu *historyMenu = new HistoryMenu(this);
-    connect(historyMenu, SIGNAL(openUrl(QUrl)),
-            m_tabWidget, SLOT(loadUrlInCurrentTab(QUrl)));
-    connect(historyMenu, SIGNAL(hovered(QString)), this,
-            SLOT(slotUpdateStatusbar(QString)));
-    historyMenu->setTitle(tr("Hi&story"));
-    menuBar()->addMenu(historyMenu);
-    QList<QAction*> historyActions;
-
-    m_historyBack = new QAction(tr("Back"), this);
-    m_tabWidget->addWebAction(m_historyBack, QWebEnginePage::Back);
-    QList<QKeySequence> backShortcuts = QKeySequence::keyBindings(QKeySequence::Back);
-    for (auto it = backShortcuts.begin(); it != backShortcuts.end();) {
-        // Chromium already handles navigate on backspace when appropriate.
-        if ((*it)[0] == Qt::Key_Backspace)
-            it = backShortcuts.erase(it);
-        else
-            ++it;
-    }
-    // For some reason Qt doesn't bind the dedicated Back key to Back.
-    backShortcuts.append(QKeySequence(Qt::Key_Back));
-    m_historyBack->setShortcuts(backShortcuts);
-    m_historyBack->setIconVisibleInMenu(false);
-    historyActions.append(m_historyBack);
-
-    m_historyForward = new QAction(tr("Forward"), this);
-    m_tabWidget->addWebAction(m_historyForward, QWebEnginePage::Forward);
-    QList<QKeySequence> fwdShortcuts = QKeySequence::keyBindings(QKeySequence::Forward);
-    for (auto it = fwdShortcuts.begin(); it != fwdShortcuts.end();) {
-        if (((*it)[0] & Qt::Key_unknown) == Qt::Key_Backspace)
-            it = fwdShortcuts.erase(it);
-        else
-            ++it;
-    }
-    fwdShortcuts.append(QKeySequence(Qt::Key_Forward));
-    m_historyForward->setShortcuts(fwdShortcuts);
-    m_historyForward->setIconVisibleInMenu(false);
-    historyActions.append(m_historyForward);
-
-    QAction *m_historyHome = new QAction(tr("Home"), this);
-    connect(m_historyHome, SIGNAL(triggered()), this, SLOT(slotHome()));
-    m_historyHome->setShortcut(QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_H));
-    historyActions.append(m_historyHome);
-
-#if defined(QWEBENGINEHISTORY_RESTORESESSION)
-    m_restoreLastSession = new QAction(tr("Restore Last Session"), this);
-    connect(m_restoreLastSession, SIGNAL(triggered()), BrowserApplication::instance(), SLOT(restoreLastSession()));
-    m_restoreLastSession->setEnabled(BrowserApplication::instance()->canRestoreSession());
-    historyActions.append(m_tabWidget->recentlyClosedTabsAction());
-    historyActions.append(m_restoreLastSession);
-#endif
-
-    historyMenu->setInitialActions(historyActions);
-
-    // Bookmarks
-    BookmarksMenu *bookmarksMenu = new BookmarksMenu(this);
-    connect(bookmarksMenu, SIGNAL(openUrl(QUrl)),
-            m_tabWidget, SLOT(loadUrlInCurrentTab(QUrl)));
-    connect(bookmarksMenu, SIGNAL(hovered(QString)),
-            this, SLOT(slotUpdateStatusbar(QString)));
-    bookmarksMenu->setTitle(tr("&Bookmarks"));
-    menuBar()->addMenu(bookmarksMenu);
-
-    QList<QAction*> bookmarksActions;
-
-    QAction *showAllBookmarksAction = new QAction(tr("Show All Bookmarks"), this);
-    connect(showAllBookmarksAction, SIGNAL(triggered()), this, SLOT(slotShowBookmarksDialog()));
-    m_addBookmark = new QAction(QIcon(QLatin1String(":addbookmark.png")), tr("Add Bookmark..."), this);
-    m_addBookmark->setIconVisibleInMenu(false);
-
-    connect(m_addBookmark, SIGNAL(triggered()), this, SLOT(slotAddBookmark()));
-    m_addBookmark->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_D));
-
-    bookmarksActions.append(showAllBookmarksAction);
-    bookmarksActions.append(m_addBookmark);
-    bookmarksMenu->setInitialActions(bookmarksActions);
-
-    // Window
-    m_windowMenu = menuBar()->addMenu(tr("&Window"));
-    connect(m_windowMenu, SIGNAL(aboutToShow()),
-            this, SLOT(slotAboutToShowWindowMenu()));
-    slotAboutToShowWindowMenu();
-
-    QMenu *toolsMenu = menuBar()->addMenu(tr("&Tools"));
-    toolsMenu->addAction(tr("Web &Search"), this, SLOT(slotWebSearch()), QKeySequence(tr("Ctrl+K", "Web Search")));
-#if defined(QWEBENGINEINSPECTOR)
-    a = toolsMenu->addAction(tr("Enable Web &Inspector"), this, SLOT(slotToggleInspector(bool)));
-    a->setCheckable(true);
-#endif
-
-    QMenu *helpMenu = menuBar()->addMenu(tr("&Help"));
-    helpMenu->addAction(tr("About &Qt"), qApp, SLOT(aboutQt()));
-    helpMenu->addAction(tr("About &Demo Browser"), this, SLOT(slotAboutApplication()));
-}
-
-void BrowserMainWindow::setupToolBar()
-{
-    m_navigationBar = addToolBar(tr("Navigation"));
-    connect(m_navigationBar->toggleViewAction(), SIGNAL(toggled(bool)),
-            this, SLOT(updateToolbarActionText(bool)));
-
-    m_historyBack->setIcon(style()->standardIcon(QStyle::SP_ArrowBack, 0, this));
-    m_historyBackMenu = new QMenu(this);
-    m_historyBack->setMenu(m_historyBackMenu);
-    connect(m_historyBackMenu, SIGNAL(aboutToShow()),
-            this, SLOT(slotAboutToShowBackMenu()));
-    connect(m_historyBackMenu, SIGNAL(triggered(QAction*)),
-            this, SLOT(slotOpenActionUrl(QAction*)));
-    m_navigationBar->addAction(m_historyBack);
-
-    m_historyForward->setIcon(style()->standardIcon(QStyle::SP_ArrowForward, 0, this));
-    m_historyForwardMenu = new QMenu(this);
-    connect(m_historyForwardMenu, SIGNAL(aboutToShow()),
-            this, SLOT(slotAboutToShowForwardMenu()));
-    connect(m_historyForwardMenu, SIGNAL(triggered(QAction*)),
-            this, SLOT(slotOpenActionUrl(QAction*)));
-    m_historyForward->setMenu(m_historyForwardMenu);
-    m_navigationBar->addAction(m_historyForward);
-
-    m_stopReload = new QAction(this);
-    m_reloadIcon = style()->standardIcon(QStyle::SP_BrowserReload);
-    m_stopReload->setIcon(m_reloadIcon);
-
-    m_navigationBar->addAction(m_stopReload);
-
-    m_navigationBar->addWidget(m_tabWidget->lineEditStack());
-
-    m_toolbarSearch = new ToolbarSearch(m_navigationBar);
-    m_navigationBar->addWidget(m_toolbarSearch);
-    connect(m_toolbarSearch, SIGNAL(search(QUrl)), SLOT(loadUrl(QUrl)));
-
-    m_chaseWidget = new ChaseWidget(this);
-    m_navigationBar->addWidget(m_chaseWidget);
-}
-
-void BrowserMainWindow::slotShowBookmarksDialog()
-{
-    BookmarksDialog *dialog = new BookmarksDialog(this);
-    connect(dialog, SIGNAL(openUrl(QUrl)),
-            m_tabWidget, SLOT(loadUrlInCurrentTab(QUrl)));
-    dialog->show();
-}
-
-void BrowserMainWindow::slotAddBookmark()
-{
-    WebView *webView = currentTab();
-    QString url = webView->url().toString();
-    QString title = webView->title();
-    AddBookmarkDialog dialog(url, title);
-    dialog.exec();
-}
-
-void BrowserMainWindow::slotViewToolbar()
-{
-    if (m_navigationBar->isVisible()) {
-        updateToolbarActionText(false);
-        m_navigationBar->close();
-    } else {
-        updateToolbarActionText(true);
-        m_navigationBar->show();
-    }
-    m_autoSaver->changeOccurred();
-}
-
-void BrowserMainWindow::slotViewBookmarksBar()
-{
-    if (m_bookmarksToolbar->isVisible()) {
-        updateBookmarksToolbarActionText(false);
-        m_bookmarksToolbar->close();
-    } else {
-        updateBookmarksToolbarActionText(true);
-        m_bookmarksToolbar->show();
-    }
-    m_autoSaver->changeOccurred();
-}
-
-void BrowserMainWindow::updateStatusbarActionText(bool visible)
-{
-    m_viewStatusbar->setText(!visible ? tr("Show Status Bar") : tr("Hide Status Bar"));
-}
-
-void BrowserMainWindow::handleFindTextResult(bool found)
-{
-    if (!found)
-        slotUpdateStatusbar(tr("\"%1\" not found.").arg(m_lastSearch));
-}
-
-void BrowserMainWindow::updateToolbarActionText(bool visible)
-{
-    m_viewToolbar->setText(!visible ? tr("Show Toolbar") : tr("Hide Toolbar"));
-}
-
-void BrowserMainWindow::updateBookmarksToolbarActionText(bool visible)
-{
-    m_viewBookmarkBar->setText(!visible ? tr("Show Bookmarks bar") : tr("Hide Bookmarks bar"));
-}
-
-void BrowserMainWindow::slotViewStatusbar()
-{
-    if (statusBar()->isVisible()) {
-        updateStatusbarActionText(false);
-        statusBar()->close();
-    } else {
-        updateStatusbarActionText(true);
-        statusBar()->show();
-    }
-    m_autoSaver->changeOccurred();
-}
-
-void BrowserMainWindow::loadUrl(const QUrl &url)
-{
-    if (!currentTab() || !url.isValid())
-        return;
-
-    m_tabWidget->currentLineEdit()->setText(QString::fromUtf8(url.toEncoded()));
-    m_tabWidget->loadUrlInCurrentTab(url);
-}
-
-void BrowserMainWindow::slotDownloadManager()
-{
-    BrowserApplication::downloadManager()->show();
-}
-
-void BrowserMainWindow::slotSelectLineEdit()
-{
-    m_tabWidget->currentLineEdit()->selectAll();
-    m_tabWidget->currentLineEdit()->setFocus();
-}
-
-void BrowserMainWindow::slotFileSaveAs()
-{
-    // not implemented yet.
-}
-
-void BrowserMainWindow::slotPreferences()
-{
-    SettingsDialog *s = new SettingsDialog(this);
-    s->show();
-}
-
-void BrowserMainWindow::slotUpdateStatusbar(const QString &string)
-{
-    statusBar()->showMessage(string, 2000);
-}
-
-void BrowserMainWindow::slotUpdateWindowTitle(const QString &title)
-{
-    if (title.isEmpty()) {
-        setWindowTitle(tr("Qt Demo Browser"));
-    } else {
-#if defined(Q_OS_OSX)
-        setWindowTitle(title);
-#else
-        setWindowTitle(tr("%1 - Qt Demo Browser", "Page title and Browser name").arg(title));
-#endif
-    }
-}
-
-void BrowserMainWindow::slotAboutApplication()
-{
-    QMessageBox::about(this, tr("About"), tr(
-        "Version %1"
-        "<p>This demo demonstrates the facilities "
-        "of Qt WebEngine in action, providing an example "
-        "browser for you to experiment with.<p>"
-        "<p>Qt WebEngine is based on the Chromium open source project "
-        "developed at <a href=\"http://www.chromium.org/\">http://www.chromium.org/</a>."
-        ).arg(QCoreApplication::applicationVersion()));
-}
-
-void BrowserMainWindow::slotFileNew()
-{
-    BrowserApplication::instance()->newMainWindow();
-    BrowserMainWindow *mw = BrowserApplication::instance()->mainWindow();
-    mw->slotHome();
-}
-
-void BrowserMainWindow::slotFileOpen()
-{
-    QString file = QFileDialog::getOpenFileName(this, tr("Open Web Resource"), QString(),
-            tr("Web Resources (*.html *.htm *.svg *.png *.gif *.svgz);;All files (*.*)"));
-
-    if (file.isEmpty())
-        return;
-
-    loadPage(file);
-}
-
-void BrowserMainWindow::slotFilePrintPreview()
-{
-    if (!currentTab())
-        return;
-    QPrintPreviewDialog *dialog = new QPrintPreviewDialog(this);
-    connect(dialog, SIGNAL(paintRequested(QPrinter*)),
-            currentTab(), SLOT(print(QPrinter*)));
-    dialog->exec();
-}
-
-void BrowserMainWindow::slotFilePrint()
-{
-    if (!currentTab())
-        return;
-    printRequested(currentTab()->page());
-}
-
-void BrowserMainWindow::slotHandlePdfPrinted(const QByteArray& result)
-{
-    if (!result.size())
-        return;
-
-    QFile file(m_printerOutputFileName);
-
-    m_printerOutputFileName.clear();
-    if (!file.open(QFile::WriteOnly))
-        return;
-
-    file.write(result.data(), result.size());
-    file.close();
-}
-
-void BrowserMainWindow::slotFilePrintToPDF()
-{
-    if (!currentTab() || !m_printerOutputFileName.isEmpty())
-        return;
-
-    QFileInfo info(QStringLiteral("printout.pdf"));
-    PrintToPdfDialog *dialog = new PrintToPdfDialog(info.absoluteFilePath(), this);
-    dialog->setWindowTitle(tr("Print to PDF"));
-    if (dialog->exec() != QDialog::Accepted || dialog->filePath().isEmpty())
-        return;
-
-    m_printerOutputFileName = dialog->filePath();
-    currentTab()->page()->printToPdf(invoke(this, &BrowserMainWindow::slotHandlePdfPrinted), dialog->pageLayout());
-}
-
-void BrowserMainWindow::slotHandlePagePrinted(bool result)
-{
-    Q_UNUSED(result);
-
-    delete m_currentPrinter;
-    m_currentPrinter = nullptr;
-}
-
-
-void BrowserMainWindow::printRequested(QWebEnginePage *page)
-{
-    if (m_currentPrinter)
-        return;
-    m_currentPrinter = new QPrinter();
-    QScopedPointer<QPrintDialog> dialog(new QPrintDialog(m_currentPrinter, this));
-    dialog->setWindowTitle(tr("Print Document"));
-    if (dialog->exec() != QDialog::Accepted) {
-        slotHandlePagePrinted(false);
-        return;
-    }
-    page->print(m_currentPrinter, invoke(this, &BrowserMainWindow::slotHandlePagePrinted));
-}
-
-void BrowserMainWindow::slotPrivateBrowsing()
-{
-    if (!BrowserApplication::instance()->privateBrowsing()) {
-        QString title = tr("Are you sure you want to turn on private browsing?");
-        QString text = tr("<b>%1</b><br><br>"
-            "This action will reload all open tabs.<br>"
-            "When private browsing in turned on,"
-            " webpages are not added to the history,"
-            " items are automatically removed from the Downloads window," \
-            " new cookies are not stored, current cookies can't be accessed," \
-            " site icons wont be stored, session wont be saved, " \
-            " and searches are not added to the pop-up menu in the Google search box." \
-            "  Until you close the window, you can still click the Back and Forward buttons" \
-            " to return to the webpages you have opened.").arg(title);
-
-        QMessageBox::StandardButton button = QMessageBox::question(this, QString(), text,
-                               QMessageBox::Ok | QMessageBox::Cancel,
-                               QMessageBox::Ok);
-
-        if (button == QMessageBox::Ok)
-            BrowserApplication::instance()->setPrivateBrowsing(true);
-    } else {
-        // TODO: Also ask here
-        BrowserApplication::instance()->setPrivateBrowsing(false);
-    }
-}
-
-void BrowserMainWindow::closeEvent(QCloseEvent *event)
-{
-    if (m_tabWidget->count() > 1) {
-        int ret = QMessageBox::warning(this, QString(),
-                           tr("Are you sure you want to close the window?"
-                              "  There are %1 tabs open").arg(m_tabWidget->count()),
-                           QMessageBox::Yes | QMessageBox::No,
-                           QMessageBox::No);
-        if (ret == QMessageBox::No) {
-            event->ignore();
-            return;
-        }
-    }
-    event->accept();
-    deleteLater();
-}
-
-void BrowserMainWindow::slotEditFind()
-{
-    if (!currentTab())
-        return;
-    bool ok;
-    QString search = QInputDialog::getText(this, tr("Find"),
-                                          tr("Text:"), QLineEdit::Normal,
-                                          m_lastSearch, &ok);
-    if (ok && !search.isEmpty()) {
-        m_lastSearch = search;
-        currentTab()->findText(m_lastSearch, 0, invoke(this, &BrowserMainWindow::handleFindTextResult));
-    }
-}
-
-void BrowserMainWindow::slotEditFindNext()
-{
-    if (!currentTab() && !m_lastSearch.isEmpty())
-        return;
-    currentTab()->findText(m_lastSearch);
-}
-
-void BrowserMainWindow::slotEditFindPrevious()
-{
-    if (!currentTab() && !m_lastSearch.isEmpty())
-        return;
-    currentTab()->findText(m_lastSearch, QWebEnginePage::FindBackward);
-}
-
-void BrowserMainWindow::slotViewZoomIn()
-{
-    if (!currentTab())
-        return;
-    currentTab()->setZoomFactor(currentTab()->zoomFactor() + 0.1);
-}
-
-void BrowserMainWindow::slotViewZoomOut()
-{
-    if (!currentTab())
-        return;
-    currentTab()->setZoomFactor(currentTab()->zoomFactor() - 0.1);
-}
-
-void BrowserMainWindow::slotViewResetZoom()
-{
-    if (!currentTab())
-        return;
-    currentTab()->setZoomFactor(1.0);
-}
-
-void BrowserMainWindow::slotViewFullScreen(bool makeFullScreen)
-{
-    if (makeFullScreen) {
-        showFullScreen();
-    } else {
-        if (isMinimized())
-            showMinimized();
-        else if (isMaximized())
-            showMaximized();
-        else showNormal();
-    }
-}
-
-void BrowserMainWindow::slotHome()
-{
-    QSettings settings;
-    settings.beginGroup(QLatin1String("MainWindow"));
-    QString home = settings.value(QLatin1String("home"), QLatin1String(defaultHome)).toString();
-    loadPage(home);
-}
-
-void BrowserMainWindow::slotWebSearch()
-{
-    m_toolbarSearch->lineEdit()->selectAll();
-    m_toolbarSearch->lineEdit()->setFocus();
-}
-
-void BrowserMainWindow::slotToggleInspector(bool enable)
-{
-#if defined(QWEBENGINEINSPECTOR)
-    QWebEngineSettings::globalSettings()->setAttribute(QWebEngineSettings::DeveloperExtrasEnabled, enable);
-    if (enable) {
-        int result = QMessageBox::question(this, tr("Web Inspector"),
-                                           tr("The web inspector will only work correctly for pages that were loaded after enabling.\n"
-                                           "Do you want to reload all pages?"),
-                                           QMessageBox::Yes | QMessageBox::No);
-        if (result == QMessageBox::Yes) {
-            m_tabWidget->reloadAllTabs();
-        }
-    }
-#else
-    Q_UNUSED(enable);
-#endif
-}
-
-void BrowserMainWindow::slotSwapFocus()
-{
-    if (currentTab()->hasFocus())
-        m_tabWidget->currentLineEdit()->setFocus();
-    else
-        currentTab()->setFocus();
-}
-
-void BrowserMainWindow::loadPage(const QString &page)
-{
-    QUrl url = QUrl::fromUserInput(page);
-    loadUrl(url);
-}
-
-TabWidget *BrowserMainWindow::tabWidget() const
-{
-    return m_tabWidget;
-}
-
-WebView *BrowserMainWindow::currentTab() const
-{
-    return m_tabWidget->currentWebView();
-}
-
-void BrowserMainWindow::slotLoadProgress(int progress)
-{
-    if (progress < 100 && progress > 0) {
-        m_chaseWidget->setAnimated(true);
-        disconnect(m_stopReload, SIGNAL(triggered()), m_reload, SLOT(trigger()));
-        if (m_stopIcon.isNull())
-            m_stopIcon = style()->standardIcon(QStyle::SP_BrowserStop);
-        m_stopReload->setIcon(m_stopIcon);
-        connect(m_stopReload, SIGNAL(triggered()), m_stop, SLOT(trigger()));
-        m_stopReload->setToolTip(tr("Stop loading the current page"));
-    } else {
-        m_chaseWidget->setAnimated(false);
-        disconnect(m_stopReload, SIGNAL(triggered()), m_stop, SLOT(trigger()));
-        m_stopReload->setIcon(m_reloadIcon);
-        connect(m_stopReload, SIGNAL(triggered()), m_reload, SLOT(trigger()));
-        m_stopReload->setToolTip(tr("Reload the current page"));
-    }
-}
-
-void BrowserMainWindow::slotAboutToShowBackMenu()
-{
-    m_historyBackMenu->clear();
-    if (!currentTab())
-        return;
-    QWebEngineHistory *history = currentTab()->history();
-    int historyCount = history->count();
-    for (int i = history->backItems(historyCount).count() - 1; i >= 0; --i) {
-        QWebEngineHistoryItem item = history->backItems(history->count()).at(i);
-        QAction *action = new QAction(this);
-        action->setData(-1*(historyCount-i-1));
-        QIcon icon = BrowserApplication::instance()->icon(item.url());
-        action->setIcon(icon);
-        action->setText(item.title());
-        m_historyBackMenu->addAction(action);
-    }
-}
-
-void BrowserMainWindow::slotAboutToShowForwardMenu()
-{
-    m_historyForwardMenu->clear();
-    if (!currentTab())
-        return;
-    QWebEngineHistory *history = currentTab()->history();
-    int historyCount = history->count();
-    for (int i = 0; i < history->forwardItems(history->count()).count(); ++i) {
-        QWebEngineHistoryItem item = history->forwardItems(historyCount).at(i);
-        QAction *action = new QAction(this);
-        action->setData(historyCount-i);
-        QIcon icon = BrowserApplication::instance()->icon(item.url());
-        action->setIcon(icon);
-        action->setText(item.title());
-        m_historyForwardMenu->addAction(action);
-    }
-}
-
-void BrowserMainWindow::slotAboutToShowWindowMenu()
-{
-    m_windowMenu->clear();
-    m_windowMenu->addAction(m_tabWidget->nextTabAction());
-    m_windowMenu->addAction(m_tabWidget->previousTabAction());
-    m_windowMenu->addSeparator();
-    m_windowMenu->addAction(tr("Downloads"), this, SLOT(slotDownloadManager()), QKeySequence(tr("Alt+Ctrl+L", "Download Manager")));
-    m_windowMenu->addSeparator();
-
-    QList<BrowserMainWindow*> windows = BrowserApplication::instance()->mainWindows();
-    for (int i = 0; i < windows.count(); ++i) {
-        BrowserMainWindow *window = windows.at(i);
-        QAction *action = m_windowMenu->addAction(window->windowTitle(), this, SLOT(slotShowWindow()));
-        action->setData(i);
-        action->setCheckable(true);
-        if (window == this)
-            action->setChecked(true);
-    }
-}
-
-void BrowserMainWindow::slotShowWindow()
-{
-    if (QAction *action = qobject_cast<QAction*>(sender())) {
-        QVariant v = action->data();
-        if (v.canConvert<int>()) {
-            int offset = qvariant_cast<int>(v);
-            QList<BrowserMainWindow*> windows = BrowserApplication::instance()->mainWindows();
-            windows.at(offset)->activateWindow();
-            windows.at(offset)->currentTab()->setFocus();
-        }
-    }
-}
-
-void BrowserMainWindow::slotOpenActionUrl(QAction *action)
-{
-    int offset = action->data().toInt();
-    QWebEngineHistory *history = currentTab()->history();
-    if (offset < 0)
-        history->goToItem(history->backItems(-1*offset).first()); // back
-    else if (offset > 0)
-        history->goToItem(history->forwardItems(history->count() - offset + 1).back()); // forward
-}
-
-void BrowserMainWindow::geometryChangeRequested(const QRect &geometry)
-{
-    setGeometry(geometry);
-}
diff --git a/examples/webenginewidgets/demobrowser/browsermainwindow.h b/examples/webenginewidgets/demobrowser/browsermainwindow.h
deleted file mode 100644
index 5bbbb29244a9f92572cdd07c5a6f6c1423754097..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/browsermainwindow.h
+++ /dev/null
@@ -1,189 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef BROWSERMAINWINDOW_H
-#define BROWSERMAINWINDOW_H
-
-#include <QtWidgets/QMainWindow>
-#include <QtGui/QIcon>
-#include <QtCore/QUrl>
-
-QT_BEGIN_NAMESPACE
-class QPrinter;
-class QWebEnginePage;
-QT_END_NAMESPACE
-
-class AutoSaver;
-class BookmarksToolBar;
-class ChaseWidget;
-class TabWidget;
-class ToolbarSearch;
-class WebView;
-
-/*!
-    The MainWindow of the Browser Application.
-
-    Handles the tab widget and all the actions
- */
-class BrowserMainWindow : public QMainWindow {
-    Q_OBJECT
-
-public:
-    BrowserMainWindow(QWidget *parent = 0, Qt::WindowFlags flags = 0);
-    ~BrowserMainWindow();
-    QSize sizeHint() const;
-
-    static const char *defaultHome;
-
-public:
-    TabWidget *tabWidget() const;
-    WebView *currentTab() const;
-    QByteArray saveState(bool withTabs = true) const;
-    bool restoreState(const QByteArray &state);
-    Q_INVOKABLE void runScriptOnOpenViews(const QString &);
-
-public slots:
-    void loadPage(const QString &url);
-    void slotHome();
-
-protected:
-    void closeEvent(QCloseEvent *event);
-
-private slots:
-    void save();
-
-    void slotLoadProgress(int);
-    void slotUpdateStatusbar(const QString &string);
-    void slotUpdateWindowTitle(const QString &title = QString());
-
-    void loadUrl(const QUrl &url);
-    void slotPreferences();
-
-    void slotFileNew();
-    void slotFileOpen();
-    void slotFilePrintPreview();
-    void slotFilePrint();
-    void slotFilePrintToPDF();
-    void slotPrivateBrowsing();
-    void slotFileSaveAs();
-    void slotEditFind();
-    void slotEditFindNext();
-    void slotEditFindPrevious();
-    void slotShowBookmarksDialog();
-    void slotAddBookmark();
-    void slotViewZoomIn();
-    void slotViewZoomOut();
-    void slotViewResetZoom();
-    void slotViewToolbar();
-    void slotViewBookmarksBar();
-    void slotViewStatusbar();
-    void slotViewFullScreen(bool enable);
-
-    void slotWebSearch();
-    void slotToggleInspector(bool enable);
-    void slotAboutApplication();
-    void slotDownloadManager();
-    void slotSelectLineEdit();
-
-    void slotAboutToShowBackMenu();
-    void slotAboutToShowForwardMenu();
-    void slotAboutToShowWindowMenu();
-    void slotOpenActionUrl(QAction *action);
-    void slotShowWindow();
-    void slotSwapFocus();
-    void slotHandlePdfPrinted(const QByteArray&);
-
-    void slotHandlePagePrinted(bool result);
-    void printRequested(QWebEnginePage *page);
-    void geometryChangeRequested(const QRect &geometry);
-    void updateToolbarActionText(bool visible);
-    void updateBookmarksToolbarActionText(bool visible);
-
-private:
-    void loadDefaultState();
-    void setupMenu();
-    void setupToolBar();
-    void updateStatusbarActionText(bool visible);
-    void handleFindTextResult(bool found);
-
-private:
-    QToolBar *m_navigationBar;
-    ToolbarSearch *m_toolbarSearch;
-    BookmarksToolBar *m_bookmarksToolbar;
-    ChaseWidget *m_chaseWidget;
-    TabWidget *m_tabWidget;
-    AutoSaver *m_autoSaver;
-
-    QAction *m_historyBack;
-    QMenu *m_historyBackMenu;
-    QAction *m_historyForward;
-    QMenu *m_historyForwardMenu;
-    QMenu *m_windowMenu;
-
-    QAction *m_stop;
-    QAction *m_reload;
-    QAction *m_stopReload;
-    QAction *m_viewToolbar;
-    QAction *m_viewBookmarkBar;
-    QAction *m_viewStatusbar;
-    QAction *m_restoreLastSession;
-    QAction *m_addBookmark;
-
-    QPrinter *m_currentPrinter;
-
-    QIcon m_reloadIcon;
-    QIcon m_stopIcon;
-
-    QString m_lastSearch;
-    QString m_printerOutputFileName;
-    friend class BrowserApplication;
-};
-
-#endif // BROWSERMAINWINDOW_H
diff --git a/examples/webenginewidgets/demobrowser/chasewidget.cpp b/examples/webenginewidgets/demobrowser/chasewidget.cpp
deleted file mode 100644
index 0f066bc7333554e01c4c363ed43b292e5f59be0d..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/chasewidget.cpp
+++ /dev/null
@@ -1,150 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "chasewidget.h"
-
-#include <QtCore/QPoint>
-
-#include <QtWidgets/QApplication>
-#include <QtGui/QHideEvent>
-#include <QtGui/QPainter>
-#include <QtGui/QPaintEvent>
-#include <QtGui/QShowEvent>
-
-ChaseWidget::ChaseWidget(QWidget *parent, QPixmap pixmap, bool pixmapEnabled)
-    : QWidget(parent)
-    , m_segment(0)
-    , m_delay(100)
-    , m_step(40)
-    , m_timerId(-1)
-    , m_animated(false)
-    , m_pixmap(pixmap)
-    , m_pixmapEnabled(pixmapEnabled)
-{
-}
-
-void ChaseWidget::setAnimated(bool value)
-{
-    if (m_animated == value)
-        return;
-    m_animated = value;
-    if (m_timerId != -1) {
-        killTimer(m_timerId);
-        m_timerId = -1;
-    }
-    if (m_animated) {
-        m_segment = 0;
-        m_timerId = startTimer(m_delay);
-    }
-    update();
-}
-
-void ChaseWidget::paintEvent(QPaintEvent *event)
-{
-    Q_UNUSED(event);
-    QPainter p(this);
-    if (m_pixmapEnabled && !m_pixmap.isNull()) {
-        p.drawPixmap(0, 0, m_pixmap);
-        return;
-    }
-
-    const int extent = qMin(width() - 8, height() - 8);
-    const int displ = extent / 4;
-    const int ext = extent / 4 - 1;
-
-    p.setRenderHint(QPainter::Antialiasing, true);
-
-    if (m_animated)
-        p.setPen(Qt::gray);
-    else
-        p.setPen(QPen(palette().dark().color()));
-
-    p.translate(width() / 2, height() / 2); // center
-
-    for (int segment = 0; segment < segmentCount(); ++segment) {
-        p.rotate(QApplication::isRightToLeft() ? m_step : -m_step);
-        if (m_animated)
-            p.setBrush(colorForSegment(segment));
-        else
-            p.setBrush(palette().background());
-        p.drawEllipse(QRect(displ, -ext / 2, ext, ext));
-    }
-}
-
-QSize ChaseWidget::sizeHint() const
-{
-    return QSize(32, 32);
-}
-
-void ChaseWidget::timerEvent(QTimerEvent *event)
-{
-    if (event->timerId() == m_timerId) {
-        ++m_segment;
-        update();
-    }
-    QWidget::timerEvent(event);
-}
-
-QColor ChaseWidget::colorForSegment(int seg) const
-{
-    int index = ((seg + m_segment) % segmentCount());
-    int comp = qMax(0, 255 - (index * (255 / segmentCount())));
-    return QColor(comp, comp, comp, 255);
-}
-
-int ChaseWidget::segmentCount() const
-{
-    return 360 / m_step;
-}
-
-void ChaseWidget::setPixmapEnabled(bool enable)
-{
-    m_pixmapEnabled = enable;
-}
diff --git a/examples/webenginewidgets/demobrowser/chasewidget.h b/examples/webenginewidgets/demobrowser/chasewidget.h
deleted file mode 100644
index 63a8ff310ac5360695fa10cc8e1e216f9def4235..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/chasewidget.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef CHASEWIDGET_H
-#define CHASEWIDGET_H
-
-#include <QtWidgets/QWidget>
-
-#include <QtCore/QSize>
-#include <QtGui/QColor>
-#include <QtGui/QPixmap>
-
-QT_BEGIN_NAMESPACE
-class QHideEvent;
-class QShowEvent;
-class QPaintEvent;
-class QTimerEvent;
-QT_END_NAMESPACE
-
-class ChaseWidget : public QWidget
-{
-    Q_OBJECT
-public:
-    ChaseWidget(QWidget *parent = 0, QPixmap pixmap = QPixmap(), bool pixmapEnabled = false);
-
-    void setAnimated(bool value);
-    void setPixmapEnabled(bool enable);
-    QSize sizeHint() const;
-
-protected:
-    void paintEvent(QPaintEvent *event);
-    void timerEvent(QTimerEvent *event);
-
-private:
-    int segmentCount() const;
-    QColor colorForSegment(int segment) const;
-
-    int m_segment;
-    int m_delay;
-    int m_step;
-    int m_timerId;
-    bool m_animated;
-    QPixmap m_pixmap;
-    bool m_pixmapEnabled;
-};
-
-#endif
diff --git a/examples/webenginewidgets/demobrowser/cookiejar.cpp b/examples/webenginewidgets/demobrowser/cookiejar.cpp
deleted file mode 100644
index 479601ee384b06b6befc36397b1368f6737e5000..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/cookiejar.cpp
+++ /dev/null
@@ -1,746 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "cookiejar.h"
-
-#include "autosaver.h"
-
-#include <QtCore/QDateTime>
-#include <QtCore/QDir>
-#include <QtCore/QFile>
-#include <QtCore/QMetaEnum>
-#include <QtCore/QSettings>
-#include <QtCore/QUrl>
-
-#include <QtWidgets/QCompleter>
-#include <QtGui/QDesktopServices>
-#include <QtGui/QFont>
-#include <QtGui/QFontMetrics>
-#include <QtWidgets/QHeaderView>
-#include <QtGui/QKeyEvent>
-#include <QtCore/QSortFilterProxyModel>
-#include <QtNetwork/QNetworkCookie>
-
-#include <QWebEngineSettings>
-
-#include <QtCore/QDebug>
-
-static const unsigned int JAR_VERSION = 23;
-
-QT_BEGIN_NAMESPACE
-QDataStream &operator<<(QDataStream &stream, const QList<QNetworkCookie> &list)
-{
-    stream << JAR_VERSION;
-    stream << quint32(list.size());
-    for (int i = 0; i < list.size(); ++i)
-        stream << list.at(i).toRawForm();
-    return stream;
-}
-
-QDataStream &operator>>(QDataStream &stream, QList<QNetworkCookie> &list)
-{
-    list.clear();
-
-    quint32 version;
-    stream >> version;
-
-    if (version != JAR_VERSION)
-        return stream;
-
-    quint32 count;
-    stream >> count;
-    for (quint32 i = 0; i < count; ++i)
-    {
-        QByteArray value;
-        stream >> value;
-        QList<QNetworkCookie> newCookies = QNetworkCookie::parseCookies(value);
-        if (newCookies.count() == 0 && value.length() != 0) {
-            qWarning() << "CookieJar: Unable to parse saved cookie:" << value;
-        }
-        for (int j = 0; j < newCookies.count(); ++j)
-            list.append(newCookies.at(j));
-        if (stream.atEnd())
-            break;
-    }
-    return stream;
-}
-QT_END_NAMESPACE
-
-CookieJar::CookieJar(QObject *parent)
-    : QNetworkCookieJar(parent)
-    , m_loaded(false)
-    , m_saveTimer(new AutoSaver(this))
-    , m_acceptCookies(AcceptOnlyFromSitesNavigatedTo)
-{
-}
-
-CookieJar::~CookieJar()
-{
-    if (m_keepCookies == KeepUntilExit)
-        clear();
-    m_saveTimer->saveIfNeccessary();
-}
-
-void CookieJar::clear()
-{
-    setAllCookies(QList<QNetworkCookie>());
-    m_saveTimer->changeOccurred();
-    emit cookiesChanged();
-}
-
-void CookieJar::load()
-{
-    if (m_loaded)
-        return;
-    // load cookies and exceptions
-    qRegisterMetaTypeStreamOperators<QList<QNetworkCookie> >("QList<QNetworkCookie>");
-    QSettings cookieSettings(QStandardPaths::writableLocation(QStandardPaths::DataLocation) + QLatin1String("/cookies.ini"), QSettings::IniFormat);
-    setAllCookies(qvariant_cast<QList<QNetworkCookie> >(cookieSettings.value(QLatin1String("cookies"))));
-    cookieSettings.beginGroup(QLatin1String("Exceptions"));
-    m_exceptions_block = cookieSettings.value(QLatin1String("block")).toStringList();
-    m_exceptions_allow = cookieSettings.value(QLatin1String("allow")).toStringList();
-    m_exceptions_allowForSession = cookieSettings.value(QLatin1String("allowForSession")).toStringList();
-    qSort(m_exceptions_block.begin(), m_exceptions_block.end());
-    qSort(m_exceptions_allow.begin(), m_exceptions_allow.end());
-    qSort(m_exceptions_allowForSession.begin(), m_exceptions_allowForSession.end());
-
-    loadSettings();
-}
-
-void CookieJar::loadSettings()
-{
-    QSettings settings;
-    settings.beginGroup(QLatin1String("cookies"));
-    QByteArray value = settings.value(QLatin1String("acceptCookies"),
-                        QLatin1String("AcceptOnlyFromSitesNavigatedTo")).toByteArray();
-    QMetaEnum acceptPolicyEnum = staticMetaObject.enumerator(staticMetaObject.indexOfEnumerator("AcceptPolicy"));
-    m_acceptCookies = acceptPolicyEnum.keyToValue(value) == -1 ?
-                        AcceptOnlyFromSitesNavigatedTo :
-                        static_cast<AcceptPolicy>(acceptPolicyEnum.keyToValue(value));
-
-    value = settings.value(QLatin1String("keepCookiesUntil"), QLatin1String("KeepUntilExpire")).toByteArray();
-    QMetaEnum keepPolicyEnum = staticMetaObject.enumerator(staticMetaObject.indexOfEnumerator("KeepPolicy"));
-    m_keepCookies = keepPolicyEnum.keyToValue(value) == -1 ?
-                        KeepUntilExpire :
-                        static_cast<KeepPolicy>(keepPolicyEnum.keyToValue(value));
-
-    if (m_keepCookies == KeepUntilExit)
-        setAllCookies(QList<QNetworkCookie>());
-
-    m_loaded = true;
-    emit cookiesChanged();
-}
-
-void CookieJar::save()
-{
-    if (!m_loaded)
-        return;
-    purgeOldCookies();
-    QString directory = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
-    if (directory.isEmpty())
-        directory = QDir::homePath() + QLatin1String("/.") + QCoreApplication::applicationName();
-    if (!QFile::exists(directory)) {
-        QDir dir;
-        dir.mkpath(directory);
-    }
-    QSettings cookieSettings(directory + QLatin1String("/cookies.ini"), QSettings::IniFormat);
-    QList<QNetworkCookie> cookies = allCookies();
-    for (int i = cookies.count() - 1; i >= 0; --i) {
-        if (cookies.at(i).isSessionCookie())
-            cookies.removeAt(i);
-    }
-    cookieSettings.setValue(QLatin1String("cookies"), QVariant::fromValue<QList<QNetworkCookie> >(cookies));
-    cookieSettings.beginGroup(QLatin1String("Exceptions"));
-    cookieSettings.setValue(QLatin1String("block"), m_exceptions_block);
-    cookieSettings.setValue(QLatin1String("allow"), m_exceptions_allow);
-    cookieSettings.setValue(QLatin1String("allowForSession"), m_exceptions_allowForSession);
-
-    // save cookie settings
-    QSettings settings;
-    settings.beginGroup(QLatin1String("cookies"));
-    QMetaEnum acceptPolicyEnum = staticMetaObject.enumerator(staticMetaObject.indexOfEnumerator("AcceptPolicy"));
-    settings.setValue(QLatin1String("acceptCookies"), QLatin1String(acceptPolicyEnum.valueToKey(m_acceptCookies)));
-
-    QMetaEnum keepPolicyEnum = staticMetaObject.enumerator(staticMetaObject.indexOfEnumerator("KeepPolicy"));
-    settings.setValue(QLatin1String("keepCookiesUntil"), QLatin1String(keepPolicyEnum.valueToKey(m_keepCookies)));
-}
-
-void CookieJar::purgeOldCookies()
-{
-    QList<QNetworkCookie> cookies = allCookies();
-    if (cookies.isEmpty())
-        return;
-    int oldCount = cookies.count();
-    QDateTime now = QDateTime::currentDateTime();
-    for (int i = cookies.count() - 1; i >= 0; --i) {
-        if (!cookies.at(i).isSessionCookie() && cookies.at(i).expirationDate() < now)
-            cookies.removeAt(i);
-    }
-    if (oldCount == cookies.count())
-        return;
-    setAllCookies(cookies);
-    emit cookiesChanged();
-}
-
-QList<QNetworkCookie> CookieJar::cookiesForUrl(const QUrl &url) const
-{
-    CookieJar *that = const_cast<CookieJar*>(this);
-    if (!m_loaded)
-        that->load();
-
-    QWebEngineSettings *globalSettings = QWebEngineSettings::globalSettings();
-    if (globalSettings->testAttribute(QWebEngineSettings::PrivateBrowsingEnabled)) {
-        QList<QNetworkCookie> noCookies;
-        return noCookies;
-    }
-
-    return QNetworkCookieJar::cookiesForUrl(url);
-}
-
-bool CookieJar::setCookiesFromUrl(const QList<QNetworkCookie> &cookieList, const QUrl &url)
-{
-    if (!m_loaded)
-        load();
-
-    QWebEngineSettings *globalSettings = QWebEngineSettings::globalSettings();
-    if (globalSettings->testAttribute(QWebEngineSettings::PrivateBrowsingEnabled))
-        return false;
-
-    QString host = url.host();
-    bool eBlock = qBinaryFind(m_exceptions_block.begin(), m_exceptions_block.end(), host) != m_exceptions_block.end();
-    bool eAllow = qBinaryFind(m_exceptions_allow.begin(), m_exceptions_allow.end(), host) != m_exceptions_allow.end();
-    bool eAllowSession = qBinaryFind(m_exceptions_allowForSession.begin(), m_exceptions_allowForSession.end(), host) != m_exceptions_allowForSession.end();
-
-    bool addedCookies = false;
-    // pass exceptions
-    bool acceptInitially = (m_acceptCookies != AcceptNever);
-    if ((acceptInitially && !eBlock)
-        || (!acceptInitially && (eAllow || eAllowSession))) {
-        // pass url domain == cookie domain
-        QDateTime soon = QDateTime::currentDateTime();
-        soon = soon.addDays(90);
-        foreach (QNetworkCookie cookie, cookieList) {
-            QList<QNetworkCookie> lst;
-            if (m_keepCookies == KeepUntilTimeLimit
-                && !cookie.isSessionCookie()
-                && cookie.expirationDate() > soon) {
-                    cookie.setExpirationDate(soon);
-            }
-            lst += cookie;
-            if (QNetworkCookieJar::setCookiesFromUrl(lst, url)) {
-                addedCookies = true;
-            } else {
-                // finally force it in if wanted
-                if (m_acceptCookies == AcceptAlways) {
-                    QList<QNetworkCookie> cookies = allCookies();
-                    cookies += cookie;
-                    setAllCookies(cookies);
-                    addedCookies = true;
-                }
-#if 0
-                else
-                    qWarning() << "setCookiesFromUrl failed" << url << cookieList.value(0).toRawForm();
-#endif
-            }
-        }
-    }
-
-    if (addedCookies) {
-        m_saveTimer->changeOccurred();
-        emit cookiesChanged();
-    }
-    return addedCookies;
-}
-
-CookieJar::AcceptPolicy CookieJar::acceptPolicy() const
-{
-    if (!m_loaded)
-        (const_cast<CookieJar*>(this))->load();
-    return m_acceptCookies;
-}
-
-void CookieJar::setAcceptPolicy(AcceptPolicy policy)
-{
-    if (!m_loaded)
-        load();
-    if (policy == m_acceptCookies)
-        return;
-    m_acceptCookies = policy;
-    m_saveTimer->changeOccurred();
-}
-
-CookieJar::KeepPolicy CookieJar::keepPolicy() const
-{
-    if (!m_loaded)
-        (const_cast<CookieJar*>(this))->load();
-    return m_keepCookies;
-}
-
-void CookieJar::setKeepPolicy(KeepPolicy policy)
-{
-    if (!m_loaded)
-        load();
-    if (policy == m_keepCookies)
-        return;
-    m_keepCookies = policy;
-    m_saveTimer->changeOccurred();
-}
-
-QStringList CookieJar::blockedCookies() const
-{
-    if (!m_loaded)
-        (const_cast<CookieJar*>(this))->load();
-    return m_exceptions_block;
-}
-
-QStringList CookieJar::allowedCookies() const
-{
-    if (!m_loaded)
-        (const_cast<CookieJar*>(this))->load();
-    return m_exceptions_allow;
-}
-
-QStringList CookieJar::allowForSessionCookies() const
-{
-    if (!m_loaded)
-        (const_cast<CookieJar*>(this))->load();
-    return m_exceptions_allowForSession;
-}
-
-void CookieJar::setBlockedCookies(const QStringList &list)
-{
-    if (!m_loaded)
-        load();
-    m_exceptions_block = list;
-    qSort(m_exceptions_block.begin(), m_exceptions_block.end());
-    m_saveTimer->changeOccurred();
-}
-
-void CookieJar::setAllowedCookies(const QStringList &list)
-{
-    if (!m_loaded)
-        load();
-    m_exceptions_allow = list;
-    qSort(m_exceptions_allow.begin(), m_exceptions_allow.end());
-    m_saveTimer->changeOccurred();
-}
-
-void CookieJar::setAllowForSessionCookies(const QStringList &list)
-{
-    if (!m_loaded)
-        load();
-    m_exceptions_allowForSession = list;
-    qSort(m_exceptions_allowForSession.begin(), m_exceptions_allowForSession.end());
-    m_saveTimer->changeOccurred();
-}
-
-CookieModel::CookieModel(CookieJar *cookieJar, QObject *parent)
-    : QAbstractTableModel(parent)
-    , m_cookieJar(cookieJar)
-{
-    connect(m_cookieJar, SIGNAL(cookiesChanged()), this, SLOT(cookiesChanged()));
-    m_cookieJar->load();
-}
-
-QVariant CookieModel::headerData(int section, Qt::Orientation orientation, int role) const
-{
-    if (role == Qt::SizeHintRole) {
-        QFont font;
-        font.setPointSize(10);
-        QFontMetrics fm(font);
-        int height = fm.height() + fm.height()/3;
-        int width = fm.width(headerData(section, orientation, Qt::DisplayRole).toString());
-        return QSize(width, height);
-    }
-
-    if (orientation == Qt::Horizontal) {
-        if (role != Qt::DisplayRole)
-            return QVariant();
-
-        switch (section) {
-            case 0:
-                return tr("Website");
-            case 1:
-                return tr("Name");
-            case 2:
-                return tr("Path");
-            case 3:
-                return tr("Secure");
-            case 4:
-                return tr("Expires");
-            case 5:
-                return tr("Contents");
-            default:
-                return QVariant();
-        }
-    }
-    return QAbstractTableModel::headerData(section, orientation, role);
-}
-
-QVariant CookieModel::data(const QModelIndex &index, int role) const
-{
-    QList<QNetworkCookie> lst;
-    if (m_cookieJar)
-        lst = m_cookieJar->allCookies();
-    if (index.row() < 0 || index.row() >= lst.size())
-        return QVariant();
-
-    switch (role) {
-    case Qt::DisplayRole:
-    case Qt::EditRole: {
-        QNetworkCookie cookie = lst.at(index.row());
-        switch (index.column()) {
-            case 0:
-                return cookie.domain();
-            case 1:
-                return cookie.name();
-            case 2:
-                return cookie.path();
-            case 3:
-                return cookie.isSecure();
-            case 4:
-                return cookie.expirationDate();
-            case 5:
-                return cookie.value();
-        }
-        }
-    case Qt::FontRole:{
-        QFont font;
-        font.setPointSize(10);
-        return font;
-        }
-    }
-
-    return QVariant();
-}
-
-int CookieModel::columnCount(const QModelIndex &parent) const
-{
-    return (parent.isValid()) ? 0 : 6;
-}
-
-int CookieModel::rowCount(const QModelIndex &parent) const
-{
-    return (parent.isValid() || !m_cookieJar) ? 0 : m_cookieJar->allCookies().count();
-}
-
-bool CookieModel::removeRows(int row, int count, const QModelIndex &parent)
-{
-    if (parent.isValid() || !m_cookieJar)
-        return false;
-    int lastRow = row + count - 1;
-    beginRemoveRows(parent, row, lastRow);
-    QList<QNetworkCookie> lst = m_cookieJar->allCookies();
-    for (int i = lastRow; i >= row; --i) {
-        lst.removeAt(i);
-    }
-    m_cookieJar->setAllCookies(lst);
-    endRemoveRows();
-    return true;
-}
-
-void CookieModel::cookiesChanged()
-{
-    beginResetModel();
-    endResetModel();
-}
-
-CookiesDialog::CookiesDialog(CookieJar *cookieJar, QWidget *parent) : QDialog(parent)
-{
-    setupUi(this);
-    setWindowFlags(Qt::Sheet);
-    CookieModel *model = new CookieModel(cookieJar, this);
-    m_proxyModel = new QSortFilterProxyModel(this);
-    connect(search, SIGNAL(textChanged(QString)),
-            m_proxyModel, SLOT(setFilterFixedString(QString)));
-    connect(removeButton, SIGNAL(clicked()), cookiesTable, SLOT(removeOne()));
-    connect(removeAllButton, SIGNAL(clicked()), cookiesTable, SLOT(removeAll()));
-    m_proxyModel->setSourceModel(model);
-    cookiesTable->verticalHeader()->hide();
-    cookiesTable->setSelectionBehavior(QAbstractItemView::SelectRows);
-    cookiesTable->setModel(m_proxyModel);
-    cookiesTable->setAlternatingRowColors(true);
-    cookiesTable->setTextElideMode(Qt::ElideMiddle);
-    cookiesTable->setShowGrid(false);
-    cookiesTable->setSortingEnabled(true);
-    QFont f = font();
-    f.setPointSize(10);
-    QFontMetrics fm(f);
-    int height = fm.height() + fm.height()/3;
-    cookiesTable->verticalHeader()->setDefaultSectionSize(height);
-    cookiesTable->verticalHeader()->setMinimumSectionSize(-1);
-    for (int i = 0; i < model->columnCount(); ++i){
-        int header = cookiesTable->horizontalHeader()->sectionSizeHint(i);
-        switch (i) {
-        case 0:
-            header = fm.width(QLatin1String("averagehost.domain.com"));
-            break;
-        case 1:
-            header = fm.width(QLatin1String("_session_id"));
-            break;
-        case 4:
-            header = fm.width(QDateTime::currentDateTime().toString(Qt::LocalDate));
-            break;
-        }
-        int buffer = fm.width(QLatin1String("xx"));
-        header += buffer;
-        cookiesTable->horizontalHeader()->resizeSection(i, header);
-    }
-    cookiesTable->horizontalHeader()->setStretchLastSection(true);
-}
-
-
-
-CookieExceptionsModel::CookieExceptionsModel(CookieJar *cookiejar, QObject *parent)
-    : QAbstractTableModel(parent)
-    , m_cookieJar(cookiejar)
-{
-    m_allowedCookies = m_cookieJar->allowedCookies();
-    m_blockedCookies = m_cookieJar->blockedCookies();
-    m_sessionCookies = m_cookieJar->allowForSessionCookies();
-}
-
-QVariant CookieExceptionsModel::headerData(int section, Qt::Orientation orientation, int role) const
-{
-    if (role == Qt::SizeHintRole) {
-        QFont font;
-        font.setPointSize(10);
-        QFontMetrics fm(font);
-        int height = fm.height() + fm.height()/3;
-        int width = fm.width(headerData(section, orientation, Qt::DisplayRole).toString());
-        return QSize(width, height);
-    }
-
-    if (orientation == Qt::Horizontal
-        && role == Qt::DisplayRole) {
-        switch (section) {
-            case 0:
-                return tr("Website");
-            case 1:
-                return tr("Status");
-        }
-    }
-    return QAbstractTableModel::headerData(section, orientation, role);
-}
-
-QVariant CookieExceptionsModel::data(const QModelIndex &index, int role) const
-{
-    if (index.row() < 0 || index.row() >= rowCount())
-        return QVariant();
-
-    switch (role) {
-    case Qt::DisplayRole:
-    case Qt::EditRole: {
-        int row = index.row();
-        if (row < m_allowedCookies.count()) {
-            switch (index.column()) {
-                case 0:
-                    return m_allowedCookies.at(row);
-                case 1:
-                    return tr("Allow");
-            }
-        }
-        row = row - m_allowedCookies.count();
-        if (row < m_blockedCookies.count()) {
-            switch (index.column()) {
-                case 0:
-                    return m_blockedCookies.at(row);
-                case 1:
-                    return tr("Block");
-            }
-        }
-        row = row - m_blockedCookies.count();
-        if (row < m_sessionCookies.count()) {
-            switch (index.column()) {
-                case 0:
-                    return m_sessionCookies.at(row);
-                case 1:
-                    return tr("Allow For Session");
-            }
-        }
-        }
-    case Qt::FontRole:{
-        QFont font;
-        font.setPointSize(10);
-        return font;
-        }
-    }
-    return QVariant();
-}
-
-int CookieExceptionsModel::columnCount(const QModelIndex &parent) const
-{
-    return (parent.isValid()) ? 0 : 2;
-}
-
-int CookieExceptionsModel::rowCount(const QModelIndex &parent) const
-{
-    return (parent.isValid() || !m_cookieJar) ? 0 : m_allowedCookies.count() + m_blockedCookies.count() + m_sessionCookies.count();
-}
-
-bool CookieExceptionsModel::removeRows(int row, int count, const QModelIndex &parent)
-{
-    if (parent.isValid() || !m_cookieJar)
-        return false;
-
-    int lastRow = row + count - 1;
-    beginRemoveRows(parent, row, lastRow);
-    for (int i = lastRow; i >= row; --i) {
-        if (i < m_allowedCookies.count()) {
-            m_allowedCookies.removeAt(row);
-            continue;
-        }
-        i = i - m_allowedCookies.count();
-        if (i < m_blockedCookies.count()) {
-            m_blockedCookies.removeAt(row);
-            continue;
-        }
-        i = i - m_blockedCookies.count();
-        if (i < m_sessionCookies.count()) {
-            m_sessionCookies.removeAt(row);
-            continue;
-        }
-    }
-    m_cookieJar->setAllowedCookies(m_allowedCookies);
-    m_cookieJar->setBlockedCookies(m_blockedCookies);
-    m_cookieJar->setAllowForSessionCookies(m_sessionCookies);
-    endRemoveRows();
-    return true;
-}
-
-CookiesExceptionsDialog::CookiesExceptionsDialog(CookieJar *cookieJar, QWidget *parent)
-    : QDialog(parent)
-    , m_cookieJar(cookieJar)
-{
-    setupUi(this);
-    setWindowFlags(Qt::Sheet);
-    connect(removeButton, SIGNAL(clicked()), exceptionTable, SLOT(removeOne()));
-    connect(removeAllButton, SIGNAL(clicked()), exceptionTable, SLOT(removeAll()));
-    exceptionTable->verticalHeader()->hide();
-    exceptionTable->setSelectionBehavior(QAbstractItemView::SelectRows);
-    exceptionTable->setAlternatingRowColors(true);
-    exceptionTable->setTextElideMode(Qt::ElideMiddle);
-    exceptionTable->setShowGrid(false);
-    exceptionTable->setSortingEnabled(true);
-    m_exceptionsModel = new CookieExceptionsModel(cookieJar, this);
-    m_proxyModel = new QSortFilterProxyModel(this);
-    m_proxyModel->setSourceModel(m_exceptionsModel);
-    connect(search, SIGNAL(textChanged(QString)),
-            m_proxyModel, SLOT(setFilterFixedString(QString)));
-    exceptionTable->setModel(m_proxyModel);
-
-    CookieModel *cookieModel = new CookieModel(cookieJar, this);
-    domainLineEdit->setCompleter(new QCompleter(cookieModel, domainLineEdit));
-
-    connect(domainLineEdit, SIGNAL(textChanged(QString)),
-            this, SLOT(textChanged(QString)));
-    connect(blockButton, SIGNAL(clicked()), this, SLOT(block()));
-    connect(allowButton, SIGNAL(clicked()), this, SLOT(allow()));
-    connect(allowForSessionButton, SIGNAL(clicked()), this, SLOT(allowForSession()));
-
-    QFont f = font();
-    f.setPointSize(10);
-    QFontMetrics fm(f);
-    int height = fm.height() + fm.height()/3;
-    exceptionTable->verticalHeader()->setDefaultSectionSize(height);
-    exceptionTable->verticalHeader()->setMinimumSectionSize(-1);
-    for (int i = 0; i < m_exceptionsModel->columnCount(); ++i){
-        int header = exceptionTable->horizontalHeader()->sectionSizeHint(i);
-        switch (i) {
-        case 0:
-            header = fm.width(QLatin1String("averagebiglonghost.domain.com"));
-            break;
-        case 1:
-            header = fm.width(QLatin1String("Allow For Session"));
-            break;
-        }
-        int buffer = fm.width(QLatin1String("xx"));
-        header += buffer;
-        exceptionTable->horizontalHeader()->resizeSection(i, header);
-    }
-}
-
-void CookiesExceptionsDialog::textChanged(const QString &text)
-{
-    bool enabled = !text.isEmpty();
-    blockButton->setEnabled(enabled);
-    allowButton->setEnabled(enabled);
-    allowForSessionButton->setEnabled(enabled);
-}
-
-void CookiesExceptionsDialog::block()
-{
-    if (domainLineEdit->text().isEmpty())
-        return;
-    m_exceptionsModel->m_blockedCookies.append(domainLineEdit->text());
-    m_cookieJar->setBlockedCookies(m_exceptionsModel->m_blockedCookies);
-    m_exceptionsModel->beginResetModel();
-    m_exceptionsModel->endResetModel();
-}
-
-void CookiesExceptionsDialog::allow()
-{
-    if (domainLineEdit->text().isEmpty())
-        return;
-    m_exceptionsModel->m_allowedCookies.append(domainLineEdit->text());
-    m_cookieJar->setAllowedCookies(m_exceptionsModel->m_allowedCookies);
-    m_exceptionsModel->beginResetModel();
-    m_exceptionsModel->endResetModel();
-}
-
-void CookiesExceptionsDialog::allowForSession()
-{
-    if (domainLineEdit->text().isEmpty())
-        return;
-    m_exceptionsModel->m_sessionCookies.append(domainLineEdit->text());
-    m_cookieJar->setAllowForSessionCookies(m_exceptionsModel->m_sessionCookies);
-    m_exceptionsModel->beginResetModel();
-    m_exceptionsModel->endResetModel();
-}
diff --git a/examples/webenginewidgets/demobrowser/cookiejar.h b/examples/webenginewidgets/demobrowser/cookiejar.h
deleted file mode 100644
index 3f87079557604a4a52465bf076c053fa32bf6ce5..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/cookiejar.h
+++ /dev/null
@@ -1,212 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef COOKIEJAR_H
-#define COOKIEJAR_H
-
-#include <QtNetwork/QNetworkCookieJar>
-
-#include <QtCore/QAbstractItemModel>
-#include <QtCore/QStringList>
-
-#include <QtWidgets/QDialog>
-#include <QtWidgets/QTableView>
-
-QT_BEGIN_NAMESPACE
-class QSortFilterProxyModel;
-class QKeyEvent;
-QT_END_NAMESPACE
-
-class AutoSaver;
-
-class CookieJar : public QNetworkCookieJar
-{
-    friend class CookieModel;
-    Q_OBJECT
-    Q_PROPERTY(AcceptPolicy acceptPolicy READ acceptPolicy WRITE setAcceptPolicy)
-    Q_PROPERTY(KeepPolicy keepPolicy READ keepPolicy WRITE setKeepPolicy)
-    Q_PROPERTY(QStringList blockedCookies READ blockedCookies WRITE setBlockedCookies)
-    Q_PROPERTY(QStringList allowedCookies READ allowedCookies WRITE setAllowedCookies)
-    Q_PROPERTY(QStringList allowForSessionCookies READ allowForSessionCookies WRITE setAllowForSessionCookies)
-    Q_ENUMS(KeepPolicy)
-    Q_ENUMS(AcceptPolicy)
-
-signals:
-    void cookiesChanged();
-
-public:
-    enum AcceptPolicy {
-        AcceptAlways,
-        AcceptNever,
-        AcceptOnlyFromSitesNavigatedTo
-    };
-
-    enum KeepPolicy {
-        KeepUntilExpire,
-        KeepUntilExit,
-        KeepUntilTimeLimit
-    };
-
-    CookieJar(QObject *parent = 0);
-    ~CookieJar();
-
-    QList<QNetworkCookie> cookiesForUrl(const QUrl &url) const;
-    bool setCookiesFromUrl(const QList<QNetworkCookie> &cookieList, const QUrl &url);
-
-    AcceptPolicy acceptPolicy() const;
-    void setAcceptPolicy(AcceptPolicy policy);
-
-    KeepPolicy keepPolicy() const;
-    void setKeepPolicy(KeepPolicy policy);
-
-    QStringList blockedCookies() const;
-    QStringList allowedCookies() const;
-    QStringList allowForSessionCookies() const;
-
-    void setBlockedCookies(const QStringList &list);
-    void setAllowedCookies(const QStringList &list);
-    void setAllowForSessionCookies(const QStringList &list);
-
-public slots:
-    void clear();
-    void loadSettings();
-
-private slots:
-    void save();
-
-private:
-    void purgeOldCookies();
-    void load();
-    bool m_loaded;
-    AutoSaver *m_saveTimer;
-
-    AcceptPolicy m_acceptCookies;
-    KeepPolicy m_keepCookies;
-
-    QStringList m_exceptions_block;
-    QStringList m_exceptions_allow;
-    QStringList m_exceptions_allowForSession;
-};
-
-class CookieModel : public QAbstractTableModel
-{
-    Q_OBJECT
-
-public:
-    CookieModel(CookieJar *jar, QObject *parent = 0);
-    QVariant headerData(int section, Qt::Orientation orientation, int role) const;
-    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
-    int columnCount(const QModelIndex &parent = QModelIndex()) const;
-    int rowCount(const QModelIndex &parent = QModelIndex()) const;
-    bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
-
-private slots:
-    void cookiesChanged();
-
-private:
-    CookieJar *m_cookieJar;
-};
-
-#include "ui_cookies.h"
-#include "ui_cookiesexceptions.h"
-
-class CookiesDialog : public QDialog, public Ui_CookiesDialog
-{
-    Q_OBJECT
-
-public:
-    CookiesDialog(CookieJar *cookieJar, QWidget *parent = 0);
-
-private:
-    QSortFilterProxyModel *m_proxyModel;
-};
-
-class CookieExceptionsModel : public QAbstractTableModel
-{
-    Q_OBJECT
-    friend class CookiesExceptionsDialog;
-
-public:
-    CookieExceptionsModel(CookieJar *cookieJar, QObject *parent = 0);
-    QVariant headerData(int section, Qt::Orientation orientation, int role) const;
-    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
-    int columnCount(const QModelIndex &parent = QModelIndex()) const;
-    int rowCount(const QModelIndex &parent = QModelIndex()) const;
-    bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
-
-private:
-    CookieJar *m_cookieJar;
-
-    // Domains we allow, Domains we block, Domains we allow for this session
-    QStringList m_allowedCookies;
-    QStringList m_blockedCookies;
-    QStringList m_sessionCookies;
-};
-
-class CookiesExceptionsDialog : public QDialog, public Ui_CookiesExceptionsDialog
-{
-    Q_OBJECT
-
-public:
-    CookiesExceptionsDialog(CookieJar *cookieJar, QWidget *parent = 0);
-
-private slots:
-    void block();
-    void allow();
-    void allowForSession();
-    void textChanged(const QString &text);
-
-private:
-    CookieExceptionsModel *m_exceptionsModel;
-    QSortFilterProxyModel *m_proxyModel;
-    CookieJar *m_cookieJar;
-};
-
-#endif // COOKIEJAR_H
diff --git a/examples/webenginewidgets/demobrowser/cookies.ui b/examples/webenginewidgets/demobrowser/cookies.ui
deleted file mode 100644
index c4bccc548305694f9f3320c01cb4652bd775ac67..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/cookies.ui
+++ /dev/null
@@ -1,106 +0,0 @@
-<ui version="4.0" >
- <class>CookiesDialog</class>
- <widget class="QDialog" name="CookiesDialog" >
-  <property name="geometry" >
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>550</width>
-    <height>370</height>
-   </rect>
-  </property>
-  <property name="windowTitle" >
-   <string>Cookies</string>
-  </property>
-  <layout class="QGridLayout" >
-   <item row="0" column="0" >
-    <spacer>
-     <property name="orientation" >
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="sizeHint" stdset="0" >
-      <size>
-       <width>252</width>
-       <height>20</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item row="0" column="1" >
-    <widget class="SearchLineEdit" name="search" />
-   </item>
-   <item row="1" column="0" colspan="2" >
-    <widget class="EditTableView" name="cookiesTable" />
-   </item>
-   <item row="2" column="0" colspan="2" >
-    <layout class="QHBoxLayout" >
-     <item>
-      <widget class="QPushButton" name="removeButton" >
-       <property name="text" >
-        <string>&amp;Remove</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QPushButton" name="removeAllButton" >
-       <property name="text" >
-        <string>Remove &amp;All Cookies</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <spacer>
-       <property name="orientation" >
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0" >
-        <size>
-         <width>40</width>
-         <height>20</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-     <item>
-      <widget class="QDialogButtonBox" name="buttonBox" >
-       <property name="standardButtons" >
-        <set>QDialogButtonBox::Ok</set>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-  </layout>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>SearchLineEdit</class>
-   <extends>QLineEdit</extends>
-   <header>searchlineedit.h</header>
-  </customwidget>
-  <customwidget>
-   <class>EditTableView</class>
-   <extends>QTableView</extends>
-   <header>edittableview.h</header>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>CookiesDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel" >
-     <x>472</x>
-     <y>329</y>
-    </hint>
-    <hint type="destinationlabel" >
-     <x>461</x>
-     <y>356</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/examples/webenginewidgets/demobrowser/cookiesexceptions.ui b/examples/webenginewidgets/demobrowser/cookiesexceptions.ui
deleted file mode 100644
index 3d9ef6241422673107c8bada42d86dd9b8746a35..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/cookiesexceptions.ui
+++ /dev/null
@@ -1,184 +0,0 @@
-<ui version="4.0" >
- <class>CookiesExceptionsDialog</class>
- <widget class="QDialog" name="CookiesExceptionsDialog" >
-  <property name="geometry" >
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>466</width>
-    <height>446</height>
-   </rect>
-  </property>
-  <property name="windowTitle" >
-   <string>Cookie Exceptions</string>
-  </property>
-  <layout class="QVBoxLayout" >
-   <item>
-    <widget class="QGroupBox" name="newExceptionGroupBox" >
-     <property name="title" >
-      <string>New Exception</string>
-     </property>
-     <layout class="QGridLayout" >
-      <item row="0" column="0" >
-       <layout class="QHBoxLayout" >
-        <item>
-         <widget class="QLabel" name="label" >
-          <property name="text" >
-           <string>Domain:</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QLineEdit" name="domainLineEdit" />
-        </item>
-       </layout>
-      </item>
-      <item row="1" column="0" >
-       <layout class="QHBoxLayout" >
-        <item>
-         <spacer>
-          <property name="orientation" >
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeHint" stdset="0" >
-           <size>
-            <width>81</width>
-            <height>25</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-        <item>
-         <widget class="QPushButton" name="blockButton" >
-          <property name="enabled" >
-           <bool>false</bool>
-          </property>
-          <property name="text" >
-           <string>Block</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QPushButton" name="allowForSessionButton" >
-          <property name="enabled" >
-           <bool>false</bool>
-          </property>
-          <property name="text" >
-           <string>Allow For Session</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QPushButton" name="allowButton" >
-          <property name="enabled" >
-           <bool>false</bool>
-          </property>
-          <property name="text" >
-           <string>Allow</string>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <widget class="QGroupBox" name="ExceptionsGroupBox" >
-     <property name="title" >
-      <string>Exceptions</string>
-     </property>
-     <layout class="QGridLayout" >
-      <item row="0" column="0" colspan="3" >
-       <spacer>
-        <property name="orientation" >
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeHint" stdset="0" >
-         <size>
-          <width>252</width>
-          <height>20</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item row="0" column="3" >
-       <widget class="SearchLineEdit" name="search" />
-      </item>
-      <item row="1" column="0" colspan="4" >
-       <widget class="EditTableView" name="exceptionTable" />
-      </item>
-      <item row="2" column="0" >
-       <widget class="QPushButton" name="removeButton" >
-        <property name="text" >
-         <string>&amp;Remove</string>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="1" >
-       <widget class="QPushButton" name="removeAllButton" >
-        <property name="text" >
-         <string>Remove &amp;All</string>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="2" colspan="2" >
-       <spacer>
-        <property name="orientation" >
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeHint" stdset="0" >
-         <size>
-          <width>40</width>
-          <height>20</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox" >
-     <property name="orientation" >
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons" >
-      <set>QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>SearchLineEdit</class>
-   <extends>QLineEdit</extends>
-   <header>searchlineedit.h</header>
-  </customwidget>
-  <customwidget>
-   <class>EditTableView</class>
-   <extends>QTableView</extends>
-   <header>edittableview.h</header>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>CookiesExceptionsDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel" >
-     <x>381</x>
-     <y>428</y>
-    </hint>
-    <hint type="destinationlabel" >
-     <x>336</x>
-     <y>443</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/examples/webenginewidgets/demobrowser/data/addtab.png b/examples/webenginewidgets/demobrowser/data/addtab.png
deleted file mode 100644
index 20928fb402aab20c838fca4dae2e9c1db2c54373..0000000000000000000000000000000000000000
Binary files a/examples/webenginewidgets/demobrowser/data/addtab.png and /dev/null differ
diff --git a/examples/webenginewidgets/demobrowser/data/closetab.png b/examples/webenginewidgets/demobrowser/data/closetab.png
deleted file mode 100644
index ab9d669eeebed9718363bd06ba84fdfd9e7cd6b5..0000000000000000000000000000000000000000
Binary files a/examples/webenginewidgets/demobrowser/data/closetab.png and /dev/null differ
diff --git a/examples/webenginewidgets/demobrowser/data/data.qrc b/examples/webenginewidgets/demobrowser/data/data.qrc
deleted file mode 100644
index 5cb8a97c0f2cb0481e030089f59bcaa6e3273b7a..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/data/data.qrc
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource>
-    <file>addtab.png</file>
-    <file>closetab.png</file>
-    <file>history.png</file>
-    <file>demobrowser.svg</file>
-    <file>defaultbookmarks.xbel</file>
-    <file>loading.gif</file>
-    <file>defaulticon.png</file>
-</qresource>
-</RCC>
diff --git a/examples/webenginewidgets/demobrowser/data/defaultbookmarks.xbel b/examples/webenginewidgets/demobrowser/data/defaultbookmarks.xbel
deleted file mode 100644
index fef7f55148f28181fe60746ce27d97f8955a850d..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/data/defaultbookmarks.xbel
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE xbel>
-<xbel version="1.0">
-    <folder folded="yes">
-        <title>Bookmarks Bar</title>
-        <bookmark href="http://qt.io/">
-            <title>Qt Home Page</title>
-        </bookmark>
-        <bookmark href="http://doc.qt.io/">
-            <title>Qt Documentation</title>
-        </bookmark>
-        <bookmark href="http://planet.qt.io/">
-            <title>Qt Blog</title>
-        </bookmark>
-        <bookmark href="http://www.qtcentre.org/">
-            <title>Qt Centre</title>
-        </bookmark>
-        <bookmark href="http://qt-apps.org/">
-            <title>Qt-Apps.org</title>
-        </bookmark>
-        <bookmark href="http://wiki.qt.io/OnlineCommunities">
-            <title>Online Communities</title>
-        </bookmark>
-        <bookmark href="http://www.chromium.org/">
-            <title>The Chromium Projects</title>
-        </bookmark>
-       <bookmark href="http://xkcd.com/">
-            <title>xkcd</title>
-        </bookmark>
-       <bookmark href="http://twitter.com/qtproject">
-            <title>Twitter</title>
-        </bookmark>
-    </folder>
-    <folder folded="yes">
-        <title>Bookmarks Menu</title>
-        <bookmark href="http://reddit.com/">
-            <title>reddit.com: what's new online!</title>
-        </bookmark>
-    </folder>
-</xbel>
diff --git a/examples/webenginewidgets/demobrowser/data/defaulticon.png b/examples/webenginewidgets/demobrowser/data/defaulticon.png
deleted file mode 100644
index 01a0920c93c67e94ee3c9b8317fd6dd1437e8e4d..0000000000000000000000000000000000000000
Binary files a/examples/webenginewidgets/demobrowser/data/defaulticon.png and /dev/null differ
diff --git a/examples/webenginewidgets/demobrowser/data/demobrowser.svg b/examples/webenginewidgets/demobrowser/data/demobrowser.svg
deleted file mode 100644
index 9f39deb66dd6a2c97bd6e94eab55b1621082f60f..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/data/demobrowser.svg
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="94px" height="94px" viewBox="0 0 94 94" enable-background="new 0 0 94 94" xml:space="preserve">
-<g>
-	<circle fill="none" cx="47" cy="47" r="47"/>
-	<g>
-		<path fill="#46A2DA" d="M47,92.979c-11.779,0-23.559-4.484-32.526-13.451C-3.461,61.591-3.461,32.409,14.472,14.474
-			C32.41-3.463,61.592-3.461,79.526,14.473c17.935,17.936,17.935,47.119,0.002,65.054l-0.002,0.001
-			C70.559,88.495,58.779,92.979,47,92.979z"/>
-	</g>
-	<path fill="#80C342" d="M93,47C93,21.595,72.405,1,47,1C34.297,1,22.797,6.149,14.473,14.473l65.054,65.054
-		C87.851,71.203,93,59.703,93,47z"/>
-	<g>
-		<path fill="#46A2DA" d="M47,65c-4.808,0-9.328-1.873-12.728-5.272c-7.018-7.019-7.018-18.438,0-25.456
-			C37.672,30.873,42.192,29,47,29s9.328,1.873,12.728,5.272c7.018,7.019,7.018,18.438,0,25.456C56.328,63.127,51.808,65,47,65z"/>
-		<path fill="#FFFFFF" d="M62.248,59.919c6.671-7.858,6.312-19.644-1.105-27.061C57.237,28.953,52.118,27,47,27
-			c-5.118,0-10.237,1.953-14.142,5.858c-7.81,7.81-7.81,20.474,0,28.284C36.763,65.047,41.882,67,47,67
-			c4.379,0,8.752-1.441,12.372-4.3L77.88,81.209c0.989-0.895,1.935-1.837,2.843-2.814L62.248,59.919z M35.686,58.314
-			c-6.238-6.238-6.238-16.389,0-22.627C38.708,32.664,42.726,31,47,31c4.274,0,8.292,1.664,11.314,4.686
-			c6.238,6.238,6.238,16.389,0,22.627C55.292,61.336,51.274,63,47,63C42.726,63,38.708,61.336,35.686,58.314z"/>
-	</g>
-</g>
-</svg>
diff --git a/examples/webenginewidgets/demobrowser/data/history.png b/examples/webenginewidgets/demobrowser/data/history.png
deleted file mode 100644
index 552a1cbd88459475f69668ebd438353d6303ea16..0000000000000000000000000000000000000000
Binary files a/examples/webenginewidgets/demobrowser/data/history.png and /dev/null differ
diff --git a/examples/webenginewidgets/demobrowser/data/loading.gif b/examples/webenginewidgets/demobrowser/data/loading.gif
deleted file mode 100644
index c1545eb0eddb8d69e9d0cd70f30dd19c872829ec..0000000000000000000000000000000000000000
Binary files a/examples/webenginewidgets/demobrowser/data/loading.gif and /dev/null differ
diff --git a/examples/webenginewidgets/demobrowser/demobrowser.icns b/examples/webenginewidgets/demobrowser/demobrowser.icns
deleted file mode 100644
index f24ac6ee77a720c3f6c732408239d7c8d5f69066..0000000000000000000000000000000000000000
Binary files a/examples/webenginewidgets/demobrowser/demobrowser.icns and /dev/null differ
diff --git a/examples/webenginewidgets/demobrowser/demobrowser.ico b/examples/webenginewidgets/demobrowser/demobrowser.ico
deleted file mode 100644
index d197d0358c299285ba7b6a14a7251c3523df66f1..0000000000000000000000000000000000000000
Binary files a/examples/webenginewidgets/demobrowser/demobrowser.ico and /dev/null differ
diff --git a/examples/webenginewidgets/demobrowser/demobrowser.pro b/examples/webenginewidgets/demobrowser/demobrowser.pro
deleted file mode 100644
index aef7b9eac4948bbe7824762259c9721c54dad0d7..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/demobrowser.pro
+++ /dev/null
@@ -1,95 +0,0 @@
-TEMPLATE = app
-TARGET = demobrowser
-QT += webenginewidgets network widgets printsupport
-CONFIG += c++11
-
-qtHaveModule(uitools):!embedded: QT += uitools
-else: DEFINES += QT_NO_UITOOLS
-
-FORMS += \
-    addbookmarkdialog.ui \
-    bookmarks.ui \
-    cookies.ui \
-    cookiesexceptions.ui \
-    downloaditem.ui \
-    downloads.ui \
-    history.ui \
-    passworddialog.ui \
-    printtopdfdialog.ui \
-    proxy.ui \
-    savepagedialog.ui \
-    settings.ui
-
-HEADERS += \
-    autosaver.h \
-    bookmarks.h \
-    browserapplication.h \
-    browsermainwindow.h \
-    chasewidget.h \
-    downloadmanager.h \
-    edittableview.h \
-    edittreeview.h \
-    featurepermissionbar.h\
-    fullscreennotification.h \
-    history.h \
-    modelmenu.h \
-    printtopdfdialog.h \
-    savepagedialog.h \
-    searchlineedit.h \
-    settings.h \
-    squeezelabel.h \
-    tabwidget.h \
-    toolbarsearch.h \
-    urllineedit.h \
-    webview.h \
-    xbel.h
-
-SOURCES += \
-    autosaver.cpp \
-    bookmarks.cpp \
-    browserapplication.cpp \
-    browsermainwindow.cpp \
-    chasewidget.cpp \
-    downloadmanager.cpp \
-    edittableview.cpp \
-    edittreeview.cpp \
-    featurepermissionbar.cpp\
-    fullscreennotification.cpp \
-    history.cpp \
-    modelmenu.cpp \
-    printtopdfdialog.cpp \
-    savepagedialog.cpp \
-    searchlineedit.cpp \
-    settings.cpp \
-    squeezelabel.cpp \
-    tabwidget.cpp \
-    toolbarsearch.cpp \
-    urllineedit.cpp \
-    webview.cpp \
-    xbel.cpp \
-    main.cpp
-
-RESOURCES += data/data.qrc htmls/htmls.qrc
-
-build_all:!build_pass {
-    CONFIG -= build_all
-    CONFIG += release
-}
-
-win32 {
-   RC_FILE = demobrowser.rc
-}
-
-mac {
-    ICON = demobrowser.icns
-    QMAKE_INFO_PLIST = Info_mac.plist
-    TARGET = Demobrowser
-}
-
-EXAMPLE_FILES = \
-    Info_mac.plist demobrowser.icns demobrowser.ico demobrowser.rc \
-    cookiejar.h cookiejar.cpp  # FIXME: these are currently unused.
-
-# install
-target.path = $$[QT_INSTALL_EXAMPLES]/webenginewidgets/demobrowser
-INSTALLS += target
diff --git a/examples/webenginewidgets/demobrowser/demobrowser.rc b/examples/webenginewidgets/demobrowser/demobrowser.rc
deleted file mode 100644
index 70cd8bb1cd1aee46439f3ce9c2bda1bfd6eb052a..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/demobrowser.rc
+++ /dev/null
@@ -1 +0,0 @@
-IDI_ICON1               ICON    DISCARDABLE     "demobrowser.ico"
diff --git a/examples/webenginewidgets/demobrowser/doc/images/browser-demo.png b/examples/webenginewidgets/demobrowser/doc/images/browser-demo.png
deleted file mode 100644
index e8695dbca93f77521b42290d897aa940f488ce80..0000000000000000000000000000000000000000
Binary files a/examples/webenginewidgets/demobrowser/doc/images/browser-demo.png and /dev/null differ
diff --git a/examples/webenginewidgets/demobrowser/doc/src/demobrowser.qdoc b/examples/webenginewidgets/demobrowser/doc/src/demobrowser.qdoc
deleted file mode 100644
index dfd7a7a3ddc732c82de652e064fdbd648336a7f0..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/doc/src/demobrowser.qdoc
+++ /dev/null
@@ -1,40 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
-    \example webenginewidgets/demobrowser
-    \title WebEngine Demo Browser Example
-    \ingroup webengine-widgetexamples
-    \brief A demo browser based on Qt WebEngine Widgets
-
-    \e {Demo Browser} demonstrates how to use the \l{Qt WebEngine Widgets C++ Classes}
-    {Qt WebEngine C++ classes} to develop a small Web browser application with support for tabs.
-
-    \image browser-demo.png
-
-    \include examples-run.qdocinc
-*/
diff --git a/examples/webenginewidgets/demobrowser/downloaditem.ui b/examples/webenginewidgets/demobrowser/downloaditem.ui
deleted file mode 100644
index e506f28b665221c3f388d8b5460d928584107fda..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/downloaditem.ui
+++ /dev/null
@@ -1,133 +0,0 @@
-<ui version="4.0" >
- <class>DownloadItem</class>
- <widget class="QWidget" name="DownloadItem" >
-  <property name="geometry" >
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>423</width>
-    <height>110</height>
-   </rect>
-  </property>
-  <property name="windowTitle" >
-   <string>Form</string>
-  </property>
-  <layout class="QHBoxLayout" name="horizontalLayout" >
-   <property name="leftMargin">
-    <number>5</number>
-   </property>
-   <property name="topMargin">
-    <number>0</number>
-   </property>
-   <property name="rightMargin">
-    <number>5</number>
-   </property>
-   <property name="bottomMargin">
-    <number>0</number>
-   </property>
-   <item>
-    <widget class="QLabel" name="fileIcon" >
-     <property name="sizePolicy" >
-      <sizepolicy vsizetype="Minimum" hsizetype="Minimum" >
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="text" >
-      <string>Ico</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <layout class="QVBoxLayout" name="verticalLayout_2" >
-     <item>
-      <widget class="SqueezeLabel" native="1" name="fileNameLabel" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Preferred" hsizetype="Expanding" >
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="text" stdset="0" >
-        <string>Filename</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QProgressBar" name="progressBar" >
-       <property name="value" >
-        <number>0</number>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="SqueezeLabel" native="1" name="downloadInfoLabel" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Preferred" hsizetype="Minimum" >
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="text" stdset="0" >
-        <string/>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <layout class="QVBoxLayout" name="verticalLayout" >
-     <item>
-      <spacer name="verticalSpacer" >
-       <property name="orientation" >
-        <enum>Qt::Vertical</enum>
-       </property>
-       <property name="sizeHint" stdset="0" >
-        <size>
-         <width>17</width>
-         <height>1</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-     <item>
-      <widget class="QPushButton" name="stopButton" >
-       <property name="text" >
-        <string>Stop</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QPushButton" name="openButton" >
-       <property name="text" >
-        <string>Open</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <spacer name="verticalSpacer_2" >
-       <property name="orientation" >
-        <enum>Qt::Vertical</enum>
-       </property>
-       <property name="sizeHint" stdset="0" >
-        <size>
-         <width>17</width>
-         <height>5</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-    </layout>
-   </item>
-  </layout>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>SqueezeLabel</class>
-   <extends>QWidget</extends>
-   <header>squeezelabel.h</header>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>
diff --git a/examples/webenginewidgets/demobrowser/downloadmanager.cpp b/examples/webenginewidgets/demobrowser/downloadmanager.cpp
deleted file mode 100644
index 012d0620e684d510eecc43df7e6fc1133a302c5a..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/downloadmanager.cpp
+++ /dev/null
@@ -1,505 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "downloadmanager.h"
-
-#include "autosaver.h"
-#include "browserapplication.h"
-
-#include <math.h>
-
-#include <QtCore/QMetaEnum>
-#include <QtCore/QSettings>
-
-#include <QtGui/QDesktopServices>
-#include <QtWidgets/QFileDialog>
-#include <QtWidgets/QHeaderView>
-#include <QtWidgets/QFileIconProvider>
-
-#include <QtCore/QDebug>
-
-#include <QWebEngineSettings>
-#include <QWebEngineDownloadItem>
-
-/*!
-    DownloadWidget is a widget that is displayed in the download manager list.
-    It moves the data from the QWebEngineDownloadItem into the QFile as well
-    as update the information/progressbar and report errors.
- */
-
-DownloadWidget::DownloadWidget(QWebEngineDownloadItem *download, QWidget *parent)
-    : QWidget(parent)
-    , m_bytesReceived(0)
-    , m_download(download)
-{
-    setupUi(this);
-    QPalette p = downloadInfoLabel->palette();
-    p.setColor(QPalette::Text, Qt::darkGray);
-    downloadInfoLabel->setPalette(p);
-    progressBar->setMaximum(0);
-    connect(stopButton, SIGNAL(clicked()), this, SLOT(stop()));
-    connect(openButton, SIGNAL(clicked()), this, SLOT(open()));
-
-    if (download) {
-        m_file.setFile(download->path());
-        m_url = download->url();
-    }
-
-    init();
-}
-
-void DownloadWidget::init()
-{
-    if (m_download) {
-        connect(m_download.data(), SIGNAL(downloadProgress(qint64,qint64)),
-                this, SLOT(downloadProgress(qint64,qint64)));
-        connect(m_download.data(), SIGNAL(finished()),
-                this, SLOT(finished()));
-    }
-
-    // reset info
-    downloadInfoLabel->clear();
-    progressBar->setValue(0);
-    getFileName();
-
-    // start timer for the download estimation
-    m_downloadTime.start();
-}
-
-bool DownloadWidget::getFileName(bool promptForFileName)
-{
-    QSettings settings;
-    settings.beginGroup(QLatin1String("downloadmanager"));
-    QString defaultLocation = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
-    if (m_file.absoluteDir().exists())
-        defaultLocation = m_file.absolutePath();
-    QString downloadDirectory = settings.value(QLatin1String("downloadDirectory"), defaultLocation).toString();
-    if (!downloadDirectory.isEmpty())
-        downloadDirectory += QLatin1Char('/');
-
-    QString defaultFileName = QFileInfo(downloadDirectory, m_file.fileName()).absoluteFilePath();
-    QString fileName = defaultFileName;
-    if (promptForFileName) {
-        fileName = QFileDialog::getSaveFileName(this, tr("Save File"), defaultFileName);
-        if (fileName.isEmpty()) {
-            if (m_download)
-                m_download->cancel();
-            fileNameLabel->setText(tr("Download canceled: %1").arg(QFileInfo(defaultFileName).fileName()));
-            return false;
-        }
-    }
-    m_file.setFile(fileName);
-
-    if (m_download && m_download->state() == QWebEngineDownloadItem::DownloadRequested)
-        m_download->setPath(m_file.absoluteFilePath());
-
-    fileNameLabel->setText(m_file.fileName());
-    return true;
-}
-
-void DownloadWidget::stop()
-{
-    setUpdatesEnabled(false);
-    stopButton->setEnabled(false);
-    stopButton->hide();
-    setUpdatesEnabled(true);
-    if (m_download)
-        m_download->cancel();
-
-    emit statusChanged();
-}
-
-void DownloadWidget::open()
-{
-    QUrl url = QUrl::fromLocalFile(m_file.absoluteFilePath());
-    QDesktopServices::openUrl(url);
-}
-
-void DownloadWidget::downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
-{
-    m_bytesReceived = bytesReceived;
-    if (bytesTotal == -1) {
-        progressBar->setValue(0);
-        progressBar->setMaximum(0);
-    } else {
-        progressBar->setValue(bytesReceived);
-        progressBar->setMaximum(bytesTotal);
-    }
-    updateInfoLabel();
-}
-
-void DownloadWidget::updateInfoLabel()
-{
-    qint64 bytesTotal = progressBar->maximum();
-
-    // update info label
-    double speed = m_bytesReceived * 1000.0 / m_downloadTime.elapsed();
-    double timeRemaining = ((double)(bytesTotal - m_bytesReceived)) / speed;
-    QString timeRemainingString = tr("seconds");
-    if (timeRemaining > 60) {
-        timeRemaining = timeRemaining / 60;
-        timeRemainingString = tr("minutes");
-    }
-    timeRemaining = floor(timeRemaining);
-
-    // When downloading the eta should never be 0
-    if (timeRemaining == 0)
-        timeRemaining = 1;
-
-    QString info;
-    if (!downloadedSuccessfully()) {
-        QString remaining;
-        if (bytesTotal != 0)
-            remaining = tr("- %4 %5 remaining")
-            .arg(timeRemaining)
-            .arg(timeRemainingString);
-        info = tr("%1 of %2 (%3/sec) %4")
-            .arg(dataString(m_bytesReceived))
-            .arg(bytesTotal == 0 ? tr("?") : dataString(bytesTotal))
-            .arg(dataString((int)speed))
-            .arg(remaining);
-    } else {
-        if (m_bytesReceived != bytesTotal) {
-            info = tr("%1 of %2 - Stopped")
-                .arg(dataString(m_bytesReceived))
-                .arg(dataString(bytesTotal));
-        } else
-            info = dataString(m_bytesReceived);
-    }
-    downloadInfoLabel->setText(info);
-}
-
-QString DownloadWidget::dataString(int size) const
-{
-    QString unit;
-    if (size < 1024) {
-        unit = tr("bytes");
-    } else if (size < 1024*1024) {
-        size /= 1024;
-        unit = tr("kB");
-    } else {
-        size /= 1024*1024;
-        unit = tr("MB");
-    }
-    return QString(QLatin1String("%1 %2")).arg(size).arg(unit);
-}
-
-bool DownloadWidget::downloading() const
-{
-    return (progressBar->isVisible());
-}
-
-bool DownloadWidget::downloadedSuccessfully() const
-{
-    bool completed = m_download
-            && m_download->isFinished()
-            && m_download->state() == QWebEngineDownloadItem::DownloadCompleted;
-    return completed || !stopButton->isVisible();
-}
-
-void DownloadWidget::finished()
-{
-    if (m_download) {
-        QWebEngineDownloadItem::DownloadState state = m_download->state();
-        QString message;
-        bool interrupted = false;
-
-        switch (state) {
-        case QWebEngineDownloadItem::DownloadRequested: // Fall-through.
-        case QWebEngineDownloadItem::DownloadInProgress:
-            Q_UNREACHABLE();
-            break;
-        case QWebEngineDownloadItem::DownloadCompleted:
-            break;
-        case QWebEngineDownloadItem::DownloadCancelled:
-            message = QStringLiteral("Download cancelled");
-            interrupted = true;
-            break;
-        case QWebEngineDownloadItem::DownloadInterrupted:
-            message = QStringLiteral("Download interrupted: %1").arg(m_download->interruptReasonString());
-            interrupted = true;
-            break;
-        }
-
-        if (interrupted) {
-            downloadInfoLabel->setText(message);
-            return;
-        }
-    }
-
-    progressBar->hide();
-    stopButton->setEnabled(false);
-    stopButton->hide();
-    updateInfoLabel();
-    emit statusChanged();
-}
-
-/*!
-    DownloadManager is a Dialog that contains a list of DownloadWidgets
-
-    It is a basic download manager.  It only downloads the file, doesn't do BitTorrent,
-    extract zipped files or anything fancy.
-  */
-DownloadManager::DownloadManager(QWidget *parent)
-    : QDialog(parent)
-    , m_autoSaver(new AutoSaver(this))
-    , m_iconProvider(0)
-    , m_removePolicy(Never)
-{
-    setupUi(this);
-    downloadsView->setShowGrid(false);
-    downloadsView->verticalHeader()->hide();
-    downloadsView->horizontalHeader()->hide();
-    downloadsView->setAlternatingRowColors(true);
-    downloadsView->horizontalHeader()->setStretchLastSection(true);
-    m_model = new DownloadModel(this);
-    downloadsView->setModel(m_model);
-    connect(cleanupButton, SIGNAL(clicked()), this, SLOT(cleanup()));
-    load();
-}
-
-DownloadManager::~DownloadManager()
-{
-    m_autoSaver->changeOccurred();
-    m_autoSaver->saveIfNeccessary();
-    if (m_iconProvider)
-        delete m_iconProvider;
-}
-
-int DownloadManager::activeDownloads() const
-{
-    int count = 0;
-    for (int i = 0; i < m_downloads.count(); ++i) {
-        if (m_downloads.at(i)->stopButton->isEnabled())
-            ++count;
-    }
-    return count;
-}
-
-void DownloadManager::download(QWebEngineDownloadItem *download)
-{
-    DownloadWidget *widget = new DownloadWidget(download, this);
-    addItem(widget);
-}
-
-void DownloadManager::addItem(DownloadWidget *widget)
-{
-    connect(widget, SIGNAL(statusChanged()), this, SLOT(updateRow()));
-    int row = m_downloads.count();
-    m_model->beginInsertRows(QModelIndex(), row, row);
-    m_downloads.append(widget);
-    m_model->endInsertRows();
-    updateItemCount();
-    if (row == 0)
-        show();
-    downloadsView->setIndexWidget(m_model->index(row, 0), widget);
-    QIcon icon = style()->standardIcon(QStyle::SP_FileIcon);
-    widget->fileIcon->setPixmap(icon.pixmap(48, 48));
-    downloadsView->setRowHeight(row, widget->sizeHint().height());
-}
-
-void DownloadManager::updateRow()
-{
-    DownloadWidget *widget = qobject_cast<DownloadWidget*>(sender());
-    int row = m_downloads.indexOf(widget);
-    if (-1 == row)
-        return;
-    if (!m_iconProvider)
-        m_iconProvider = new QFileIconProvider();
-    QIcon icon = m_iconProvider->icon(widget->m_file);
-    if (icon.isNull())
-        icon = style()->standardIcon(QStyle::SP_FileIcon);
-    widget->fileIcon->setPixmap(icon.pixmap(48, 48));
-    downloadsView->setRowHeight(row, widget->minimumSizeHint().height());
-
-    bool remove = false;
-    if (!widget->downloading()
-        && BrowserApplication::instance()->privateBrowsing())
-        remove = true;
-
-    if (widget->downloadedSuccessfully()
-        && removePolicy() == DownloadManager::SuccessFullDownload) {
-        remove = true;
-    }
-    if (remove)
-        m_model->removeRow(row);
-
-    cleanupButton->setEnabled(m_downloads.count() - activeDownloads() > 0);
-}
-
-DownloadManager::RemovePolicy DownloadManager::removePolicy() const
-{
-    return m_removePolicy;
-}
-
-void DownloadManager::setRemovePolicy(RemovePolicy policy)
-{
-    if (policy == m_removePolicy)
-        return;
-    m_removePolicy = policy;
-    m_autoSaver->changeOccurred();
-}
-
-void DownloadManager::save() const
-{
-    QSettings settings;
-    settings.beginGroup(QLatin1String("downloadmanager"));
-    QMetaEnum removePolicyEnum = staticMetaObject.enumerator(staticMetaObject.indexOfEnumerator("RemovePolicy"));
-    settings.setValue(QLatin1String("removeDownloadsPolicy"), QLatin1String(removePolicyEnum.valueToKey(m_removePolicy)));
-    settings.setValue(QLatin1String("size"), size());
-    if (m_removePolicy == Exit)
-        return;
-
-    for (int i = 0; i < m_downloads.count(); ++i) {
-        QString key = QString(QLatin1String("download_%1_")).arg(i);
-        settings.setValue(key + QLatin1String("url"), m_downloads[i]->m_url);
-        settings.setValue(key + QLatin1String("location"), m_downloads[i]->m_file.filePath());
-        settings.setValue(key + QLatin1String("done"), m_downloads[i]->downloadedSuccessfully());
-    }
-    int i = m_downloads.count();
-    QString key = QString(QLatin1String("download_%1_")).arg(i);
-    while (settings.contains(key + QLatin1String("url"))) {
-        settings.remove(key + QLatin1String("url"));
-        settings.remove(key + QLatin1String("location"));
-        settings.remove(key + QLatin1String("done"));
-        key = QString(QLatin1String("download_%1_")).arg(++i);
-    }
-}
-
-void DownloadManager::load()
-{
-    QSettings settings;
-    settings.beginGroup(QLatin1String("downloadmanager"));
-    QSize size = settings.value(QLatin1String("size")).toSize();
-    if (size.isValid())
-        resize(size);
-    QByteArray value = settings.value(QLatin1String("removeDownloadsPolicy"), QLatin1String("Never")).toByteArray();
-    QMetaEnum removePolicyEnum = staticMetaObject.enumerator(staticMetaObject.indexOfEnumerator("RemovePolicy"));
-    m_removePolicy = removePolicyEnum.keyToValue(value) == -1 ?
-                        Never :
-                        static_cast<RemovePolicy>(removePolicyEnum.keyToValue(value));
-
-    int i = 0;
-    QString key = QString(QLatin1String("download_%1_")).arg(i);
-    while (settings.contains(key + QLatin1String("url"))) {
-        QUrl url = settings.value(key + QLatin1String("url")).toUrl();
-        QString fileName = settings.value(key + QLatin1String("location")).toString();
-        bool done = settings.value(key + QLatin1String("done"), true).toBool();
-        if (done && !url.isEmpty() && !fileName.isEmpty()) {
-            DownloadWidget *widget = new DownloadWidget(0, this);
-            widget->m_file.setFile(fileName);
-            widget->fileNameLabel->setText(widget->m_file.fileName());
-            widget->m_url = url;
-            widget->stopButton->setVisible(false);
-            widget->stopButton->setEnabled(false);
-            widget->progressBar->hide();
-            addItem(widget);
-        }
-        key = QString(QLatin1String("download_%1_")).arg(++i);
-    }
-    cleanupButton->setEnabled(m_downloads.count() - activeDownloads() > 0);
-}
-
-void DownloadManager::cleanup()
-{
-    if (m_downloads.isEmpty())
-        return;
-    m_model->removeRows(0, m_downloads.count());
-    updateItemCount();
-    if (m_downloads.isEmpty() && m_iconProvider) {
-        delete m_iconProvider;
-        m_iconProvider = 0;
-    }
-    m_autoSaver->changeOccurred();
-}
-
-void DownloadManager::updateItemCount()
-{
-    int count = m_downloads.count();
-    itemCount->setText(count == 1 ? tr("1 Download") : tr("%1 Downloads").arg(count));
-}
-
-DownloadModel::DownloadModel(DownloadManager *downloadManager, QObject *parent)
-    : QAbstractListModel(parent)
-    , m_downloadManager(downloadManager)
-{
-}
-
-QVariant DownloadModel::data(const QModelIndex &index, int role) const
-{
-    if (index.row() < 0 || index.row() >= rowCount(index.parent()))
-        return QVariant();
-    if (role == Qt::ToolTipRole)
-        if (!m_downloadManager->m_downloads.at(index.row())->downloadedSuccessfully())
-            return m_downloadManager->m_downloads.at(index.row())->downloadInfoLabel->text();
-    return QVariant();
-}
-
-int DownloadModel::rowCount(const QModelIndex &parent) const
-{
-    return (parent.isValid()) ? 0 : m_downloadManager->m_downloads.count();
-}
-
-bool DownloadModel::removeRows(int row, int count, const QModelIndex &parent)
-{
-    if (parent.isValid())
-        return false;
-
-    int lastRow = row + count - 1;
-    for (int i = lastRow; i >= row; --i) {
-        if (m_downloadManager->m_downloads.at(i)->downloadedSuccessfully()) {
-            beginRemoveRows(parent, i, i);
-            m_downloadManager->m_downloads.takeAt(i)->deleteLater();
-            endRemoveRows();
-        }
-    }
-    m_downloadManager->m_autoSaver->changeOccurred();
-    return true;
-}
diff --git a/examples/webenginewidgets/demobrowser/downloadmanager.h b/examples/webenginewidgets/demobrowser/downloadmanager.h
deleted file mode 100644
index ea5a7e79d7ed22d552892ff33fe6efbc2d309610..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/downloadmanager.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef DOWNLOADMANAGER_H
-#define DOWNLOADMANAGER_H
-
-#include "ui_downloads.h"
-#include "ui_downloaditem.h"
-
-#include <QtCore/QFileInfo>
-#include <QtCore/QTime>
-#include <QtCore/QUrl>
-
-#include <QWebEngineDownloadItem>
-
-class DownloadManager;
-class DownloadWidget : public QWidget, public Ui_DownloadItem
-{
-    Q_OBJECT
-
-signals:
-    void statusChanged();
-
-public:
-    DownloadWidget(QWebEngineDownloadItem *download, QWidget *parent = 0);
-    bool downloading() const;
-    bool downloadedSuccessfully() const;
-
-    void init();
-    bool getFileName(bool promptForFileName = false);
-
-private slots:
-    void stop();
-    void open();
-
-    void downloadProgress(qint64 bytesReceived, qint64 bytesTotal);
-    void finished();
-
-private:
-    friend class DownloadManager;
-    void updateInfoLabel();
-    QString dataString(int size) const;
-
-    QUrl m_url;
-    QFileInfo m_file;
-    qint64 m_bytesReceived;
-    QTime m_downloadTime;
-    bool m_stopped;
-
-    QScopedPointer<QWebEngineDownloadItem> m_download;
-};
-
-class AutoSaver;
-class DownloadModel;
-QT_BEGIN_NAMESPACE
-class QFileIconProvider;
-QT_END_NAMESPACE
-
-class DownloadManager : public QDialog, public Ui_DownloadDialog
-{
-    Q_OBJECT
-    Q_PROPERTY(RemovePolicy removePolicy READ removePolicy WRITE setRemovePolicy)
-
-public:
-    enum RemovePolicy {
-        Never,
-        Exit,
-        SuccessFullDownload
-    };
-    Q_ENUM(RemovePolicy)
-
-    DownloadManager(QWidget *parent = 0);
-    ~DownloadManager();
-    int activeDownloads() const;
-
-    RemovePolicy removePolicy() const;
-    void setRemovePolicy(RemovePolicy policy);
-
-public slots:
-    void download(QWebEngineDownloadItem *download);
-    void cleanup();
-
-private slots:
-    void save() const;
-    void updateRow();
-
-private:
-    void addItem(DownloadWidget *item);
-    void updateItemCount();
-    void load();
-
-    AutoSaver *m_autoSaver;
-    DownloadModel *m_model;
-    QFileIconProvider *m_iconProvider;
-    QList<DownloadWidget*> m_downloads;
-    RemovePolicy m_removePolicy;
-    friend class DownloadModel;
-};
-
-class DownloadModel : public QAbstractListModel
-{
-    friend class DownloadManager;
-    Q_OBJECT
-
-public:
-    DownloadModel(DownloadManager *downloadManager, QObject *parent = 0);
-    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
-    int rowCount(const QModelIndex &parent = QModelIndex()) const;
-    bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
-
-private:
-    DownloadManager *m_downloadManager;
-
-};
-
-#endif // DOWNLOADMANAGER_H
diff --git a/examples/webenginewidgets/demobrowser/downloads.ui b/examples/webenginewidgets/demobrowser/downloads.ui
deleted file mode 100644
index a2e256935bfe8f80bd02ac77afbf670cd9f12967..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/downloads.ui
+++ /dev/null
@@ -1,83 +0,0 @@
-<ui version="4.0" >
- <class>DownloadDialog</class>
- <widget class="QDialog" name="DownloadDialog" >
-  <property name="geometry" >
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>332</width>
-    <height>252</height>
-   </rect>
-  </property>
-  <property name="windowTitle" >
-   <string>Downloads</string>
-  </property>
-  <layout class="QGridLayout" name="gridLayout" >
-   <property name="margin" >
-    <number>0</number>
-   </property>
-   <property name="spacing" >
-    <number>0</number>
-   </property>
-   <item row="0" column="0" colspan="3" >
-    <widget class="EditTableView" name="downloadsView" />
-   </item>
-   <item row="1" column="0" >
-    <layout class="QHBoxLayout" name="horizontalLayout" >
-     <item>
-      <widget class="QPushButton" name="cleanupButton" >
-       <property name="enabled" >
-        <bool>false</bool>
-       </property>
-       <property name="text" >
-        <string>Clean up</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <spacer>
-       <property name="orientation" >
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0" >
-        <size>
-         <width>58</width>
-         <height>24</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-    </layout>
-   </item>
-   <item row="1" column="1" >
-    <widget class="QLabel" name="itemCount" >
-     <property name="text" >
-      <string>0 Items</string>
-     </property>
-    </widget>
-   </item>
-   <item row="1" column="2" >
-    <spacer name="horizontalSpacer" >
-     <property name="orientation" >
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="sizeHint" stdset="0" >
-      <size>
-       <width>148</width>
-       <height>20</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-  </layout>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>EditTableView</class>
-   <extends>QTableView</extends>
-   <header>edittableview.h</header>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>
diff --git a/examples/webenginewidgets/demobrowser/edittableview.cpp b/examples/webenginewidgets/demobrowser/edittableview.cpp
deleted file mode 100644
index 4d237ecd97440ac2836e977582a4efd1d4856874..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/edittableview.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "edittableview.h"
-#include <QtGui/QKeyEvent>
-
-EditTableView::EditTableView(QWidget *parent)
-    : QTableView(parent)
-{
-}
-
-void EditTableView::keyPressEvent(QKeyEvent *event)
-{
-    if ((event->key() == Qt::Key_Delete
-        || event->key() == Qt::Key_Backspace)
-        && model()) {
-        removeOne();
-    } else {
-        QAbstractItemView::keyPressEvent(event);
-    }
-}
-
-void EditTableView::removeOne()
-{
-    if (!model() || !selectionModel())
-        return;
-    int row = currentIndex().row();
-    model()->removeRow(row, rootIndex());
-    QModelIndex idx = model()->index(row, 0, rootIndex());
-    if (!idx.isValid())
-        idx = model()->index(row - 1, 0, rootIndex());
-    selectionModel()->select(idx, QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows);
-}
-
-void EditTableView::removeAll()
-{
-    if (model())
-        model()->removeRows(0, model()->rowCount(rootIndex()), rootIndex());
-}
diff --git a/examples/webenginewidgets/demobrowser/edittableview.h b/examples/webenginewidgets/demobrowser/edittableview.h
deleted file mode 100644
index 1acee59f19a81a6e4ab3e26874f9d6cf3d1d4883..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/edittableview.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef EDITTABLEVIEW_H
-#define EDITTABLEVIEW_H
-
-#include <QtWidgets/QTableView>
-
-class EditTableView : public QTableView
-{
-    Q_OBJECT
-
-public:
-    EditTableView(QWidget *parent = 0);
-    void keyPressEvent(QKeyEvent *event);
-
-public slots:
-    void removeOne();
-    void removeAll();
-};
-
-#endif // EDITTABLEVIEW_H
diff --git a/examples/webenginewidgets/demobrowser/edittreeview.cpp b/examples/webenginewidgets/demobrowser/edittreeview.cpp
deleted file mode 100644
index f4c9a0d70a6dbf27b4c9afa3a21982128bdfa7f2..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/edittreeview.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "edittreeview.h"
-#include "browserapplication.h"
-#include "history.h"
-
-#include <QtGui/QKeyEvent>
-
-EditTreeView::EditTreeView(QWidget *parent)
-    : QTreeView(parent)
-{
-}
-
-void EditTreeView::keyPressEvent(QKeyEvent *event)
-{
-    if ((event->key() == Qt::Key_Delete
-        || event->key() == Qt::Key_Backspace)
-        && model()) {
-        removeOne();
-    } else {
-        QAbstractItemView::keyPressEvent(event);
-    }
-}
-
-void EditTreeView::removeOne()
-{
-    if (!model())
-        return;
-    QModelIndex ci = currentIndex();
-    BrowserApplication::historyManager()->removeHistoryEntry(model()->data(ci,HistoryModel::UrlStringRole).toString());
-}
-
-void EditTreeView::removeAll()
-{
-    if (!model())
-        return;
-    BrowserApplication::historyManager()->clear();
-}
diff --git a/examples/webenginewidgets/demobrowser/edittreeview.h b/examples/webenginewidgets/demobrowser/edittreeview.h
deleted file mode 100644
index f9dcd5e6355a47a1c32ae29e9fe15e86e4489ce7..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/edittreeview.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef EDITTREEVIEW_H
-#define EDITTREEVIEW_H
-
-#include <QtWidgets/QTreeView>
-
-class EditTreeView : public QTreeView
-{
-    Q_OBJECT
-
-public:
-    EditTreeView(QWidget *parent = 0);
-    void keyPressEvent(QKeyEvent *event);
-
-public slots:
-    void removeOne();
-    void removeAll();
-};
-
-#endif // EDITTREEVIEW_H
diff --git a/examples/webenginewidgets/demobrowser/featurepermissionbar.cpp b/examples/webenginewidgets/demobrowser/featurepermissionbar.cpp
deleted file mode 100644
index 4cac050826c242f1645182f64c32aea564bd15b6..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/featurepermissionbar.cpp
+++ /dev/null
@@ -1,137 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "featurepermissionbar.h"
-
-#include <QLabel>
-#include <QPushButton>
-#include <QHBoxLayout>
-#include <QUrl>
-#include <QPropertyAnimation>
-
-static const int defaultHeight = 30;
-
-static QString textForPermissionType(QWebEnginePage::Feature type)
-{
-    switch (type) {
-    case QWebEnginePage::Notifications:
-        return QObject::tr("use desktop notifications");
-    case QWebEnginePage::Geolocation:
-        return QObject::tr("use your position");
-    case QWebEnginePage::MediaAudioCapture:
-        return QObject::tr("use your microphone");
-    case QWebEnginePage::MediaVideoCapture:
-        return QObject::tr("use your camera");
-    case QWebEnginePage::MediaAudioVideoCapture:
-        return QObject::tr("use your camera and microphone");
-    case QWebEnginePage::MouseLock:
-        return QObject::tr("lock your mouse");
-    default:
-        Q_UNREACHABLE();
-    }
-    return QString();
-}
-
-FeaturePermissionBar::FeaturePermissionBar(QWidget *view)
-    : QWidget(view)
-    , m_messageLabel(new QLabel(this))
-{
-    setAutoFillBackground(true);
-    QHBoxLayout *l = new QHBoxLayout;
-    setLayout(l);
-    l->setContentsMargins(defaultHeight, 0, 0, 0);
-    l->addWidget(m_messageLabel);
-    l->addStretch();
-    QPushButton *allowButton = new QPushButton(tr("Allow"), this);
-    QPushButton *denyButton = new QPushButton(tr("Deny"), this);
-    QPushButton *discardButton = new QPushButton(QIcon(QStringLiteral(":closetab.png")), QString(), this);
-    connect(allowButton, &QPushButton::clicked, this, &FeaturePermissionBar::permissionGranted);
-    connect(denyButton, &QPushButton::clicked, this, &FeaturePermissionBar::permissionDenied);
-    connect(discardButton, &QPushButton::clicked, this, &FeaturePermissionBar::permissionUnknown);
-    connect(allowButton, &QPushButton::clicked, this, &QObject::deleteLater);
-    connect(denyButton, &QPushButton::clicked, this, &QObject::deleteLater);
-    connect(discardButton, &QPushButton::clicked, this, &QObject::deleteLater);
-    l->addWidget(denyButton);
-    l->addWidget(allowButton);
-    l->addWidget(discardButton);
-    setGeometry(0, -defaultHeight, view->width(), defaultHeight);
-}
-
-void FeaturePermissionBar::requestPermission(const QUrl &securityOrigin, QWebEnginePage::Feature feature)
-{
-    m_securityOrigin = securityOrigin;
-    m_feature = feature;
-    m_messageLabel->setText(tr("%1 wants to %2.").arg(securityOrigin.host()).arg(textForPermissionType(feature)));
-    show();
-    // Ease in
-    QPropertyAnimation *animation = new QPropertyAnimation(this);
-    animation->setTargetObject(this);
-    animation->setPropertyName(QByteArrayLiteral("pos"));
-    animation->setDuration(300);
-    animation->setStartValue(QVariant::fromValue(pos()));
-    animation->setEndValue(QVariant::fromValue(QPoint(0,0)));
-    animation->setEasingCurve(QEasingCurve::InOutQuad);
-    animation->start(QPropertyAnimation::DeleteWhenStopped);
-}
-
-void FeaturePermissionBar::permissionDenied()
-{
-    emit featurePermissionProvided(m_securityOrigin, m_feature, QWebEnginePage::PermissionDeniedByUser);
-}
-
-void FeaturePermissionBar::permissionGranted()
-{
-    emit featurePermissionProvided(m_securityOrigin, m_feature, QWebEnginePage::PermissionGrantedByUser);
-}
-
-void FeaturePermissionBar::permissionUnknown()
-{
-    emit featurePermissionProvided(m_securityOrigin, m_feature, QWebEnginePage::PermissionUnknown);
-}
diff --git a/examples/webenginewidgets/demobrowser/featurepermissionbar.h b/examples/webenginewidgets/demobrowser/featurepermissionbar.h
deleted file mode 100644
index 63290df3ba8ac45358482efe98b342b3c3ddec6e..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/featurepermissionbar.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtWebEngine module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef FEATUREPERMISSIONBAR_H
-#define FEATUREPERMISSIONBAR_H
-
-#include <QWidget>
-#include <QWebEnginePage>
-
-QT_BEGIN_NAMESPACE
-class QLabel;
-class QPushButton;
-QT_END_NAMESPACE
-
-class FeaturePermissionBar : public QWidget {
-Q_OBJECT
-
-public:
-    FeaturePermissionBar(QWidget*);
-    void requestPermission(const QUrl &, QWebEnginePage::Feature feature);
-
-signals:
-    void featurePermissionProvided(const QUrl &securityOrigin, QWebEnginePage::Feature, QWebEnginePage::PermissionPolicy);
-
-private slots:
-    void permissionDenied();
-    void permissionGranted();
-    void permissionUnknown();
-
-private:
-    QWebEnginePage::Feature m_feature;
-    QLabel *m_messageLabel;
-    QUrl m_securityOrigin;
-};
-
-#endif // FEATUREPERMISSIONBAR_H
diff --git a/examples/webenginewidgets/demobrowser/fullscreennotification.cpp b/examples/webenginewidgets/demobrowser/fullscreennotification.cpp
deleted file mode 100644
index aadabbadbf121aa68584c0650fed63f578c13bd5..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/fullscreennotification.cpp
+++ /dev/null
@@ -1,121 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "fullscreennotification.h"
-
-#include <QApplication>
-#include <QDesktopWidget>
-#include <QGridLayout>
-#include <QLabel>
-#include <QPropertyAnimation>
-#include <QTimer>
-
-FullScreenNotification::FullScreenNotification(QWidget *parent)
-    : QWidget(parent)
-    , width(400)
-    , height(80)
-    , x((parent->geometry().width() - width) / 2)
-    , y(80)
-{
-    setVisible(false);
-    setWindowFlags(Qt::ToolTip | Qt::WindowDoesNotAcceptFocus);
-
-    QGridLayout *layout = new QGridLayout(this);
-
-    m_label = new QLabel(tr("You are now in fullscreen mode. Press ESC to quit!"), this);
-    layout->addWidget(m_label, 0, 0, 0, 0, Qt::AlignHCenter | Qt::AlignVCenter);
-
-    setGeometry(x, y, width, height);
-
-    setStyleSheet("background-color: white;\
-        color: black;");
-
-    m_animation = new QPropertyAnimation(this, "windowOpacity");
-    connect(m_animation, SIGNAL(finished()), this, SLOT(fadeOutFinished()));
-}
-
-FullScreenNotification::~FullScreenNotification()
-{
-}
-
-void FullScreenNotification::show()
-{
-    setWindowOpacity(1.0);
-    QTimer::singleShot(300, [&] {
-        QWidget *parent = parentWidget();
-        x = (parent->geometry().width() - width) / 2;
-        QPoint topLeft = parent->mapToGlobal(QPoint(x, y));
-        QWidget::move(topLeft.x(), topLeft.y());
-        QWidget::show();
-        QWidget::raise();
-    });
-    QTimer::singleShot(5000, this, SLOT(fadeOut()));
-}
-
-void FullScreenNotification::hide()
-{
-    QWidget::hide();
-    m_animation->stop();
-}
-
-void FullScreenNotification::fadeOut()
-{
-    m_animation->setDuration(800);
-    m_animation->setStartValue(1.0);
-    m_animation->setEndValue(0.0);
-    m_animation->setEasingCurve(QEasingCurve::OutQuad);
-    m_animation->start();
-}
-
-void FullScreenNotification::fadeOutFinished()
-{
-    hide();
-    setWindowOpacity(1.0);
-}
diff --git a/examples/webenginewidgets/demobrowser/fullscreennotification.h b/examples/webenginewidgets/demobrowser/fullscreennotification.h
deleted file mode 100644
index 260f8e72f5284027ebdaf3c9cd6b73547957227e..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/fullscreennotification.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef FULLSCREENNOTIFICATION_H
-#define FULLSCREENNOTIFICATION_H
-
-#include <QWidget>
-
-QT_BEGIN_NAMESPACE
-class QLabel;
-class QGridLayout;
-class QPropertyAnimation;
-QT_END_NAMESPACE
-
-class FullScreenNotification : public QWidget
-{
-    Q_OBJECT
-public:
-    FullScreenNotification(QWidget *parent = 0);
-    ~FullScreenNotification();
-
-    void show();
-    void hide();
-
-public slots:
-    void fadeOut();
-    void fadeOutFinished();
-
-private:
-    QLabel *m_label;
-    QGridLayout *m_layout;
-    QPropertyAnimation *m_animation;
-    int width;
-    int height;
-    int x;
-    int y;
-};
-
-#endif // FULLSCREENNOTIFICATION_H
diff --git a/examples/webenginewidgets/demobrowser/history.cpp b/examples/webenginewidgets/demobrowser/history.cpp
deleted file mode 100644
index bce65b917d8cc77d731e87b956d31a1dce7d6c1f..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/history.cpp
+++ /dev/null
@@ -1,1314 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "history.h"
-
-#include "autosaver.h"
-#include "browserapplication.h"
-
-#include <QtCore/QBuffer>
-#include <QtCore/QDir>
-#include <QtCore/QFile>
-#include <QtCore/QFileInfo>
-#include <QtCore/QSettings>
-#include <QtCore/QTemporaryFile>
-#include <QtCore/QTextStream>
-
-#include <QtCore/QtAlgorithms>
-
-#include <QtGui/QClipboard>
-#include <QtGui/QDesktopServices>
-#include <QtWidgets/QHeaderView>
-#include <QtWidgets/QStyle>
-
-#include <QWebEngineSettings>
-
-#include <QtCore/QDebug>
-
-static const unsigned int HISTORY_VERSION = 23;
-
-HistoryManager::HistoryManager(QObject *parent)
-    : QObject(parent)
-    , m_saveTimer(new AutoSaver(this))
-    , m_historyLimit(30)
-    , m_historyModel(0)
-    , m_historyFilterModel(0)
-    , m_historyTreeModel(0)
-{
-    m_expiredTimer.setSingleShot(true);
-    connect(&m_expiredTimer, SIGNAL(timeout()),
-            this, SLOT(checkForExpired()));
-    connect(this, SIGNAL(entryAdded(HistoryItem)),
-            m_saveTimer, SLOT(changeOccurred()));
-    connect(this, SIGNAL(entryRemoved(HistoryItem)),
-            m_saveTimer, SLOT(changeOccurred()));
-    load();
-
-    m_historyModel = new HistoryModel(this, this);
-    m_historyFilterModel = new HistoryFilterModel(m_historyModel, this);
-    m_historyTreeModel = new HistoryTreeModel(m_historyFilterModel, this);
-}
-
-HistoryManager::~HistoryManager()
-{
-    m_saveTimer->saveIfNeccessary();
-}
-
-QList<HistoryItem> &HistoryManager::history()
-{
-    return m_history;
-}
-
-bool HistoryManager::historyContains(const QString &url) const
-{
-    return m_historyFilterModel->historyContains(url);
-}
-
-void HistoryManager::addHistoryEntry(const QString &url)
-{
-    QUrl cleanUrl(url);
-    cleanUrl.setPassword(QString());
-    cleanUrl.setHost(cleanUrl.host().toLower());
-    HistoryItem item(cleanUrl.toString(), QDateTime::currentDateTime());
-    addHistoryItem(item);
-}
-
-void HistoryManager::removeHistoryEntry(const QString &url)
-{
-    QUrl cleanUrl(url);
-    cleanUrl.setPassword(QString());
-    cleanUrl.setHost(cleanUrl.host().toLower());
-    HistoryItem item(cleanUrl.toString(), QDateTime::currentDateTime());
-    removeHistoryItem(item);
-}
-
-void HistoryManager::setHistory(const QList<HistoryItem> &history, bool loadedAndSorted)
-{
-    m_history = history;
-
-    // verify that it is sorted by date
-    if (!loadedAndSorted)
-        qSort(m_history.begin(), m_history.end());
-
-    checkForExpired(loadedAndSorted);
-
-    if (loadedAndSorted) {
-        m_lastSavedUrl = m_history.value(0).url;
-    } else {
-        m_lastSavedUrl = QString();
-        m_saveTimer->changeOccurred();
-    }
-    emit historyReset();
-}
-
-HistoryModel *HistoryManager::historyModel() const
-{
-    return m_historyModel;
-}
-
-HistoryFilterModel *HistoryManager::historyFilterModel() const
-{
-    return m_historyFilterModel;
-}
-
-HistoryTreeModel *HistoryManager::historyTreeModel() const
-{
-    return m_historyTreeModel;
-}
-
-void HistoryManager::checkForExpired(bool removeEntriesDirectly)
-{
-    if (m_historyLimit < 0 || m_history.isEmpty())
-        return;
-
-    QDateTime now = QDateTime::currentDateTime();
-    int nextTimeout = 0;
-
-    while (!m_history.isEmpty()) {
-        QDateTime checkForExpired = m_history.last().dateTime;
-        checkForExpired.setDate(checkForExpired.date().addDays(m_historyLimit));
-        if (now.daysTo(checkForExpired) > 7) {
-            // check at most in a week to prevent int overflows on the timer
-            nextTimeout = 7 * 86400;
-        } else {
-            nextTimeout = now.secsTo(checkForExpired);
-        }
-        if (nextTimeout > 0)
-            break;
-        const HistoryItem& item = m_history.last();
-        // remove from saved file also
-        m_lastSavedUrl = QString();
-
-        if (removeEntriesDirectly)
-            m_history.takeLast();
-        else
-            emit entryRemoved(item);
-    }
-
-    if (nextTimeout > 0)
-        m_expiredTimer.start(nextTimeout * 1000);
-}
-
-void HistoryManager::addHistoryItem(const HistoryItem &item)
-{
-    if (BrowserApplication::instance()->privateBrowsing())
-        return;
-
-    emit entryAdded(item);
-    if (m_history.count() == 1)
-        checkForExpired();
-}
-
-void HistoryManager::removeHistoryItem(const HistoryItem &item)
-{
-    for (int i = m_history.count() - 1 ; i >= 0; --i) {
-        if (item.url == m_history.at(i).url) {
-            //delete all related entries with that url
-            emit entryRemoved(m_history.at(i));
-        }
-    }
-}
-
-void HistoryManager::updateHistoryItem(const QUrl &url, const QString &title)
-{
-    for (int i = 0; i < m_history.count(); ++i) {
-        if (url == m_history.at(i).url) {
-            m_history[i].title = title;
-            m_saveTimer->changeOccurred();
-            if (m_lastSavedUrl.isEmpty())
-                m_lastSavedUrl = m_history.at(i).url;
-            emit entryUpdated(i);
-            break;
-        }
-    }
-}
-
-int HistoryManager::historyLimit() const
-{
-    return m_historyLimit;
-}
-
-void HistoryManager::setHistoryLimit(int limit)
-{
-    if (m_historyLimit == limit)
-        return;
-    m_historyLimit = limit;
-    checkForExpired();
-    m_saveTimer->changeOccurred();
-}
-
-void HistoryManager::clear()
-{
-    m_lastSavedUrl = QString();
-    emit historyReset();
-    m_saveTimer->changeOccurred();
-    m_saveTimer->saveIfNeccessary();
-}
-
-void HistoryManager::loadSettings()
-{
-    // load settings
-    QSettings settings;
-    settings.beginGroup(QLatin1String("history"));
-    m_historyLimit = settings.value(QLatin1String("historyLimit"), 30).toInt();
-}
-
-void HistoryManager::load()
-{
-    loadSettings();
-
-    QFile historyFile(QStandardPaths::writableLocation(QStandardPaths::DataLocation)
-        + QLatin1String("/history"));
-    if (!historyFile.exists())
-        return;
-    if (!historyFile.open(QFile::ReadOnly)) {
-        qWarning() << "Unable to open history file" << historyFile.fileName();
-        return;
-    }
-
-    QList<HistoryItem> list;
-    QDataStream in(&historyFile);
-    // Double check that the history file is sorted as it is read in
-    bool needToSort = false;
-    HistoryItem lastInsertedItem;
-    QByteArray data;
-    QDataStream stream;
-    QBuffer buffer;
-    stream.setDevice(&buffer);
-    while (!historyFile.atEnd()) {
-        in >> data;
-        buffer.close();
-        buffer.setBuffer(&data);
-        buffer.open(QIODevice::ReadOnly);
-        quint32 ver;
-        stream >> ver;
-        if (ver != HISTORY_VERSION)
-            continue;
-        HistoryItem item;
-        stream >> item.url;
-        stream >> item.dateTime;
-        stream >> item.title;
-
-        if (!item.dateTime.isValid())
-            continue;
-
-        if (item == lastInsertedItem) {
-            if (lastInsertedItem.title.isEmpty() && !list.isEmpty())
-                list[0].title = item.title;
-            continue;
-        }
-
-        if (!needToSort && !list.isEmpty() && lastInsertedItem < item)
-            needToSort = true;
-
-        list.prepend(item);
-        lastInsertedItem = item;
-    }
-    if (needToSort)
-        qSort(list.begin(), list.end());
-
-    setHistory(list, true);
-
-    // If we had to sort re-write the whole history sorted
-    if (needToSort) {
-        m_lastSavedUrl = QString();
-        m_saveTimer->changeOccurred();
-    }
-}
-
-void HistoryManager::save()
-{
-    QSettings settings;
-    settings.beginGroup(QLatin1String("history"));
-    settings.setValue(QLatin1String("historyLimit"), m_historyLimit);
-
-    bool saveAll = m_lastSavedUrl.isEmpty();
-    int first = m_history.count() - 1;
-    if (!saveAll) {
-        // find the first one to save
-        for (int i = 0; i < m_history.count(); ++i) {
-            if (m_history.at(i).url == m_lastSavedUrl) {
-                first = i - 1;
-                break;
-            }
-        }
-    }
-    if (first == m_history.count() - 1)
-        saveAll = true;
-
-    QString directory = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
-    if (directory.isEmpty())
-        directory = QDir::homePath() + QLatin1String("/.") + QCoreApplication::applicationName();
-    if (!QFile::exists(directory)) {
-        QDir dir;
-        dir.mkpath(directory);
-    }
-
-    QFile historyFile(directory + QLatin1String("/history"));
-    // When saving everything use a temporary file to prevent possible data loss.
-    QTemporaryFile tempFile;
-    tempFile.setAutoRemove(false);
-    bool open = false;
-    if (saveAll) {
-        open = tempFile.open();
-    } else {
-        open = historyFile.open(QFile::Append);
-    }
-
-    if (!open) {
-        qWarning() << "Unable to open history file for saving"
-                   << (saveAll ? tempFile.fileName() : historyFile.fileName());
-        return;
-    }
-
-    QDataStream out(saveAll ? &tempFile : &historyFile);
-    for (int i = first; i >= 0; --i) {
-        QByteArray data;
-        QDataStream stream(&data, QIODevice::WriteOnly);
-        HistoryItem item = m_history.at(i);
-        stream << HISTORY_VERSION << item.url << item.dateTime << item.title;
-        out << data;
-    }
-    tempFile.close();
-
-    if (saveAll) {
-        if (historyFile.exists() && !historyFile.remove())
-            qWarning() << "History: error removing old history." << historyFile.errorString();
-        if (!tempFile.rename(historyFile.fileName()))
-            qWarning() << "History: error moving new history over old." << tempFile.errorString() << historyFile.fileName();
-    }
-    m_lastSavedUrl = m_history.value(0).url;
-}
-
-HistoryModel::HistoryModel(HistoryManager *history, QObject *parent)
-    : QAbstractTableModel(parent)
-    , m_history(history)
-{
-    Q_ASSERT(m_history);
-    connect(m_history, SIGNAL(historyReset()),
-            this, SLOT(historyReset()));
-    connect(m_history, SIGNAL(entryRemoved(HistoryItem)),
-            this, SLOT(entryRemoved(HistoryItem)));
-
-    connect(m_history, SIGNAL(entryAdded(HistoryItem)),
-            this, SLOT(entryAdded(HistoryItem)));
-    connect(m_history, SIGNAL(entryUpdated(int)),
-            this, SLOT(entryUpdated(int)));
-}
-
-void HistoryModel::historyReset()
-{
-    beginResetModel();
-    m_history->history().clear();
-    endResetModel();
-}
-
-void HistoryModel::entryAdded(const HistoryItem &item)
-{
-    beginInsertRows(QModelIndex(), 0, 0);
-    m_history->history().prepend(item);
-    endInsertRows();
-}
-
-void HistoryModel::entryRemoved(const HistoryItem &item)
-{
-    int index = m_history->history().indexOf(item);
-    Q_ASSERT(index > -1);
-    beginRemoveRows(QModelIndex(),index, index);
-    m_history->history().takeAt(index);
-    endRemoveRows();
-}
-
-void HistoryModel::entryUpdated(int offset)
-{
-    QModelIndex idx = index(offset, 0);
-    emit dataChanged(idx, idx);
-}
-
-QVariant HistoryModel::headerData(int section, Qt::Orientation orientation, int role) const
-{
-    if (orientation == Qt::Horizontal
-        && role == Qt::DisplayRole) {
-        switch (section) {
-            case 0: return tr("Title");
-            case 1: return tr("Address");
-        }
-    }
-    return QAbstractTableModel::headerData(section, orientation, role);
-}
-
-QVariant HistoryModel::data(const QModelIndex &index, int role) const
-{
-    QList<HistoryItem> lst = m_history->history();
-    if (index.row() < 0 || index.row() >= lst.size())
-        return QVariant();
-
-    const HistoryItem &item = lst.at(index.row());
-    switch (role) {
-    case DateTimeRole:
-        return item.dateTime;
-    case DateRole:
-        return item.dateTime.date();
-    case UrlRole:
-        return QUrl(item.url);
-    case UrlStringRole:
-        return item.url;
-    case Qt::DisplayRole:
-    case Qt::EditRole: {
-        switch (index.column()) {
-            case 0:
-                // when there is no title try to generate one from the url
-                if (item.title.isEmpty()) {
-                    QString page = QFileInfo(QUrl(item.url).path()).fileName();
-                    if (!page.isEmpty())
-                        return page;
-                    return item.url;
-                }
-                return item.title;
-            case 1:
-                return item.url;
-        }
-        }
-    case Qt::DecorationRole:
-        if (index.column() == 0) {
-            return BrowserApplication::instance()->icon(item.url);
-        }
-    }
-    return QVariant();
-}
-
-int HistoryModel::columnCount(const QModelIndex &parent) const
-{
-    return (parent.isValid()) ? 0 : 2;
-}
-
-int HistoryModel::rowCount(const QModelIndex &parent) const
-{
-    return (parent.isValid()) ? 0 : m_history->history().count();
-}
-
-bool HistoryModel::removeRows(int row, int count, const QModelIndex &parent)
-{
-    if (parent.isValid())
-        return false;
-    int lastRow = row + count - 1;
-    beginRemoveRows(parent, row, lastRow);
-    QList<HistoryItem> &lst = m_history->history();
-    for (int i = lastRow; i >= row; --i)
-        lst.removeAt(i);
-    endRemoveRows();
-    return true;
-}
-
-#define MOVEDROWS 15
-
-/*
-    Maps the first bunch of items of the source model to the root
-*/
-HistoryMenuModel::HistoryMenuModel(HistoryTreeModel *sourceModel, QObject *parent)
-    : QAbstractProxyModel(parent)
-    , m_treeModel(sourceModel)
-{
-    setSourceModel(sourceModel);
-}
-
-int HistoryMenuModel::bumpedRows() const
-{
-    QModelIndex first = m_treeModel->index(0, 0);
-    if (!first.isValid())
-        return 0;
-    return qMin(m_treeModel->rowCount(first), MOVEDROWS);
-}
-
-int HistoryMenuModel::columnCount(const QModelIndex &parent) const
-{
-    return m_treeModel->columnCount(mapToSource(parent));
-}
-
-int HistoryMenuModel::rowCount(const QModelIndex &parent) const
-{
-    if (parent.column() > 0)
-        return 0;
-
-    if (!parent.isValid()) {
-        int folders = sourceModel()->rowCount();
-        int bumpedItems = bumpedRows();
-        if (bumpedItems <= MOVEDROWS
-            && bumpedItems == sourceModel()->rowCount(sourceModel()->index(0, 0)))
-            --folders;
-        return bumpedItems + folders;
-    }
-
-    if (parent.internalId() == quintptr(-1)) {
-        if (parent.row() < bumpedRows())
-            return 0;
-    }
-
-    QModelIndex idx = mapToSource(parent);
-    int defaultCount = sourceModel()->rowCount(idx);
-    if (idx == sourceModel()->index(0, 0))
-        return defaultCount - bumpedRows();
-    return defaultCount;
-}
-
-QModelIndex HistoryMenuModel::mapFromSource(const QModelIndex &sourceIndex) const
-{
-    // currently not used or autotested
-    Q_ASSERT(false);
-    int sr = m_treeModel->mapToSource(sourceIndex).row();
-    return createIndex(sourceIndex.row(), sourceIndex.column(), sr);
-}
-
-QModelIndex HistoryMenuModel::mapToSource(const QModelIndex &proxyIndex) const
-{
-    if (!proxyIndex.isValid())
-        return QModelIndex();
-
-    if (proxyIndex.internalId() == quintptr(-1)) {
-        int bumpedItems = bumpedRows();
-        if (proxyIndex.row() < bumpedItems)
-            return m_treeModel->index(proxyIndex.row(), proxyIndex.column(), m_treeModel->index(0, 0));
-        if (bumpedItems <= MOVEDROWS && bumpedItems == sourceModel()->rowCount(m_treeModel->index(0, 0)))
-            --bumpedItems;
-        return m_treeModel->index(proxyIndex.row() - bumpedItems, proxyIndex.column());
-    }
-
-    QModelIndex historyIndex = m_treeModel->sourceModel()->index(proxyIndex.internalId(), proxyIndex.column());
-    QModelIndex treeIndex = m_treeModel->mapFromSource(historyIndex);
-    return treeIndex;
-}
-
-QModelIndex HistoryMenuModel::index(int row, int column, const QModelIndex &parent) const
-{
-    if (row < 0
-        || column < 0 || column >= columnCount(parent)
-        || parent.column() > 0)
-        return QModelIndex();
-    if (!parent.isValid())
-        return createIndex(row, column, quintptr(-1));
-
-    QModelIndex treeIndexParent = mapToSource(parent);
-
-    int bumpedItems = 0;
-    if (treeIndexParent == m_treeModel->index(0, 0))
-        bumpedItems = bumpedRows();
-    QModelIndex treeIndex = m_treeModel->index(row + bumpedItems, column, treeIndexParent);
-    QModelIndex historyIndex = m_treeModel->mapToSource(treeIndex);
-    int historyRow = historyIndex.row();
-    if (historyRow == -1)
-        historyRow = treeIndex.row();
-    return createIndex(row, column, historyRow);
-}
-
-QModelIndex HistoryMenuModel::parent(const QModelIndex &index) const
-{
-    int offset = index.internalId();
-    if (offset == -1 || !index.isValid())
-        return QModelIndex();
-
-    QModelIndex historyIndex = m_treeModel->sourceModel()->index(index.internalId(), 0);
-    QModelIndex treeIndex = m_treeModel->mapFromSource(historyIndex);
-    QModelIndex treeIndexParent = treeIndex.parent();
-
-    int sr = m_treeModel->mapToSource(treeIndexParent).row();
-    int bumpedItems = bumpedRows();
-    if (bumpedItems <= MOVEDROWS && bumpedItems == sourceModel()->rowCount(sourceModel()->index(0, 0)))
-        --bumpedItems;
-    return createIndex(bumpedItems + treeIndexParent.row(), treeIndexParent.column(), sr);
-}
-
-
-HistoryMenu::HistoryMenu(QWidget *parent)
-    : ModelMenu(parent)
-    , m_history(0)
-{
-    connect(this, SIGNAL(activated(QModelIndex)),
-            this, SLOT(activated(QModelIndex)));
-    setHoverRole(HistoryModel::UrlStringRole);
-}
-
-void HistoryMenu::activated(const QModelIndex &index)
-{
-    emit openUrl(index.data(HistoryModel::UrlRole).toUrl());
-}
-
-bool HistoryMenu::prePopulated()
-{
-    if (!m_history) {
-        m_history = BrowserApplication::historyManager();
-        m_historyMenuModel = new HistoryMenuModel(m_history->historyTreeModel(), this);
-        setModel(m_historyMenuModel);
-    }
-    // initial actions
-    for (int i = 0; i < m_initialActions.count(); ++i)
-        addAction(m_initialActions.at(i));
-    if (!m_initialActions.isEmpty())
-        addSeparator();
-    setFirstSeparator(m_historyMenuModel->bumpedRows());
-
-    return false;
-}
-
-void HistoryMenu::postPopulated()
-{
-    if (m_history->history().count() > 0)
-        addSeparator();
-
-    QAction *showAllAction = new QAction(tr("Show All History"), this);
-    connect(showAllAction, SIGNAL(triggered()), this, SLOT(showHistoryDialog()));
-    addAction(showAllAction);
-
-    QAction *clearAction = new QAction(tr("Clear History"), this);
-    connect(clearAction, SIGNAL(triggered()), m_history, SLOT(clear()));
-    addAction(clearAction);
-}
-
-void HistoryMenu::showHistoryDialog()
-{
-    HistoryDialog *dialog = new HistoryDialog(this);
-    connect(dialog, SIGNAL(openUrl(QUrl)),
-            this, SIGNAL(openUrl(QUrl)));
-    dialog->show();
-}
-
-void HistoryMenu::setInitialActions(QList<QAction*> actions)
-{
-    m_initialActions = actions;
-    for (int i = 0; i < m_initialActions.count(); ++i)
-        addAction(m_initialActions.at(i));
-}
-
-TreeProxyModel::TreeProxyModel(QObject *parent) : QSortFilterProxyModel(parent)
-{
-    setSortRole(HistoryModel::DateTimeRole);
-    setFilterCaseSensitivity(Qt::CaseInsensitive);
-}
-
-bool TreeProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
-{
-    return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent);
-}
-
-HistoryDialog::HistoryDialog(QWidget *parent, HistoryManager *setHistory) : QDialog(parent)
-{
-    HistoryManager *history = setHistory;
-    if (!history)
-        history = BrowserApplication::historyManager();
-    setupUi(this);
-    tree->setUniformRowHeights(true);
-    tree->setSelectionBehavior(QAbstractItemView::SelectRows);
-    tree->setTextElideMode(Qt::ElideMiddle);
-    QAbstractItemModel *model = history->historyFilterModel();
-    TreeProxyModel *proxyModel = new TreeProxyModel(this);
-    connect(search, SIGNAL(textChanged(QString)),
-            proxyModel, SLOT(setFilterFixedString(QString)));
-    connect(removeButton, SIGNAL(clicked()), tree, SLOT(removeOne()));
-    connect(removeAllButton, SIGNAL(clicked()), tree, SLOT(removeAll()));
-    proxyModel->setSourceModel(model);
-    proxyModel->setFilterKeyColumn(1);
-    tree->setModel(proxyModel);
-    tree->setSortingEnabled(true);
-    tree->setExpanded(proxyModel->index(0, 0), true);
-    tree->setAlternatingRowColors(true);
-    QFontMetrics fm(font());
-    int header = fm.width(QLatin1Char('m')) * 40;
-    tree->header()->resizeSection(0, header);
-    tree->header()->setStretchLastSection(true);
-    connect(tree, SIGNAL(activated(QModelIndex)),
-            this, SLOT(open()));
-    tree->setContextMenuPolicy(Qt::CustomContextMenu);
-    connect(tree, SIGNAL(customContextMenuRequested(QPoint)),
-            this, SLOT(customContextMenuRequested(QPoint)));
-}
-
-void HistoryDialog::customContextMenuRequested(const QPoint &pos)
-{
-    QMenu menu;
-    QModelIndex index = tree->indexAt(pos);
-    index = index.sibling(index.row(), 0);
-    if (index.isValid() && !tree->model()->hasChildren(index)) {
-        menu.addAction(tr("Open"), this, SLOT(open()));
-        menu.addSeparator();
-        menu.addAction(tr("Copy"), this, SLOT(copy()));
-    }
-    menu.addAction(tr("Delete"), tree, SLOT(removeOne()));
-    menu.exec(QCursor::pos());
-}
-
-void HistoryDialog::open()
-{
-    QModelIndex index = tree->currentIndex();
-    if (!index.parent().isValid())
-        return;
-    emit openUrl(index.data(HistoryModel::UrlRole).toUrl());
-}
-
-void HistoryDialog::copy()
-{
-    QModelIndex index = tree->currentIndex();
-    if (!index.parent().isValid())
-        return;
-    QString url = index.data(HistoryModel::UrlStringRole).toString();
-
-    QClipboard *clipboard = QApplication::clipboard();
-    clipboard->setText(url);
-}
-
-HistoryFilterModel::HistoryFilterModel(QAbstractItemModel *sourceModel, QObject *parent)
-    : QAbstractProxyModel(parent),
-    m_loaded(false)
-{
-    setSourceModel(sourceModel);
-}
-
-void HistoryFilterModel::setSourceModel(QAbstractItemModel *newSourceModel)
-{
-    beginResetModel();
-    if (sourceModel()) {
-        disconnect(sourceModel(), SIGNAL(modelReset()), this, SLOT(sourceReset()));
-        disconnect(sourceModel(), SIGNAL(dataChanged(QModelIndex,QModelIndex)),
-                   this, SLOT(sourceDataChanged(QModelIndex,QModelIndex)));
-        disconnect(sourceModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
-                this, SLOT(sourceRowsInserted(QModelIndex,int,int)));
-        disconnect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
-                this, SLOT(sourceRowsRemoved(QModelIndex,int,int)));
-    }
-
-    QAbstractProxyModel::setSourceModel(newSourceModel);
-
-    if (sourceModel()) {
-        connect(sourceModel(), SIGNAL(modelReset()), this, SLOT(sourceReset()));
-        connect(sourceModel(), SIGNAL(dataChanged(QModelIndex,QModelIndex)),
-                   this, SLOT(sourceDataChanged(QModelIndex,QModelIndex)));
-        connect(sourceModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
-                this, SLOT(sourceRowsInserted(QModelIndex,int,int)));
-        connect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
-                this, SLOT(sourceRowsRemoved(QModelIndex,int,int)));
-    }
-    load();
-    endResetModel();
-}
-
-void HistoryFilterModel::sourceDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
-{
-    emit dataChanged(mapFromSource(topLeft), mapFromSource(bottomRight));
-}
-
-QVariant HistoryFilterModel::headerData(int section, Qt::Orientation orientation, int role) const
-{
-    return sourceModel()->headerData(section, orientation, role);
-}
-
-void HistoryFilterModel::sourceReset()
-{
-    beginResetModel();
-    load();
-    endResetModel();
-}
-
-int HistoryFilterModel::rowCount(const QModelIndex &parent) const
-{
-    if (parent.isValid())
-        return 0;
-    return m_historyHash.count();
-}
-
-int HistoryFilterModel::columnCount(const QModelIndex &parent) const
-{
-    return (parent.isValid()) ? 0 : 2;
-}
-
-QModelIndex HistoryFilterModel::mapToSource(const QModelIndex &proxyIndex) const
-{
-    int sourceRow = sourceModel()->rowCount() - proxyIndex.internalId();
-    return sourceModel()->index(sourceRow, proxyIndex.column());
-}
-
-QModelIndex HistoryFilterModel::mapFromSource(const QModelIndex &sourceIndex) const
-{
-    QString url = sourceIndex.data(HistoryModel::UrlStringRole).toString();
-    if (!m_historyHash.contains(url))
-        return QModelIndex();
-
-    // This can be done in a binary search, but we can't use qBinary find
-    // because it can't take: qBinaryFind(m_sourceRow.end(), m_sourceRow.begin(), v);
-    // so if this is a performance bottlneck then convert to binary search, until then
-    // the cleaner/easier to read code wins the day.
-    int realRow = -1;
-    int sourceModelRow = sourceModel()->rowCount() - sourceIndex.row();
-
-    for (int i = 0; i < m_sourceRow.count(); ++i) {
-        if (m_sourceRow.at(i) == sourceModelRow) {
-            realRow = i;
-            break;
-        }
-    }
-    if (realRow == -1)
-        return QModelIndex();
-
-    return createIndex(realRow, sourceIndex.column(), sourceModel()->rowCount() - sourceIndex.row());
-}
-
-QModelIndex HistoryFilterModel::index(int row, int column, const QModelIndex &parent) const
-{
-    if (row < 0 || row >= rowCount(parent)
-        || column < 0 || column >= columnCount(parent))
-        return QModelIndex();
-
-    return createIndex(row, column, m_sourceRow[row]);
-}
-
-QModelIndex HistoryFilterModel::parent(const QModelIndex &) const
-{
-    return QModelIndex();
-}
-
-void HistoryFilterModel::load() const
-{
-    m_sourceRow.clear();
-    m_historyHash.clear();
-    m_historyHash.reserve(sourceModel()->rowCount());
-    for (int i = 0; i < sourceModel()->rowCount(); ++i) {
-        QModelIndex idx = sourceModel()->index(i, 0);
-        QString url = idx.data(HistoryModel::UrlStringRole).toString();
-        if (!m_historyHash.contains(url)) {
-            m_sourceRow.append(sourceModel()->rowCount() - i);
-            m_historyHash[url] = sourceModel()->rowCount() - i;
-        }
-    }
-}
-
-void HistoryFilterModel::sourceRowsInserted(const QModelIndex &parent, int start, int end)
-{
-    Q_ASSERT(start == end && start == 0);
-    Q_UNUSED(end);
-    QModelIndex idx = sourceModel()->index(start, 0, parent);
-    QString url = idx.data(HistoryModel::UrlStringRole).toString();
-    if (m_historyHash.contains(url)) {
-        int sourceRow = sourceModel()->rowCount() - m_historyHash[url];
-        int realRow = mapFromSource(sourceModel()->index(sourceRow, 0)).row();
-        beginRemoveRows(QModelIndex(), realRow, realRow);
-        m_sourceRow.removeAt(realRow);
-        m_historyHash.remove(url);
-        endRemoveRows();
-    }
-    beginInsertRows(QModelIndex(), 0, 0);
-    m_historyHash.insert(url, sourceModel()->rowCount() - start);
-    m_sourceRow.insert(0, sourceModel()->rowCount());
-    endInsertRows();
-}
-
-void HistoryFilterModel::sourceRowsRemoved(const QModelIndex &, int start, int end)
-{
-    Q_UNUSED(start);
-    Q_UNUSED(end);
-    sourceReset();
-}
-
-/*
-    Removing a continuous block of rows will remove filtered rows too as this is
-    the users intention.
-*/
-bool HistoryFilterModel::removeRows(int row, int count, const QModelIndex &parent)
-{
-    if (row < 0 || count <= 0 || row + count > rowCount(parent) || parent.isValid())
-        return false;
-    int lastRow = row + count - 1;
-    disconnect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
-                this, SLOT(sourceRowsRemoved(QModelIndex,int,int)));
-    beginRemoveRows(parent, row, lastRow);
-    int oldCount = rowCount();
-    int start = sourceModel()->rowCount() - m_sourceRow.value(row);
-    int end = sourceModel()->rowCount() - m_sourceRow.value(lastRow);
-    sourceModel()->removeRows(start, end - start + 1);
-    endRemoveRows();
-    connect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
-                this, SLOT(sourceRowsRemoved(QModelIndex,int,int)));
-    m_loaded = false;
-    if (oldCount - count != rowCount()) {
-        beginResetModel();
-        endResetModel();
-    }
-    return true;
-}
-
-HistoryCompletionModel::HistoryCompletionModel(QObject *parent)
-    : QAbstractProxyModel(parent)
-{
-}
-
-QVariant HistoryCompletionModel::data(const QModelIndex &index, int role) const
-{
-    if (sourceModel()
-        && (role == Qt::EditRole || role == Qt::DisplayRole)
-        && index.isValid()) {
-        QModelIndex idx = mapToSource(index);
-        idx = idx.sibling(idx.row(), 1);
-        QString urlString = idx.data(HistoryModel::UrlStringRole).toString();
-        if (index.row() % 2) {
-            QUrl url = urlString;
-            QString s = url.toString(QUrl::RemoveScheme
-                                     | QUrl::RemoveUserInfo
-                                     | QUrl::StripTrailingSlash);
-            return s.mid(2);  // strip // from the front
-        }
-        return urlString;
-    }
-    return QAbstractProxyModel::data(index, role);
-}
-
-int HistoryCompletionModel::rowCount(const QModelIndex &parent) const
-{
-    return (parent.isValid() || !sourceModel()) ? 0 : sourceModel()->rowCount(parent) * 2;
-}
-
-int HistoryCompletionModel::columnCount(const QModelIndex &parent) const
-{
-    return (parent.isValid()) ? 0 : 1;
-}
-
-QModelIndex HistoryCompletionModel::mapFromSource(const QModelIndex &sourceIndex) const
-{
-    int row = sourceIndex.row() * 2;
-    return index(row, sourceIndex.column());
-}
-
-QModelIndex HistoryCompletionModel::mapToSource(const QModelIndex &proxyIndex) const
-{
-    if (!sourceModel())
-        return QModelIndex();
-    int row = proxyIndex.row() / 2;
-    return sourceModel()->index(row, proxyIndex.column());
-}
-
-QModelIndex HistoryCompletionModel::index(int row, int column, const QModelIndex &parent) const
-{
-    if (row < 0 || row >= rowCount(parent)
-        || column < 0 || column >= columnCount(parent))
-        return QModelIndex();
-    return createIndex(row, column);
-}
-
-QModelIndex HistoryCompletionModel::parent(const QModelIndex &) const
-{
-    return QModelIndex();
-}
-
-void HistoryCompletionModel::setSourceModel(QAbstractItemModel *newSourceModel)
-{
-    if (sourceModel()) {
-        disconnect(sourceModel(), SIGNAL(modelReset()), this, SLOT(sourceReset()));
-        disconnect(sourceModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
-                this, SLOT(sourceReset()));
-        disconnect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
-                this, SLOT(sourceReset()));
-    }
-
-    QAbstractProxyModel::setSourceModel(newSourceModel);
-
-    if (newSourceModel) {
-        connect(newSourceModel, SIGNAL(modelReset()), this, SLOT(sourceReset()));
-        connect(sourceModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
-                this, SLOT(sourceReset()));
-        connect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
-                this, SLOT(sourceReset()));
-    }
-
-    beginResetModel();
-    endResetModel();
-}
-
-void HistoryCompletionModel::sourceReset()
-{
-    beginResetModel();
-    endResetModel();
-}
-
-HistoryTreeModel::HistoryTreeModel(QAbstractItemModel *sourceModel, QObject *parent)
-    : QAbstractProxyModel(parent)
-{
-    setSourceModel(sourceModel);
-}
-
-QVariant HistoryTreeModel::headerData(int section, Qt::Orientation orientation, int role) const
-{
-    return sourceModel()->headerData(section, orientation, role);
-}
-
-QVariant HistoryTreeModel::data(const QModelIndex &index, int role) const
-{
-    if ((role == Qt::EditRole || role == Qt::DisplayRole)) {
-        int start = index.internalId();
-        if (start == 0) {
-            int offset = sourceDateRow(index.row());
-            if (index.column() == 0) {
-                QModelIndex idx = sourceModel()->index(offset, 0);
-                QDate date = idx.data(HistoryModel::DateRole).toDate();
-                if (date == QDate::currentDate())
-                    return tr("Earlier Today");
-                return date.toString(QLatin1String("dddd, MMMM d, yyyy"));
-            }
-            if (index.column() == 1) {
-                return tr("%1 items").arg(rowCount(index.sibling(index.row(), 0)));
-            }
-        }
-    }
-    if (role == Qt::DecorationRole && index.column() == 0 && !index.parent().isValid())
-        return QIcon(QLatin1String(":history.png"));
-    if (role == HistoryModel::DateRole && index.column() == 0 && index.internalId() == 0) {
-        int offset = sourceDateRow(index.row());
-        QModelIndex idx = sourceModel()->index(offset, 0);
-        return idx.data(HistoryModel::DateRole);
-    }
-
-    return QAbstractProxyModel::data(index, role);
-}
-
-int HistoryTreeModel::columnCount(const QModelIndex &parent) const
-{
-    return sourceModel()->columnCount(mapToSource(parent));
-}
-
-int HistoryTreeModel::rowCount(const QModelIndex &parent) const
-{
-    if ( parent.internalId() != 0
-        || parent.column() > 0
-        || !sourceModel())
-        return 0;
-
-    // row count OF dates
-    if (!parent.isValid()) {
-        if (!m_sourceRowCache.isEmpty())
-            return m_sourceRowCache.count();
-        QDate currentDate;
-        int rows = 0;
-        int totalRows = sourceModel()->rowCount();
-
-        for (int i = 0; i < totalRows; ++i) {
-            QDate rowDate = sourceModel()->index(i, 0).data(HistoryModel::DateRole).toDate();
-            if (rowDate != currentDate) {
-                m_sourceRowCache.append(i);
-                currentDate = rowDate;
-                ++rows;
-            }
-        }
-        Q_ASSERT(m_sourceRowCache.count() == rows);
-        return rows;
-    }
-
-    // row count FOR a date
-    int start = sourceDateRow(parent.row());
-    int end = sourceDateRow(parent.row() + 1);
-    return (end - start);
-}
-
-// Translate the top level date row into the offset where that date starts
-int HistoryTreeModel::sourceDateRow(int row) const
-{
-    if (row <= 0)
-        return 0;
-
-    if (m_sourceRowCache.isEmpty())
-        rowCount(QModelIndex());
-
-    if (row >= m_sourceRowCache.count()) {
-        if (!sourceModel())
-            return 0;
-        return sourceModel()->rowCount();
-    }
-    return m_sourceRowCache.at(row);
-}
-
-QModelIndex HistoryTreeModel::mapToSource(const QModelIndex &proxyIndex) const
-{
-    int offset = proxyIndex.internalId();
-    if (offset == 0)
-        return QModelIndex();
-    int startDateRow = sourceDateRow(offset - 1);
-    return sourceModel()->index(startDateRow + proxyIndex.row(), proxyIndex.column());
-}
-
-QModelIndex HistoryTreeModel::index(int row, int column, const QModelIndex &parent) const
-{
-    if (row < 0
-        || column < 0 || column >= columnCount(parent)
-        || parent.column() > 0)
-        return QModelIndex();
-
-    if (!parent.isValid())
-        return createIndex(row, column);
-    return createIndex(row, column, parent.row() + 1);
-}
-
-QModelIndex HistoryTreeModel::parent(const QModelIndex &index) const
-{
-    int offset = index.internalId();
-    if (offset == 0 || !index.isValid())
-        return QModelIndex();
-    return createIndex(offset - 1, 0);
-}
-
-bool HistoryTreeModel::hasChildren(const QModelIndex &parent) const
-{
-    QModelIndex grandparent = parent.parent();
-    if (!grandparent.isValid())
-        return true;
-    return false;
-}
-
-Qt::ItemFlags HistoryTreeModel::flags(const QModelIndex &index) const
-{
-    if (!index.isValid())
-        return Qt::NoItemFlags;
-    return Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled;
-}
-
-bool HistoryTreeModel::removeRows(int row, int count, const QModelIndex &parent)
-{
-    if (row < 0 || count <= 0 || row + count > rowCount(parent))
-        return false;
-
-    if (parent.isValid()) {
-        // removing pages
-        int offset = sourceDateRow(parent.row());
-        return sourceModel()->removeRows(offset + row, count);
-    } else {
-        // removing whole dates
-        for (int i = row + count - 1; i >= row; --i) {
-            QModelIndex dateParent = index(i, 0);
-            int offset = sourceDateRow(dateParent.row());
-            if (!sourceModel()->removeRows(offset, rowCount(dateParent)))
-                return false;
-        }
-    }
-    return true;
-}
-
-void HistoryTreeModel::setSourceModel(QAbstractItemModel *newSourceModel)
-{
-    beginResetModel();
-    if (sourceModel()) {
-        disconnect(sourceModel(), SIGNAL(modelReset()), this, SLOT(sourceReset()));
-        disconnect(sourceModel(), SIGNAL(layoutChanged()), this, SLOT(sourceReset()));
-        disconnect(sourceModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
-                this, SLOT(sourceRowsInserted(QModelIndex,int,int)));
-        disconnect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
-                this, SLOT(sourceRowsRemoved(QModelIndex,int,int)));
-        disconnect(sourceModel(), &QAbstractItemModel::dataChanged, this,
-                   &HistoryTreeModel::sourceDataChanged);
-    }
-
-    QAbstractProxyModel::setSourceModel(newSourceModel);
-
-    if (newSourceModel) {
-        connect(sourceModel(), SIGNAL(modelReset()), this, SLOT(sourceReset()));
-        connect(sourceModel(), SIGNAL(layoutChanged()), this, SLOT(sourceReset()));
-        connect(sourceModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
-                this, SLOT(sourceRowsInserted(QModelIndex,int,int)));
-        connect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
-                this, SLOT(sourceRowsRemoved(QModelIndex,int,int)));
-        connect(sourceModel(), &QAbstractItemModel::dataChanged, this,
-                &HistoryTreeModel::sourceDataChanged);
-    }
-    endResetModel();
-}
-
-void HistoryTreeModel::sourceReset()
-{
-    beginResetModel();
-    m_sourceRowCache.clear();
-    endResetModel();
-}
-
-void HistoryTreeModel::sourceRowsInserted(const QModelIndex &parent, int start, int end)
-{
-    Q_UNUSED(parent); // Avoid warnings when compiling release
-    Q_ASSERT(!parent.isValid());
-    if (start != 0 || start != end) {
-        beginResetModel();
-        m_sourceRowCache.clear();
-        endResetModel();
-        return;
-    }
-
-    m_sourceRowCache.clear();
-    QModelIndex treeIndex = mapFromSource(sourceModel()->index(start, 0));
-    QModelIndex treeParent = treeIndex.parent();
-    if (rowCount(treeParent) == 1) {
-        beginInsertRows(QModelIndex(), 0, 0);
-        endInsertRows();
-    } else {
-        beginInsertRows(treeParent, treeIndex.row(), treeIndex.row());
-        endInsertRows();
-    }
-}
-
-QModelIndex HistoryTreeModel::mapFromSource(const QModelIndex &sourceIndex) const
-{
-    if (!sourceIndex.isValid())
-        return QModelIndex();
-
-    if (m_sourceRowCache.isEmpty())
-        rowCount(QModelIndex());
-
-    QList<int>::iterator it;
-    it = qLowerBound(m_sourceRowCache.begin(), m_sourceRowCache.end(), sourceIndex.row());
-    if (*it != sourceIndex.row())
-        --it;
-    int dateRow = qMax(0, it - m_sourceRowCache.begin());
-    int row = sourceIndex.row() - m_sourceRowCache.at(dateRow);
-    return createIndex(row, sourceIndex.column(), dateRow + 1);
-}
-
-void HistoryTreeModel::sourceRowsRemoved(const QModelIndex &parent, int start, int end)
-{
-    Q_UNUSED(parent); // Avoid warnings when compiling release
-    Q_ASSERT(!parent.isValid());
-    if (m_sourceRowCache.isEmpty())
-        return;
-    for (int i = end; i >= start;) {
-        QList<int>::iterator it;
-        it = qLowerBound(m_sourceRowCache.begin(), m_sourceRowCache.end(), i);
-        // playing it safe
-        if (it == m_sourceRowCache.end()) {
-            beginResetModel();
-            m_sourceRowCache.clear();
-            endResetModel();
-            return;
-        }
-
-        if (*it != i)
-            --it;
-        int row = qMax(0, it - m_sourceRowCache.begin());
-        int offset = m_sourceRowCache[row];
-        QModelIndex dateParent = index(row, 0);
-        // If we can remove all the rows in the date do that and skip over them
-        int rc = rowCount(dateParent);
-        if (i - rc + 1 == offset && start <= i - rc + 1) {
-            beginRemoveRows(QModelIndex(), row, row);
-            m_sourceRowCache.removeAt(row);
-            i -= rc + 1;
-        } else {
-            beginRemoveRows(dateParent, i - offset, i - offset);
-            ++row;
-            --i;
-        }
-        for (int j = row; j < m_sourceRowCache.count(); ++j)
-            --m_sourceRowCache[j];
-        endRemoveRows();
-    }
-}
-
-void HistoryTreeModel::sourceDataChanged(const QModelIndex &topLeft,
-                                         const QModelIndex &bottomRight,
-                                         const QVector<int> roles)
-{
-     emit dataChanged(mapFromSource(topLeft), mapFromSource(bottomRight), roles);
-}
diff --git a/examples/webenginewidgets/demobrowser/history.h b/examples/webenginewidgets/demobrowser/history.h
deleted file mode 100644
index 2a6dce9e10e518a7d63c55ce2dbc67d9b124a2e4..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/history.h
+++ /dev/null
@@ -1,360 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef HISTORY_H
-#define HISTORY_H
-
-#include "modelmenu.h"
-
-#include <QtCore/QDateTime>
-#include <QtCore/QHash>
-#include <QtCore/QObject>
-#include <QtCore/QTimer>
-#include <QtCore/QUrl>
-
-#include <QtCore/QSortFilterProxyModel>
-
-class HistoryItem
-{
-public:
-    HistoryItem() {}
-    HistoryItem(const QString &u,
-                const QDateTime &d = QDateTime(), const QString &t = QString())
-        : title(t), url(u), dateTime(d) {}
-
-    inline bool operator==(const HistoryItem &other) const
-        { return other.title == title
-          && other.url == url && other.dateTime == dateTime; }
-
-    // history is sorted in reverse
-    inline bool operator <(const HistoryItem &other) const
-        { return dateTime > other.dateTime; }
-
-    QString title;
-    QString url;
-    QDateTime dateTime;
-};
-
-class AutoSaver;
-class HistoryModel;
-class HistoryFilterModel;
-class HistoryTreeModel;
-
-class HistoryManager : public QObject
-{
-    Q_OBJECT
-    Q_PROPERTY(int historyLimit READ historyLimit WRITE setHistoryLimit)
-
-signals:
-    void historyReset();
-    void entryAdded(const HistoryItem &item);
-    void entryRemoved(const HistoryItem &item);
-    void entryUpdated(int offset);
-
-public:
-    HistoryManager(QObject *parent = 0);
-    ~HistoryManager();
-
-    bool historyContains(const QString &url) const;
-
-    void addHistoryEntry(const QString &url);
-    void removeHistoryEntry(const QString &url);
-
-    void updateHistoryItem(const QUrl &url, const QString &title);
-
-    int historyLimit() const;
-    void setHistoryLimit(int limit);
-
-    QList<HistoryItem>& history();
-    void setHistory(const QList<HistoryItem> &history, bool loadedAndSorted = false);
-
-    // History manager keeps around these models for use by the completer and other classes
-    HistoryModel *historyModel() const;
-    HistoryFilterModel *historyFilterModel() const;
-    HistoryTreeModel *historyTreeModel() const;
-
-public slots:
-    void clear();
-    void loadSettings();
-
-private slots:
-    void save();
-    void checkForExpired(bool removeExpiredEntriesDirectly = false);
-
-protected:
-    void addHistoryItem(const HistoryItem &item);
-    void removeHistoryItem(const HistoryItem &item);
-
-private:
-    void load();
-
-    AutoSaver *m_saveTimer;
-    int m_historyLimit;
-    QTimer m_expiredTimer;
-    QList<HistoryItem> m_history;
-    QString m_lastSavedUrl;
-
-    HistoryModel *m_historyModel;
-    HistoryFilterModel *m_historyFilterModel;
-    HistoryTreeModel *m_historyTreeModel;
-};
-
-class HistoryModel : public QAbstractTableModel
-{
-    Q_OBJECT
-
-public slots:
-    void historyReset();
-    void entryAdded(const HistoryItem &item);
-    void entryRemoved(const HistoryItem &item);
-    void entryUpdated(int offset);
-
-public:
-    enum Roles {
-        DateRole = Qt::UserRole + 1,
-        DateTimeRole = Qt::UserRole + 2,
-        UrlRole = Qt::UserRole + 3,
-        UrlStringRole = Qt::UserRole + 4
-    };
-
-    HistoryModel(HistoryManager *history, QObject *parent = 0);
-    QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
-    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
-    int columnCount(const QModelIndex &parent = QModelIndex()) const;
-    int rowCount(const QModelIndex &parent = QModelIndex()) const;
-    bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
-
-private:
-    HistoryManager *m_history;
-};
-
-/*!
-    Proxy model that will remove any duplicate entries.
-    Both m_sourceRow and m_historyHash store their offsets not from
-    the front of the list, but as offsets from the back.
-  */
-class HistoryFilterModel : public QAbstractProxyModel
-{
-    Q_OBJECT
-
-public:
-    HistoryFilterModel(QAbstractItemModel *sourceModel, QObject *parent = 0);
-
-    inline bool historyContains(const QString &url) const
-        { load(); return m_historyHash.contains(url); }
-
-    QModelIndex mapFromSource(const QModelIndex &sourceIndex) const;
-    QModelIndex mapToSource(const QModelIndex &proxyIndex) const;
-    void setSourceModel(QAbstractItemModel *sourceModel);
-    QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
-    int rowCount(const QModelIndex &parent = QModelIndex()) const;
-    int columnCount(const QModelIndex &parent = QModelIndex()) const;
-    QModelIndex index(int, int, const QModelIndex& = QModelIndex()) const;
-    QModelIndex parent(const QModelIndex& index= QModelIndex()) const;
-    bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
-
-private slots:
-    void sourceReset();
-    void sourceDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
-    void sourceRowsInserted(const QModelIndex &parent, int start, int end);
-    void sourceRowsRemoved(const QModelIndex &, int, int);
-
-private:
-    void load() const;
-
-    mutable QList<int> m_sourceRow;
-    mutable QHash<QString, int> m_historyHash;
-    mutable bool m_loaded;
-};
-
-/*
-    The history menu
-    - Removes the first twenty entries and puts them as children of the top level.
-    - If there are less then twenty entries then the first folder is also removed.
-
-    The mapping is done by knowing that HistoryTreeModel is over a table
-    We store that row offset in our index's private data.
-*/
-class HistoryMenuModel : public QAbstractProxyModel
-{
-    Q_OBJECT
-
-public:
-    HistoryMenuModel(HistoryTreeModel *sourceModel, QObject *parent = 0);
-    int columnCount(const QModelIndex &parent) const;
-    int rowCount(const QModelIndex &parent = QModelIndex()) const;
-    QModelIndex mapFromSource(const QModelIndex & sourceIndex) const;
-    QModelIndex mapToSource(const QModelIndex & proxyIndex) const;
-    QModelIndex index(int, int, const QModelIndex &parent = QModelIndex()) const;
-    QModelIndex parent(const QModelIndex &index = QModelIndex()) const;
-
-    int bumpedRows() const;
-
-private:
-    HistoryTreeModel *m_treeModel;
-};
-
-// Menu that is dynamically populated from the history
-class HistoryMenu : public ModelMenu
-{
-    Q_OBJECT
-
-signals:
-    void openUrl(const QUrl &url);
-
-public:
-     HistoryMenu(QWidget *parent = 0);
-     void setInitialActions(QList<QAction*> actions);
-
-protected:
-    bool prePopulated();
-    void postPopulated();
-
-private slots:
-    void activated(const QModelIndex &index);
-    void showHistoryDialog();
-
-private:
-    HistoryManager *m_history;
-    HistoryMenuModel *m_historyMenuModel;
-    QList<QAction*> m_initialActions;
-};
-
-// proxy model for the history model that
-// exposes each url http://www.foo.com and it url starting at the host www.foo.com
-class HistoryCompletionModel : public QAbstractProxyModel
-{
-    Q_OBJECT
-
-public:
-    HistoryCompletionModel(QObject *parent = 0);
-    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
-    int rowCount(const QModelIndex &parent = QModelIndex()) const;
-    int columnCount(const QModelIndex &parent = QModelIndex()) const;
-    QModelIndex mapFromSource(const QModelIndex &sourceIndex) const;
-    QModelIndex mapToSource(const QModelIndex &proxyIndex) const;
-    QModelIndex index(int, int, const QModelIndex& = QModelIndex()) const;
-    QModelIndex parent(const QModelIndex& index= QModelIndex()) const;
-    void setSourceModel(QAbstractItemModel *sourceModel);
-
-private slots:
-    void sourceReset();
-
-};
-
-// proxy model for the history model that converts the list
-// into a tree, one top level node per day.
-// Used in the HistoryDialog.
-class HistoryTreeModel : public QAbstractProxyModel
-{
-    Q_OBJECT
-
-public:
-    HistoryTreeModel(QAbstractItemModel *sourceModel, QObject *parent = 0);
-    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
-    int columnCount(const QModelIndex &parent) const;
-    int rowCount(const QModelIndex &parent = QModelIndex()) const;
-    QModelIndex mapFromSource(const QModelIndex &sourceIndex) const;
-    QModelIndex mapToSource(const QModelIndex &proxyIndex) const;
-    QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
-    QModelIndex parent(const QModelIndex &index= QModelIndex()) const;
-    bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
-    Qt::ItemFlags flags(const QModelIndex &index) const;
-    bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
-    QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
-
-    void setSourceModel(QAbstractItemModel *sourceModel);
-
-private slots:
-    void sourceReset();
-    void sourceRowsInserted(const QModelIndex &parent, int start, int end);
-    void sourceRowsRemoved(const QModelIndex &parent, int start, int end);
-    void sourceDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight,
-                           const QVector<int> roles);
-private:
-    int sourceDateRow(int row) const;
-    mutable QList<int> m_sourceRowCache;
-
-};
-
-// A modified QSortFilterProxyModel that always accepts the root nodes in the tree
-// so filtering is only done on the children.
-// Used in the HistoryDialog
-class TreeProxyModel : public QSortFilterProxyModel
-{
-    Q_OBJECT
-
-public:
-    TreeProxyModel(QObject *parent = 0);
-
-protected:
-    bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
-};
-
-#include "ui_history.h"
-
-class HistoryDialog : public QDialog, public Ui_HistoryDialog
-{
-    Q_OBJECT
-
-signals:
-    void openUrl(const QUrl &url);
-
-public:
-    HistoryDialog(QWidget *parent = 0, HistoryManager *history = 0);
-
-private slots:
-    void customContextMenuRequested(const QPoint &pos);
-    void open();
-    void copy();
-
-};
-
-#endif // HISTORY_H
diff --git a/examples/webenginewidgets/demobrowser/history.ui b/examples/webenginewidgets/demobrowser/history.ui
deleted file mode 100644
index 0944940e7401fe4565e716820187334f5e856928..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/history.ui
+++ /dev/null
@@ -1,106 +0,0 @@
-<ui version="4.0" >
- <class>HistoryDialog</class>
- <widget class="QDialog" name="HistoryDialog" >
-  <property name="geometry" >
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>758</width>
-    <height>450</height>
-   </rect>
-  </property>
-  <property name="windowTitle" >
-   <string>History</string>
-  </property>
-  <layout class="QGridLayout" name="gridLayout" >
-   <item row="0" column="0" >
-    <spacer>
-     <property name="orientation" >
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="sizeHint" stdset="0" >
-      <size>
-       <width>252</width>
-       <height>20</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item row="0" column="1" >
-    <widget class="SearchLineEdit" name="search" />
-   </item>
-   <item row="1" column="0" colspan="2" >
-    <widget class="EditTreeView" name="tree" />
-   </item>
-   <item row="2" column="0" colspan="2" >
-    <layout class="QHBoxLayout" >
-     <item>
-      <widget class="QPushButton" name="removeButton" >
-       <property name="text" >
-        <string>&amp;Remove</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QPushButton" name="removeAllButton" >
-       <property name="text" >
-        <string>Remove &amp;All</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <spacer>
-       <property name="orientation" >
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0" >
-        <size>
-         <width>40</width>
-         <height>20</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-     <item>
-      <widget class="QDialogButtonBox" name="buttonBox" >
-       <property name="standardButtons" >
-        <set>QDialogButtonBox::Ok</set>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-  </layout>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>SearchLineEdit</class>
-   <extends>QLineEdit</extends>
-   <header>searchlineedit.h</header>
-  </customwidget>
-  <customwidget>
-   <class>EditTreeView</class>
-   <extends>QTreeView</extends>
-   <header>edittreeview.h</header>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>HistoryDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel" >
-     <x>472</x>
-     <y>329</y>
-    </hint>
-    <hint type="destinationlabel" >
-     <x>461</x>
-     <y>356</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/examples/webenginewidgets/demobrowser/htmls/htmls.qrc b/examples/webenginewidgets/demobrowser/htmls/htmls.qrc
deleted file mode 100644
index 03b256ccb5da11c96fc0188cfd7c84cc73bef9a8..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/htmls/htmls.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource>
-    <file>notfound.html</file>
-</qresource>
-</RCC>
diff --git a/examples/webenginewidgets/demobrowser/htmls/notfound.html b/examples/webenginewidgets/demobrowser/htmls/notfound.html
deleted file mode 100644
index e89845aa65529e19e192acf7e44543b1ddab1ac0..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/htmls/notfound.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<html>
-<head>
-<title>%1</title>
-<style>
-body {
-  padding: 3em 0em;
-  background: #eeeeee;
-}
-hr {
-  color: lightgray;
-  width: 100%;
-}
-img {
-  float: left;
-  opacity: .8;
-}
-#box {
-  background: white;
-  border: 1px solid lightgray;
-  width: 600px;
-  padding: 60px;
-  margin: auto;
-}
-h1 {
-  font-size: 130%;
-  font-weight: bold;
-  border-bottom: 1px solid lightgray;
-  margin-left: 48px;
-}
-h2 {
-  font-size: 100%;
-  font-weight: normal;
-  border-bottom: 1px solid lightgray;
-  margin-left: 48px;
-}
-ul {
-  font-size: 80%;
-  padding-left: 48px;
-  margin: 0;
-}
-#reloadButton {
-  padding-left: 48px;
-}
-</style>
-</head>
-<body>
-  <div id="box">
-    <img src="data:image/png;base64,IMAGE_BINARY_DATA_HERE" width="32" height="32"/>
-    <h1>%2</h1>
-    <h2>When connecting to: %3.</h2>
-    <ul>
-      <li>Check the address for errors such as <b>ww</b>.example.com
-      instead of <b>www</b>.example.com</li>
-      <li>If the address is correct, try checking the network
-      connection.</li>
-      <li>If your computer or network is protected by a firewall or
-      proxy, make sure that the browser demo is permitted to access
-      the network.</li>
-    </ul>
-    <br/><br/>
-  </div>
-</body>
-</html>
diff --git a/examples/webenginewidgets/demobrowser/main.cpp b/examples/webenginewidgets/demobrowser/main.cpp
deleted file mode 100644
index 41cae306a7a12b7b738741cbc8b7494e71a93eb0..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/main.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "browserapplication.h"
-
-#include <qtwebenginewidgetsglobal.h>
-
-int main(int argc, char **argv)
-{
-    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
-    Q_INIT_RESOURCE(data);
-    BrowserApplication application(argc, argv);
-    if (!application.isTheOnlyBrowser())
-        return 0;
-
-    application.newMainWindow();
-    return application.exec();
-}
diff --git a/examples/webenginewidgets/demobrowser/modelmenu.cpp b/examples/webenginewidgets/demobrowser/modelmenu.cpp
deleted file mode 100644
index 9064320f47ba942ff6d71c24d6dea90f75584fd5..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/modelmenu.cpp
+++ /dev/null
@@ -1,235 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "modelmenu.h"
-
-#include <QtCore/QAbstractItemModel>
-#include <qdebug.h>
-
-ModelMenu::ModelMenu(QWidget * parent)
-    : QMenu(parent)
-    , m_maxRows(7)
-    , m_firstSeparator(-1)
-    , m_maxWidth(-1)
-    , m_hoverRole(0)
-    , m_separatorRole(0)
-    , m_model(0)
-{
-    connect(this, SIGNAL(aboutToShow()), this, SLOT(aboutToShow()));
-}
-
-bool ModelMenu::prePopulated()
-{
-    return false;
-}
-
-void ModelMenu::postPopulated()
-{
-}
-
-void ModelMenu::setModel(QAbstractItemModel *model)
-{
-    m_model = model;
-}
-
-QAbstractItemModel *ModelMenu::model() const
-{
-    return m_model;
-}
-
-void ModelMenu::setMaxRows(int max)
-{
-    m_maxRows = max;
-}
-
-int ModelMenu::maxRows() const
-{
-    return m_maxRows;
-}
-
-void ModelMenu::setFirstSeparator(int offset)
-{
-    m_firstSeparator = offset;
-}
-
-int ModelMenu::firstSeparator() const
-{
-    return m_firstSeparator;
-}
-
-void ModelMenu::setRootIndex(const QModelIndex &index)
-{
-    m_root = index;
-}
-
-QModelIndex ModelMenu::rootIndex() const
-{
-    return m_root;
-}
-
-void ModelMenu::setHoverRole(int role)
-{
-    m_hoverRole = role;
-}
-
-int ModelMenu::hoverRole() const
-{
-    return m_hoverRole;
-}
-
-void ModelMenu::setSeparatorRole(int role)
-{
-    m_separatorRole = role;
-}
-
-int ModelMenu::separatorRole() const
-{
-    return m_separatorRole;
-}
-
-Q_DECLARE_METATYPE(QModelIndex)
-void ModelMenu::aboutToShow()
-{
-    if (QMenu *menu = qobject_cast<QMenu*>(sender())) {
-        QVariant v = menu->menuAction()->data();
-        if (v.canConvert<QModelIndex>()) {
-            QModelIndex idx = qvariant_cast<QModelIndex>(v);
-            createMenu(idx, -1, menu, menu);
-            disconnect(menu, SIGNAL(aboutToShow()), this, SLOT(aboutToShow()));
-            return;
-        }
-    }
-
-    clear();
-    if (prePopulated())
-        addSeparator();
-    int max = m_maxRows;
-    if (max != -1)
-        max += m_firstSeparator;
-    createMenu(m_root, max, this, this);
-    postPopulated();
-}
-
-void ModelMenu::createMenu(const QModelIndex &parent, int max, QMenu *parentMenu, QMenu *menu)
-{
-    if (!menu) {
-        QString title = parent.data().toString();
-        menu = new QMenu(title, this);
-        QIcon icon = qvariant_cast<QIcon>(parent.data(Qt::DecorationRole));
-        menu->setIcon(icon);
-        parentMenu->addMenu(menu);
-        QVariant v;
-        v.setValue(parent);
-        menu->menuAction()->setData(v);
-        connect(menu, SIGNAL(aboutToShow()), this, SLOT(aboutToShow()));
-        return;
-    }
-
-    int end = m_model->rowCount(parent);
-    if (max != -1)
-        end = qMin(max, end);
-
-    connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(triggered(QAction*)));
-    connect(menu, SIGNAL(hovered(QAction*)), this, SLOT(hovered(QAction*)));
-
-    for (int i = 0; i < end; ++i) {
-        QModelIndex idx = m_model->index(i, 0, parent);
-        if (m_model->hasChildren(idx)) {
-            createMenu(idx, -1, menu);
-        } else {
-            if (m_separatorRole != 0
-                && idx.data(m_separatorRole).toBool())
-                addSeparator();
-            else
-                menu->addAction(makeAction(idx));
-        }
-        if (menu == this && i == m_firstSeparator - 1)
-            addSeparator();
-    }
-}
-
-QAction *ModelMenu::makeAction(const QModelIndex &index)
-{
-    QIcon icon = qvariant_cast<QIcon>(index.data(Qt::DecorationRole));
-    QAction *action = makeAction(icon, index.data().toString(), this);
-    QVariant v;
-    v.setValue(index);
-    action->setData(v);
-    return action;
-}
-
-QAction *ModelMenu::makeAction(const QIcon &icon, const QString &text, QObject *parent)
-{
-    QFontMetrics fm(font());
-    if (-1 == m_maxWidth)
-        m_maxWidth = fm.width(QLatin1Char('m')) * 30;
-    QString smallText = fm.elidedText(text, Qt::ElideMiddle, m_maxWidth);
-    return new QAction(icon, smallText, parent);
-}
-
-void ModelMenu::triggered(QAction *action)
-{
-    QVariant v = action->data();
-    if (v.canConvert<QModelIndex>()) {
-        QModelIndex idx = qvariant_cast<QModelIndex>(v);
-        emit activated(idx);
-    }
-}
-
-void ModelMenu::hovered(QAction *action)
-{
-    QVariant v = action->data();
-    if (v.canConvert<QModelIndex>()) {
-        QModelIndex idx = qvariant_cast<QModelIndex>(v);
-        QString hoveredString = idx.data(m_hoverRole).toString();
-        if (!hoveredString.isEmpty())
-            emit hovered(hoveredString);
-    }
-}
diff --git a/examples/webenginewidgets/demobrowser/modelmenu.h b/examples/webenginewidgets/demobrowser/modelmenu.h
deleted file mode 100644
index 718b1d3cf3c65c0058111cfdb663db9f9ddcd214..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/modelmenu.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef MODELMENU_H
-#define MODELMENU_H
-
-#include <QtWidgets/QMenu>
-#include <QtCore/QAbstractItemModel>
-
-// A QMenu that is dynamically populated from a QAbstractItemModel
-class ModelMenu : public QMenu
-{
-    Q_OBJECT
-
-signals:
-    void activated(const QModelIndex &index);
-    void hovered(const QString &text);
-
-public:
-    ModelMenu(QWidget *parent = 0);
-
-    void setModel(QAbstractItemModel *model);
-    QAbstractItemModel *model() const;
-
-    void setMaxRows(int max);
-    int maxRows() const;
-
-    void setFirstSeparator(int offset);
-    int firstSeparator() const;
-
-    void setRootIndex(const QModelIndex &index);
-    QModelIndex rootIndex() const;
-
-    void setHoverRole(int role);
-    int hoverRole() const;
-
-    void setSeparatorRole(int role);
-    int separatorRole() const;
-
-    QAction *makeAction(const QIcon &icon, const QString &text, QObject *parent);
-
-protected:
-    // add any actions before the tree, return true if any actions are added.
-    virtual bool prePopulated();
-    // add any actions after the tree
-    virtual void postPopulated();
-    // put all of the children of parent into menu up to max
-    void createMenu(const QModelIndex &parent, int max, QMenu *parentMenu = 0, QMenu *menu = 0);
-
-private slots:
-    void aboutToShow();
-    void triggered(QAction *action);
-    void hovered(QAction *action);
-
-private:
-    QAction *makeAction(const QModelIndex &index);
-    int m_maxRows;
-    int m_firstSeparator;
-    int m_maxWidth;
-    int m_hoverRole;
-    int m_separatorRole;
-    QAbstractItemModel *m_model;
-    QPersistentModelIndex m_root;
-};
-
-#endif // MODELMENU_H
diff --git a/examples/webenginewidgets/demobrowser/passworddialog.ui b/examples/webenginewidgets/demobrowser/passworddialog.ui
deleted file mode 100644
index 7c1665867aa17b938ac9f4b53dba6896d85c62f7..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/passworddialog.ui
+++ /dev/null
@@ -1,111 +0,0 @@
-<ui version="4.0" >
- <class>PasswordDialog</class>
- <widget class="QDialog" name="PasswordDialog" >
-  <property name="geometry" >
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>399</width>
-    <height>148</height>
-   </rect>
-  </property>
-  <property name="windowTitle" >
-   <string>Authentication Required</string>
-  </property>
-  <layout class="QGridLayout" name="gridLayout" >
-   <item row="0" column="0" colspan="2" >
-    <layout class="QHBoxLayout" >
-     <item>
-      <widget class="QLabel" name="iconLabel" >
-       <property name="text" >
-        <string>DUMMY ICON</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QLabel" name="introLabel" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="MinimumExpanding" hsizetype="MinimumExpanding" >
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="text" >
-        <string>INTRO TEXT DUMMY</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item row="1" column="0" >
-    <widget class="QLabel" name="label" >
-     <property name="text" >
-      <string>Username:</string>
-     </property>
-    </widget>
-   </item>
-   <item row="1" column="1" >
-    <widget class="QLineEdit" name="userNameLineEdit" />
-   </item>
-   <item row="2" column="0" >
-    <widget class="QLabel" name="lblPassword" >
-     <property name="text" >
-      <string>Password:</string>
-     </property>
-    </widget>
-   </item>
-   <item row="2" column="1" >
-    <widget class="QLineEdit" name="passwordLineEdit" >
-     <property name="echoMode" >
-      <enum>QLineEdit::Password</enum>
-     </property>
-    </widget>
-   </item>
-   <item row="3" column="0" colspan="2" >
-    <widget class="QDialogButtonBox" name="buttonBox" >
-     <property name="orientation" >
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons" >
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>PasswordDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel" >
-     <x>248</x>
-     <y>254</y>
-    </hint>
-    <hint type="destinationlabel" >
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>PasswordDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel" >
-     <x>316</x>
-     <y>260</y>
-    </hint>
-    <hint type="destinationlabel" >
-     <x>286</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/examples/webenginewidgets/demobrowser/printtopdfdialog.cpp b/examples/webenginewidgets/demobrowser/printtopdfdialog.cpp
deleted file mode 100644
index 50a8bb91a7ab084fcace3a34604c88479a0e3f63..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/printtopdfdialog.cpp
+++ /dev/null
@@ -1,125 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "printtopdfdialog.h"
-#include "ui_printtopdfdialog.h"
-
-#include <QtCore/QDir>
-#include <QtPrintSupport/QPageSetupDialog>
-#include <QtPrintSupport/QPrinter>
-#include <QtWidgets/QFileDialog>
-
-PrintToPdfDialog::PrintToPdfDialog(const QString &filePath, QWidget *parent) :
-    QDialog(parent),
-    currentPageLayout(QPageLayout(QPageSize(QPageSize::A4), QPageLayout::Portrait, QMarginsF(0.0, 0.0, 0.0, 0.0))),
-    ui(new Ui::PrintToPdfDialog)
-{
-    ui->setupUi(this);
-    setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
-    connect(ui->chooseFilePathButton, &QToolButton::clicked, this, &PrintToPdfDialog::onChooseFilePathButtonClicked);
-    connect(ui->choosePageLayoutButton, &QToolButton::clicked, this, &PrintToPdfDialog::onChoosePageLayoutButtonClicked);
-    ui->choosePageLayoutButton->hide();
-    updatePageLayoutLabel();
-    setFilePath(filePath);
-}
-
-PrintToPdfDialog::~PrintToPdfDialog()
-{
-    delete ui;
-}
-
-void PrintToPdfDialog::onChoosePageLayoutButtonClicked()
-{
-    QPrinter printer;
-    printer.setPageLayout(currentPageLayout);
-
-    QPageSetupDialog dlg(&printer, this);
-    if (dlg.exec() != QDialog::Accepted)
-        return;
-    currentPageLayout.setPageSize(printer.pageLayout().pageSize());
-    currentPageLayout.setOrientation(printer.pageLayout().orientation());
-    updatePageLayoutLabel();
-}
-
-void PrintToPdfDialog::onChooseFilePathButtonClicked()
-{
-    QFileInfo fi(filePath());
-    QFileDialog dlg(this, tr("Save PDF as"), fi.absolutePath());
-    dlg.setAcceptMode(QFileDialog::AcceptSave);
-    dlg.setDefaultSuffix(QStringLiteral(".pdf"));
-    dlg.selectFile(fi.absoluteFilePath());
-    if (dlg.exec() != QDialog::Accepted)
-        return;
-    setFilePath(dlg.selectedFiles().first());
-}
-
-QString PrintToPdfDialog::filePath() const
-{
-    return QDir::fromNativeSeparators(ui->filePathLineEdit->text());
-}
-
-void PrintToPdfDialog::setFilePath(const QString &filePath)
-{
-    ui->filePathLineEdit->setText(QDir::toNativeSeparators(filePath));
-}
-
-QPageLayout PrintToPdfDialog::pageLayout() const
-{
-    return currentPageLayout;
-}
-
-void PrintToPdfDialog::updatePageLayoutLabel()
-{
-    ui->pageLayoutLabel->setText(QString("%1, %2").arg(
-                                   currentPageLayout.pageSize().name()).arg(
-                                   currentPageLayout.orientation() == QPageLayout::Portrait
-                                   ? tr("Portrait") : tr("Landscape")
-                                   ));
-}
diff --git a/examples/webenginewidgets/demobrowser/printtopdfdialog.h b/examples/webenginewidgets/demobrowser/printtopdfdialog.h
deleted file mode 100644
index 87fca72c34fa7ae258ec3778b9c3d0a12cb3a534..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/printtopdfdialog.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef PRINTTOPDFDIALOG_H
-#define PRINTTOPDFDIALOG_H
-
-#include <QDialog>
-#include <QPageLayout>
-
-QT_BEGIN_NAMESPACE
-namespace Ui {
-class PrintToPdfDialog;
-}
-QT_END_NAMESPACE
-
-class PrintToPdfDialog : public QDialog
-{
-    Q_OBJECT
-
-public:
-    explicit PrintToPdfDialog(const QString &filePath, QWidget *parent = 0);
-    ~PrintToPdfDialog();
-
-    QString filePath() const;
-    QPageLayout pageLayout() const;
-
-private slots:
-    void onChoosePageLayoutButtonClicked();
-    void onChooseFilePathButtonClicked();
-
-private:
-    void setFilePath(const QString &);
-    void updatePageLayoutLabel();
-
-    QPageLayout currentPageLayout;
-    Ui::PrintToPdfDialog *ui;
-};
-
-#endif // PRINTTOPDFDIALOG_H
diff --git a/examples/webenginewidgets/demobrowser/printtopdfdialog.ui b/examples/webenginewidgets/demobrowser/printtopdfdialog.ui
deleted file mode 100644
index dcfd5a3aa0b34e9e7a854ac26a20d559f3c00c66..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/printtopdfdialog.ui
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>PrintToPdfDialog</class>
- <widget class="QDialog" name="PrintToPdfDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>372</width>
-    <height>117</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Dialog</string>
-  </property>
-  <layout class="QGridLayout" name="gridLayout_2">
-   <item row="2" column="0">
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-   <item row="0" column="0" colspan="2">
-    <layout class="QGridLayout" name="gridLayout">
-     <item row="1" column="3">
-      <widget class="QToolButton" name="choosePageLayoutButton">
-       <property name="text">
-        <string>...</string>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="0">
-      <widget class="QLabel" name="filePathLabel">
-       <property name="text">
-        <string>Save as:</string>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="2">
-      <widget class="QLineEdit" name="filePathLineEdit"/>
-     </item>
-     <item row="1" column="0">
-      <widget class="QLabel" name="layoutLabel">
-       <property name="text">
-        <string>Page layout:</string>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="3">
-      <widget class="QToolButton" name="chooseFilePathButton">
-       <property name="text">
-        <string>...</string>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="2">
-      <widget class="QLabel" name="pageLayoutLabel">
-       <property name="text">
-        <string/>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item row="1" column="0">
-    <spacer name="verticalSpacer">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>40</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>PrintToPdfDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>248</x>
-     <y>254</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>PrintToPdfDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>316</x>
-     <y>260</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>286</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/examples/webenginewidgets/demobrowser/proxy.ui b/examples/webenginewidgets/demobrowser/proxy.ui
deleted file mode 100644
index 62a8be62733b64fe483b6fdac37c157af5f48ea6..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/proxy.ui
+++ /dev/null
@@ -1,104 +0,0 @@
-<ui version="4.0" >
- <class>ProxyDialog</class>
- <widget class="QDialog" name="ProxyDialog" >
-  <property name="geometry" >
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>369</width>
-    <height>144</height>
-   </rect>
-  </property>
-  <property name="windowTitle" >
-   <string>Proxy Authentication</string>
-  </property>
-  <layout class="QGridLayout" name="gridLayout" >
-   <item row="0" column="0" >
-    <widget class="QLabel" name="iconLabel" >
-     <property name="text" >
-      <string>ICON</string>
-     </property>
-    </widget>
-   </item>
-   <item row="0" column="1" colspan="2" >
-    <widget class="QLabel" name="introLabel" >
-     <property name="text" >
-      <string>Connect to proxy</string>
-     </property>
-     <property name="wordWrap" >
-      <bool>true</bool>
-     </property>
-    </widget>
-   </item>
-   <item row="1" column="0" colspan="2" >
-    <widget class="QLabel" name="usernameLabel" >
-     <property name="text" >
-      <string>Username:</string>
-     </property>
-    </widget>
-   </item>
-   <item row="1" column="2" >
-    <widget class="QLineEdit" name="userNameLineEdit" />
-   </item>
-   <item row="2" column="0" colspan="2" >
-    <widget class="QLabel" name="passwordLabel" >
-     <property name="text" >
-      <string>Password:</string>
-     </property>
-    </widget>
-   </item>
-   <item row="2" column="2" >
-    <widget class="QLineEdit" name="passwordLineEdit" >
-     <property name="echoMode" >
-      <enum>QLineEdit::Password</enum>
-     </property>
-    </widget>
-   </item>
-   <item row="3" column="0" colspan="3" >
-    <widget class="QDialogButtonBox" name="buttonBox" >
-     <property name="orientation" >
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons" >
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>ProxyDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel" >
-     <x>248</x>
-     <y>254</y>
-    </hint>
-    <hint type="destinationlabel" >
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>ProxyDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel" >
-     <x>316</x>
-     <y>260</y>
-    </hint>
-    <hint type="destinationlabel" >
-     <x>286</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/examples/webenginewidgets/demobrowser/savepagedialog.cpp b/examples/webenginewidgets/demobrowser/savepagedialog.cpp
deleted file mode 100644
index 8ec21f8219dd77fd40bb26e1693bb8201e0d130f..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/savepagedialog.cpp
+++ /dev/null
@@ -1,139 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "savepagedialog.h"
-#include "ui_savepagedialog.h"
-
-#include <QtCore/QDir>
-#include <QtWidgets/QFileDialog>
-
-const QWebEngineDownloadItem::SavePageFormat SavePageDialog::m_indexToFormatTable[] = {
-    QWebEngineDownloadItem::SingleHtmlSaveFormat,
-    QWebEngineDownloadItem::CompleteHtmlSaveFormat,
-    QWebEngineDownloadItem::MimeHtmlSaveFormat
-};
-
-SavePageDialog::SavePageDialog(QWidget *parent, QWebEngineDownloadItem::SavePageFormat format,
-                               const QString &filePath)
-    : QDialog(parent)
-    , ui(new Ui::SavePageDialog)
-{
-    ui->setupUi(this);
-    ui->formatComboBox->setCurrentIndex(formatToIndex(format));
-    setFilePath(filePath);
-}
-
-SavePageDialog::~SavePageDialog()
-{
-    delete ui;
-}
-
-QWebEngineDownloadItem::SavePageFormat SavePageDialog::pageFormat() const
-{
-    return indexToFormat(ui->formatComboBox->currentIndex());
-}
-
-QString SavePageDialog::filePath() const
-{
-    return QDir::fromNativeSeparators(ui->filePathLineEdit->text());
-}
-
-void SavePageDialog::on_chooseFilePathButton_clicked()
-{
-    QFileInfo fi(filePath());
-    QFileDialog dlg(this, tr("Save Page As"), fi.absolutePath());
-    dlg.setAcceptMode(QFileDialog::AcceptSave);
-    dlg.setDefaultSuffix(suffixOfFormat(pageFormat()));
-    dlg.selectFile(fi.absoluteFilePath());
-    if (dlg.exec() != QDialog::Accepted)
-        return;
-    setFilePath(dlg.selectedFiles().first());
-    ensureFileSuffix(pageFormat());
-}
-
-void SavePageDialog::on_formatComboBox_currentIndexChanged(int idx)
-{
-    ensureFileSuffix(indexToFormat(idx));
-}
-
-int SavePageDialog::formatToIndex(QWebEngineDownloadItem::SavePageFormat format)
-{
-    for (auto i : m_indexToFormatTable) {
-        if (m_indexToFormatTable[i] == format)
-            return i;
-    }
-    Q_UNREACHABLE();
-}
-
-QWebEngineDownloadItem::SavePageFormat SavePageDialog::indexToFormat(int idx)
-{
-    Q_ASSERT(idx >= 0 && size_t(idx) < (sizeof(m_indexToFormatTable)
-                                        / sizeof(QWebEngineDownloadItem::SavePageFormat)));
-    return m_indexToFormatTable[idx];
-}
-
-QString SavePageDialog::suffixOfFormat(QWebEngineDownloadItem::SavePageFormat format)
-{
-    if (format == QWebEngineDownloadItem::MimeHtmlSaveFormat)
-        return QStringLiteral(".mhtml");
-    return QStringLiteral(".html");
-}
-
-void SavePageDialog::setFilePath(const QString &filePath)
-{
-    ui->filePathLineEdit->setText(QDir::toNativeSeparators(filePath));
-}
-
-void SavePageDialog::ensureFileSuffix(QWebEngineDownloadItem::SavePageFormat format)
-{
-    QFileInfo fi(filePath());
-    setFilePath(fi.absolutePath() + QLatin1Char('/') + fi.completeBaseName()
-                + suffixOfFormat(format));
-}
diff --git a/examples/webenginewidgets/demobrowser/savepagedialog.h b/examples/webenginewidgets/demobrowser/savepagedialog.h
deleted file mode 100644
index 77095543c9b25ffb55f398b4abab2ea881a19874..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/savepagedialog.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef SAVEPAGEDIALOG_H
-#define SAVEPAGEDIALOG_H
-
-#include <QtWidgets/QDialog>
-#include <QtWebEngineWidgets/QWebEngineDownloadItem>
-
-QT_BEGIN_NAMESPACE
-namespace Ui {
-class SavePageDialog;
-}
-QT_END_NAMESPACE
-
-class SavePageDialog : public QDialog
-{
-    Q_OBJECT
-
-public:
-    explicit SavePageDialog(QWidget *parent, QWebEngineDownloadItem::SavePageFormat format,
-                            const QString &filePath);
-    ~SavePageDialog();
-
-    QWebEngineDownloadItem::SavePageFormat pageFormat() const;
-    QString filePath() const;
-
-private slots:
-    void on_chooseFilePathButton_clicked();
-    void on_formatComboBox_currentIndexChanged(int idx);
-
-private:
-    static int formatToIndex(QWebEngineDownloadItem::SavePageFormat format);
-    static QWebEngineDownloadItem::SavePageFormat indexToFormat(int idx);
-    static QString suffixOfFormat(QWebEngineDownloadItem::SavePageFormat format);
-    void setFilePath(const QString &filePath);
-    void ensureFileSuffix(QWebEngineDownloadItem::SavePageFormat format);
-
-    static const QWebEngineDownloadItem::SavePageFormat m_indexToFormatTable[];
-    Ui::SavePageDialog *ui;
-};
-
-#endif // SAVEPAGEDIALOG_H
diff --git a/examples/webenginewidgets/demobrowser/savepagedialog.ui b/examples/webenginewidgets/demobrowser/savepagedialog.ui
deleted file mode 100644
index 9aa7cbe55b4e4f0b04c23d53388ece1a363757dc..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/savepagedialog.ui
+++ /dev/null
@@ -1,139 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>SavePageDialog</class>
- <widget class="QDialog" name="SavePageDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>400</width>
-    <height>121</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Dialog</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <layout class="QGridLayout" name="gridLayout">
-     <item row="0" column="0">
-      <widget class="QLabel" name="label">
-       <property name="text">
-        <string>&amp;Format:</string>
-       </property>
-       <property name="buddy">
-        <cstring>formatComboBox</cstring>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="1">
-      <widget class="QComboBox" name="formatComboBox">
-       <item>
-        <property name="text">
-         <string>Single HTML</string>
-        </property>
-       </item>
-       <item>
-        <property name="text">
-         <string>Complete HTML</string>
-        </property>
-       </item>
-       <item>
-        <property name="text">
-         <string>MIME HTML</string>
-        </property>
-       </item>
-      </widget>
-     </item>
-     <item row="1" column="0">
-      <widget class="QLabel" name="label_2">
-       <property name="text">
-        <string>&amp;Save to:</string>
-       </property>
-       <property name="buddy">
-        <cstring>filePathLineEdit</cstring>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="1">
-      <layout class="QHBoxLayout" name="horizontalLayout">
-       <item>
-        <widget class="QLineEdit" name="filePathLineEdit"/>
-       </item>
-       <item>
-        <widget class="QToolButton" name="chooseFilePathButton">
-         <property name="text">
-          <string>...</string>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <spacer name="verticalSpacer">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>12</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <tabstops>
-  <tabstop>formatComboBox</tabstop>
-  <tabstop>filePathLineEdit</tabstop>
-  <tabstop>chooseFilePathButton</tabstop>
- </tabstops>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>SavePageDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>227</x>
-     <y>104</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>120</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>SavePageDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>295</x>
-     <y>110</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>286</x>
-     <y>120</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/examples/webenginewidgets/demobrowser/searchlineedit.cpp b/examples/webenginewidgets/demobrowser/searchlineedit.cpp
deleted file mode 100644
index 04f75df916de30b5406963fdeb14f50777b3c2ad..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/searchlineedit.cpp
+++ /dev/null
@@ -1,249 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "searchlineedit.h"
-
-#include <QtGui/QPainter>
-#include <QtGui/QMouseEvent>
-#include <QtWidgets/QMenu>
-#include <QtWidgets/QStyle>
-#include <QtWidgets/QStyleOptionFrame>
-
-ClearButton::ClearButton(QWidget *parent)
-  : QAbstractButton(parent)
-{
-#ifndef QT_NO_CURSOR
-    setCursor(Qt::ArrowCursor);
-#endif // QT_NO_CURSOR
-    setToolTip(tr("Clear"));
-    setVisible(false);
-    setFocusPolicy(Qt::NoFocus);
-}
-
-void ClearButton::paintEvent(QPaintEvent *event)
-{
-    Q_UNUSED(event);
-    QPainter painter(this);
-    int height = this->height();
-
-    painter.setRenderHint(QPainter::Antialiasing, true);
-    painter.setBrush(isDown()
-                     ? palette().color(QPalette::Dark)
-                     : palette().color(QPalette::Mid));
-    painter.setPen(painter.brush().color());
-    int size = width();
-    int offset = size / 5;
-    int radius = size - offset * 2;
-    painter.drawEllipse(offset, offset, radius, radius);
-
-    painter.setPen(palette().color(QPalette::Base));
-    int border = offset * 2;
-    painter.drawLine(border, border, width() - border, height - border);
-    painter.drawLine(border, height - border, width() - border, border);
-}
-
-void ClearButton::textChanged(const QString &text)
-{
-    setVisible(!text.isEmpty());
-}
-
-/*
-    Search icon on the left hand side of the search widget
-    When a menu is set a down arrow appears
- */
-class SearchButton : public QAbstractButton {
-public:
-    SearchButton(QWidget *parent = 0);
-    void paintEvent(QPaintEvent *event);
-    QMenu *m_menu;
-
-protected:
-    void mousePressEvent(QMouseEvent *event);
-};
-
-SearchButton::SearchButton(QWidget *parent)
-  : QAbstractButton(parent),
-    m_menu(0)
-{
-    setObjectName(QLatin1String("SearchButton"));
-#ifndef QT_NO_CURSOR
-    setCursor(Qt::ArrowCursor);
-#endif //QT_NO_CURSOR
-    setFocusPolicy(Qt::NoFocus);
-}
-
-void SearchButton::mousePressEvent(QMouseEvent *event)
-{
-    if (m_menu && event->button() == Qt::LeftButton) {
-        QWidget *p = parentWidget();
-        if (p) {
-            QPoint r = p->mapToGlobal(QPoint(0, p->height()));
-            m_menu->exec(QPoint(r.x() + height() / 2, r.y()));
-        }
-        event->accept();
-    }
-    QAbstractButton::mousePressEvent(event);
-}
-
-void SearchButton::paintEvent(QPaintEvent *event)
-{
-    Q_UNUSED(event);
-    QPainterPath myPath;
-
-    int radius = (height() / 5) * 2;
-    QRect circle(height() / 3 - 1, height() / 4, radius, radius);
-    myPath.addEllipse(circle);
-
-    myPath.arcMoveTo(circle, 300);
-    QPointF c = myPath.currentPosition();
-    int diff = height() / 7;
-    myPath.lineTo(qMin(width() - 2, (int)c.x() + diff), c.y() + diff);
-
-    QPainter painter(this);
-    painter.setRenderHint(QPainter::Antialiasing, true);
-    painter.setPen(QPen(Qt::darkGray, 2));
-    painter.drawPath(myPath);
-
-    if (m_menu) {
-        QPainterPath dropPath;
-        dropPath.arcMoveTo(circle, 320);
-        QPointF c = dropPath.currentPosition();
-        c = QPointF(c.x() + 3.5, c.y() + 0.5);
-        dropPath.moveTo(c);
-        dropPath.lineTo(c.x() + 4, c.y());
-        dropPath.lineTo(c.x() + 2, c.y() + 2);
-        dropPath.closeSubpath();
-        painter.setPen(Qt::darkGray);
-        painter.setBrush(Qt::darkGray);
-        painter.setRenderHint(QPainter::Antialiasing, false);
-        painter.drawPath(dropPath);
-    }
-    painter.end();
-}
-
-/*
-    SearchLineEdit is an enhanced QLineEdit
-    - A Search icon on the left with optional menu
-    - When there is no text and doesn't have focus an "inactive text" is displayed
-    - When there is text a clear button is displayed on the right hand side
- */
-SearchLineEdit::SearchLineEdit(QWidget *parent) : ExLineEdit(parent),
-    m_searchButton(new SearchButton(this))
-{
-    connect(lineEdit(), SIGNAL(textChanged(QString)),
-            this, SIGNAL(textChanged(QString)));
-    setLeftWidget(m_searchButton);
-    m_inactiveText = tr("Search");
-
-    QSizePolicy policy = sizePolicy();
-    setSizePolicy(QSizePolicy::Preferred, policy.verticalPolicy());
-}
-
-void SearchLineEdit::paintEvent(QPaintEvent *event)
-{
-    if (lineEdit()->text().isEmpty() && !hasFocus() && !m_inactiveText.isEmpty()) {
-        ExLineEdit::paintEvent(event);
-        QStyleOptionFrame panel;
-        initStyleOption(&panel);
-        QRect r = style()->subElementRect(QStyle::SE_LineEditContents, &panel, this);
-        QFontMetrics fm = fontMetrics();
-        int horizontalMargin = lineEdit()->x();
-        QRect lineRect(horizontalMargin + r.x(), r.y() + (r.height() - fm.height() + 1) / 2,
-                       r.width() - 2 * horizontalMargin, fm.height());
-        QPainter painter(this);
-        painter.setPen(palette().brush(QPalette::Disabled, QPalette::Text).color());
-        painter.drawText(lineRect, Qt::AlignLeft|Qt::AlignVCenter, m_inactiveText);
-    } else {
-        ExLineEdit::paintEvent(event);
-    }
-}
-
-void SearchLineEdit::resizeEvent(QResizeEvent *event)
-{
-    updateGeometries();
-    ExLineEdit::resizeEvent(event);
-}
-
-void SearchLineEdit::updateGeometries()
-{
-    int menuHeight = height();
-    int menuWidth = menuHeight + 1;
-    if (!m_searchButton->m_menu)
-        menuWidth = (menuHeight / 5) * 4;
-    m_searchButton->resize(QSize(menuWidth, menuHeight));
-}
-
-QString SearchLineEdit::inactiveText() const
-{
-    return m_inactiveText;
-}
-
-void SearchLineEdit::setInactiveText(const QString &text)
-{
-    m_inactiveText = text;
-}
-
-void SearchLineEdit::setMenu(QMenu *menu)
-{
-    if (m_searchButton->m_menu)
-        m_searchButton->m_menu->deleteLater();
-    m_searchButton->m_menu = menu;
-    updateGeometries();
-}
-
-QMenu *SearchLineEdit::menu() const
-{
-    if (!m_searchButton->m_menu) {
-        m_searchButton->m_menu = new QMenu(m_searchButton);
-        if (isVisible())
-            (const_cast<SearchLineEdit*>(this))->updateGeometries();
-    }
-    return m_searchButton->m_menu;
-}
diff --git a/examples/webenginewidgets/demobrowser/searchlineedit.h b/examples/webenginewidgets/demobrowser/searchlineedit.h
deleted file mode 100644
index 9b9587082daed0fa0e774ca8242843ac7d0909ab..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/searchlineedit.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef SEARCHLINEEDIT_H
-#define SEARCHLINEEDIT_H
-
-#include "urllineedit.h"
-
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QAbstractButton>
-
-QT_BEGIN_NAMESPACE
-class QMenu;
-QT_END_NAMESPACE
-
-class SearchButton;
-
-/*
-    Clear button on the right hand side of the search widget.
-    Hidden by default
-    "A circle with an X in it"
- */
-class ClearButton : public QAbstractButton
-{
-    Q_OBJECT
-
-public:
-    ClearButton(QWidget *parent = 0);
-    void paintEvent(QPaintEvent *event);
-
-public slots:
-    void textChanged(const QString &text);
-};
-
-
-class SearchLineEdit : public ExLineEdit
-{
-    Q_OBJECT
-    Q_PROPERTY(QString inactiveText READ inactiveText WRITE setInactiveText)
-
-signals:
-    void textChanged(const QString &text);
-
-public:
-    SearchLineEdit(QWidget *parent = 0);
-
-    QString inactiveText() const;
-    void setInactiveText(const QString &text);
-
-    QMenu *menu() const;
-    void setMenu(QMenu *menu);
-
-protected:
-    void resizeEvent(QResizeEvent *event);
-    void paintEvent(QPaintEvent *event);
-
-private:
-    void updateGeometries();
-
-    SearchButton *m_searchButton;
-    QString m_inactiveText;
-};
-
-#endif // SEARCHLINEEDIT_H
diff --git a/examples/webenginewidgets/demobrowser/settings.cpp b/examples/webenginewidgets/demobrowser/settings.cpp
deleted file mode 100644
index aa3110ae770f05e0901338c7a9991c287ab38c98..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/settings.cpp
+++ /dev/null
@@ -1,323 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "settings.h"
-
-#include "browserapplication.h"
-#include "browsermainwindow.h"
-#if defined(QWEBENGINEPAGE_SETNETWORKACCESSMANAGER)
-#include "cookiejar.h"
-#endif
-#include "history.h"
-#include "webview.h"
-
-#include <QtCore/QLocale>
-#include <QtCore/QSettings>
-#include <QtWidgets/QtWidgets>
-#include <QtWebEngineWidgets/QtWebEngineWidgets>
-
-SettingsDialog::SettingsDialog(QWidget *parent)
-    : QDialog(parent)
-{
-    setupUi(this);
-    connect(setHomeToCurrentPageButton, SIGNAL(clicked()), this, SLOT(setHomeToCurrentPage()));
-    connect(standardFontButton, SIGNAL(clicked()), this, SLOT(chooseFont()));
-    connect(fixedFontButton, SIGNAL(clicked()), this, SLOT(chooseFixedFont()));
-
-    loadDefaults();
-    loadFromSettings();
-}
-
-static QString defaultAcceptLanguage()
-{
-    const QStringList langs = QLocale().uiLanguages();
-    if (langs.isEmpty())
-        return QString();
-    QString str = langs.first();
-    const float qstep = 1.0f / float(langs.count());
-    float q = 1.0f - qstep;
-    for (int i = 1; i < langs.count(); ++i) {
-        str += QStringLiteral(", ") + langs.at(i) + QStringLiteral(";q=") + QString::number(q, 'f', 2);
-        q -= qstep;
-    }
-    return str;
-}
-
-void SettingsDialog::loadDefaults()
-{
-    QWebEngineSettings *defaultSettings = QWebEngineSettings::globalSettings();
-    QString standardFontFamily = defaultSettings->fontFamily(QWebEngineSettings::StandardFont);
-    int standardFontSize = defaultSettings->fontSize(QWebEngineSettings::DefaultFontSize);
-    standardFont = QFont(standardFontFamily, standardFontSize);
-    standardLabel->setText(QString(QLatin1String("%1 %2")).arg(standardFont.family()).arg(standardFont.pointSize()));
-
-    QString fixedFontFamily = defaultSettings->fontFamily(QWebEngineSettings::FixedFont);
-    int fixedFontSize = defaultSettings->fontSize(QWebEngineSettings::DefaultFixedFontSize);
-    fixedFont = QFont(fixedFontFamily, fixedFontSize);
-    fixedLabel->setText(QString(QLatin1String("%1 %2")).arg(fixedFont.family()).arg(fixedFont.pointSize()));
-
-    downloadsLocation->setText(QStandardPaths::writableLocation(QStandardPaths::DesktopLocation));
-
-    enableJavascript->setChecked(defaultSettings->testAttribute(QWebEngineSettings::JavascriptEnabled));
-    enablePlugins->setChecked(defaultSettings->testAttribute(QWebEngineSettings::PluginsEnabled));
-
-    enableScrollAnimator->setChecked(defaultSettings->testAttribute(QWebEngineSettings::ScrollAnimatorEnabled));
-
-    persistentDataPath->setText(QWebEngineProfile::defaultProfile()->persistentStoragePath());
-    sessionCookiesCombo->setCurrentIndex(QWebEngineProfile::defaultProfile()->persistentCookiesPolicy());
-    httpUserAgent->setText(QWebEngineProfile::defaultProfile()->httpUserAgent());
-    httpAcceptLanguage->setText(defaultAcceptLanguage());
-
-    if (!defaultSettings->testAttribute(QWebEngineSettings::AutoLoadIconsForPage))
-        faviconDownloadMode->setCurrentIndex(0);
-    else if (!defaultSettings->testAttribute(QWebEngineSettings::TouchIconsEnabled))
-        faviconDownloadMode->setCurrentIndex(1);
-    else
-        faviconDownloadMode->setCurrentIndex(2);
-}
-
-void SettingsDialog::loadFromSettings()
-{
-    QSettings settings;
-    settings.beginGroup(QLatin1String("MainWindow"));
-    const QString defaultHome = QLatin1String(BrowserMainWindow::defaultHome);
-    homeLineEdit->setText(settings.value(QLatin1String("home"), defaultHome).toString());
-    settings.endGroup();
-
-    settings.beginGroup(QLatin1String("history"));
-    int historyExpire = settings.value(QLatin1String("historyExpire")).toInt();
-    int idx = 0;
-    switch (historyExpire) {
-    case 1: idx = 0; break;
-    case 7: idx = 1; break;
-    case 14: idx = 2; break;
-    case 30: idx = 3; break;
-    case 365: idx = 4; break;
-    case -1: idx = 5; break;
-    default:
-        idx = 5;
-    }
-    expireHistory->setCurrentIndex(idx);
-    settings.endGroup();
-
-    settings.beginGroup(QLatin1String("downloadmanager"));
-    QString downloadDirectory = settings.value(QLatin1String("downloadDirectory"), downloadsLocation->text()).toString();
-    downloadsLocation->setText(downloadDirectory);
-    settings.endGroup();
-
-    settings.beginGroup(QLatin1String("general"));
-    openLinksIn->setCurrentIndex(settings.value(QLatin1String("openLinksIn"), openLinksIn->currentIndex()).toInt());
-
-    settings.endGroup();
-
-    // Appearance
-    settings.beginGroup(QLatin1String("websettings"));
-    fixedFont = qvariant_cast<QFont>(settings.value(QLatin1String("fixedFont"), fixedFont));
-    standardFont = qvariant_cast<QFont>(settings.value(QLatin1String("standardFont"), standardFont));
-
-    standardLabel->setText(QString(QLatin1String("%1 %2")).arg(standardFont.family()).arg(standardFont.pointSize()));
-    fixedLabel->setText(QString(QLatin1String("%1 %2")).arg(fixedFont.family()).arg(fixedFont.pointSize()));
-
-    enableJavascript->setChecked(settings.value(QLatin1String("enableJavascript"), enableJavascript->isChecked()).toBool());
-    enablePlugins->setChecked(settings.value(QLatin1String("enablePlugins"), enablePlugins->isChecked()).toBool());
-    userStyleSheet->setPlainText(settings.value(QLatin1String("userStyleSheet")).toString());
-    enableScrollAnimator->setChecked(settings.value(QLatin1String("enableScrollAnimator"), enableScrollAnimator->isChecked()).toBool());
-    httpUserAgent->setText(settings.value(QLatin1String("httpUserAgent"), httpUserAgent->text()).toString());
-    httpAcceptLanguage->setText(settings.value(QLatin1String("httpAcceptLanguage"), httpAcceptLanguage->text()).toString());
-    faviconDownloadMode->setCurrentIndex(settings.value(QLatin1String("faviconDownloadMode"), faviconDownloadMode->currentIndex()).toInt());
-    settings.endGroup();
-
-    // Privacy
-    settings.beginGroup(QLatin1String("cookies"));
-
-    int persistentCookiesPolicy = settings.value(QLatin1String("persistentCookiesPolicy"), sessionCookiesCombo->currentIndex()).toInt();
-    sessionCookiesCombo->setCurrentIndex(persistentCookiesPolicy);
-
-    QString pdataPath = settings.value(QLatin1String("persistentDataPath"), persistentDataPath->text()).toString();
-    persistentDataPath->setText(pdataPath);
-
-    settings.endGroup();
-
-    // Proxy
-    settings.beginGroup(QLatin1String("proxy"));
-    proxySupport->setChecked(settings.value(QLatin1String("enabled"), false).toBool());
-    proxyType->setCurrentIndex(settings.value(QLatin1String("type"), 0).toInt());
-    proxyHostName->setText(settings.value(QLatin1String("hostName")).toString());
-    proxyPort->setValue(settings.value(QLatin1String("port"), 1080).toInt());
-    proxyUserName->setText(settings.value(QLatin1String("userName")).toString());
-    proxyPassword->setText(settings.value(QLatin1String("password")).toString());
-    settings.endGroup();
-}
-
-void SettingsDialog::saveToSettings()
-{
-    QSettings settings;
-    settings.beginGroup(QLatin1String("MainWindow"));
-    settings.setValue(QLatin1String("home"), homeLineEdit->text());
-    settings.endGroup();
-
-    settings.beginGroup(QLatin1String("general"));
-    settings.setValue(QLatin1String("openLinksIn"), openLinksIn->currentIndex());
-    settings.endGroup();
-
-    settings.beginGroup(QLatin1String("history"));
-    int historyExpire = expireHistory->currentIndex();
-    int idx = -1;
-    switch (historyExpire) {
-    case 0: idx = 1; break;
-    case 1: idx = 7; break;
-    case 2: idx = 14; break;
-    case 3: idx = 30; break;
-    case 4: idx = 365; break;
-    case 5: idx = -1; break;
-    }
-    settings.setValue(QLatin1String("historyExpire"), idx);
-    settings.endGroup();
-
-    // Appearance
-    settings.beginGroup(QLatin1String("websettings"));
-    settings.setValue(QLatin1String("fixedFont"), fixedFont);
-    settings.setValue(QLatin1String("standardFont"), standardFont);
-    settings.setValue(QLatin1String("enableJavascript"), enableJavascript->isChecked());
-    settings.setValue(QLatin1String("enablePlugins"), enablePlugins->isChecked());
-    settings.setValue(QLatin1String("enableScrollAnimator"), enableScrollAnimator->isChecked());
-    settings.setValue(QLatin1String("userStyleSheet"), userStyleSheet->toPlainText());
-    settings.setValue(QLatin1String("httpUserAgent"), httpUserAgent->text());
-    settings.setValue(QLatin1String("httpAcceptLanguage"), httpAcceptLanguage->text());
-    settings.setValue(QLatin1String("faviconDownloadMode"), faviconDownloadMode->currentIndex());
-    settings.endGroup();
-
-    //Privacy
-    settings.beginGroup(QLatin1String("cookies"));
-
-    int persistentCookiesPolicy = sessionCookiesCombo->currentIndex();
-    settings.setValue(QLatin1String("persistentCookiesPolicy"), persistentCookiesPolicy);
-
-    QString pdataPath = persistentDataPath->text();
-    settings.setValue(QLatin1String("persistentDataPath"), pdataPath);
-
-    settings.endGroup();
-
-    // proxy
-    settings.beginGroup(QLatin1String("proxy"));
-    settings.setValue(QLatin1String("enabled"), proxySupport->isChecked());
-    settings.setValue(QLatin1String("type"), proxyType->currentIndex());
-    settings.setValue(QLatin1String("hostName"), proxyHostName->text());
-    settings.setValue(QLatin1String("port"), proxyPort->text());
-    settings.setValue(QLatin1String("userName"), proxyUserName->text());
-    settings.setValue(QLatin1String("password"), proxyPassword->text());
-    settings.endGroup();
-
-    BrowserApplication::instance()->loadSettings();
-#if defined(QWEBENGINEPAGE_SETNETWORKACCESSMANAGER)
-    BrowserApplication::cookieJar()->loadSettings();
-#endif
-    BrowserApplication::historyManager()->loadSettings();
-}
-
-void SettingsDialog::accept()
-{
-    saveToSettings();
-    QDialog::accept();
-}
-
-void SettingsDialog::showCookies()
-{
-#if defined(QWEBENGINEPAGE_SETNETWORKACCESSMANAGER)
-    CookiesDialog *dialog = new CookiesDialog(BrowserApplication::cookieJar(), this);
-    dialog->exec();
-#endif
-}
-
-void SettingsDialog::showExceptions()
-{
-#if defined(QWEBENGINEPAGE_SETNETWORKACCESSMANAGER)
-    CookiesExceptionsDialog *dialog = new CookiesExceptionsDialog(BrowserApplication::cookieJar(), this);
-    dialog->exec();
-#endif
-}
-
-void SettingsDialog::chooseFont()
-{
-    bool ok;
-    QFont font = QFontDialog::getFont(&ok, standardFont, this);
-    if ( ok ) {
-        standardFont = font;
-        standardLabel->setText(QString(QLatin1String("%1 %2")).arg(font.family()).arg(font.pointSize()));
-    }
-}
-
-void SettingsDialog::chooseFixedFont()
-{
-    bool ok;
-    QFont font = QFontDialog::getFont(&ok, fixedFont, this);
-    if ( ok ) {
-        fixedFont = font;
-        fixedLabel->setText(QString(QLatin1String("%1 %2")).arg(font.family()).arg(font.pointSize()));
-    }
-}
-
-void SettingsDialog::on_httpUserAgent_editingFinished()
-{
-    QWebEngineProfile::defaultProfile()->setHttpUserAgent(httpUserAgent->text());
-}
-
-void SettingsDialog::on_httpAcceptLanguage_editingFinished()
-{
-    QWebEngineProfile::defaultProfile()->setHttpAcceptLanguage(httpAcceptLanguage->text());
-}
-
-void SettingsDialog::setHomeToCurrentPage()
-{
-    BrowserMainWindow *mw = static_cast<BrowserMainWindow*>(parent());
-    WebView *webView = mw->currentTab();
-    if (webView)
-        homeLineEdit->setText(webView->url().toString());
-}
diff --git a/examples/webenginewidgets/demobrowser/settings.h b/examples/webenginewidgets/demobrowser/settings.h
deleted file mode 100644
index ff5795609f7c9d8d91216b930bde6482ab7bfae9..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/settings.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef SETTINGS_H
-#define SETTINGS_H
-
-#include <QtWidgets/QDialog>
-#include "ui_settings.h"
-
-class SettingsDialog : public QDialog, public Ui_Settings
-{
-    Q_OBJECT
-
-public:
-    SettingsDialog(QWidget *parent = 0);
-    void accept();
-
-private slots:
-    void loadDefaults();
-    void loadFromSettings();
-    void saveToSettings();
-
-    void setHomeToCurrentPage();
-    void showCookies();
-    void showExceptions();
-
-    void chooseFont();
-    void chooseFixedFont();
-
-    void on_httpUserAgent_editingFinished();
-    void on_httpAcceptLanguage_editingFinished();
-
-private:
-    QFont standardFont;
-    QFont fixedFont;
-};
-
-#endif // SETTINGS_H
diff --git a/examples/webenginewidgets/demobrowser/settings.ui b/examples/webenginewidgets/demobrowser/settings.ui
deleted file mode 100644
index c78a52dfe996a2e951bc48b19f84edaf36caa139..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/settings.ui
+++ /dev/null
@@ -1,621 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>Settings</class>
- <widget class="QDialog" name="Settings">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>657</width>
-    <height>336</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Settings</string>
-  </property>
-  <layout class="QGridLayout" name="gridLayout">
-   <item row="2" column="0">
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-   <item row="1" column="0">
-    <widget class="QTabWidget" name="tabWidget">
-     <property name="currentIndex">
-      <number>0</number>
-     </property>
-     <widget class="QWidget" name="tab">
-      <attribute name="title">
-       <string>General</string>
-      </attribute>
-      <layout class="QGridLayout" name="gridLayout_4">
-       <item row="1" column="2">
-        <spacer name="horizontalSpacer">
-         <property name="orientation">
-          <enum>Qt::Horizontal</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>280</width>
-           <height>18</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-       <item row="0" column="0">
-        <widget class="QLabel" name="label_3">
-         <property name="text">
-          <string>Home:</string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-         </property>
-        </widget>
-       </item>
-       <item row="0" column="1" colspan="2">
-        <widget class="QLineEdit" name="homeLineEdit"/>
-       </item>
-       <item row="7" column="1" colspan="2">
-        <spacer>
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>391</width>
-           <height>262</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-       <item row="3" column="0">
-        <widget class="QLabel" name="label_7">
-         <property name="text">
-          <string>Save downloads to:</string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-         </property>
-        </widget>
-       </item>
-       <item row="4" column="0">
-        <widget class="QLabel" name="label_8">
-         <property name="text">
-          <string>Open links from applications:</string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-         </property>
-        </widget>
-       </item>
-       <item row="6" column="1" colspan="2">
-        <widget class="QCheckBox" name="enableScrollAnimator">
-         <property name="text">
-          <string>Enable Scroll Animator</string>
-         </property>
-         <property name="checked">
-          <bool>true</bool>
-         </property>
-        </widget>
-       </item>
-       <item row="4" column="1" colspan="2">
-        <widget class="QComboBox" name="openLinksIn">
-         <item>
-          <property name="text">
-           <string>In a tab in the current window</string>
-          </property>
-         </item>
-         <item>
-          <property name="text">
-           <string>In a new window</string>
-          </property>
-         </item>
-        </widget>
-       </item>
-       <item row="2" column="1" colspan="2">
-        <widget class="QComboBox" name="expireHistory">
-         <item>
-          <property name="text">
-           <string>After one day</string>
-          </property>
-         </item>
-         <item>
-          <property name="text">
-           <string>After one week</string>
-          </property>
-         </item>
-         <item>
-          <property name="text">
-           <string>After two weeks</string>
-          </property>
-         </item>
-         <item>
-          <property name="text">
-           <string>After one month</string>
-          </property>
-         </item>
-         <item>
-          <property name="text">
-           <string>After one year</string>
-          </property>
-         </item>
-         <item>
-          <property name="text">
-           <string>Manually</string>
-          </property>
-         </item>
-        </widget>
-       </item>
-       <item row="2" column="0">
-        <widget class="QLabel" name="label_4">
-         <property name="text">
-          <string>Remove history items:</string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-         </property>
-        </widget>
-       </item>
-       <item row="3" column="1" colspan="2">
-        <widget class="QLineEdit" name="downloadsLocation"/>
-       </item>
-       <item row="1" column="1">
-        <widget class="QPushButton" name="setHomeToCurrentPageButton">
-         <property name="text">
-          <string>Set to current page</string>
-         </property>
-        </widget>
-       </item>
-       <item row="5" column="0">
-        <widget class="QLabel" name="label_17">
-         <property name="text">
-          <string>Favicon download mode:</string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-         </property>
-        </widget>
-       </item>
-       <item row="5" column="1" colspan="2">
-        <widget class="QComboBox" name="faviconDownloadMode">
-         <property name="currentIndex">
-          <number>1</number>
-         </property>
-         <item>
-          <property name="text">
-           <string>Disable icons</string>
-          </property>
-         </item>
-         <item>
-          <property name="text">
-           <string>Enable favicons</string>
-          </property>
-         </item>
-         <item>
-          <property name="text">
-           <string>Enable favicons and touch icons</string>
-          </property>
-         </item>
-        </widget>
-       </item>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="tab_3">
-      <attribute name="title">
-       <string>Appearance</string>
-      </attribute>
-      <layout class="QGridLayout" name="gridLayout_3">
-       <item row="0" column="0">
-        <widget class="QLabel" name="label_5">
-         <property name="text">
-          <string>Standard font:</string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-         </property>
-        </widget>
-       </item>
-       <item row="0" column="1">
-        <widget class="QLabel" name="standardLabel">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="frameShape">
-          <enum>QFrame::StyledPanel</enum>
-         </property>
-         <property name="text">
-          <string>Times 16</string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignCenter</set>
-         </property>
-        </widget>
-       </item>
-       <item row="0" column="2">
-        <widget class="QPushButton" name="standardFontButton">
-         <property name="text">
-          <string>Select...</string>
-         </property>
-        </widget>
-       </item>
-       <item row="1" column="0">
-        <widget class="QLabel" name="label_6">
-         <property name="text">
-          <string>Fixed-width font:</string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-         </property>
-        </widget>
-       </item>
-       <item row="1" column="1">
-        <widget class="QLabel" name="fixedLabel">
-         <property name="frameShape">
-          <enum>QFrame::StyledPanel</enum>
-         </property>
-         <property name="text">
-          <string>Courier 13</string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignCenter</set>
-         </property>
-        </widget>
-       </item>
-       <item row="1" column="2">
-        <widget class="QPushButton" name="fixedFontButton">
-         <property name="text">
-          <string>Select...</string>
-         </property>
-        </widget>
-       </item>
-       <item row="2" column="1">
-        <spacer name="verticalSpacer">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>20</width>
-           <height>93</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="tab_2">
-      <attribute name="title">
-       <string>Privacy</string>
-      </attribute>
-      <layout class="QVBoxLayout" name="verticalLayout_3">
-       <item>
-        <widget class="QGroupBox" name="groupBox">
-         <property name="title">
-          <string>Web Content</string>
-         </property>
-         <layout class="QVBoxLayout" name="verticalLayout_2">
-          <item>
-           <widget class="QCheckBox" name="enablePlugins">
-            <property name="text">
-             <string>Enable Plugins</string>
-            </property>
-            <property name="checked">
-             <bool>true</bool>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QCheckBox" name="enableJavascript">
-            <property name="text">
-             <string>Enable Javascript</string>
-            </property>
-            <property name="checked">
-             <bool>true</bool>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </widget>
-       </item>
-       <item>
-        <widget class="QGroupBox" name="cookiesGroupBox">
-         <property name="title">
-          <string>Cookies</string>
-         </property>
-         <layout class="QGridLayout">
-          <property name="leftMargin">
-           <number>9</number>
-          </property>
-          <item row="0" column="0">
-           <widget class="QLabel" name="label_2">
-            <property name="text">
-             <string>Persistent Cookie Policy</string>
-            </property>
-            <property name="alignment">
-             <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="1">
-           <widget class="QComboBox" name="sessionCookiesCombo">
-            <item>
-             <property name="text">
-              <string>Treat all cookies as session cookies</string>
-             </property>
-            </item>
-            <item>
-             <property name="text">
-              <string>Allow persistent cookies</string>
-             </property>
-            </item>
-            <item>
-             <property name="text">
-              <string>Treat all cookies as persistent cookies</string>
-             </property>
-            </item>
-           </widget>
-          </item>
-          <item row="1" column="0">
-           <widget class="QLabel" name="label">
-            <property name="text">
-             <string>Persistent Data Path:</string>
-            </property>
-            <property name="alignment">
-             <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="1">
-           <widget class="QLineEdit" name="persistentDataPath"/>
-          </item>
-         </layout>
-        </widget>
-       </item>
-       <item>
-        <spacer name="verticalSpacer_4">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>20</width>
-           <height>40</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="tab_4">
-      <attribute name="title">
-       <string>Proxy</string>
-      </attribute>
-      <layout class="QVBoxLayout" name="verticalLayout">
-       <item>
-        <widget class="QGroupBox" name="proxySupport">
-         <property name="title">
-          <string>Enable proxy</string>
-         </property>
-         <property name="checkable">
-          <bool>true</bool>
-         </property>
-         <layout class="QGridLayout" name="gridLayout_6">
-          <item row="0" column="0">
-           <widget class="QLabel" name="label_9">
-            <property name="text">
-             <string>Type:</string>
-            </property>
-            <property name="alignment">
-             <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="1" colspan="2">
-           <widget class="QComboBox" name="proxyType">
-            <item>
-             <property name="text">
-              <string>Socks5</string>
-             </property>
-            </item>
-            <item>
-             <property name="text">
-              <string>Http</string>
-             </property>
-            </item>
-           </widget>
-          </item>
-          <item row="1" column="0">
-           <widget class="QLabel" name="label_10">
-            <property name="text">
-             <string>Host:</string>
-            </property>
-            <property name="alignment">
-             <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="1" colspan="2">
-           <widget class="QLineEdit" name="proxyHostName"/>
-          </item>
-          <item row="2" column="0">
-           <widget class="QLabel" name="label_11">
-            <property name="text">
-             <string>Port:</string>
-            </property>
-            <property name="alignment">
-             <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-            </property>
-           </widget>
-          </item>
-          <item row="2" column="1">
-           <widget class="QSpinBox" name="proxyPort">
-            <property name="maximum">
-             <number>10000</number>
-            </property>
-            <property name="value">
-             <number>1080</number>
-            </property>
-           </widget>
-          </item>
-          <item row="2" column="2">
-           <spacer name="horizontalSpacer_2">
-            <property name="orientation">
-             <enum>Qt::Horizontal</enum>
-            </property>
-            <property name="sizeHint" stdset="0">
-             <size>
-              <width>293</width>
-              <height>20</height>
-             </size>
-            </property>
-           </spacer>
-          </item>
-          <item row="3" column="0">
-           <widget class="QLabel" name="label_12">
-            <property name="text">
-             <string>User Name:</string>
-            </property>
-            <property name="alignment">
-             <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-            </property>
-           </widget>
-          </item>
-          <item row="3" column="1" colspan="2">
-           <widget class="QLineEdit" name="proxyUserName"/>
-          </item>
-          <item row="4" column="0">
-           <widget class="QLabel" name="label_13">
-            <property name="text">
-             <string>Password:</string>
-            </property>
-            <property name="alignment">
-             <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-            </property>
-           </widget>
-          </item>
-          <item row="4" column="1" colspan="2">
-           <widget class="QLineEdit" name="proxyPassword">
-            <property name="echoMode">
-             <enum>QLineEdit::Password</enum>
-            </property>
-           </widget>
-          </item>
-          <item row="5" column="0">
-           <spacer name="verticalSpacer_2">
-            <property name="orientation">
-             <enum>Qt::Vertical</enum>
-            </property>
-            <property name="sizeHint" stdset="0">
-             <size>
-              <width>20</width>
-              <height>8</height>
-             </size>
-            </property>
-           </spacer>
-          </item>
-         </layout>
-        </widget>
-       </item>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="tab_5">
-      <attribute name="title">
-       <string>Advanced</string>
-      </attribute>
-      <layout class="QGridLayout" name="gridLayout_2">
-       <item row="0" column="0">
-        <widget class="QLabel" name="label_15">
-         <property name="text">
-          <string>HTTP User-Agent:</string>
-         </property>
-        </widget>
-       </item>
-       <item row="0" column="1">
-        <widget class="QLineEdit" name="httpUserAgent"/>
-       </item>
-       <item row="1" column="0">
-        <widget class="QLabel" name="label_16">
-         <property name="text">
-          <string>HTTP Accept-&amp;Language:</string>
-         </property>
-         <property name="buddy">
-          <cstring>httpAcceptLanguage</cstring>
-         </property>
-        </widget>
-       </item>
-       <item row="1" column="1">
-        <widget class="QLineEdit" name="httpAcceptLanguage"/>
-       </item>
-       <item row="2" column="0">
-        <widget class="QLabel" name="label_14">
-         <property name="text">
-          <string>Style Sheet:</string>
-         </property>
-        </widget>
-       </item>
-       <item row="2" column="1">
-        <widget class="QTextEdit" name="userStyleSheet"/>
-       </item>
-       <item row="3" column="1">
-        <spacer name="verticalSpacer_3">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>20</width>
-           <height>176</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-      </layout>
-     </widget>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>Settings</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>248</x>
-     <y>254</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>Settings</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>316</x>
-     <y>260</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>286</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/examples/webenginewidgets/demobrowser/squeezelabel.cpp b/examples/webenginewidgets/demobrowser/squeezelabel.cpp
deleted file mode 100644
index 9607bb78419e621d447764e67efc7cd7dd3079ea..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/squeezelabel.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "squeezelabel.h"
-
-SqueezeLabel::SqueezeLabel(QWidget *parent) : QLabel(parent)
-{
-}
-
-void SqueezeLabel::paintEvent(QPaintEvent *event)
-{
-    QFontMetrics fm = fontMetrics();
-    if (fm.width(text()) > contentsRect().width()) {
-        QString elided = fm.elidedText(text(), Qt::ElideMiddle, width());
-        QString oldText = text();
-        setText(elided);
-        QLabel::paintEvent(event);
-        setText(oldText);
-    } else {
-        QLabel::paintEvent(event);
-    }
-}
diff --git a/examples/webenginewidgets/demobrowser/squeezelabel.h b/examples/webenginewidgets/demobrowser/squeezelabel.h
deleted file mode 100644
index 8acd1fb6e5b7ebf7a7765c05d35aa141c6102800..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/squeezelabel.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef SQUEEZELABEL_H
-#define SQUEEZELABEL_H
-
-#include <QtWidgets/QLabel>
-
-class SqueezeLabel : public QLabel
-{
-    Q_OBJECT
-
-public:
-    SqueezeLabel(QWidget *parent = 0);
-
-protected:
-    void paintEvent(QPaintEvent *event);
-
-};
-
-#endif // SQUEEZELABEL_H
diff --git a/examples/webenginewidgets/demobrowser/tabwidget.cpp b/examples/webenginewidgets/demobrowser/tabwidget.cpp
deleted file mode 100644
index aa730d1b6416ea59d378a1976eb081743dc1144b..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/tabwidget.cpp
+++ /dev/null
@@ -1,1012 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "tabwidget.h"
-
-#include "browserapplication.h"
-#include "browsermainwindow.h"
-#include "downloadmanager.h"
-#include "fullscreennotification.h"
-#include "history.h"
-#include "savepagedialog.h"
-#include "urllineedit.h"
-#include "webview.h"
-
-#include <QWebEngineDownloadItem>
-#include <QWebEngineProfile>
-#include <QWebEngineFullScreenRequest>
-#include <QtCore/QMimeData>
-#include <QtGui/QClipboard>
-#include <QtWidgets/QCompleter>
-#include <QtWidgets/QListView>
-#include <QtWidgets/QMenu>
-#include <QtWidgets/QMessageBox>
-#include <QtGui/QDrag>
-#include <QtGui/QMouseEvent>
-#include <QtWidgets/QStackedWidget>
-#include <QtWidgets/QStyle>
-#include <QtWidgets/QToolButton>
-
-#include <QtCore/QDebug>
-
-TabBar::TabBar(QWidget *parent)
-    : QTabBar(parent)
-{
-    setContextMenuPolicy(Qt::CustomContextMenu);
-    setAcceptDrops(true);
-    connect(this, SIGNAL(customContextMenuRequested(QPoint)),
-            this, SLOT(contextMenuRequested(QPoint)));
-
-    QString ctrl = QLatin1String("Ctrl+%1");
-    for (int i = 1; i < 10; ++i) {
-        QShortcut *shortCut = new QShortcut(ctrl.arg(i), this);
-        m_tabShortcuts.append(shortCut);
-        connect(shortCut, SIGNAL(activated()), this, SLOT(selectTabAction()));
-    }
-    setTabsClosable(true);
-    connect(this, SIGNAL(tabCloseRequested(int)),
-            this, SIGNAL(closeTab(int)));
-    setSelectionBehaviorOnRemove(QTabBar::SelectPreviousTab);
-    setMovable(true);
-}
-
-void TabBar::selectTabAction()
-{
-    if (QShortcut *shortCut = qobject_cast<QShortcut*>(sender())) {
-        int index = m_tabShortcuts.indexOf(shortCut);
-        setCurrentIndex(index);
-    }
-}
-
-void TabBar::contextMenuRequested(const QPoint &position)
-{
-    QMenu menu;
-    menu.addAction(tr("New &Tab"), this, SIGNAL(newTab()), QKeySequence::AddTab);
-    int index = tabAt(position);
-    if (-1 != index) {
-        QAction *action = menu.addAction(tr("Clone Tab"),
-                this, SLOT(cloneTab()));
-        action->setData(index);
-
-        menu.addSeparator();
-
-        action = menu.addAction(tr("&Close Tab"),
-                this, SLOT(closeTab()), QKeySequence::Close);
-        action->setData(index);
-
-        action = menu.addAction(tr("Close &Other Tabs"),
-                this, SLOT(closeOtherTabs()));
-        action->setData(index);
-
-        menu.addSeparator();
-
-        action = menu.addAction(tr("Reload Tab"),
-                this, SLOT(reloadTab()), QKeySequence::Refresh);
-        action->setData(index);
-
-        // Audio mute / unmute.
-        action = menu.addAction(tr("Mute tab"),
-                this, SLOT(muteTab()));
-        action->setData(index);
-
-        action = menu.addAction(tr("Unmute tab"),
-                this, SLOT(unmuteTab()));
-        action->setData(index);
-    } else {
-        menu.addSeparator();
-    }
-    menu.addAction(tr("Reload All Tabs"), this, SIGNAL(reloadAllTabs()));
-    menu.exec(QCursor::pos());
-}
-
-void TabBar::cloneTab()
-{
-    if (QAction *action = qobject_cast<QAction*>(sender())) {
-        int index = action->data().toInt();
-        emit cloneTab(index);
-    }
-}
-
-void TabBar::closeTab()
-{
-    if (QAction *action = qobject_cast<QAction*>(sender())) {
-        int index = action->data().toInt();
-        emit closeTab(index);
-    }
-}
-
-void TabBar::closeOtherTabs()
-{
-    if (QAction *action = qobject_cast<QAction*>(sender())) {
-        int index = action->data().toInt();
-        emit closeOtherTabs(index);
-    }
-}
-
-void TabBar::mousePressEvent(QMouseEvent *event)
-{
-    if (event->button() == Qt::LeftButton)
-        m_dragStartPos = event->pos();
-
-    QTabBar::mousePressEvent(event);
-
-    // Middle click on tab should close it.
-    if (event->button() == Qt::MiddleButton) {
-        const QPoint pos = event->pos();
-        int index = tabAt(pos);
-        if (index != -1) {
-            emit closeTab(index);
-        }
-    }
-}
-
-void TabBar::mouseMoveEvent(QMouseEvent *event)
-{
-    if (event->buttons() == Qt::LeftButton) {
-        int diffX = event->pos().x() - m_dragStartPos.x();
-        int diffY = event->pos().y() - m_dragStartPos.y();
-        if ((event->pos() - m_dragStartPos).manhattanLength() > QApplication::startDragDistance()
-            && diffX < 3 && diffX > -3
-            && diffY < -10) {
-            QDrag *drag = new QDrag(this);
-            QMimeData *mimeData = new QMimeData;
-            QList<QUrl> urls;
-            int index = tabAt(event->pos());
-            QUrl url = tabData(index).toUrl();
-            urls.append(url);
-            mimeData->setUrls(urls);
-            mimeData->setText(tabText(index));
-            mimeData->setData(QLatin1String("action"), "tab-reordering");
-            drag->setMimeData(mimeData);
-            drag->exec();
-        }
-    }
-    QTabBar::mouseMoveEvent(event);
-}
-
-// When index is -1 index chooses the current tab
-void TabWidget::reloadTab(int index)
-{
-    if (index < 0)
-        index = currentIndex();
-    if (index < 0 || index >= count())
-        return;
-
-    QWidget *widget = this->widget(index);
-    if (WebView *tab = qobject_cast<WebView*>(widget))
-        tab->reload();
-}
-
-void TabBar::reloadTab()
-{
-    if (QAction *action = qobject_cast<QAction*>(sender())) {
-        int index = action->data().toInt();
-        emit reloadTab(index);
-    }
-}
-
-void TabBar::muteTab()
-{
-    if (QAction *action = qobject_cast<QAction*>(sender())) {
-        int index = action->data().toInt();
-        emit muteTab(index, true);
-    }
-}
-
-void TabBar::unmuteTab()
-{
-    if (QAction *action = qobject_cast<QAction*>(sender())) {
-        int index = action->data().toInt();
-        emit muteTab(index, false);
-    }
-}
-
-TabWidget::TabWidget(QWidget *parent)
-    : QTabWidget(parent)
-    , m_recentlyClosedTabsAction(0)
-    , m_newTabAction(0)
-    , m_closeTabAction(0)
-    , m_nextTabAction(0)
-    , m_previousTabAction(0)
-    , m_recentlyClosedTabsMenu(0)
-    , m_lineEditCompleter(0)
-    , m_lineEdits(0)
-    , m_tabBar(new TabBar(this))
-    , m_profile(QWebEngineProfile::defaultProfile())
-    , m_fullScreenView(0)
-    , m_fullScreenNotification(0)
-{
-    setElideMode(Qt::ElideRight);
-
-    connect(m_tabBar, SIGNAL(newTab()), this, SLOT(newTab()));
-    connect(m_tabBar, SIGNAL(closeTab(int)), this, SLOT(requestCloseTab(int)));
-    connect(m_tabBar, SIGNAL(cloneTab(int)), this, SLOT(cloneTab(int)));
-    connect(m_tabBar, SIGNAL(closeOtherTabs(int)), this, SLOT(closeOtherTabs(int)));
-    connect(m_tabBar, SIGNAL(reloadTab(int)), this, SLOT(reloadTab(int)));
-    connect(m_tabBar, SIGNAL(reloadAllTabs()), this, SLOT(reloadAllTabs()));
-    connect(m_tabBar, SIGNAL(tabMoved(int,int)), this, SLOT(moveTab(int,int)));
-    connect(m_tabBar, SIGNAL(tabBarDoubleClicked(int)), this, SLOT(handleTabBarDoubleClicked(int)));
-    connect(m_tabBar, SIGNAL(muteTab(int,bool)), this, SLOT(setAudioMutedForTab(int,bool)));
-    setTabBar(m_tabBar);
-    setDocumentMode(true);
-
-    // Actions
-    m_newTabAction = new QAction(QIcon(QLatin1String(":addtab.png")), tr("New &Tab"), this);
-    m_newTabAction->setShortcuts(QKeySequence::AddTab);
-    m_newTabAction->setIconVisibleInMenu(false);
-    connect(m_newTabAction, SIGNAL(triggered()), this, SLOT(newTab()));
-
-    m_closeTabAction = new QAction(QIcon(QLatin1String(":closetab.png")), tr("&Close Tab"), this);
-    m_closeTabAction->setShortcuts(QKeySequence::Close);
-    m_closeTabAction->setIconVisibleInMenu(false);
-    connect(m_closeTabAction, SIGNAL(triggered()), this, SLOT(requestCloseTab()));
-
-    m_nextTabAction = new QAction(tr("Show Next Tab"), this);
-    QList<QKeySequence> shortcuts;
-    shortcuts.append(QKeySequence(Qt::CTRL | Qt::Key_BraceRight));
-    shortcuts.append(QKeySequence(Qt::CTRL | Qt::Key_PageDown));
-    shortcuts.append(QKeySequence(Qt::CTRL | Qt::Key_BracketRight));
-    shortcuts.append(QKeySequence(Qt::CTRL | Qt::Key_Less));
-    m_nextTabAction->setShortcuts(shortcuts);
-    connect(m_nextTabAction, SIGNAL(triggered()), this, SLOT(nextTab()));
-
-    m_previousTabAction = new QAction(tr("Show Previous Tab"), this);
-    shortcuts.clear();
-    shortcuts.append(QKeySequence(Qt::CTRL | Qt::Key_BraceLeft));
-    shortcuts.append(QKeySequence(Qt::CTRL | Qt::Key_PageUp));
-    shortcuts.append(QKeySequence(Qt::CTRL | Qt::Key_BracketLeft));
-    shortcuts.append(QKeySequence(Qt::CTRL | Qt::Key_Greater));
-    m_previousTabAction->setShortcuts(shortcuts);
-    connect(m_previousTabAction, SIGNAL(triggered()), this, SLOT(previousTab()));
-
-    m_recentlyClosedTabsMenu = new QMenu(this);
-    connect(m_recentlyClosedTabsMenu, SIGNAL(aboutToShow()),
-            this, SLOT(aboutToShowRecentTabsMenu()));
-    connect(m_recentlyClosedTabsMenu, SIGNAL(triggered(QAction*)),
-            this, SLOT(aboutToShowRecentTriggeredAction(QAction*)));
-    m_recentlyClosedTabsAction = new QAction(tr("Recently Closed Tabs"), this);
-    m_recentlyClosedTabsAction->setMenu(m_recentlyClosedTabsMenu);
-    m_recentlyClosedTabsAction->setEnabled(false);
-
-    connect(this, SIGNAL(currentChanged(int)),
-            this, SLOT(currentChanged(int)));
-
-    m_lineEdits = new QStackedWidget(this);
-}
-
-TabWidget::~TabWidget()
-{
-    if (m_fullScreenView)
-        delete m_fullScreenView;
-}
-
-void TabWidget::clear()
-{
-    // clear the recently closed tabs
-    m_recentlyClosedTabs.clear();
-    // clear the line edit history
-    for (int i = 0; i < m_lineEdits->count(); ++i) {
-        QLineEdit *qLineEdit = lineEdit(i);
-        qLineEdit->setText(qLineEdit->text());
-    }
-}
-
-void TabWidget::moveTab(int fromIndex, int toIndex)
-{
-    QWidget *lineEdit = m_lineEdits->widget(fromIndex);
-    m_lineEdits->removeWidget(lineEdit);
-    m_lineEdits->insertWidget(toIndex, lineEdit);
-}
-
-void TabWidget::setAudioMutedForTab(int index, bool mute)
-{
-    if (index < 0)
-        index = currentIndex();
-    if (index < 0 || index >= count())
-        return;
-
-    QWidget *widget = this->widget(index);
-    if (WebView *tab = qobject_cast<WebView*>(widget))
-        tab->page()->setAudioMuted(mute);
-}
-
-void TabWidget::addWebAction(QAction *action, QWebEnginePage::WebAction webAction)
-{
-    if (!action)
-        return;
-    m_actions.append(new WebActionMapper(action, webAction, this));
-}
-
-void TabWidget::currentChanged(int index)
-{
-    WebView *webView = this->webView(index);
-    if (!webView)
-        return;
-
-    Q_ASSERT(m_lineEdits->count() == count());
-
-    WebView *oldWebView = this->webView(m_lineEdits->currentIndex());
-    if (oldWebView) {
-#if defined(QWEBENGINEVIEW_STATUSBARMESSAGE)
-        disconnect(oldWebView, SIGNAL(statusBarMessage(QString)),
-                this, SIGNAL(showStatusBarMessage(QString)));
-#endif
-        disconnect(oldWebView->page(), SIGNAL(linkHovered(const QString&)),
-                this, SIGNAL(linkHovered(const QString&)));
-        disconnect(oldWebView, SIGNAL(loadProgress(int)),
-                this, SIGNAL(loadProgress(int)));
-        disconnect(oldWebView->page()->profile(), SIGNAL(downloadRequested(QWebEngineDownloadItem*)),
-                this, SLOT(downloadRequested(QWebEngineDownloadItem*)));
-        disconnect(oldWebView->page(), SIGNAL(fullScreenRequested(QWebEngineFullScreenRequest)),
-                this, SLOT(fullScreenRequested(QWebEngineFullScreenRequest)));
-    }
-
-#if defined(QWEBENGINEVIEW_STATUSBARMESSAGE)
-    connect(webView, SIGNAL(statusBarMessage(QString)),
-            this, SIGNAL(showStatusBarMessage(QString)));
-#endif
-    connect(webView->page(), SIGNAL(linkHovered(const QString&)),
-            this, SIGNAL(linkHovered(const QString&)));
-    connect(webView, SIGNAL(loadProgress(int)),
-            this, SIGNAL(loadProgress(int)));
-    connect(webView->page()->profile(), SIGNAL(downloadRequested(QWebEngineDownloadItem*)),
-            this, SLOT(downloadRequested(QWebEngineDownloadItem*)));
-    connect(webView->page(), SIGNAL(fullScreenRequested(QWebEngineFullScreenRequest)),
-            this, SLOT(fullScreenRequested(QWebEngineFullScreenRequest)));
-
-    for (int i = 0; i < m_actions.count(); ++i) {
-        WebActionMapper *mapper = m_actions[i];
-        mapper->updateCurrent(webView->page());
-    }
-    emit setCurrentTitle(webView->title());
-    m_lineEdits->setCurrentIndex(index);
-    emit loadProgress(webView->progress());
-    emit showStatusBarMessage(webView->lastStatusBarText());
-    if (webView->url().isEmpty())
-        m_lineEdits->currentWidget()->setFocus();
-    else
-        webView->setFocus();
-}
-
-void TabWidget::fullScreenRequested(QWebEngineFullScreenRequest request)
-{
-    WebPage *webPage = qobject_cast<WebPage*>(sender());
-    if (request.toggleOn()) {
-        if (!m_fullScreenView) {
-            m_fullScreenView = new QWebEngineView();
-            m_fullScreenNotification = new FullScreenNotification(m_fullScreenView);
-
-            QAction *exitFullScreenAction = new QAction(m_fullScreenView);
-            exitFullScreenAction->setShortcut(Qt::Key_Escape);
-            connect(exitFullScreenAction, &QAction::triggered, [webPage] {
-                webPage->triggerAction(QWebEnginePage::ExitFullScreen);
-            });
-            m_fullScreenView->addAction(exitFullScreenAction);
-        }
-        m_oldWindowGeometry = window()->geometry();
-        m_fullScreenView->setGeometry(m_oldWindowGeometry);
-        webPage->setView(m_fullScreenView);
-        request.accept();
-        m_fullScreenView->showFullScreen();
-        m_fullScreenNotification->show();
-        window()->hide();
-    } else {
-        if (!m_fullScreenView)
-            return;
-        WebView *oldWebView = this->webView(m_lineEdits->currentIndex());
-        webPage->setView(oldWebView);
-        request.accept();
-        delete m_fullScreenView;
-        m_fullScreenView = 0;
-        window()->show();
-        window()->setGeometry(m_oldWindowGeometry);
-    }
-}
-
-void TabWidget::handleTabBarDoubleClicked(int index)
-{
-    if (index != -1) return;
-    newTab();
-}
-
-QAction *TabWidget::newTabAction() const
-{
-    return m_newTabAction;
-}
-
-QAction *TabWidget::closeTabAction() const
-{
-    return m_closeTabAction;
-}
-
-QAction *TabWidget::recentlyClosedTabsAction() const
-{
-    return m_recentlyClosedTabsAction;
-}
-
-QAction *TabWidget::nextTabAction() const
-{
-    return m_nextTabAction;
-}
-
-QAction *TabWidget::previousTabAction() const
-{
-    return m_previousTabAction;
-}
-
-QWidget *TabWidget::lineEditStack() const
-{
-    return m_lineEdits;
-}
-
-QLineEdit *TabWidget::currentLineEdit() const
-{
-    return lineEdit(m_lineEdits->currentIndex());
-}
-
-WebView *TabWidget::currentWebView() const
-{
-    return webView(currentIndex());
-}
-
-QLineEdit *TabWidget::lineEdit(int index) const
-{
-    UrlLineEdit *urlLineEdit = qobject_cast<UrlLineEdit*>(m_lineEdits->widget(index));
-    if (urlLineEdit)
-        return urlLineEdit->lineEdit();
-    return 0;
-}
-
-WebView *TabWidget::webView(int index) const
-{
-    QWidget *widget = this->widget(index);
-    if (WebView *webView = qobject_cast<WebView*>(widget)) {
-        return webView;
-    } else {
-        // optimization to delay creating the first webview
-        if (count() == 1) {
-            TabWidget *that = const_cast<TabWidget*>(this);
-            that->setUpdatesEnabled(false);
-            that->newTab();
-            that->closeTab(0);
-            that->setUpdatesEnabled(true);
-            return currentWebView();
-        }
-    }
-    return 0;
-}
-
-int TabWidget::webViewIndex(WebView *webView) const
-{
-    int index = indexOf(webView);
-    return index;
-}
-
-void TabWidget::setupPage(QWebEnginePage* page)
-{
-    connect(page, SIGNAL(windowCloseRequested()),
-            this, SLOT(windowCloseRequested()));
-    connect(page, SIGNAL(geometryChangeRequested(QRect)),
-            this, SIGNAL(geometryChangeRequested(QRect)));
-#if defined(QWEBENGINEPAGE_PRINTREQUESTED)
-    connect(page, SIGNAL(printRequested(QWebEngineFrame*)),
-            this, SIGNAL(printRequested(QWebEngineFrame*)));
-#endif
-#if defined(QWEBENGINEPAGE_MENUBARVISIBILITYCHANGEREQUESTED)
-    connect(page, SIGNAL(menuBarVisibilityChangeRequested(bool)),
-            this, SIGNAL(menuBarVisibilityChangeRequested(bool)));
-#endif
-#if defined(QWEBENGINEPAGE_STATUSBARVISIBILITYCHANGEREQUESTED)
-    connect(page, SIGNAL(statusBarVisibilityChangeRequested(bool)),
-            this, SIGNAL(statusBarVisibilityChangeRequested(bool)));
-#endif
-#if defined(QWEBENGINEPAGE_TOOLBARVISIBILITYCHANGEREQUESTED)
-    connect(page, SIGNAL(toolBarVisibilityChangeRequested(bool)),
-            this, SIGNAL(toolBarVisibilityChangeRequested(bool)));
-#endif
-
-    // webview actions
-    for (int i = 0; i < m_actions.count(); ++i) {
-        WebActionMapper *mapper = m_actions[i];
-        mapper->addChild(page->action(mapper->webAction()));
-    }
-}
-
-WebView *TabWidget::newTab(bool makeCurrent)
-{
-    // line edit
-    UrlLineEdit *urlLineEdit = new UrlLineEdit;
-    QLineEdit *lineEdit = urlLineEdit->lineEdit();
-    if (!m_lineEditCompleter && count() > 0) {
-        HistoryCompletionModel *completionModel = new HistoryCompletionModel(this);
-        completionModel->setSourceModel(BrowserApplication::historyManager()->historyFilterModel());
-        m_lineEditCompleter = new QCompleter(completionModel, this);
-        // Should this be in Qt by default?
-        QAbstractItemView *popup = m_lineEditCompleter->popup();
-        QListView *listView = qobject_cast<QListView*>(popup);
-        if (listView)
-            listView->setUniformItemSizes(true);
-    }
-    lineEdit->setCompleter(m_lineEditCompleter);
-    connect(lineEdit, SIGNAL(returnPressed()), this, SLOT(lineEditReturnPressed()));
-    m_lineEdits->addWidget(urlLineEdit);
-    m_lineEdits->setSizePolicy(lineEdit->sizePolicy());
-
-    // optimization to delay creating the more expensive WebView, history, etc
-    if (count() == 0) {
-        QWidget *emptyWidget = new QWidget;
-        QPalette p = emptyWidget->palette();
-        p.setColor(QPalette::Window, palette().color(QPalette::Base));
-        emptyWidget->setPalette(p);
-        emptyWidget->setAutoFillBackground(true);
-        disconnect(this, SIGNAL(currentChanged(int)),
-            this, SLOT(currentChanged(int)));
-        addTab(emptyWidget, tr("(Untitled)"));
-        connect(this, SIGNAL(currentChanged(int)),
-            this, SLOT(currentChanged(int)));
-        return 0;
-    }
-
-    // webview
-    WebView *webView = new WebView;
-    webView->setPage(new WebPage(m_profile, webView));
-    urlLineEdit->setWebView(webView);
-    connect(webView, SIGNAL(loadStarted()),
-            this, SLOT(webViewLoadStarted()));
-    connect(webView, SIGNAL(iconChanged(QIcon)),
-            this, SLOT(webViewIconChanged(QIcon)));
-    connect(webView, SIGNAL(titleChanged(QString)),
-            this, SLOT(webViewTitleChanged(QString)));
-    connect(webView->page(), SIGNAL(audioMutedChanged(bool)),
-            this, SLOT(webPageMutedOrAudibleChanged()));
-    connect(webView->page(), SIGNAL(recentlyAudibleChanged(bool)),
-            this, SLOT(webPageMutedOrAudibleChanged()));
-    connect(webView, SIGNAL(urlChanged(QUrl)),
-            this, SLOT(webViewUrlChanged(QUrl)));
-
-
-    addTab(webView, tr("(Untitled)"));
-    if (makeCurrent)
-        setCurrentWidget(webView);
-
-    setupPage(webView->page());
-
-    if (count() == 1)
-        currentChanged(currentIndex());
-    emit tabsChanged();
-    return webView;
-}
-
-void TabWidget::reloadAllTabs()
-{
-    for (int i = 0; i < count(); ++i) {
-        QWidget *tabWidget = widget(i);
-        if (WebView *tab = qobject_cast<WebView*>(tabWidget)) {
-            tab->reload();
-        }
-    }
-}
-
-void TabWidget::lineEditReturnPressed()
-{
-    if (QLineEdit *lineEdit = qobject_cast<QLineEdit*>(sender())) {
-        emit loadPage(lineEdit->text());
-        if (m_lineEdits->currentWidget() == lineEdit)
-            currentWebView()->setFocus();
-    }
-}
-
-void TabWidget::windowCloseRequested()
-{
-    WebPage *webPage = qobject_cast<WebPage*>(sender());
-    WebView *webView = qobject_cast<WebView*>(webPage->view());
-    int index = webViewIndex(webView);
-    if (index >= 0)
-        closeTab(index);
-}
-
-void TabWidget::closeOtherTabs(int index)
-{
-    if (-1 == index)
-        return;
-    for (int i = count() - 1; i > index; --i)
-        closeTab(i);
-    for (int i = index - 1; i >= 0; --i)
-        closeTab(i);
-}
-
-// When index is -1 index chooses the current tab
-void TabWidget::cloneTab(int index)
-{
-    if (index < 0)
-        index = currentIndex();
-    if (index < 0 || index >= count())
-        return;
-    WebView *tab = newTab(false);
-    tab->setUrl(webView(index)->url());
-}
-
-// When index is -1 index chooses the current tab
-void TabWidget::requestCloseTab(int index)
-{
-    if (index < 0)
-        index = currentIndex();
-    if (index < 0 || index >= count())
-        return;
-    WebView *tab = webView(index);
-    if (!tab)
-        return;
-    tab->page()->triggerAction(QWebEnginePage::RequestClose);
-}
-
-void TabWidget::closeTab(int index)
-{
-    if (index < 0 || index >= count())
-        return;
-
-    bool hasFocus = false;
-    if (WebView *tab = webView(index)) {
-        hasFocus = tab->hasFocus();
-
-        if (m_profile == QWebEngineProfile::defaultProfile()) {
-            m_recentlyClosedTabsAction->setEnabled(true);
-            m_recentlyClosedTabs.prepend(tab->url());
-            if (m_recentlyClosedTabs.size() >= TabWidget::m_recentlyClosedTabsSize)
-                m_recentlyClosedTabs.removeLast();
-        }
-    }
-    QWidget *lineEdit = m_lineEdits->widget(index);
-    m_lineEdits->removeWidget(lineEdit);
-    lineEdit->deleteLater();
-    QWidget *webView = widget(index);
-    removeTab(index);
-    webView->deleteLater();
-    emit tabsChanged();
-    if (hasFocus && count() > 0)
-        currentWebView()->setFocus();
-    if (count() == 0)
-        emit lastTabClosed();
-}
-
-void TabWidget::setProfile(QWebEngineProfile *profile)
-{
-    m_profile = profile;
-    for (int i = 0; i < count(); ++i) {
-        QWidget *tabWidget = widget(i);
-        if (WebView *tab = qobject_cast<WebView*>(tabWidget)) {
-            WebPage* webPage = new WebPage(m_profile, tab);
-            setupPage(webPage);
-            webPage->load(tab->page()->url());
-            tab->setPage(webPage);
-        }
-    }
-}
-
-void TabWidget::webViewLoadStarted()
-{
-    WebView *webView = qobject_cast<WebView*>(sender());
-    int index = webViewIndex(webView);
-    if (-1 != index) {
-        QIcon icon(QLatin1String(":loading.gif"));
-        setTabIcon(index, icon);
-    }
-}
-
-void TabWidget::webViewIconChanged(const QIcon &icon)
-{
-    WebView *webView = qobject_cast<WebView*>(sender());
-    int index = webViewIndex(webView);
-    if (-1 != index)
-        setTabIcon(index, icon);
-}
-
-void TabWidget::webViewTitleChanged(const QString &title)
-{
-    WebView *webView = qobject_cast<WebView*>(sender());
-    int index = webViewIndex(webView);
-    if (-1 != index) {
-        setTabText(index, title);
-    }
-    if (currentIndex() == index)
-        emit setCurrentTitle(title);
-    BrowserApplication::historyManager()->updateHistoryItem(webView->url(), title);
-}
-
-void TabWidget::webPageMutedOrAudibleChanged() {
-    QWebEnginePage* webPage = qobject_cast<QWebEnginePage*>(sender());
-    WebView *webView = qobject_cast<WebView*>(webPage->view());
-
-    int index = webViewIndex(webView);
-    if (-1 != index) {
-        QString title = webView->title();
-
-        bool muted = webPage->isAudioMuted();
-        bool audible = webPage->recentlyAudible();
-        if (muted) title += tr(" (muted)");
-        else if (audible) title += tr(" (audible)");
-
-        setTabText(index, title);
-    }
-}
-
-void TabWidget::webViewUrlChanged(const QUrl &url)
-{
-    WebView *webView = qobject_cast<WebView*>(sender());
-    int index = webViewIndex(webView);
-    if (-1 != index) {
-        m_tabBar->setTabData(index, url);
-        HistoryManager *manager = BrowserApplication::historyManager();
-        if (url.isValid())
-            manager->addHistoryEntry(url.toString());
-    }
-    emit tabsChanged();
-}
-
-void TabWidget::aboutToShowRecentTabsMenu()
-{
-    m_recentlyClosedTabsMenu->clear();
-    for (int i = 0; i < m_recentlyClosedTabs.count(); ++i) {
-        QAction *action = new QAction(m_recentlyClosedTabsMenu);
-        action->setData(m_recentlyClosedTabs.at(i));
-        QIcon icon = BrowserApplication::instance()->icon(m_recentlyClosedTabs.at(i));
-        action->setIcon(icon);
-        action->setText(m_recentlyClosedTabs.at(i).toString());
-        m_recentlyClosedTabsMenu->addAction(action);
-    }
-}
-
-void TabWidget::aboutToShowRecentTriggeredAction(QAction *action)
-{
-    QUrl url = action->data().toUrl();
-    loadUrlInCurrentTab(url);
-}
-
-void TabWidget::mouseDoubleClickEvent(QMouseEvent *event)
-{
-    if (!childAt(event->pos())
-            // Remove the line below when QTabWidget does not have a one pixel frame
-            && event->pos().y() < (tabBar()->y() + tabBar()->height())) {
-        newTab();
-        return;
-    }
-    QTabWidget::mouseDoubleClickEvent(event);
-}
-
-void TabWidget::contextMenuEvent(QContextMenuEvent *event)
-{
-    if (!childAt(event->pos())) {
-        m_tabBar->contextMenuRequested(event->pos());
-        return;
-    }
-    QTabWidget::contextMenuEvent(event);
-}
-
-void TabWidget::mouseReleaseEvent(QMouseEvent *event)
-{
-    if (event->button() == Qt::MidButton && !childAt(event->pos())
-            // Remove the line below when QTabWidget does not have a one pixel frame
-            && event->pos().y() < (tabBar()->y() + tabBar()->height())) {
-        QUrl url(QApplication::clipboard()->text(QClipboard::Selection));
-        if (!url.isEmpty() && url.isValid() && !url.scheme().isEmpty()) {
-            WebView *webView = newTab();
-            webView->setUrl(url);
-        }
-    }
-}
-
-void TabWidget::loadUrlInCurrentTab(const QUrl &url)
-{
-    WebView *webView = currentWebView();
-    if (webView) {
-        webView->loadUrl(url);
-        webView->setFocus();
-    }
-}
-
-void TabWidget::nextTab()
-{
-    int next = currentIndex() + 1;
-    if (next == count())
-        next = 0;
-    setCurrentIndex(next);
-}
-
-void TabWidget::previousTab()
-{
-    int next = currentIndex() - 1;
-    if (next < 0)
-        next = count() - 1;
-    setCurrentIndex(next);
-}
-
-static const qint32 TabWidgetMagic = 0xaa;
-
-QByteArray TabWidget::saveState() const
-{
-    int version = 1;
-    QByteArray data;
-    QDataStream stream(&data, QIODevice::WriteOnly);
-
-    stream << qint32(TabWidgetMagic);
-    stream << qint32(version);
-
-    QStringList tabs;
-    for (int i = 0; i < count(); ++i) {
-        if (WebView *tab = qobject_cast<WebView*>(widget(i))) {
-            tabs.append(tab->url().toString());
-        } else {
-            tabs.append(QString());
-        }
-    }
-    stream << tabs;
-    stream << currentIndex();
-    return data;
-}
-
-bool TabWidget::restoreState(const QByteArray &state)
-{
-    int version = 1;
-    QByteArray sd = state;
-    QDataStream stream(&sd, QIODevice::ReadOnly);
-    if (stream.atEnd())
-        return false;
-
-    qint32 marker;
-    qint32 v;
-    stream >> marker;
-    stream >> v;
-    if (marker != TabWidgetMagic || v != version)
-        return false;
-
-    QStringList openTabs;
-    stream >> openTabs;
-
-    for (int i = 0; i < openTabs.count(); ++i) {
-        if (i != 0)
-            newTab();
-        loadPage(openTabs.at(i));
-    }
-
-    int currentTab;
-    stream >> currentTab;
-    setCurrentIndex(currentTab);
-
-    return true;
-}
-
-void TabWidget::downloadRequested(QWebEngineDownloadItem *download)
-{
-    if (download->savePageFormat() != QWebEngineDownloadItem::UnknownSaveFormat) {
-        SavePageDialog dlg(this, download->savePageFormat(), download->path());
-        if (dlg.exec() != SavePageDialog::Accepted)
-            return;
-        download->setSavePageFormat(dlg.pageFormat());
-        download->setPath(dlg.filePath());
-    }
-
-    BrowserApplication::downloadManager()->download(download);
-    download->accept();
-}
-
-WebActionMapper::WebActionMapper(QAction *root, QWebEnginePage::WebAction webAction, QObject *parent)
-    : QObject(parent)
-    , m_currentParent(0)
-    , m_root(root)
-    , m_webAction(webAction)
-{
-    if (!m_root)
-        return;
-    connect(m_root, SIGNAL(triggered()), this, SLOT(rootTriggered()));
-    connect(root, SIGNAL(destroyed(QObject*)), this, SLOT(rootDestroyed()));
-    root->setEnabled(false);
-}
-
-void WebActionMapper::rootDestroyed()
-{
-    m_root = 0;
-}
-
-void WebActionMapper::currentDestroyed()
-{
-    updateCurrent(0);
-}
-
-void WebActionMapper::addChild(QAction *action)
-{
-    if (!action)
-        return;
-    connect(action, SIGNAL(changed()), this, SLOT(childChanged()));
-}
-
-QWebEnginePage::WebAction WebActionMapper::webAction() const
-{
-    return m_webAction;
-}
-
-void WebActionMapper::rootTriggered()
-{
-    if (m_currentParent) {
-        QAction *gotoAction = m_currentParent->action(m_webAction);
-        gotoAction->trigger();
-    }
-}
-
-void WebActionMapper::childChanged()
-{
-    if (QAction *source = qobject_cast<QAction*>(sender())) {
-        if (m_root
-            && m_currentParent
-            && source->parent() == m_currentParent) {
-            m_root->setChecked(source->isChecked());
-            m_root->setEnabled(source->isEnabled());
-        }
-    }
-}
-
-void WebActionMapper::updateCurrent(QWebEnginePage *currentParent)
-{
-    if (m_currentParent)
-        disconnect(m_currentParent, SIGNAL(destroyed(QObject*)),
-                   this, SLOT(currentDestroyed()));
-
-    m_currentParent = currentParent;
-    if (!m_root)
-        return;
-    if (!m_currentParent) {
-        m_root->setEnabled(false);
-        m_root->setChecked(false);
-        return;
-    }
-    QAction *source = m_currentParent->action(m_webAction);
-    m_root->setChecked(source->isChecked());
-    m_root->setEnabled(source->isEnabled());
-    connect(m_currentParent, SIGNAL(destroyed(QObject*)),
-            this, SLOT(currentDestroyed()));
-}
diff --git a/examples/webenginewidgets/demobrowser/tabwidget.h b/examples/webenginewidgets/demobrowser/tabwidget.h
deleted file mode 100644
index 82dcf960df60e5306e57d7aee51370badecdb5bc..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/tabwidget.h
+++ /dev/null
@@ -1,263 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef TABWIDGET_H
-#define TABWIDGET_H
-
-#include <QtWebEngineWidgets/QWebEngineFullScreenRequest>
-#include <QtWidgets/QTabBar>
-#include <QtWidgets/QShortcut>
-
-QT_BEGIN_NAMESPACE
-class QWebEngineDownloadItem;
-class QWebEngineProfile;
-class QWebEngineView;
-QT_END_NAMESPACE
-
-/*
-    Tab bar with a few more features such as a context menu and shortcuts
- */
-class TabBar : public QTabBar
-{
-    Q_OBJECT
-
-signals:
-    void newTab();
-    void cloneTab(int index);
-    void closeTab(int index);
-    void closeOtherTabs(int index);
-    void reloadTab(int index);
-    void muteTab(int index, bool mute);
-    void reloadAllTabs();
-    void tabMoveRequested(int fromIndex, int toIndex);
-
-public:
-    TabBar(QWidget *parent = 0);
-
-protected:
-    void mousePressEvent(QMouseEvent* event);
-    void mouseMoveEvent(QMouseEvent* event);
-
-private slots:
-    void selectTabAction();
-    void cloneTab();
-    void closeTab();
-    void closeOtherTabs();
-    void reloadTab();
-    void muteTab();
-    void unmuteTab();
-    void contextMenuRequested(const QPoint &position);
-
-private:
-    QList<QShortcut*> m_tabShortcuts;
-    friend class TabWidget;
-
-    QPoint m_dragStartPos;
-    int m_dragCurrentIndex;
-};
-
-#include <QWebEnginePage>
-
-QT_BEGIN_NAMESPACE
-class QAction;
-QT_END_NAMESPACE
-class WebView;
-/*!
-    A proxy object that connects a single browser action
-    to one child webpage action at a time.
-
-    Example usage: used to keep the main window stop action in sync with
-    the current tabs webview's stop action.
- */
-class WebActionMapper : public QObject
-{
-    Q_OBJECT
-
-public:
-    WebActionMapper(QAction *root, QWebEnginePage::WebAction webAction, QObject *parent);
-    QWebEnginePage::WebAction webAction() const;
-    void addChild(QAction *action);
-    void updateCurrent(QWebEnginePage *currentParent);
-
-private slots:
-    void rootTriggered();
-    void childChanged();
-    void rootDestroyed();
-    void currentDestroyed();
-
-private:
-    QWebEnginePage *m_currentParent;
-    QAction *m_root;
-    QWebEnginePage::WebAction m_webAction;
-};
-
-#include <QtCore/QUrl>
-#include <QtWidgets/QTabWidget>
-
-class FullScreenNotification;
-
-QT_BEGIN_NAMESPACE
-class QCompleter;
-class QLineEdit;
-class QMenu;
-class QStackedWidget;
-QT_END_NAMESPACE
-
-/*!
-    TabWidget that contains WebViews and a stack widget of associated line edits.
-
-    Connects up the current tab's signals to this class's signal and uses WebActionMapper
-    to proxy the actions.
- */
-class TabWidget : public QTabWidget
-{
-    Q_OBJECT
-
-signals:
-    // tab widget signals
-    void loadPage(const QString &url);
-    void tabsChanged();
-    void lastTabClosed();
-
-    // current tab signals
-    void setCurrentTitle(const QString &url);
-    void showStatusBarMessage(const QString &message);
-    void linkHovered(const QString &link);
-    void loadProgress(int progress);
-    void geometryChangeRequested(const QRect &geometry);
-    void menuBarVisibilityChangeRequested(bool visible);
-    void statusBarVisibilityChangeRequested(bool visible);
-    void toolBarVisibilityChangeRequested(bool visible);
-#if defined(QWEBENGINEPAGE_PRINTREQUESTED)
-    void printRequested(QWebEngineFrame *frame);
-#endif
-
-public:
-    TabWidget(QWidget *parent = 0);
-    ~TabWidget();
-    void clear();
-    void addWebAction(QAction *action, QWebEnginePage::WebAction webAction);
-
-    QAction *newTabAction() const;
-    QAction *closeTabAction() const;
-    QAction *recentlyClosedTabsAction() const;
-    QAction *nextTabAction() const;
-    QAction *previousTabAction() const;
-
-    QWidget *lineEditStack() const;
-    QLineEdit *currentLineEdit() const;
-    WebView *currentWebView() const;
-    WebView *webView(int index) const;
-    QLineEdit *lineEdit(int index) const;
-    int webViewIndex(WebView *webView) const;
-
-    QByteArray saveState() const;
-    bool restoreState(const QByteArray &state);
-
-    void setProfile(QWebEngineProfile *profile);
-
-protected:
-    void mouseDoubleClickEvent(QMouseEvent *event);
-    void contextMenuEvent(QContextMenuEvent *event);
-    void mouseReleaseEvent(QMouseEvent *event);
-
-public slots:
-    void loadUrlInCurrentTab(const QUrl &url);
-    WebView *newTab(bool makeCurrent = true);
-    void cloneTab(int index = -1);
-    void requestCloseTab(int index = -1);
-    void closeTab(int index);
-    void closeOtherTabs(int index);
-    void reloadTab(int index = -1);
-    void reloadAllTabs();
-    void nextTab();
-    void previousTab();
-    void setAudioMutedForTab(int index, bool mute);
-
-private slots:
-    void currentChanged(int index);
-    void aboutToShowRecentTabsMenu();
-    void aboutToShowRecentTriggeredAction(QAction *action);
-    void downloadRequested(QWebEngineDownloadItem *download);
-    void webViewLoadStarted();
-    void webViewIconChanged(const QIcon &icon);
-    void webViewTitleChanged(const QString &title);
-    void webViewUrlChanged(const QUrl &url);
-    void lineEditReturnPressed();
-    void windowCloseRequested();
-    void moveTab(int fromIndex, int toIndex);
-    void fullScreenRequested(QWebEngineFullScreenRequest request);
-    void handleTabBarDoubleClicked(int index);
-    void webPageMutedOrAudibleChanged();
-
-private:
-    void setupPage(QWebEnginePage* page);
-
-    QAction *m_recentlyClosedTabsAction;
-    QAction *m_newTabAction;
-    QAction *m_closeTabAction;
-    QAction *m_nextTabAction;
-    QAction *m_previousTabAction;
-
-    QMenu *m_recentlyClosedTabsMenu;
-    static const int m_recentlyClosedTabsSize = 10;
-    QList<QUrl> m_recentlyClosedTabs;
-    QList<WebActionMapper*> m_actions;
-
-    QCompleter *m_lineEditCompleter;
-    QStackedWidget *m_lineEdits;
-    TabBar *m_tabBar;
-    QWebEngineProfile *m_profile;
-    QWebEngineView *m_fullScreenView;
-    FullScreenNotification *m_fullScreenNotification;
-    QRect m_oldWindowGeometry;
-};
-
-#endif // TABWIDGET_H
diff --git a/examples/webenginewidgets/demobrowser/toolbarsearch.cpp b/examples/webenginewidgets/demobrowser/toolbarsearch.cpp
deleted file mode 100644
index 41c5ef314d73a3578e5ba09f7f6784fc1bfc649c..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/toolbarsearch.cpp
+++ /dev/null
@@ -1,172 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "toolbarsearch.h"
-#include "autosaver.h"
-#include "browserapplication.h"
-
-#include <QtCore/QSettings>
-#include <QtCore/QUrl>
-#include <QtCore/QUrlQuery>
-
-#include <QtWidgets/QCompleter>
-#include <QtWidgets/QMenu>
-#include <QtCore/QStringListModel>
-
-#include <QWebEngineSettings>
-
-/*
-    ToolbarSearch is a very basic search widget that also contains a small history.
-    Searches are turned into urls that use Google to perform search
- */
-ToolbarSearch::ToolbarSearch(QWidget *parent)
-    : SearchLineEdit(parent)
-    , m_autosaver(new AutoSaver(this))
-    , m_maxSavedSearches(10)
-    , m_stringListModel(new QStringListModel(this))
-{
-    QMenu *m = menu();
-    connect(m, SIGNAL(aboutToShow()), this, SLOT(aboutToShowMenu()));
-    connect(m, SIGNAL(triggered(QAction*)), this, SLOT(triggeredMenuAction(QAction*)));
-
-    QCompleter *completer = new QCompleter(m_stringListModel, this);
-    completer->setCompletionMode(QCompleter::InlineCompletion);
-    lineEdit()->setCompleter(completer);
-
-    connect(lineEdit(), SIGNAL(returnPressed()), SLOT(searchNow()));
-    setInactiveText(tr("Google"));
-    load();
-}
-
-ToolbarSearch::~ToolbarSearch()
-{
-    m_autosaver->saveIfNeccessary();
-}
-
-void ToolbarSearch::save()
-{
-    QSettings settings;
-    settings.beginGroup(QLatin1String("toolbarsearch"));
-    settings.setValue(QLatin1String("recentSearches"), m_stringListModel->stringList());
-    settings.setValue(QLatin1String("maximumSaved"), m_maxSavedSearches);
-    settings.endGroup();
-}
-
-void ToolbarSearch::load()
-{
-    QSettings settings;
-    settings.beginGroup(QLatin1String("toolbarsearch"));
-    QStringList list = settings.value(QLatin1String("recentSearches")).toStringList();
-    m_maxSavedSearches = settings.value(QLatin1String("maximumSaved"), m_maxSavedSearches).toInt();
-    m_stringListModel->setStringList(list);
-    settings.endGroup();
-}
-
-void ToolbarSearch::searchNow()
-{
-    QString searchText = lineEdit()->text();
-    QStringList newList = m_stringListModel->stringList();
-    if (newList.contains(searchText))
-        newList.removeAt(newList.indexOf(searchText));
-    newList.prepend(searchText);
-    if (newList.size() >= m_maxSavedSearches)
-        newList.removeLast();
-
-    if (!BrowserApplication::instance()->privateBrowsing()) {
-        m_stringListModel->setStringList(newList);
-        m_autosaver->changeOccurred();
-    }
-
-    QUrl url(QLatin1String("http://www.google.com/search"));
-    QUrlQuery urlQuery;
-    urlQuery.addQueryItem(QLatin1String("q"), searchText);
-    urlQuery.addQueryItem(QLatin1String("ie"), QLatin1String("UTF-8"));
-    urlQuery.addQueryItem(QLatin1String("oe"), QLatin1String("UTF-8"));
-    urlQuery.addQueryItem(QLatin1String("client"), QLatin1String("qtdemobrowser"));
-    url.setQuery(urlQuery);
-    emit search(url);
-}
-
-void ToolbarSearch::aboutToShowMenu()
-{
-    lineEdit()->selectAll();
-    QMenu *m = menu();
-    m->clear();
-    QStringList list = m_stringListModel->stringList();
-    if (list.isEmpty()) {
-        m->addAction(tr("No Recent Searches"));
-        return;
-    }
-
-    QAction *recent = m->addAction(tr("Recent Searches"));
-    recent->setEnabled(false);
-    for (int i = 0; i < list.count(); ++i) {
-        QString text = list.at(i);
-        m->addAction(text)->setData(text);
-    }
-    m->addSeparator();
-    m->addAction(tr("Clear Recent Searches"), this, SLOT(clear()));
-}
-
-void ToolbarSearch::triggeredMenuAction(QAction *action)
-{
-    QVariant v = action->data();
-    if (v.canConvert<QString>()) {
-        QString text = v.toString();
-        lineEdit()->setText(text);
-        searchNow();
-    }
-}
-
-void ToolbarSearch::clear()
-{
-    m_stringListModel->setStringList(QStringList());
-    m_autosaver->changeOccurred();;
-}
diff --git a/examples/webenginewidgets/demobrowser/toolbarsearch.h b/examples/webenginewidgets/demobrowser/toolbarsearch.h
deleted file mode 100644
index d3e914055b5e2c11adb3863c05e28559862807f8..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/toolbarsearch.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef TOOLBARSEARCH_H
-#define TOOLBARSEARCH_H
-
-#include "searchlineedit.h"
-
-QT_BEGIN_NAMESPACE
-class QUrl;
-class QAction;
-class QStringListModel;
-QT_END_NAMESPACE
-
-class AutoSaver;
-
-class ToolbarSearch : public SearchLineEdit
-{
-    Q_OBJECT
-
-signals:
-    void search(const QUrl &url);
-
-public:
-    ToolbarSearch(QWidget *parent = 0);
-    ~ToolbarSearch();
-
-public slots:
-    void clear();
-    void searchNow();
-
-private slots:
-    void save();
-    void aboutToShowMenu();
-    void triggeredMenuAction(QAction *action);
-
-private:
-    void load();
-
-    AutoSaver *m_autosaver;
-    int m_maxSavedSearches;
-    QStringListModel *m_stringListModel;
-};
-
-#endif // TOOLBARSEARCH_H
diff --git a/examples/webenginewidgets/demobrowser/urllineedit.cpp b/examples/webenginewidgets/demobrowser/urllineedit.cpp
deleted file mode 100644
index 8203e4f0f182318b76b76d1c817c5acc2cc0371a..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/urllineedit.cpp
+++ /dev/null
@@ -1,345 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "urllineedit.h"
-
-#include "browserapplication.h"
-#include "searchlineedit.h"
-#include "webview.h"
-
-#include <QtCore/QEvent>
-#include <QtCore/QMimeData>
-
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QCompleter>
-#include <QtGui/QFocusEvent>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QLineEdit>
-#include <QtGui/QDrag>
-#include <QtGui/QPainter>
-#include <QtWidgets/QStyle>
-#include <QtWidgets/QStyleOptionFrame>
-
-#include <QtCore/QDebug>
-
-ExLineEdit::ExLineEdit(QWidget *parent)
-    : QWidget(parent)
-    , m_leftWidget(0)
-    , m_lineEdit(new QLineEdit(this))
-    , m_clearButton(0)
-{
-    setFocusPolicy(m_lineEdit->focusPolicy());
-    setAttribute(Qt::WA_InputMethodEnabled);
-    setSizePolicy(m_lineEdit->sizePolicy());
-    setBackgroundRole(m_lineEdit->backgroundRole());
-    setMouseTracking(true);
-    setAcceptDrops(true);
-    setAttribute(Qt::WA_MacShowFocusRect, true);
-    QPalette p = m_lineEdit->palette();
-    setPalette(p);
-
-    // line edit
-    m_lineEdit->setFrame(false);
-    m_lineEdit->setFocusProxy(this);
-    m_lineEdit->setAttribute(Qt::WA_MacShowFocusRect, false);
-    QPalette clearPalette = m_lineEdit->palette();
-    clearPalette.setBrush(QPalette::Base, QBrush(Qt::transparent));
-    m_lineEdit->setPalette(clearPalette);
-
-    // clearButton
-    m_clearButton = new ClearButton(this);
-    connect(m_clearButton, SIGNAL(clicked()),
-            m_lineEdit, SLOT(clear()));
-    connect(m_lineEdit, SIGNAL(textChanged(QString)),
-            m_clearButton, SLOT(textChanged(QString)));
-}
-
-void ExLineEdit::setLeftWidget(QWidget *widget)
-{
-    m_leftWidget = widget;
-}
-
-QWidget *ExLineEdit::leftWidget() const
-{
-    return m_leftWidget;
-}
-
-void ExLineEdit::resizeEvent(QResizeEvent *event)
-{
-    Q_ASSERT(m_leftWidget);
-    updateGeometries();
-    QWidget::resizeEvent(event);
-}
-
-void ExLineEdit::updateGeometries()
-{
-    QStyleOptionFrame panel;
-    initStyleOption(&panel);
-    QRect rect = style()->subElementRect(QStyle::SE_LineEditContents, &panel, this);
-
-    int height = rect.height();
-    int width = rect.width();
-
-    int m_leftWidgetHeight = m_leftWidget->height();
-    m_leftWidget->setGeometry(rect.x() + 2,          rect.y() + (height - m_leftWidgetHeight)/2,
-                              m_leftWidget->width(), m_leftWidget->height());
-
-    int clearButtonWidth = this->height();
-    m_lineEdit->setGeometry(m_leftWidget->x() + m_leftWidget->width(),        0,
-                            width - clearButtonWidth - m_leftWidget->width(), this->height());
-
-    m_clearButton->setGeometry(this->width() - clearButtonWidth, 0,
-                               clearButtonWidth, this->height());
-}
-
-void ExLineEdit::initStyleOption(QStyleOptionFrame *option) const
-{
-    option->initFrom(this);
-    option->rect = contentsRect();
-    option->lineWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth, option, this);
-    option->midLineWidth = 0;
-    option->state |= QStyle::State_Sunken;
-    if (m_lineEdit->isReadOnly())
-        option->state |= QStyle::State_ReadOnly;
-#ifdef QT_KEYPAD_NAVIGATION
-    if (hasEditFocus())
-        option->state |= QStyle::State_HasEditFocus;
-#endif
-    option->features = QStyleOptionFrame::None;
-}
-
-QSize ExLineEdit::sizeHint() const
-{
-    m_lineEdit->setFrame(true);
-    QSize size = m_lineEdit->sizeHint();
-    m_lineEdit->setFrame(false);
-    return size;
-}
-
-void ExLineEdit::focusInEvent(QFocusEvent *event)
-{
-    m_lineEdit->event(event);
-    QWidget::focusInEvent(event);
-}
-
-void ExLineEdit::focusOutEvent(QFocusEvent *event)
-{
-    m_lineEdit->event(event);
-
-    if (m_lineEdit->completer()) {
-        connect(m_lineEdit->completer(), SIGNAL(activated(QString)),
-                         m_lineEdit, SLOT(setText(QString)));
-        connect(m_lineEdit->completer(), SIGNAL(highlighted(QString)),
-                         m_lineEdit, SLOT(_q_completionHighlighted(QString)));
-    }
-    QWidget::focusOutEvent(event);
-}
-
-void ExLineEdit::keyPressEvent(QKeyEvent *event)
-{
-    m_lineEdit->event(event);
-}
-
-bool ExLineEdit::event(QEvent *event)
-{
-    if (event->type() == QEvent::ShortcutOverride)
-        return m_lineEdit->event(event);
-    return QWidget::event(event);
-}
-
-void ExLineEdit::paintEvent(QPaintEvent *)
-{
-    QPainter p(this);
-    QStyleOptionFrame panel;
-    initStyleOption(&panel);
-    style()->drawPrimitive(QStyle::PE_PanelLineEdit, &panel, &p, this);
-}
-
-QVariant ExLineEdit::inputMethodQuery(Qt::InputMethodQuery property) const
-{
-    return m_lineEdit->inputMethodQuery(property);
-}
-
-void ExLineEdit::inputMethodEvent(QInputMethodEvent *e)
-{
-    m_lineEdit->event(e);
-}
-
-
-class UrlIconLabel : public QLabel
-{
-
-public:
-    UrlIconLabel(QWidget *parent);
-
-    WebView *m_webView;
-
-protected:
-    void mousePressEvent(QMouseEvent *event);
-    void mouseMoveEvent(QMouseEvent *event);
-
-private:
-    QPoint m_dragStartPos;
-
-};
-
-UrlIconLabel::UrlIconLabel(QWidget *parent)
-    : QLabel(parent)
-    , m_webView(0)
-{
-    setMinimumWidth(16);
-    setMinimumHeight(16);
-}
-
-void UrlIconLabel::mousePressEvent(QMouseEvent *event)
-{
-    if (event->button() == Qt::LeftButton)
-        m_dragStartPos = event->pos();
-    QLabel::mousePressEvent(event);
-}
-
-void UrlIconLabel::mouseMoveEvent(QMouseEvent *event)
-{
-    if (event->buttons() == Qt::LeftButton
-        && (event->pos() - m_dragStartPos).manhattanLength() > QApplication::startDragDistance()
-         && m_webView) {
-        QDrag *drag = new QDrag(this);
-        QMimeData *mimeData = new QMimeData;
-        mimeData->setText(QString::fromUtf8(m_webView->url().toEncoded()));
-        QList<QUrl> urls;
-        urls.append(m_webView->url());
-        mimeData->setUrls(urls);
-        drag->setMimeData(mimeData);
-        drag->exec();
-    }
-}
-
-UrlLineEdit::UrlLineEdit(QWidget *parent)
-    : ExLineEdit(parent)
-    , m_webView(0)
-    , m_iconLabel(0)
-{
-    // icon
-    m_iconLabel = new UrlIconLabel(this);
-    m_iconLabel->resize(16, 16);
-    setLeftWidget(m_iconLabel);
-    m_defaultBaseColor = palette().color(QPalette::Base);
-}
-
-void UrlLineEdit::setWebView(WebView *webView)
-{
-    Q_ASSERT(!m_webView);
-    m_webView = webView;
-    m_iconLabel->m_webView = webView;
-    connect(webView, SIGNAL(urlChanged(QUrl)),
-        this, SLOT(webViewUrlChanged(QUrl)));
-    connect(webView, SIGNAL(iconChanged(QIcon)),
-        this, SLOT(webViewIconChanged(QIcon)));
-    connect(webView, SIGNAL(loadProgress(int)),
-        this, SLOT(update()));
-}
-
-void UrlLineEdit::webViewUrlChanged(const QUrl &url)
-{
-    m_lineEdit->setText(QString::fromUtf8(url.toEncoded()));
-    m_lineEdit->setCursorPosition(0);
-}
-
-void UrlLineEdit::webViewIconChanged(const QIcon &icon)
-{
-    Q_ASSERT(m_webView);
-    m_iconLabel->setPixmap(icon.pixmap(16, 16));
-}
-
-QLinearGradient UrlLineEdit::generateGradient(const QColor &color) const
-{
-    QLinearGradient gradient(0, 0, 0, height());
-    gradient.setColorAt(0, m_defaultBaseColor);
-    gradient.setColorAt(0.15, color.lighter(120));
-    gradient.setColorAt(0.5, color);
-    gradient.setColorAt(0.85, color.lighter(120));
-    gradient.setColorAt(1, m_defaultBaseColor);
-    return gradient;
-}
-
-void UrlLineEdit::focusOutEvent(QFocusEvent *event)
-{
-    if (m_lineEdit->text().isEmpty() && m_webView)
-        m_lineEdit->setText(QString::fromUtf8(m_webView->url().toEncoded()));
-    ExLineEdit::focusOutEvent(event);
-}
-
-void UrlLineEdit::paintEvent(QPaintEvent *event)
-{
-    QPalette p = palette();
-    if (m_webView && m_webView->url().scheme() == QLatin1String("https")) {
-        QColor lightYellow(248, 248, 210);
-        p.setBrush(QPalette::Base, generateGradient(lightYellow));
-    } else {
-        p.setBrush(QPalette::Base, m_defaultBaseColor);
-    }
-    setPalette(p);
-    ExLineEdit::paintEvent(event);
-
-    QPainter painter(this);
-    QStyleOptionFrame panel;
-    initStyleOption(&panel);
-    QRect backgroundRect = style()->subElementRect(QStyle::SE_LineEditContents, &panel, this);
-    if (m_webView && !hasFocus()) {
-        int progress = m_webView->progress();
-        QColor loadingColor = QColor(116, 192, 250);
-        painter.setBrush(generateGradient(loadingColor));
-        painter.setPen(Qt::transparent);
-        int mid = backgroundRect.width() / 100.0f * progress;
-        QRect progressRect(backgroundRect.x(), backgroundRect.y(), mid, backgroundRect.height());
-        painter.drawRect(progressRect);
-    }
-}
diff --git a/examples/webenginewidgets/demobrowser/urllineedit.h b/examples/webenginewidgets/demobrowser/urllineedit.h
deleted file mode 100644
index 51c5c0836da60a7dffba486bb31d37bbbb9ac7ba..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/urllineedit.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef URLLINEEDIT_H
-#define URLLINEEDIT_H
-
-#include <QtCore/QUrl>
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QStyleOptionFrame>
-
-QT_BEGIN_NAMESPACE
-class QLineEdit;
-QT_END_NAMESPACE
-
-class ClearButton;
-class ExLineEdit : public QWidget
-{
-    Q_OBJECT
-
-public:
-    ExLineEdit(QWidget *parent = 0);
-
-    inline QLineEdit *lineEdit() const { return m_lineEdit; }
-
-    void setLeftWidget(QWidget *widget);
-    QWidget *leftWidget() const;
-
-    QSize sizeHint() const;
-
-    QVariant inputMethodQuery(Qt::InputMethodQuery property) const;
-protected:
-    void focusInEvent(QFocusEvent *event);
-    void focusOutEvent(QFocusEvent *event);
-    void keyPressEvent(QKeyEvent *event);
-    void paintEvent(QPaintEvent *event);
-    void resizeEvent(QResizeEvent *event);
-    void inputMethodEvent(QInputMethodEvent *e);
-    bool event(QEvent *event);
-
-protected:
-    void updateGeometries();
-    void initStyleOption(QStyleOptionFrame *option) const;
-
-    QWidget *m_leftWidget;
-    QLineEdit *m_lineEdit;
-    ClearButton *m_clearButton;
-};
-
-class UrlIconLabel;
-class WebView;
-class UrlLineEdit : public ExLineEdit
-{
-    Q_OBJECT
-
-public:
-    UrlLineEdit(QWidget *parent = 0);
-    void setWebView(WebView *webView);
-
-protected:
-    void paintEvent(QPaintEvent *event);
-    void focusOutEvent(QFocusEvent *event);
-
-private slots:
-    void webViewUrlChanged(const QUrl &url);
-    void webViewIconChanged(const QIcon &icon);
-
-private:
-    QLinearGradient generateGradient(const QColor &color) const;
-    WebView *m_webView;
-    UrlIconLabel *m_iconLabel;
-    QColor m_defaultBaseColor;
-
-};
-
-
-#endif // URLLINEEDIT_H
diff --git a/examples/webenginewidgets/demobrowser/webview.cpp b/examples/webenginewidgets/demobrowser/webview.cpp
deleted file mode 100644
index 498df74fc8d7d9b5523a31f9c8ca7d3d4b703797..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/webview.cpp
+++ /dev/null
@@ -1,470 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "browserapplication.h"
-#include "browsermainwindow.h"
-#include "cookiejar.h"
-#include "downloadmanager.h"
-#include "featurepermissionbar.h"
-#include "ui_passworddialog.h"
-#include "ui_proxy.h"
-#include "tabwidget.h"
-#include "webview.h"
-
-#include <QtGui/QClipboard>
-#include <QtNetwork/QAuthenticator>
-#include <QtNetwork/QNetworkReply>
-#include <QtWidgets/QMenu>
-#include <QtWidgets/QMessageBox>
-#include <QtGui/QMouseEvent>
-
-#include <QWebEngineContextMenuData>
-
-#ifndef QT_NO_UITOOLS
-#include <QtUiTools/QUiLoader>
-#endif  //QT_NO_UITOOLS
-
-#include <QtCore/QDebug>
-#include <QtCore/QBuffer>
-#include <QtCore/QTimer>
-
-WebPage::WebPage(QWebEngineProfile *profile, QObject *parent)
-    : QWebEnginePage(profile, parent)
-    , m_keyboardModifiers(Qt::NoModifier)
-    , m_pressedButtons(Qt::NoButton)
-{
-#if defined(QWEBENGINEPAGE_SETNETWORKACCESSMANAGER)
-    setNetworkAccessManager(BrowserApplication::networkAccessManager());
-#endif
-#if defined(QWEBENGINEPAGE_UNSUPPORTEDCONTENT)
-    connect(this, SIGNAL(unsupportedContent(QNetworkReply*)),
-            this, SLOT(handleUnsupportedContent(QNetworkReply*)));
-#endif
-    connect(this, SIGNAL(authenticationRequired(const QUrl &, QAuthenticator*)),
-            SLOT(authenticationRequired(const QUrl &, QAuthenticator*)));
-    connect(this, SIGNAL(proxyAuthenticationRequired(const QUrl &, QAuthenticator *, const QString &)),
-            SLOT(proxyAuthenticationRequired(const QUrl &, QAuthenticator *, const QString &)));
-}
-
-BrowserMainWindow *WebPage::mainWindow()
-{
-    QObject *w = this->parent();
-    while (w) {
-        if (BrowserMainWindow *mw = qobject_cast<BrowserMainWindow*>(w))
-            return mw;
-        w = w->parent();
-    }
-    return BrowserApplication::instance()->mainWindow();
-}
-
-bool WebPage::certificateError(const QWebEngineCertificateError &error)
-{
-    if (error.isOverridable()) {
-        QMessageBox msgBox;
-        msgBox.setIcon(QMessageBox::Warning);
-        msgBox.setText(error.errorDescription());
-        msgBox.setInformativeText(tr("If you wish so, you may continue with an unverified certificate. "
-                                     "Accepting an unverified certificate means "
-                                     "you may not be connected with the host you tried to connect to.\n"
-                                     "Do you wish to override the security check and continue?"));
-        msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
-        msgBox.setDefaultButton(QMessageBox::No);
-        return msgBox.exec() == QMessageBox::Yes;
-    }
-    QMessageBox::critical(view(), tr("Certificate Error"), error.errorDescription(), QMessageBox::Ok, QMessageBox::NoButton);
-    return false;
-}
-
-class PopupWindow : public QWidget {
-    Q_OBJECT
-public:
-    PopupWindow(QWebEngineProfile *profile)
-        : m_addressBar(new QLineEdit(this))
-        , m_view(new WebView(this))
-    {
-        m_view->setPage(new WebPage(profile, m_view));
-        QVBoxLayout *layout = new QVBoxLayout;
-        layout->setMargin(0);
-        setLayout(layout);
-        layout->addWidget(m_addressBar);
-        layout->addWidget(m_view);
-        m_view->setFocus();
-
-        connect(m_view, &WebView::titleChanged, this, &QWidget::setWindowTitle);
-        connect(m_view, &WebView::urlChanged, this, &PopupWindow::setUrl);
-        connect(page(), &WebPage::geometryChangeRequested, this, &PopupWindow::adjustGeometry);
-        connect(page(), &WebPage::windowCloseRequested, this, &QWidget::close);
-    }
-
-    QWebEnginePage* page() const { return m_view->page(); }
-
-private Q_SLOTS:
-    void setUrl(const QUrl &url)
-    {
-        m_addressBar->setText(url.toString());
-    }
-
-    void adjustGeometry(const QRect &newGeometry)
-    {
-        const int x1 = frameGeometry().left() - geometry().left();
-        const int y1 = frameGeometry().top() - geometry().top();
-        const int x2 = frameGeometry().right() - geometry().right();
-        const int y2 = frameGeometry().bottom() - geometry().bottom();
-
-        setGeometry(newGeometry.adjusted(x1, y1 - m_addressBar->height(), x2, y2));
-    }
-
-private:
-    QLineEdit *m_addressBar;
-    WebView *m_view;
-
-};
-
-#include "webview.moc"
-
-QWebEnginePage *WebPage::createWindow(QWebEnginePage::WebWindowType type)
-{
-    if (type == QWebEnginePage::WebBrowserTab) {
-        return mainWindow()->tabWidget()->newTab()->page();
-    } else if (type == QWebEnginePage::WebBrowserBackgroundTab) {
-        return mainWindow()->tabWidget()->newTab(false)->page();
-    } else if (type == QWebEnginePage::WebBrowserWindow) {
-        BrowserApplication::instance()->newMainWindow();
-        BrowserMainWindow *mainWindow = BrowserApplication::instance()->mainWindow();
-        return mainWindow->currentTab()->page();
-    } else {
-        PopupWindow *popup = new PopupWindow(profile());
-        popup->setAttribute(Qt::WA_DeleteOnClose);
-        popup->show();
-        return popup->page();
-    }
-}
-
-#if !defined(QT_NO_UITOOLS)
-QObject *WebPage::createPlugin(const QString &classId, const QUrl &url, const QStringList &paramNames, const QStringList &paramValues)
-{
-    Q_UNUSED(url);
-    Q_UNUSED(paramNames);
-    Q_UNUSED(paramValues);
-    QUiLoader loader;
-    return loader.createWidget(classId, view());
-}
-#endif // !defined(QT_NO_UITOOLS)
-
-#if defined(QWEBENGINEPAGE_UNSUPPORTEDCONTENT)
-void WebPage::handleUnsupportedContent(QNetworkReply *reply)
-{
-    QString errorString = reply->errorString();
-
-    if (m_loadingUrl != reply->url()) {
-        // sub resource of this page
-        qWarning() << "Resource" << reply->url().toEncoded() << "has unknown Content-Type, will be ignored.";
-        reply->deleteLater();
-        return;
-    }
-
-    if (reply->error() == QNetworkReply::NoError && !reply->header(QNetworkRequest::ContentTypeHeader).isValid()) {
-        errorString = "Unknown Content-Type";
-    }
-
-    QFile file(QLatin1String(":/notfound.html"));
-    bool isOpened = file.open(QIODevice::ReadOnly);
-    Q_ASSERT(isOpened);
-    Q_UNUSED(isOpened)
-
-    QString title = tr("Error loading page: %1").arg(reply->url().toString());
-    QString html = QString(QLatin1String(file.readAll()))
-                        .arg(title)
-                        .arg(errorString)
-                        .arg(reply->url().toString());
-
-    QBuffer imageBuffer;
-    imageBuffer.open(QBuffer::ReadWrite);
-    QIcon icon = view()->style()->standardIcon(QStyle::SP_MessageBoxWarning, 0, view());
-    QPixmap pixmap = icon.pixmap(QSize(32,32));
-    if (pixmap.save(&imageBuffer, "PNG")) {
-        html.replace(QLatin1String("IMAGE_BINARY_DATA_HERE"),
-                     QString(QLatin1String(imageBuffer.buffer().toBase64())));
-    }
-
-    QList<QWebEngineFrame*> frames;
-    frames.append(mainFrame());
-    while (!frames.isEmpty()) {
-        QWebEngineFrame *frame = frames.takeFirst();
-        if (frame->url() == reply->url()) {
-            frame->setHtml(html, reply->url());
-            return;
-        }
-        QList<QWebEngineFrame *> children = frame->childFrames();
-        foreach (QWebEngineFrame *frame, children)
-            frames.append(frame);
-    }
-    if (m_loadingUrl == reply->url()) {
-        mainFrame()->setHtml(html, reply->url());
-    }
-}
-#endif
-
-void WebPage::authenticationRequired(const QUrl &requestUrl, QAuthenticator *auth)
-{
-    BrowserMainWindow *mainWindow = BrowserApplication::instance()->mainWindow();
-
-    QDialog dialog(mainWindow);
-    dialog.setWindowFlags(Qt::Sheet);
-
-    Ui::PasswordDialog passwordDialog;
-    passwordDialog.setupUi(&dialog);
-
-    passwordDialog.iconLabel->setText(QString());
-    passwordDialog.iconLabel->setPixmap(mainWindow->style()->standardIcon(QStyle::SP_MessageBoxQuestion, 0, mainWindow).pixmap(32, 32));
-
-    QString introMessage = tr("<qt>Enter username and password for \"%1\" at %2</qt>");
-    introMessage = introMessage.arg(auth->realm()).arg(requestUrl.toString().toHtmlEscaped());
-    passwordDialog.introLabel->setText(introMessage);
-    passwordDialog.introLabel->setWordWrap(true);
-
-    if (dialog.exec() == QDialog::Accepted) {
-        auth->setUser(passwordDialog.userNameLineEdit->text());
-        auth->setPassword(passwordDialog.passwordLineEdit->text());
-    } else {
-        // Set authenticator null if dialog is cancelled
-        *auth = QAuthenticator();
-    }
-}
-
-void WebPage::proxyAuthenticationRequired(const QUrl &requestUrl, QAuthenticator *auth, const QString &proxyHost)
-{
-    Q_UNUSED(requestUrl);
-    BrowserMainWindow *mainWindow = BrowserApplication::instance()->mainWindow();
-
-    QDialog dialog(mainWindow);
-    dialog.setWindowFlags(Qt::Sheet);
-
-    Ui::ProxyDialog proxyDialog;
-    proxyDialog.setupUi(&dialog);
-
-    proxyDialog.iconLabel->setText(QString());
-    proxyDialog.iconLabel->setPixmap(mainWindow->style()->standardIcon(QStyle::SP_MessageBoxQuestion, 0, mainWindow).pixmap(32, 32));
-
-    QString introMessage = tr("<qt>Connect to proxy \"%1\" using:</qt>");
-    introMessage = introMessage.arg(proxyHost.toHtmlEscaped());
-    proxyDialog.introLabel->setText(introMessage);
-    proxyDialog.introLabel->setWordWrap(true);
-
-    if (dialog.exec() == QDialog::Accepted) {
-        auth->setUser(proxyDialog.userNameLineEdit->text());
-        auth->setPassword(proxyDialog.passwordLineEdit->text());
-    } else {
-        // Set authenticator null if dialog is cancelled
-        *auth = QAuthenticator();
-    }
-}
-
-WebView::WebView(QWidget* parent)
-    : QWebEngineView(parent)
-    , m_progress(0)
-    , m_page(0)
-{
-    connect(this, SIGNAL(loadProgress(int)),
-            this, SLOT(setProgress(int)));
-    connect(this, SIGNAL(loadFinished(bool)),
-            this, SLOT(loadFinished(bool)));
-    connect(this, &QWebEngineView::renderProcessTerminated,
-            [=](QWebEnginePage::RenderProcessTerminationStatus termStatus, int statusCode) {
-        const char *status = "";
-        switch (termStatus) {
-        case QWebEnginePage::NormalTerminationStatus:
-            status = "(normal exit)";
-            break;
-        case QWebEnginePage::AbnormalTerminationStatus:
-            status = "(abnormal exit)";
-            break;
-        case QWebEnginePage::CrashedTerminationStatus:
-            status = "(crashed)";
-            break;
-        case QWebEnginePage::KilledTerminationStatus:
-            status = "(killed)";
-            break;
-        }
-
-        qInfo() << "Render process exited with code" << statusCode << status;
-        QTimer::singleShot(0, [this] { reload(); });
-    });
-}
-
-void WebView::setPage(WebPage *_page)
-{
-    if (m_page)
-        m_page->deleteLater();
-    m_page = _page;
-    QWebEngineView::setPage(_page);
-#if defined(QWEBENGINEPAGE_STATUSBARMESSAGE)
-    connect(page(), SIGNAL(statusBarMessage(QString)),
-            SLOT(setStatusBarText(QString)));
-#endif
-    disconnect(page(), &QWebEnginePage::iconChanged, this, &WebView::iconChanged);
-    connect(page(), SIGNAL(iconChanged(QIcon)),
-            this, SLOT(onIconChanged(QIcon)));
-    connect(page(), &WebPage::featurePermissionRequested, this, &WebView::onFeaturePermissionRequested);
-#if defined(QWEBENGINEPAGE_UNSUPPORTEDCONTENT)
-    page()->setForwardUnsupportedContent(true);
-#endif
-}
-
-void WebView::contextMenuEvent(QContextMenuEvent *event)
-{
-    QMenu *menu;
-    if (page()->contextMenuData().linkUrl().isValid()) {
-        menu = new QMenu(this);
-        menu->setAttribute(Qt::WA_DeleteOnClose, true);
-        menu->addAction(page()->action(QWebEnginePage::OpenLinkInThisWindow));
-        menu->addAction(page()->action(QWebEnginePage::OpenLinkInNewWindow));
-        menu->addAction(page()->action(QWebEnginePage::OpenLinkInNewTab));
-        menu->addAction(page()->action(QWebEnginePage::OpenLinkInNewBackgroundTab));
-        menu->addSeparator();
-        menu->addAction(page()->action(QWebEnginePage::DownloadLinkToDisk));
-        menu->addAction(page()->action(QWebEnginePage::CopyLinkToClipboard));
-    } else {
-        menu = page()->createStandardContextMenu();
-    }
-    if (page()->contextMenuData().selectedText().isEmpty())
-        menu->addAction(page()->action(QWebEnginePage::SavePage));
-    menu->popup(event->globalPos());
-}
-
-void WebView::wheelEvent(QWheelEvent *event)
-{
-#if defined(QWEBENGINEPAGE_SETTEXTSIZEMULTIPLIER)
-    if (QApplication::keyboardModifiers() & Qt::ControlModifier) {
-        int numDegrees = event->delta() / 8;
-        int numSteps = numDegrees / 15;
-        setTextSizeMultiplier(textSizeMultiplier() + numSteps * 0.1);
-        event->accept();
-        return;
-    }
-#endif
-    QWebEngineView::wheelEvent(event);
-}
-
-void WebView::onFeaturePermissionRequested(const QUrl &securityOrigin, QWebEnginePage::Feature feature)
-{
-    FeaturePermissionBar *permissionBar = new FeaturePermissionBar(this);
-    connect(permissionBar, &FeaturePermissionBar::featurePermissionProvided, page(), &QWebEnginePage::setFeaturePermission);
-
-    // Discard the bar on new loads (if we navigate away or reload).
-    connect(page(), &QWebEnginePage::loadStarted, permissionBar, &QObject::deleteLater);
-
-    permissionBar->requestPermission(securityOrigin, feature);
-}
-
-void WebView::setProgress(int progress)
-{
-    m_progress = progress;
-}
-
-void WebView::loadFinished(bool success)
-{
-    if (success && 100 != m_progress) {
-        qWarning() << "Received finished signal while progress is still:" << progress()
-                   << "Url:" << url();
-    }
-    m_progress = 0;
-}
-
-void WebView::loadUrl(const QUrl &url)
-{
-    m_initialUrl = url;
-    load(url);
-}
-
-QString WebView::lastStatusBarText() const
-{
-    return m_statusBarText;
-}
-
-QUrl WebView::url() const
-{
-    QUrl url = QWebEngineView::url();
-    if (!url.isEmpty())
-        return url;
-
-    return m_initialUrl;
-}
-
-void WebView::onIconChanged(const QIcon &icon)
-{
-    if (icon.isNull())
-        emit iconChanged(BrowserApplication::instance()->defaultIcon());
-    else
-        emit iconChanged(icon);
-}
-
-void WebView::mousePressEvent(QMouseEvent *event)
-{
-    m_page->m_pressedButtons = event->buttons();
-    m_page->m_keyboardModifiers = event->modifiers();
-    QWebEngineView::mousePressEvent(event);
-}
-
-void WebView::mouseReleaseEvent(QMouseEvent *event)
-{
-    QWebEngineView::mouseReleaseEvent(event);
-    if (!event->isAccepted() && (m_page->m_pressedButtons & Qt::MidButton)) {
-        QUrl url(QApplication::clipboard()->text(QClipboard::Selection));
-        if (!url.isEmpty() && url.isValid() && !url.scheme().isEmpty()) {
-            setUrl(url);
-        }
-    }
-}
-
-void WebView::setStatusBarText(const QString &string)
-{
-    m_statusBarText = string;
-}
diff --git a/examples/webenginewidgets/demobrowser/webview.h b/examples/webenginewidgets/demobrowser/webview.h
deleted file mode 100644
index 7531254d60764b06c6f678bbc6ab3ce9b68825f0..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/webview.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef WEBVIEW_H
-#define WEBVIEW_H
-
-#include <QIcon>
-#include <QWebEngineView>
-
-QT_BEGIN_NAMESPACE
-class QAuthenticator;
-class QMouseEvent;
-class QNetworkProxy;
-class QNetworkReply;
-class QSslError;
-QT_END_NAMESPACE
-
-class BrowserMainWindow;
-class WebPage : public QWebEnginePage {
-    Q_OBJECT
-public:
-    WebPage(QWebEngineProfile *profile, QObject *parent = 0);
-    BrowserMainWindow *mainWindow();
-
-protected:
-    QWebEnginePage *createWindow(QWebEnginePage::WebWindowType type) Q_DECL_OVERRIDE;
-#if !defined(QT_NO_UITOOLS)
-    QObject *createPlugin(const QString &classId, const QUrl &url, const QStringList &paramNames, const QStringList &paramValues);
-#endif
-    virtual bool certificateError(const QWebEngineCertificateError &error) Q_DECL_OVERRIDE;
-
-private slots:
-#if defined(QWEBENGINEPAGE_UNSUPPORTEDCONTENT)
-    void handleUnsupportedContent(QNetworkReply *reply);
-#endif
-    void authenticationRequired(const QUrl &requestUrl, QAuthenticator *auth);
-    void proxyAuthenticationRequired(const QUrl &requestUrl, QAuthenticator *auth, const QString &proxyHost);
-
-private:
-    friend class WebView;
-
-    // set the webview mousepressedevent
-    Qt::KeyboardModifiers m_keyboardModifiers;
-    Qt::MouseButtons m_pressedButtons;
-};
-
-class WebView : public QWebEngineView {
-    Q_OBJECT
-
-public:
-    WebView(QWidget *parent = 0);
-    WebPage *webPage() const { return m_page; }
-    void setPage(WebPage *page);
-
-    void loadUrl(const QUrl &url);
-    QUrl url() const;
-
-    QString lastStatusBarText() const;
-    inline int progress() const { return m_progress; }
-
-protected:
-    void mousePressEvent(QMouseEvent *event);
-    void mouseReleaseEvent(QMouseEvent *event);
-    void contextMenuEvent(QContextMenuEvent *event);
-    void wheelEvent(QWheelEvent *event);
-
-private slots:
-    void setProgress(int progress);
-    void loadFinished(bool success);
-    void setStatusBarText(const QString &string);
-    void onFeaturePermissionRequested(const QUrl &securityOrigin, QWebEnginePage::Feature);
-    void onIconChanged(const QIcon &icon);
-
-private:
-    QString m_statusBarText;
-    QUrl m_initialUrl;
-    int m_progress;
-    WebPage *m_page;
-};
-
-#endif
diff --git a/examples/webenginewidgets/demobrowser/xbel.cpp b/examples/webenginewidgets/demobrowser/xbel.cpp
deleted file mode 100644
index d66c44faafd09d2d18c38eb06668c710e5adcbc7..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/xbel.cpp
+++ /dev/null
@@ -1,291 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#include "xbel.h"
-
-#include <QtCore/QFile>
-
-BookmarkNode::BookmarkNode(BookmarkNode::Type type, BookmarkNode *parent) :
-     expanded(false)
-   , m_parent(parent)
-   , m_type(type)
-{
-    if (parent)
-        parent->add(this);
-}
-
-BookmarkNode::~BookmarkNode()
-{
-    if (m_parent)
-        m_parent->remove(this);
-    qDeleteAll(m_children);
-    m_parent = 0;
-    m_type = BookmarkNode::Root;
-}
-
-bool BookmarkNode::operator==(const BookmarkNode &other)
-{
-    if (url != other.url
-        || title != other.title
-        || desc != other.desc
-        || expanded != other.expanded
-        || m_type != other.m_type
-        || m_children.count() != other.m_children.count())
-        return false;
-
-    for (int i = 0; i < m_children.count(); ++i)
-        if (!((*(m_children[i])) == (*(other.m_children[i]))))
-            return false;
-    return true;
-}
-
-BookmarkNode::Type BookmarkNode::type() const
-{
-    return m_type;
-}
-
-void BookmarkNode::setType(Type type)
-{
-    m_type = type;
-}
-
-QList<BookmarkNode *> BookmarkNode::children() const
-{
-    return m_children;
-}
-
-BookmarkNode *BookmarkNode::parent() const
-{
-    return m_parent;
-}
-
-void BookmarkNode::add(BookmarkNode *child, int offset)
-{
-    Q_ASSERT(child->m_type != Root);
-    if (child->m_parent)
-        child->m_parent->remove(child);
-    child->m_parent = this;
-    if (-1 == offset)
-        offset = m_children.size();
-    m_children.insert(offset, child);
-}
-
-void BookmarkNode::remove(BookmarkNode *child)
-{
-    child->m_parent = 0;
-    m_children.removeAll(child);
-}
-
-
-XbelReader::XbelReader()
-{
-}
-
-BookmarkNode *XbelReader::read(const QString &fileName)
-{
-    QFile file(fileName);
-    if (!file.exists()) {
-        return new BookmarkNode(BookmarkNode::Root);
-    }
-    file.open(QFile::ReadOnly);
-    return read(&file);
-}
-
-BookmarkNode *XbelReader::read(QIODevice *device)
-{
-    BookmarkNode *root = new BookmarkNode(BookmarkNode::Root);
-    setDevice(device);
-    if (readNextStartElement()) {
-        QString version = attributes().value(QLatin1String("version")).toString();
-        if (name() == QLatin1String("xbel")
-            && (version.isEmpty() || version == QLatin1String("1.0"))) {
-            readXBEL(root);
-        } else {
-            raiseError(QObject::tr("The file is not an XBEL version 1.0 file."));
-        }
-    }
-    return root;
-}
-
-void XbelReader::readXBEL(BookmarkNode *parent)
-{
-    Q_ASSERT(isStartElement() && name() == QLatin1String("xbel"));
-
-    while (readNextStartElement()) {
-        if (name() == QLatin1String("folder"))
-            readFolder(parent);
-        else if (name() == QLatin1String("bookmark"))
-            readBookmarkNode(parent);
-        else if (name() == QLatin1String("separator"))
-            readSeparator(parent);
-        else
-            skipCurrentElement();
-    }
-}
-
-void XbelReader::readFolder(BookmarkNode *parent)
-{
-    Q_ASSERT(isStartElement() && name() == QLatin1String("folder"));
-
-    BookmarkNode *folder = new BookmarkNode(BookmarkNode::Folder, parent);
-    folder->expanded = (attributes().value(QLatin1String("folded")) == QLatin1String("no"));
-
-    while (readNextStartElement()) {
-        if (name() == QLatin1String("title"))
-            readTitle(folder);
-        else if (name() == QLatin1String("desc"))
-            readDescription(folder);
-        else if (name() == QLatin1String("folder"))
-            readFolder(folder);
-        else if (name() == QLatin1String("bookmark"))
-            readBookmarkNode(folder);
-        else if (name() == QLatin1String("separator"))
-            readSeparator(folder);
-        else
-            skipCurrentElement();
-    }
-}
-
-void XbelReader::readTitle(BookmarkNode *parent)
-{
-    Q_ASSERT(isStartElement() && name() == QLatin1String("title"));
-    parent->title = readElementText();
-}
-
-void XbelReader::readDescription(BookmarkNode *parent)
-{
-    Q_ASSERT(isStartElement() && name() == QLatin1String("desc"));
-    parent->desc = readElementText();
-}
-
-void XbelReader::readSeparator(BookmarkNode *parent)
-{
-    new BookmarkNode(BookmarkNode::Separator, parent);
-    // empty elements have a start and end element
-    readNext();
-}
-
-void XbelReader::readBookmarkNode(BookmarkNode *parent)
-{
-    Q_ASSERT(isStartElement() && name() == QLatin1String("bookmark"));
-    BookmarkNode *bookmark = new BookmarkNode(BookmarkNode::Bookmark, parent);
-    bookmark->url = attributes().value(QLatin1String("href")).toString();
-    while (readNextStartElement()) {
-        if (name() == QLatin1String("title"))
-            readTitle(bookmark);
-        else if (name() == QLatin1String("desc"))
-            readDescription(bookmark);
-        else
-            skipCurrentElement();
-    }
-    if (bookmark->title.isEmpty())
-        bookmark->title = QObject::tr("Unknown title");
-}
-
-
-XbelWriter::XbelWriter()
-{
-    setAutoFormatting(true);
-}
-
-bool XbelWriter::write(const QString &fileName, const BookmarkNode *root)
-{
-    QFile file(fileName);
-    if (!root || !file.open(QFile::WriteOnly))
-        return false;
-    return write(&file, root);
-}
-
-bool XbelWriter::write(QIODevice *device, const BookmarkNode *root)
-{
-    setDevice(device);
-
-    writeStartDocument();
-    writeDTD(QLatin1String("<!DOCTYPE xbel>"));
-    writeStartElement(QLatin1String("xbel"));
-    writeAttribute(QLatin1String("version"), QLatin1String("1.0"));
-    if (root->type() == BookmarkNode::Root) {
-        for (int i = 0; i < root->children().count(); ++i)
-            writeItem(root->children().at(i));
-    } else {
-        writeItem(root);
-    }
-
-    writeEndDocument();
-    return true;
-}
-
-void XbelWriter::writeItem(const BookmarkNode *parent)
-{
-    switch (parent->type()) {
-    case BookmarkNode::Folder:
-        writeStartElement(QLatin1String("folder"));
-        writeAttribute(QLatin1String("folded"), parent->expanded ? QLatin1String("no") : QLatin1String("yes"));
-        writeTextElement(QLatin1String("title"), parent->title);
-        for (int i = 0; i < parent->children().count(); ++i)
-            writeItem(parent->children().at(i));
-        writeEndElement();
-        break;
-    case BookmarkNode::Bookmark:
-        writeStartElement(QLatin1String("bookmark"));
-        if (!parent->url.isEmpty())
-            writeAttribute(QLatin1String("href"), parent->url);
-        writeTextElement(QLatin1String("title"), parent->title);
-        if (!parent->desc.isEmpty())
-            writeAttribute(QLatin1String("desc"), parent->desc);
-        writeEndElement();
-        break;
-    case BookmarkNode::Separator:
-        writeEmptyElement(QLatin1String("separator"));
-        break;
-    default:
-        break;
-    }
-}
diff --git a/examples/webenginewidgets/demobrowser/xbel.h b/examples/webenginewidgets/demobrowser/xbel.h
deleted file mode 100644
index 89f5e259f95befacf634071d169c95182c2303a5..0000000000000000000000000000000000000000
--- a/examples/webenginewidgets/demobrowser/xbel.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
-
-#ifndef XBEL_H
-#define XBEL_H
-
-#include <QtCore/QXmlStreamReader>
-#include <QtCore/QDateTime>
-
-class BookmarkNode
-{
-public:
-    enum Type {
-        Root,
-        Folder,
-        Bookmark,
-        Separator
-    };
-
-    BookmarkNode(Type type = Root, BookmarkNode *parent = 0);
-    ~BookmarkNode();
-    bool operator==(const BookmarkNode &other);
-
-    Type type() const;
-    void setType(Type type);
-    QList<BookmarkNode *> children() const;
-    BookmarkNode *parent() const;
-
-    void add(BookmarkNode *child, int offset = -1);
-    void remove(BookmarkNode *child);
-
-    QString url;
-    QString title;
-    QString desc;
-    bool expanded;
-
-private:
-    BookmarkNode *m_parent;
-    Type m_type;
-    QList<BookmarkNode *> m_children;
-
-};
-
-class XbelReader : public QXmlStreamReader
-{
-public:
-    XbelReader();
-    BookmarkNode *read(const QString &fileName);
-    BookmarkNode *read(QIODevice *device);
-
-private:
-    void readXBEL(BookmarkNode *parent);
-    void readTitle(BookmarkNode *parent);
-    void readDescription(BookmarkNode *parent);
-    void readSeparator(BookmarkNode *parent);
-    void readFolder(BookmarkNode *parent);
-    void readBookmarkNode(BookmarkNode *parent);
-};
-
-#include <QtCore/QXmlStreamWriter>
-
-class XbelWriter : public QXmlStreamWriter
-{
-public:
-    XbelWriter();
-    bool write(const QString &fileName, const BookmarkNode *root);
-    bool write(QIODevice *device, const BookmarkNode *root);
-
-private:
-    void writeItem(const BookmarkNode *parent);
-};
-
-#endif // XBEL_H
diff --git a/examples/webenginewidgets/webenginewidgets.pro b/examples/webenginewidgets/webenginewidgets.pro
index 217c4f016bffebf37e6b6d50371b2eaf36b8bc05..cb7c8aa220890ed5cf40994a0aae10ed27fc681f 100644
--- a/examples/webenginewidgets/webenginewidgets.pro
+++ b/examples/webenginewidgets/webenginewidgets.pro
@@ -4,7 +4,6 @@ SUBDIRS += \
     minimal \
     contentmanipulation \
     cookiebrowser \
-    demobrowser \
     html2pdf \
     markdowneditor \
     simplebrowser \
diff --git a/src/webengine/doc/src/qtwebengine-features.qdoc b/src/webengine/doc/src/qtwebengine-features.qdoc
index 11d3a4ca1284ff611fd4bedc123ece6084133be6..c8ff2250de160dfea42c40d24a67608ca3671359 100644
--- a/src/webengine/doc/src/qtwebengine-features.qdoc
+++ b/src/webengine/doc/src/qtwebengine-features.qdoc
@@ -77,8 +77,8 @@
     This feature can be tested by launching a Qt WebEngine application with the
     command line option \c {--remote-debugging-port=[your-port]} or by setting
     the environment variable \c QTWEBENGINE_REMOTE_DEBUGGING, and then using a
-    Chromium based browser (such as \l{WebEngine Demo Browser Example}
-    {Demo Browser} or \l{WebEngine Quick Nano Browser}{Nano Browser}) to connect
+    Chromium based browser (such as \l{WebEngine Widgets Simple Browser Example}
+    {Simple Browser} or \l{WebEngine Quick Nano Browser}{Nano Browser}) to connect
     to \c {http://localhost:[your-port]}.
 
     For more information, see \l {Qt WebEngine Debugging and Profiling}.
@@ -89,8 +89,8 @@
 
     This feature can be tested by opening an HTML5 drag and drop demo, such as
     \l{HTML5 Demos - Drag and Drop}, \l{HTML5 Demos - Simple Drag and Drop}, or
-    \l{HTML5 Demos - Drag and Drop, Automatic Upload}, in \l{WebEngine Demo
-    Browser Example}{Demo Browser} or \l{WebEngine Quick Nano Browser}
+    \l{HTML5 Demos - Drag and Drop, Automatic Upload}, in \l{WebEngine Widgets
+    Simple Browser Example}{Simple Browser} or \l{WebEngine Quick Nano Browser}
     {Nano Browser}.
 
     Dragging files into the browser is not actually part of HTML5, but it is
@@ -108,7 +108,7 @@
     QWebEnginePage::fullScreenRequested.
 
     This feature can be tested by playing a video from YouTube in \l{WebEngine
-    Demo Browser Example}{Demo Browser} or \l{WebEngine Quick Nano Browser}
+    Widgets Video Player Example}{Video Player} or \l{WebEngine Quick Nano Browser}
     {Nano Browser}, and clicking the full screen icon to go into fullscreen
     mode.
 
@@ -123,8 +123,8 @@
     proprietary audio and video codecs. For more information about enabling the
     codecs, see \l{Audio and Video Codecs}.
 
-    This feature can be tested by playing a video in \l{WebEngine Demo Browser
-    Example}{Demo Browser} or \l{WebEngine Quick Nano Browser}{Nano Browser}
+    This feature can be tested by playing a video in \l{WebEngine Widgets Simple Browser
+    Example}{Simple Browser} or \l{WebEngine Quick Nano Browser}{Nano Browser}
     from \l{castLabs}, \l{Swank Motion Pictures, Inc.}, or \l{Shaka Player}.
 
     Support for this feature was added in Qt 5.7.0.
@@ -136,11 +136,11 @@
     QWebEnginePage::Geolocation or \l{WebEngineView::Feature}
     {WebEngineView.Feature}.
 
-    This feature can be tested if Qt Location has been built before Qt WebEngine.
-    The \c http://html5demos.com/geo page can be opened in the \l{WebEngine Demo
-    Browser Example}{Demo Browser} and allowed to find the current position of
-    the user. Note that on Windows an external GPS receiver must be connected to
-    the application. For more information, see \l{Qt Positioning}.
+    If Qt Location has been built before Qt WebEngine then this feature can be
+    tested by using \l{WebEngine Widgets Maps Example}{Maps} and allowing it to
+    find the current position of the user. Note that on Windows an external GPS
+    receiver must be connected to the application. For more information, see
+    \l{Qt Positioning}.
 
     Support for this feature was added in Qt 5.5.0.
 
@@ -253,7 +253,7 @@
     --ppapi-flash-version=16.0.0.235
     \endcode
 
-    This feature can be tested in \l{WebEngine Demo Browser Example}{Demo Browser}
+    This feature can be tested in \l{WebEngine Widgets Simple Browser Example}{Simple Browser}
     or \l{WebEngine Quick Nano Browser}{Nano Browser} if the Adobe Flash PPAPI
     plugin is installed and plugins are enabled in the browser. To test the
     feature, the \c https://helpx.adobe.com/flash-player.html page can be opened
@@ -265,8 +265,8 @@
     information, see QWebEnginePage::printToPdf() and
     \l{WebEngineView::printToPdf}{WebEngineView.printToPdf}.
 
-    This feature can be tested in \l{WebEngine Demo Browser Example}
-    {Demo Browser} by selecting \uicontrol File > \uicontrol {Print to PDF}.
+    This feature can be tested using \l{WebEngine Widgets Html2Pdf Example}
+    {Html2Pdf}.
 
     Support for this feature was added in Qt 5.7.0.
 
diff --git a/src/webenginewidgets/doc/src/qwebengineview_lgpl.qdoc b/src/webenginewidgets/doc/src/qwebengineview_lgpl.qdoc
index e54c5d507ef797635d183df1b02c6076e3a6994b..34a61ded39d9ac9e327e8ecf397c40e3c485e394 100644
--- a/src/webenginewidgets/doc/src/qwebengineview_lgpl.qdoc
+++ b/src/webenginewidgets/doc/src/qwebengineview_lgpl.qdoc
@@ -77,7 +77,7 @@
     new windows, such as pop-up windows, you can subclass QWebEngineView and
     reimplement the createWindow() function.
 
-    \sa {WebEngine Demo Browser Example}, {WebEngine Content Manipulation Example}, {WebEngine Markdown Editor Example}
+    \sa {WebEngine Widgets Simple Browser Example}, {WebEngine Content Manipulation Example}, {WebEngine Markdown Editor Example}
 */