diff options
Diffstat (limited to 'examples/webenginewidgets')
-rw-r--r-- | examples/webenginewidgets/browser/browser.rc | 1 | ||||
-rw-r--r-- | examples/webenginewidgets/browser/networkaccessmanager.cpp | 160 | ||||
-rw-r--r-- | examples/webenginewidgets/browser/networkaccessmanager.h | 75 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/Info_mac.plist (renamed from examples/webenginewidgets/browser/Info_mac.plist) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/addbookmarkdialog.ui (renamed from examples/webenginewidgets/browser/addbookmarkdialog.ui) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/autosaver.cpp (renamed from examples/webenginewidgets/browser/autosaver.cpp) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/autosaver.h (renamed from examples/webenginewidgets/browser/autosaver.h) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/bookmarks.cpp (renamed from examples/webenginewidgets/browser/bookmarks.cpp) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/bookmarks.h (renamed from examples/webenginewidgets/browser/bookmarks.h) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/bookmarks.ui (renamed from examples/webenginewidgets/browser/bookmarks.ui) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/browserapplication.cpp (renamed from examples/webenginewidgets/browser/browserapplication.cpp) | 110 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/browserapplication.h (renamed from examples/webenginewidgets/browser/browserapplication.h) | 19 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/browsermainwindow.cpp (renamed from examples/webenginewidgets/browser/browsermainwindow.cpp) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/browsermainwindow.h (renamed from examples/webenginewidgets/browser/browsermainwindow.h) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/chasewidget.cpp (renamed from examples/webenginewidgets/browser/chasewidget.cpp) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/chasewidget.h (renamed from examples/webenginewidgets/browser/chasewidget.h) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/cookiejar.cpp (renamed from examples/webenginewidgets/browser/cookiejar.cpp) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/cookiejar.h (renamed from examples/webenginewidgets/browser/cookiejar.h) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/cookies.ui (renamed from examples/webenginewidgets/browser/cookies.ui) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/cookiesexceptions.ui (renamed from examples/webenginewidgets/browser/cookiesexceptions.ui) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/data/addtab.png (renamed from examples/webenginewidgets/browser/data/addtab.png) | bin | 469 -> 469 bytes | |||
-rw-r--r-- | examples/webenginewidgets/demobrowser/data/closetab.png (renamed from examples/webenginewidgets/browser/data/closetab.png) | bin | 516 -> 516 bytes | |||
-rw-r--r-- | examples/webenginewidgets/demobrowser/data/data.qrc (renamed from examples/webenginewidgets/browser/data/data.qrc) | 2 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/data/defaultbookmarks.xbel (renamed from examples/webenginewidgets/browser/data/defaultbookmarks.xbel) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/data/defaulticon.png (renamed from examples/webenginewidgets/browser/data/defaulticon.png) | bin | 1473 -> 1473 bytes | |||
-rw-r--r-- | examples/webenginewidgets/demobrowser/data/demobrowser.svg (renamed from examples/webenginewidgets/browser/data/browser.svg) | 3 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/data/history.png (renamed from examples/webenginewidgets/browser/data/history.png) | bin | 1527 -> 1527 bytes | |||
-rw-r--r-- | examples/webenginewidgets/demobrowser/data/loading.gif (renamed from examples/webenginewidgets/browser/data/loading.gif) | bin | 847 -> 847 bytes | |||
-rw-r--r-- | examples/webenginewidgets/demobrowser/demobrowser.icns (renamed from examples/webenginewidgets/browser/browser.icns) | bin | 50218 -> 50218 bytes | |||
-rw-r--r-- | examples/webenginewidgets/demobrowser/demobrowser.ico (renamed from examples/webenginewidgets/browser/browser.ico) | bin | 15374 -> 15374 bytes | |||
-rw-r--r-- | examples/webenginewidgets/demobrowser/demobrowser.pro (renamed from examples/webenginewidgets/browser/browser.pro) | 18 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/demobrowser.rc | 1 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/doc/images/browser-demo.png (renamed from examples/webenginewidgets/browser/doc/images/browser-demo.png) | bin | 156342 -> 156342 bytes | |||
-rw-r--r-- | examples/webenginewidgets/demobrowser/doc/src/demobrowser.qdoc (renamed from examples/webenginewidgets/browser/doc/src/browser.qdoc) | 10 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/downloaditem.ui (renamed from examples/webenginewidgets/browser/downloaditem.ui) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/downloadmanager.cpp (renamed from examples/webenginewidgets/browser/downloadmanager.cpp) | 1 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/downloadmanager.h (renamed from examples/webenginewidgets/browser/downloadmanager.h) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/downloads.ui (renamed from examples/webenginewidgets/browser/downloads.ui) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/edittableview.cpp (renamed from examples/webenginewidgets/browser/edittableview.cpp) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/edittableview.h (renamed from examples/webenginewidgets/browser/edittableview.h) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/edittreeview.cpp (renamed from examples/webenginewidgets/browser/edittreeview.cpp) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/edittreeview.h (renamed from examples/webenginewidgets/browser/edittreeview.h) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/featurepermissionbar.cpp (renamed from examples/webenginewidgets/browser/featurepermissionbar.cpp) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/featurepermissionbar.h (renamed from examples/webenginewidgets/browser/featurepermissionbar.h) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/history.cpp (renamed from examples/webenginewidgets/browser/history.cpp) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/history.h (renamed from examples/webenginewidgets/browser/history.h) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/history.ui (renamed from examples/webenginewidgets/browser/history.ui) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/htmls/htmls.qrc (renamed from examples/webenginewidgets/browser/htmls/htmls.qrc) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/htmls/notfound.html (renamed from examples/webenginewidgets/browser/htmls/notfound.html) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/main.cpp (renamed from examples/webenginewidgets/browser/main.cpp) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/modelmenu.cpp (renamed from examples/webenginewidgets/browser/modelmenu.cpp) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/modelmenu.h (renamed from examples/webenginewidgets/browser/modelmenu.h) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/passworddialog.ui (renamed from examples/webenginewidgets/browser/passworddialog.ui) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/proxy.ui (renamed from examples/webenginewidgets/browser/proxy.ui) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/searchlineedit.cpp (renamed from examples/webenginewidgets/browser/searchlineedit.cpp) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/searchlineedit.h (renamed from examples/webenginewidgets/browser/searchlineedit.h) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/settings.cpp (renamed from examples/webenginewidgets/browser/settings.cpp) | 33 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/settings.h (renamed from examples/webenginewidgets/browser/settings.h) | 3 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/settings.ui (renamed from examples/webenginewidgets/browser/settings.ui) | 27 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/squeezelabel.cpp (renamed from examples/webenginewidgets/browser/squeezelabel.cpp) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/squeezelabel.h (renamed from examples/webenginewidgets/browser/squeezelabel.h) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/tabwidget.cpp (renamed from examples/webenginewidgets/browser/tabwidget.cpp) | 76 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/tabwidget.h (renamed from examples/webenginewidgets/browser/tabwidget.h) | 7 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/toolbarsearch.cpp (renamed from examples/webenginewidgets/browser/toolbarsearch.cpp) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/toolbarsearch.h (renamed from examples/webenginewidgets/browser/toolbarsearch.h) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/urllineedit.cpp (renamed from examples/webenginewidgets/browser/urllineedit.cpp) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/urllineedit.h (renamed from examples/webenginewidgets/browser/urllineedit.h) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/webview.cpp (renamed from examples/webenginewidgets/browser/webview.cpp) | 91 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/webview.h (renamed from examples/webenginewidgets/browser/webview.h) | 2 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/xbel.cpp (renamed from examples/webenginewidgets/browser/xbel.cpp) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/xbel.h (renamed from examples/webenginewidgets/browser/xbel.h) | 0 | ||||
-rw-r--r-- | examples/webenginewidgets/fancybrowser/doc/src/fancybrowser.qdoc | 22 |
72 files changed, 310 insertions, 351 deletions
diff --git a/examples/webenginewidgets/browser/browser.rc b/examples/webenginewidgets/browser/browser.rc deleted file mode 100644 index 39e17e973..000000000 --- a/examples/webenginewidgets/browser/browser.rc +++ /dev/null @@ -1 +0,0 @@ -IDI_ICON1 ICON DISCARDABLE "browser.ico" diff --git a/examples/webenginewidgets/browser/networkaccessmanager.cpp b/examples/webenginewidgets/browser/networkaccessmanager.cpp deleted file mode 100644 index d2b4f827f..000000000 --- a/examples/webenginewidgets/browser/networkaccessmanager.cpp +++ /dev/null @@ -1,160 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the demonstration applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** As a special exception, The Qt Company gives you certain additional -** rights. These rights are described in The Qt Company LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "networkaccessmanager.h" - -#include "browserapplication.h" -#include "browsermainwindow.h" - -#include <QtCore/QSettings> - -#include <QtGui/QDesktopServices> -#include <QtWidgets/QDialog> -#include <QtWidgets/QMessageBox> -#include <QtWidgets/QStyle> -#include <QtGui/QTextDocument> - -#include <QtNetwork/QAuthenticator> -#include <QtNetwork/QNetworkDiskCache> -#include <QtNetwork/QNetworkProxy> -#include <QtNetwork/QNetworkRequest> -#include <QtNetwork/QNetworkReply> -#include <QtNetwork/QSslError> - -NetworkAccessManager::NetworkAccessManager(QObject *parent) - : QNetworkAccessManager(parent), - requestFinishedCount(0), requestFinishedFromCacheCount(0), requestFinishedPipelinedCount(0), - requestFinishedSecureCount(0), requestFinishedDownloadBufferCount(0) -{ - connect(this, SIGNAL(finished(QNetworkReply*)), - SLOT(requestFinished(QNetworkReply*))); -#ifndef QT_NO_OPENSSL - connect(this, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)), - SLOT(sslErrors(QNetworkReply*,QList<QSslError>))); -#endif - loadSettings(); - - QNetworkDiskCache *diskCache = new QNetworkDiskCache(this); - QString location = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); - diskCache->setCacheDirectory(location); - setCache(diskCache); -} - -QNetworkReply* NetworkAccessManager::createRequest(Operation op, const QNetworkRequest & req, QIODevice * outgoingData) -{ - QNetworkRequest request = req; // copy so we can modify - // this is a temporary hack until we properly use the pipelining flags from QtWebkit - // pipeline everything! :) - request.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true); - return QNetworkAccessManager::createRequest(op, request, outgoingData); -} - -void NetworkAccessManager::requestFinished(QNetworkReply *reply) -{ - requestFinishedCount++; - - if (reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool() == true) - requestFinishedFromCacheCount++; - - if (reply->attribute(QNetworkRequest::HttpPipeliningWasUsedAttribute).toBool() == true) - requestFinishedPipelinedCount++; - - if (reply->attribute(QNetworkRequest::ConnectionEncryptedAttribute).toBool() == true) - requestFinishedSecureCount++; - - if (reply->attribute(QNetworkRequest::DownloadBufferAttribute).isValid() == true) - requestFinishedDownloadBufferCount++; - - if (requestFinishedCount % 10) - return; - -#ifdef QT_DEBUG - double pctCached = (double(requestFinishedFromCacheCount) * 100.0/ double(requestFinishedCount)); - double pctPipelined = (double(requestFinishedPipelinedCount) * 100.0/ double(requestFinishedCount)); - double pctSecure = (double(requestFinishedSecureCount) * 100.0/ double(requestFinishedCount)); - double pctDownloadBuffer = (double(requestFinishedDownloadBufferCount) * 100.0/ double(requestFinishedCount)); - - qDebug("STATS [%lli requests total] [%3.2f%% from cache] [%3.2f%% pipelined] [%3.2f%% SSL/TLS] [%3.2f%% Zerocopy]", requestFinishedCount, pctCached, pctPipelined, pctSecure, pctDownloadBuffer); -#endif -} - -void NetworkAccessManager::loadSettings() -{ - QSettings settings; - 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()); - } - setProxy(proxy); -} - -#ifndef QT_NO_OPENSSL -void NetworkAccessManager::sslErrors(QNetworkReply *reply, const QList<QSslError> &error) -{ - // check if SSL certificate has been trusted already - QString replyHost = reply->url().host() + QString(":%1").arg(reply->url().port()); - if (! sslTrustedHostList.contains(replyHost)) { - BrowserMainWindow *mainWindow = BrowserApplication::instance()->mainWindow(); - - QStringList errorStrings; - for (int i = 0; i < error.count(); ++i) - errorStrings += error.at(i).errorString(); - QString errors = errorStrings.join(QLatin1String("\n")); - int ret = QMessageBox::warning(mainWindow, QCoreApplication::applicationName(), - tr("SSL Errors:\n\n%1\n\n%2\n\n" - "Do you want to ignore these errors for this host?").arg(reply->url().toString()).arg(errors), - QMessageBox::Yes | QMessageBox::No, - QMessageBox::No); - if (ret == QMessageBox::Yes) { - reply->ignoreSslErrors(); - sslTrustedHostList.append(replyHost); - } - } -} -#endif diff --git a/examples/webenginewidgets/browser/networkaccessmanager.h b/examples/webenginewidgets/browser/networkaccessmanager.h deleted file mode 100644 index f3ee2d338..000000000 --- a/examples/webenginewidgets/browser/networkaccessmanager.h +++ /dev/null @@ -1,75 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the demonstration applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** As a special exception, The Qt Company gives you certain additional -** rights. These rights are described in The Qt Company LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef NETWORKACCESSMANAGER_H -#define NETWORKACCESSMANAGER_H - -#include <QtNetwork/QNetworkAccessManager> -#include <QtNetwork/QNetworkRequest> - -class NetworkAccessManager : public QNetworkAccessManager -{ - Q_OBJECT - -public: - NetworkAccessManager(QObject *parent = 0); - - virtual QNetworkReply* createRequest ( Operation op, const QNetworkRequest & req, QIODevice * outgoingData = 0 ); - -private: - QList<QString> sslTrustedHostList; - qint64 requestFinishedCount; - qint64 requestFinishedFromCacheCount; - qint64 requestFinishedPipelinedCount; - qint64 requestFinishedSecureCount; - qint64 requestFinishedDownloadBufferCount; - -public slots: - void loadSettings(); - void requestFinished(QNetworkReply *reply); - -private slots: -#ifndef QT_NO_OPENSSL - void sslErrors(QNetworkReply *reply, const QList<QSslError> &error); -#endif -}; - -#endif // NETWORKACCESSMANAGER_H diff --git a/examples/webenginewidgets/browser/Info_mac.plist b/examples/webenginewidgets/demobrowser/Info_mac.plist index ccd4b3f28..ccd4b3f28 100644 --- a/examples/webenginewidgets/browser/Info_mac.plist +++ b/examples/webenginewidgets/demobrowser/Info_mac.plist diff --git a/examples/webenginewidgets/browser/addbookmarkdialog.ui b/examples/webenginewidgets/demobrowser/addbookmarkdialog.ui index 3460d7bb8..3460d7bb8 100644 --- a/examples/webenginewidgets/browser/addbookmarkdialog.ui +++ b/examples/webenginewidgets/demobrowser/addbookmarkdialog.ui diff --git a/examples/webenginewidgets/browser/autosaver.cpp b/examples/webenginewidgets/demobrowser/autosaver.cpp index dc72090dd..dc72090dd 100644 --- a/examples/webenginewidgets/browser/autosaver.cpp +++ b/examples/webenginewidgets/demobrowser/autosaver.cpp diff --git a/examples/webenginewidgets/browser/autosaver.h b/examples/webenginewidgets/demobrowser/autosaver.h index b0c73846f..b0c73846f 100644 --- a/examples/webenginewidgets/browser/autosaver.h +++ b/examples/webenginewidgets/demobrowser/autosaver.h diff --git a/examples/webenginewidgets/browser/bookmarks.cpp b/examples/webenginewidgets/demobrowser/bookmarks.cpp index 15078caa3..15078caa3 100644 --- a/examples/webenginewidgets/browser/bookmarks.cpp +++ b/examples/webenginewidgets/demobrowser/bookmarks.cpp diff --git a/examples/webenginewidgets/browser/bookmarks.h b/examples/webenginewidgets/demobrowser/bookmarks.h index 244f003c6..244f003c6 100644 --- a/examples/webenginewidgets/browser/bookmarks.h +++ b/examples/webenginewidgets/demobrowser/bookmarks.h diff --git a/examples/webenginewidgets/browser/bookmarks.ui b/examples/webenginewidgets/demobrowser/bookmarks.ui index c893e941d..c893e941d 100644 --- a/examples/webenginewidgets/browser/bookmarks.ui +++ b/examples/webenginewidgets/demobrowser/bookmarks.ui diff --git a/examples/webenginewidgets/browser/browserapplication.cpp b/examples/webenginewidgets/demobrowser/browserapplication.cpp index ca28b2d0b..a85bce2c3 100644 --- a/examples/webenginewidgets/browser/browserapplication.cpp +++ b/examples/webenginewidgets/demobrowser/browserapplication.cpp @@ -46,7 +46,6 @@ #include "cookiejar.h" #include "downloadmanager.h" #include "history.h" -#include "networkaccessmanager.h" #include "tabwidget.h" #include "webview.h" @@ -64,6 +63,7 @@ #include <QtNetwork/QLocalServer> #include <QtNetwork/QLocalSocket> #include <QtNetwork/QNetworkProxy> +#include <QtNetwork/QNetworkReply> #include <QtNetwork/QSslSocket> #include <QWebEngineProfile> @@ -191,25 +191,24 @@ BrowserApplication::~BrowserApplication() delete s_bookmarksManager; } -#if defined(Q_OS_OSX) 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())); } -#if defined(Q_OS_OSX) -#include <QtWidgets/QMessageBox> void BrowserApplication::quitBrowser() { +#if defined(Q_OS_OSX) clean(); int tabCount = 0; for (int i = 0; i < m_mainWindows.count(); ++i) { @@ -227,8 +226,8 @@ void BrowserApplication::quitBrowser() } exit(0); -} #endif +} /*! Any actions that can be delayed until the window is visible @@ -243,7 +242,7 @@ void BrowserApplication::postLaunch() QWebEngineSettings::setOfflineStoragePath(directory); #endif - setWindowIcon(QIcon(QLatin1String(":browser.svg"))); + setWindowIcon(QIcon(QLatin1String(":demobrowser.svg"))); loadSettings(); @@ -283,14 +282,15 @@ void BrowserApplication::loadSettings() defaultSettings->setAttribute(QWebEngineSettings::JavascriptEnabled, settings.value(QLatin1String("enableJavascript"), true).toBool()); defaultSettings->setAttribute(QWebEngineSettings::ScrollAnimatorEnabled, settings.value(QLatin1String("enableScrollAnimator"), true).toBool()); -#if defined(QTWEBENGINE_PLUGINS) defaultSettings->setAttribute(QWebEngineSettings::PluginsEnabled, settings.value(QLatin1String("enablePlugins"), true).toBool()); -#endif + + 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()); settings.endGroup(); settings.beginGroup(QLatin1String("cookies")); @@ -300,6 +300,21 @@ void BrowserApplication::loadSettings() 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() @@ -475,18 +490,14 @@ DownloadManager *BrowserApplication::downloadManager() QNetworkAccessManager *BrowserApplication::networkAccessManager() { -#if defined(QWEBENGINEPAGE_SETNETWORKACCESSMANAGER) - if (!s_networkAccessManager) { - s_networkAccessManager = new NetworkAccessManager(); - s_networkAccessManager->setCookieJar(new CookieJar); - } - return s_networkAccessManager; -#else if (!s_networkAccessManager) { s_networkAccessManager = new QNetworkAccessManager(); + connect(s_networkAccessManager, &QNetworkAccessManager::authenticationRequired, + BrowserApplication::instance(), &BrowserApplication::authenticationRequired); + connect(s_networkAccessManager, &QNetworkAccessManager::proxyAuthenticationRequired, + BrowserApplication::instance(), &BrowserApplication::proxyAuthenticationRequired); } return s_networkAccessManager; -#endif } HistoryManager *BrowserApplication::historyManager() @@ -543,3 +554,68 @@ void BrowserApplication::setPrivateBrowsing(bool privateBrowsing) } emit privateBrowsingChanged(privateBrowsing); } + +void BrowserApplication::setLastAuthenticator(QAuthenticator *authenticator) +{ + m_lastAuthenticator = QAuthenticator(*authenticator); +} + +void BrowserApplication::setLastProxyAuthenticator(QAuthenticator *authenticator) +{ + m_lastProxyAuthenticator = QAuthenticator(*authenticator); +} + +void BrowserApplication::authenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator) +{ + if (m_lastAuthenticator.isNull()) + return; + + + Q_ASSERT(m_lastAuthenticator.option("key").isValid()); + QByteArray lastKey = m_lastAuthenticator.option("key").toByteArray(); + QByteArray key = BrowserApplication::authenticationKey(reply->url(), authenticator->realm()); + + if (lastKey == key) + *authenticator = m_lastAuthenticator; +} + +void BrowserApplication::proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator) +{ + if (m_lastProxyAuthenticator.isNull()) + return; + + QNetworkProxy::ProxyType proxyType = proxy.type(); + if (proxyType != QNetworkProxy::HttpProxy || proxyType != QNetworkProxy::HttpCachingProxy) + return; + + Q_ASSERT(m_lastProxyAuthenticator.option("host").isValid()); + QByteArray lastKey = m_lastProxyAuthenticator.option("key").toByteArray(); + QByteArray key = BrowserApplication::proxyAuthenticationKey(proxy, authenticator->realm()); + + if (lastKey == key) + *authenticator = m_lastAuthenticator; +} + +// TODO: Remove these functions (QTBUG-47967) +QByteArray BrowserApplication::authenticationKey(const QUrl &url, const QString &realm) +{ + QUrl copy = url; + copy.setFragment(realm); + return "auth:" + copy.toEncoded(QUrl::RemovePassword | QUrl::RemovePath | QUrl::RemoveQuery); +} + +QByteArray BrowserApplication::proxyAuthenticationKey(const QNetworkProxy &proxy, const QString &realm) +{ + QString host = QString("%1:%2").arg(proxy.hostName()).arg(proxy.port()); + return BrowserApplication::proxyAuthenticationKey(proxy.user(), host, realm); +} + +QByteArray BrowserApplication::proxyAuthenticationKey(const QString &user, const QString &host, const QString &realm) +{ + QUrl key; + key.setScheme(QLatin1String("proxy-http")); + key.setUserName(user); + key.setHost(host); + key.setFragment(realm); + return "auth:" + key.toEncoded(); +} diff --git a/examples/webenginewidgets/browser/browserapplication.h b/examples/webenginewidgets/demobrowser/browserapplication.h index 26557b8f9..75ae57c64 100644 --- a/examples/webenginewidgets/browser/browserapplication.h +++ b/examples/webenginewidgets/demobrowser/browserapplication.h @@ -49,9 +49,13 @@ #include <QtGui/QIcon> +#include <QtNetwork/QAuthenticator> + QT_BEGIN_NAMESPACE class QLocalServer; class QNetworkAccessManager; +class QNetworkProxy; +class QNetworkReply; class QWebEngineProfile; QT_END_NAMESPACE @@ -80,6 +84,14 @@ public: bool canRestoreSession() const; bool privateBrowsing() const { return m_privateBrowsing; } + void setLastAuthenticator(QAuthenticator *); + void setLastProxyAuthenticator(QAuthenticator *); + + // TODO: Remove these functions (QTBUG-47967) + static QByteArray authenticationKey(const QUrl &, const QString &); + static QByteArray proxyAuthenticationKey(const QNetworkProxy &, const QString &); + static QByteArray proxyAuthenticationKey(const QString &, const QString &, const QString &); + static HistoryManager *historyManager(); static CookieJar *cookieJar(); static DownloadManager *downloadManager(); @@ -93,11 +105,11 @@ public: public slots: BrowserMainWindow *newMainWindow(); void restoreLastSession(); -#if defined(Q_OS_OSX) void lastWindowClosed(); void quitBrowser(); -#endif void setPrivateBrowsing(bool); + void authenticationRequired(QNetworkReply *, QAuthenticator *); + void proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *); signals: void privateBrowsingChanged(bool); @@ -122,6 +134,9 @@ private: QWebEngineProfile *m_privateProfile; bool m_privateBrowsing; mutable QIcon m_defaultIcon; + + QAuthenticator m_lastAuthenticator; + QAuthenticator m_lastProxyAuthenticator; }; #endif // BROWSERAPPLICATION_H diff --git a/examples/webenginewidgets/browser/browsermainwindow.cpp b/examples/webenginewidgets/demobrowser/browsermainwindow.cpp index 9595ca7ba..9595ca7ba 100644 --- a/examples/webenginewidgets/browser/browsermainwindow.cpp +++ b/examples/webenginewidgets/demobrowser/browsermainwindow.cpp diff --git a/examples/webenginewidgets/browser/browsermainwindow.h b/examples/webenginewidgets/demobrowser/browsermainwindow.h index a2bbc443f..a2bbc443f 100644 --- a/examples/webenginewidgets/browser/browsermainwindow.h +++ b/examples/webenginewidgets/demobrowser/browsermainwindow.h diff --git a/examples/webenginewidgets/browser/chasewidget.cpp b/examples/webenginewidgets/demobrowser/chasewidget.cpp index fb0e9ce76..fb0e9ce76 100644 --- a/examples/webenginewidgets/browser/chasewidget.cpp +++ b/examples/webenginewidgets/demobrowser/chasewidget.cpp diff --git a/examples/webenginewidgets/browser/chasewidget.h b/examples/webenginewidgets/demobrowser/chasewidget.h index a90389034..a90389034 100644 --- a/examples/webenginewidgets/browser/chasewidget.h +++ b/examples/webenginewidgets/demobrowser/chasewidget.h diff --git a/examples/webenginewidgets/browser/cookiejar.cpp b/examples/webenginewidgets/demobrowser/cookiejar.cpp index d9a7465ca..d9a7465ca 100644 --- a/examples/webenginewidgets/browser/cookiejar.cpp +++ b/examples/webenginewidgets/demobrowser/cookiejar.cpp diff --git a/examples/webenginewidgets/browser/cookiejar.h b/examples/webenginewidgets/demobrowser/cookiejar.h index 374156e89..374156e89 100644 --- a/examples/webenginewidgets/browser/cookiejar.h +++ b/examples/webenginewidgets/demobrowser/cookiejar.h diff --git a/examples/webenginewidgets/browser/cookies.ui b/examples/webenginewidgets/demobrowser/cookies.ui index c4bccc548..c4bccc548 100644 --- a/examples/webenginewidgets/browser/cookies.ui +++ b/examples/webenginewidgets/demobrowser/cookies.ui diff --git a/examples/webenginewidgets/browser/cookiesexceptions.ui b/examples/webenginewidgets/demobrowser/cookiesexceptions.ui index 3d9ef6241..3d9ef6241 100644 --- a/examples/webenginewidgets/browser/cookiesexceptions.ui +++ b/examples/webenginewidgets/demobrowser/cookiesexceptions.ui diff --git a/examples/webenginewidgets/browser/data/addtab.png b/examples/webenginewidgets/demobrowser/data/addtab.png Binary files differindex 20928fb40..20928fb40 100644 --- a/examples/webenginewidgets/browser/data/addtab.png +++ b/examples/webenginewidgets/demobrowser/data/addtab.png diff --git a/examples/webenginewidgets/browser/data/closetab.png b/examples/webenginewidgets/demobrowser/data/closetab.png Binary files differindex ab9d669ee..ab9d669ee 100644 --- a/examples/webenginewidgets/browser/data/closetab.png +++ b/examples/webenginewidgets/demobrowser/data/closetab.png diff --git a/examples/webenginewidgets/browser/data/data.qrc b/examples/webenginewidgets/demobrowser/data/data.qrc index c7d0294c1..5cb8a97c0 100644 --- a/examples/webenginewidgets/browser/data/data.qrc +++ b/examples/webenginewidgets/demobrowser/data/data.qrc @@ -3,7 +3,7 @@ <file>addtab.png</file> <file>closetab.png</file> <file>history.png</file> - <file>browser.svg</file> + <file>demobrowser.svg</file> <file>defaultbookmarks.xbel</file> <file>loading.gif</file> <file>defaulticon.png</file> diff --git a/examples/webenginewidgets/browser/data/defaultbookmarks.xbel b/examples/webenginewidgets/demobrowser/data/defaultbookmarks.xbel index fef7f5514..fef7f5514 100644 --- a/examples/webenginewidgets/browser/data/defaultbookmarks.xbel +++ b/examples/webenginewidgets/demobrowser/data/defaultbookmarks.xbel diff --git a/examples/webenginewidgets/browser/data/defaulticon.png b/examples/webenginewidgets/demobrowser/data/defaulticon.png Binary files differindex 01a0920c9..01a0920c9 100644 --- a/examples/webenginewidgets/browser/data/defaulticon.png +++ b/examples/webenginewidgets/demobrowser/data/defaulticon.png diff --git a/examples/webenginewidgets/browser/data/browser.svg b/examples/webenginewidgets/demobrowser/data/demobrowser.svg index 2127a0a6e..f61a54c67 100644 --- a/examples/webenginewidgets/browser/data/browser.svg +++ b/examples/webenginewidgets/demobrowser/data/demobrowser.svg @@ -14,11 +14,10 @@ id="svg2160" sodipodi:version="0.32" inkscape:version="0.46" - inkscape:export-filename="c:\icons\qtbrowser48.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" sodipodi:docbase="C:\icons" - sodipodi:docname="browser.svg" + sodipodi:docname="demobrowser.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape"> <defs id="defs2162"><linearGradient diff --git a/examples/webenginewidgets/browser/data/history.png b/examples/webenginewidgets/demobrowser/data/history.png Binary files differindex 552a1cbd8..552a1cbd8 100644 --- a/examples/webenginewidgets/browser/data/history.png +++ b/examples/webenginewidgets/demobrowser/data/history.png diff --git a/examples/webenginewidgets/browser/data/loading.gif b/examples/webenginewidgets/demobrowser/data/loading.gif Binary files differindex c1545eb0e..c1545eb0e 100644 --- a/examples/webenginewidgets/browser/data/loading.gif +++ b/examples/webenginewidgets/demobrowser/data/loading.gif diff --git a/examples/webenginewidgets/browser/browser.icns b/examples/webenginewidgets/demobrowser/demobrowser.icns Binary files differindex f591ae48a..f591ae48a 100644 --- a/examples/webenginewidgets/browser/browser.icns +++ b/examples/webenginewidgets/demobrowser/demobrowser.icns diff --git a/examples/webenginewidgets/browser/browser.ico b/examples/webenginewidgets/demobrowser/demobrowser.ico Binary files differindex 7f9be934d..7f9be934d 100644 --- a/examples/webenginewidgets/browser/browser.ico +++ b/examples/webenginewidgets/demobrowser/demobrowser.ico diff --git a/examples/webenginewidgets/browser/browser.pro b/examples/webenginewidgets/demobrowser/demobrowser.pro index f54186856..14347de71 100644 --- a/examples/webenginewidgets/browser/browser.pro +++ b/examples/webenginewidgets/demobrowser/demobrowser.pro @@ -1,6 +1,7 @@ TEMPLATE = app -TARGET = browser +TARGET = demobrowser QT += webenginewidgets network widgets printsupport +CONFIG += c++11 qtHaveModule(uitools):!embedded: QT += uitools else: DEFINES += QT_NO_UITOOLS @@ -62,28 +63,23 @@ SOURCES += \ RESOURCES += data/data.qrc htmls/htmls.qrc -contains(DEFINES, QWEBENGINEPAGE_SETNETWORKACCESSMANAGER) { - HEADERS += cookiejar.h networkaccessmanager.h - SOURCES += cookiejar.cpp networkaccessmanager.cpp -} - build_all:!build_pass { CONFIG -= build_all CONFIG += release } win32 { - RC_FILE = browser.rc + RC_FILE = demobrowser.rc } mac { - ICON = browser.icns + ICON = demobrowser.icns QMAKE_INFO_PLIST = Info_mac.plist - TARGET = Browser + TARGET = Demobrowser } -EXAMPLE_FILES = Info_mac.plist browser.icns browser.ico browser.rc +EXAMPLE_FILES = Info_mac.plist demobrowser.icns demobrowser.ico demobrowser.rc # install -target.path = $$[QT_INSTALL_EXAMPLES]/webenginewidgets/browser +target.path = $$[QT_INSTALL_EXAMPLES]/webenginewidgets/demobrowser INSTALLS += target diff --git a/examples/webenginewidgets/demobrowser/demobrowser.rc b/examples/webenginewidgets/demobrowser/demobrowser.rc new file mode 100644 index 000000000..70cd8bb1c --- /dev/null +++ b/examples/webenginewidgets/demobrowser/demobrowser.rc @@ -0,0 +1 @@ +IDI_ICON1 ICON DISCARDABLE "demobrowser.ico" diff --git a/examples/webenginewidgets/browser/doc/images/browser-demo.png b/examples/webenginewidgets/demobrowser/doc/images/browser-demo.png Binary files differindex 09d065095..09d065095 100644 --- a/examples/webenginewidgets/browser/doc/images/browser-demo.png +++ b/examples/webenginewidgets/demobrowser/doc/images/browser-demo.png diff --git a/examples/webenginewidgets/browser/doc/src/browser.qdoc b/examples/webenginewidgets/demobrowser/doc/src/demobrowser.qdoc index 99581d8a9..ba61dd79d 100644 --- a/examples/webenginewidgets/browser/doc/src/browser.qdoc +++ b/examples/webenginewidgets/demobrowser/doc/src/demobrowser.qdoc @@ -26,13 +26,13 @@ ****************************************************************************/ /*! - \example browser - \title WebEngine Tab Browser Example + \example webenginewidgets/demobrowser + \title WebEngine Demo Browser Example \ingroup webengine-widgetexamples - \brief The QtWebKit browser example ported to use QtWebEngine + \brief A demo browser based on Qt WebEngine Widgets - The Tab Browser example shows the \l{Qt WebEngine Widgets} module in action, - providing a little Web browser application with support for tabs. + \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 diff --git a/examples/webenginewidgets/browser/downloaditem.ui b/examples/webenginewidgets/demobrowser/downloaditem.ui index b7f7deb72..b7f7deb72 100644 --- a/examples/webenginewidgets/browser/downloaditem.ui +++ b/examples/webenginewidgets/demobrowser/downloaditem.ui diff --git a/examples/webenginewidgets/browser/downloadmanager.cpp b/examples/webenginewidgets/demobrowser/downloadmanager.cpp index 90b0cec9d..eab28942e 100644 --- a/examples/webenginewidgets/browser/downloadmanager.cpp +++ b/examples/webenginewidgets/demobrowser/downloadmanager.cpp @@ -43,7 +43,6 @@ #include "autosaver.h" #include "browserapplication.h" -#include "networkaccessmanager.h" #include <math.h> diff --git a/examples/webenginewidgets/browser/downloadmanager.h b/examples/webenginewidgets/demobrowser/downloadmanager.h index 877682d77..877682d77 100644 --- a/examples/webenginewidgets/browser/downloadmanager.h +++ b/examples/webenginewidgets/demobrowser/downloadmanager.h diff --git a/examples/webenginewidgets/browser/downloads.ui b/examples/webenginewidgets/demobrowser/downloads.ui index a2e256935..a2e256935 100644 --- a/examples/webenginewidgets/browser/downloads.ui +++ b/examples/webenginewidgets/demobrowser/downloads.ui diff --git a/examples/webenginewidgets/browser/edittableview.cpp b/examples/webenginewidgets/demobrowser/edittableview.cpp index 866ee6f1f..866ee6f1f 100644 --- a/examples/webenginewidgets/browser/edittableview.cpp +++ b/examples/webenginewidgets/demobrowser/edittableview.cpp diff --git a/examples/webenginewidgets/browser/edittableview.h b/examples/webenginewidgets/demobrowser/edittableview.h index 315427eac..315427eac 100644 --- a/examples/webenginewidgets/browser/edittableview.h +++ b/examples/webenginewidgets/demobrowser/edittableview.h diff --git a/examples/webenginewidgets/browser/edittreeview.cpp b/examples/webenginewidgets/demobrowser/edittreeview.cpp index d515ea058..d515ea058 100644 --- a/examples/webenginewidgets/browser/edittreeview.cpp +++ b/examples/webenginewidgets/demobrowser/edittreeview.cpp diff --git a/examples/webenginewidgets/browser/edittreeview.h b/examples/webenginewidgets/demobrowser/edittreeview.h index 1cf87d54f..1cf87d54f 100644 --- a/examples/webenginewidgets/browser/edittreeview.h +++ b/examples/webenginewidgets/demobrowser/edittreeview.h diff --git a/examples/webenginewidgets/browser/featurepermissionbar.cpp b/examples/webenginewidgets/demobrowser/featurepermissionbar.cpp index b7275dfc2..b7275dfc2 100644 --- a/examples/webenginewidgets/browser/featurepermissionbar.cpp +++ b/examples/webenginewidgets/demobrowser/featurepermissionbar.cpp diff --git a/examples/webenginewidgets/browser/featurepermissionbar.h b/examples/webenginewidgets/demobrowser/featurepermissionbar.h index 1bfe1b483..1bfe1b483 100644 --- a/examples/webenginewidgets/browser/featurepermissionbar.h +++ b/examples/webenginewidgets/demobrowser/featurepermissionbar.h diff --git a/examples/webenginewidgets/browser/history.cpp b/examples/webenginewidgets/demobrowser/history.cpp index ce104e982..ce104e982 100644 --- a/examples/webenginewidgets/browser/history.cpp +++ b/examples/webenginewidgets/demobrowser/history.cpp diff --git a/examples/webenginewidgets/browser/history.h b/examples/webenginewidgets/demobrowser/history.h index bcb9c9b28..bcb9c9b28 100644 --- a/examples/webenginewidgets/browser/history.h +++ b/examples/webenginewidgets/demobrowser/history.h diff --git a/examples/webenginewidgets/browser/history.ui b/examples/webenginewidgets/demobrowser/history.ui index 0944940e7..0944940e7 100644 --- a/examples/webenginewidgets/browser/history.ui +++ b/examples/webenginewidgets/demobrowser/history.ui diff --git a/examples/webenginewidgets/browser/htmls/htmls.qrc b/examples/webenginewidgets/demobrowser/htmls/htmls.qrc index 03b256ccb..03b256ccb 100644 --- a/examples/webenginewidgets/browser/htmls/htmls.qrc +++ b/examples/webenginewidgets/demobrowser/htmls/htmls.qrc diff --git a/examples/webenginewidgets/browser/htmls/notfound.html b/examples/webenginewidgets/demobrowser/htmls/notfound.html index e89845aa6..e89845aa6 100644 --- a/examples/webenginewidgets/browser/htmls/notfound.html +++ b/examples/webenginewidgets/demobrowser/htmls/notfound.html diff --git a/examples/webenginewidgets/browser/main.cpp b/examples/webenginewidgets/demobrowser/main.cpp index 86859f741..86859f741 100644 --- a/examples/webenginewidgets/browser/main.cpp +++ b/examples/webenginewidgets/demobrowser/main.cpp diff --git a/examples/webenginewidgets/browser/modelmenu.cpp b/examples/webenginewidgets/demobrowser/modelmenu.cpp index ec0eaffab..ec0eaffab 100644 --- a/examples/webenginewidgets/browser/modelmenu.cpp +++ b/examples/webenginewidgets/demobrowser/modelmenu.cpp diff --git a/examples/webenginewidgets/browser/modelmenu.h b/examples/webenginewidgets/demobrowser/modelmenu.h index c0a7d56b8..c0a7d56b8 100644 --- a/examples/webenginewidgets/browser/modelmenu.h +++ b/examples/webenginewidgets/demobrowser/modelmenu.h diff --git a/examples/webenginewidgets/browser/passworddialog.ui b/examples/webenginewidgets/demobrowser/passworddialog.ui index 7c1665867..7c1665867 100644 --- a/examples/webenginewidgets/browser/passworddialog.ui +++ b/examples/webenginewidgets/demobrowser/passworddialog.ui diff --git a/examples/webenginewidgets/browser/proxy.ui b/examples/webenginewidgets/demobrowser/proxy.ui index 62a8be627..62a8be627 100644 --- a/examples/webenginewidgets/browser/proxy.ui +++ b/examples/webenginewidgets/demobrowser/proxy.ui diff --git a/examples/webenginewidgets/browser/searchlineedit.cpp b/examples/webenginewidgets/demobrowser/searchlineedit.cpp index 5152ac1c0..5152ac1c0 100644 --- a/examples/webenginewidgets/browser/searchlineedit.cpp +++ b/examples/webenginewidgets/demobrowser/searchlineedit.cpp diff --git a/examples/webenginewidgets/browser/searchlineedit.h b/examples/webenginewidgets/demobrowser/searchlineedit.h index b8b8337fd..b8b8337fd 100644 --- a/examples/webenginewidgets/browser/searchlineedit.h +++ b/examples/webenginewidgets/demobrowser/searchlineedit.h diff --git a/examples/webenginewidgets/browser/settings.cpp b/examples/webenginewidgets/demobrowser/settings.cpp index 7ed5f707b..35e5e26c9 100644 --- a/examples/webenginewidgets/browser/settings.cpp +++ b/examples/webenginewidgets/demobrowser/settings.cpp @@ -47,9 +47,9 @@ #include "cookiejar.h" #endif #include "history.h" -#include "networkaccessmanager.h" #include "webview.h" +#include <QtCore/QLocale> #include <QtCore/QSettings> #include <QtWidgets/QtWidgets> #include <QtWebEngineWidgets/QtWebEngineWidgets> @@ -66,6 +66,21 @@ SettingsDialog::SettingsDialog(QWidget *parent) 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(); @@ -82,15 +97,14 @@ void SettingsDialog::loadDefaults() downloadsLocation->setText(QStandardPaths::writableLocation(QStandardPaths::DesktopLocation)); enableJavascript->setChecked(defaultSettings->testAttribute(QWebEngineSettings::JavascriptEnabled)); -#if defined(QTWEBENGINE_PLUGINS) enablePlugins->setChecked(defaultSettings->testAttribute(QWebEngineSettings::PluginsEnabled)); -#endif enableScrollAnimator->setChecked(defaultSettings->testAttribute(QWebEngineSettings::ScrollAnimatorEnabled)); persistentDataPath->setText(QWebEngineProfile::defaultProfile()->persistentStoragePath()); sessionCookiesCombo->setCurrentIndex(QWebEngineProfile::defaultProfile()->persistentCookiesPolicy()); httpUserAgent->setText(QWebEngineProfile::defaultProfile()->httpUserAgent()); + httpAcceptLanguage->setText(defaultAcceptLanguage()); } void SettingsDialog::loadFromSettings() @@ -140,6 +154,7 @@ void SettingsDialog::loadFromSettings() 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()); settings.endGroup(); // Privacy @@ -198,6 +213,7 @@ void SettingsDialog::saveToSettings() 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.endGroup(); //Privacy @@ -223,7 +239,6 @@ void SettingsDialog::saveToSettings() BrowserApplication::instance()->loadSettings(); #if defined(QWEBENGINEPAGE_SETNETWORKACCESSMANAGER) - BrowserApplication::networkAccessManager()->loadSettings(); BrowserApplication::cookieJar()->loadSettings(); #endif BrowserApplication::historyManager()->loadSettings(); @@ -271,6 +286,16 @@ void SettingsDialog::chooseFixedFont() } } +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()); diff --git a/examples/webenginewidgets/browser/settings.h b/examples/webenginewidgets/demobrowser/settings.h index 6def66928..3a50dd29f 100644 --- a/examples/webenginewidgets/browser/settings.h +++ b/examples/webenginewidgets/demobrowser/settings.h @@ -65,6 +65,9 @@ private slots: void chooseFont(); void chooseFixedFont(); + void on_httpUserAgent_editingFinished(); + void on_httpAcceptLanguage_editingFinished(); + private: QFont standardFont; QFont fixedFont; diff --git a/examples/webenginewidgets/browser/settings.ui b/examples/webenginewidgets/demobrowser/settings.ui index 11bdee4d3..38a7af344 100644 --- a/examples/webenginewidgets/browser/settings.ui +++ b/examples/webenginewidgets/demobrowser/settings.ui @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>657</width> - <height>322</height> + <height>336</height> </rect> </property> <property name="windowTitle"> @@ -499,19 +499,29 @@ <string>Advanced</string> </attribute> <layout class="QGridLayout" name="gridLayout_2"> - <item row="2" column="1"> - <widget class="QTextEdit" name="userStyleSheet"/> + <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="0" column="0"> - <widget class="QLabel" name="label_15"> + <item row="1" column="0"> + <widget class="QLabel" name="label_16"> <property name="text"> - <string>HTTP User-Agent:</string> + <string>HTTP Accept-&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"> @@ -519,7 +529,10 @@ </property> </widget> </item> - <item row="4" column="1"> + <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> diff --git a/examples/webenginewidgets/browser/squeezelabel.cpp b/examples/webenginewidgets/demobrowser/squeezelabel.cpp index 78198c3f0..78198c3f0 100644 --- a/examples/webenginewidgets/browser/squeezelabel.cpp +++ b/examples/webenginewidgets/demobrowser/squeezelabel.cpp diff --git a/examples/webenginewidgets/browser/squeezelabel.h b/examples/webenginewidgets/demobrowser/squeezelabel.h index 628b7350a..628b7350a 100644 --- a/examples/webenginewidgets/browser/squeezelabel.h +++ b/examples/webenginewidgets/demobrowser/squeezelabel.h diff --git a/examples/webenginewidgets/browser/tabwidget.cpp b/examples/webenginewidgets/demobrowser/tabwidget.cpp index c093b804a..4e2073b11 100644 --- a/examples/webenginewidgets/browser/tabwidget.cpp +++ b/examples/webenginewidgets/demobrowser/tabwidget.cpp @@ -48,10 +48,11 @@ #include "urllineedit.h" #include "webview.h" +#include <QWebEngineDownloadItem> +#include <QWebEngineProfile> +#include <QWebEngineFullScreenRequest> #include <QtCore/QMimeData> #include <QtGui/QClipboard> -#include <QtWebEngineWidgets/QWebEngineDownloadItem> -#include <QtWebEngineWidgets/QWebEngineProfile> #include <QtWidgets/QCompleter> #include <QtWidgets/QListView> #include <QtWidgets/QMenu> @@ -85,6 +86,11 @@ TabBar::TabBar(QWidget *parent) setMovable(true); } +TabWidget::~TabWidget() +{ + delete m_fullScreenView; +} + void TabBar::selectTabAction() { if (QShortcut *shortCut = qobject_cast<QShortcut*>(sender())) { @@ -213,11 +219,12 @@ TabWidget::TabWidget(QWidget *parent) , m_lineEdits(0) , m_tabBar(new TabBar(this)) , m_profile(QWebEngineProfile::defaultProfile()) + , m_fullScreenView(0) { setElideMode(Qt::ElideRight); connect(m_tabBar, SIGNAL(newTab()), this, SLOT(newTab())); - connect(m_tabBar, SIGNAL(closeTab(int)), this, SLOT(closeTab(int))); + 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))); @@ -235,7 +242,7 @@ TabWidget::TabWidget(QWidget *parent) 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(closeTab())); + connect(m_closeTabAction, SIGNAL(triggered()), this, SLOT(requestCloseTab())); m_nextTabAction = new QAction(tr("Show Next Tab"), this); QList<QKeySequence> shortcuts; @@ -315,6 +322,8 @@ void TabWidget::currentChanged(int index) this, SIGNAL(loadProgress(int))); disconnect(oldWebView->page()->profile(), SIGNAL(downloadRequested(QWebEngineDownloadItem*)), this, SLOT(downloadRequested(QWebEngineDownloadItem*))); + disconnect(oldWebView->page(), SIGNAL(fullScreenRequested(const QWebEngineFullScreenRequest&)), + this, SLOT(fullScreenRequested(const QWebEngineFullScreenRequest&))); } #if defined(QWEBENGINEVIEW_STATUSBARMESSAGE) @@ -327,6 +336,8 @@ void TabWidget::currentChanged(int index) this, SIGNAL(loadProgress(int))); connect(webView->page()->profile(), SIGNAL(downloadRequested(QWebEngineDownloadItem*)), this, SLOT(downloadRequested(QWebEngineDownloadItem*))); + connect(webView->page(), SIGNAL(fullScreenRequested(const QWebEngineFullScreenRequest&)), + this, SLOT(fullScreenRequested(const QWebEngineFullScreenRequest&))); for (int i = 0; i < m_actions.count(); ++i) { WebActionMapper *mapper = m_actions[i]; @@ -342,6 +353,28 @@ void TabWidget::currentChanged(int index) webView->setFocus(); } +void TabWidget::fullScreenRequested(const QWebEngineFullScreenRequest &request) +{ + if (request.toggleOn()) { + if (!m_fullScreenView) + m_fullScreenView = new QWebEngineView(); + WebPage *webPage = qobject_cast<WebPage*>(sender()); + webPage->setView(m_fullScreenView); + request.accept(); + m_fullScreenView->showFullScreen(); + m_fullScreenView->raise(); + } else { + if (!m_fullScreenView) + return; + WebPage *webPage = qobject_cast<WebPage*>(sender()); + WebView *oldWebView = this->webView(m_lineEdits->currentIndex()); + webPage->setView(oldWebView); + request.accept(); + raise(); + m_fullScreenView->hide(); + } +} + QAction *TabWidget::newTabAction() const { return m_newTabAction; @@ -522,12 +555,8 @@ void TabWidget::windowCloseRequested() WebPage *webPage = qobject_cast<WebPage*>(sender()); WebView *webView = qobject_cast<WebView*>(webPage->view()); int index = webViewIndex(webView); - if (index >= 0) { - if (count() == 1) - webView->webPage()->mainWindow()->close(); - else - closeTab(index); - } + if (index >= 0) + closeTab(index); } void TabWidget::closeOtherTabs(int index) @@ -552,30 +581,25 @@ void TabWidget::cloneTab(int index) } // When index is -1 index chooses the current tab -void TabWidget::closeTab(int index) +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)) { -#if defined(QWEBENGINEPAGE_ISMODIFIED) - if (tab->isModified()) { - QMessageBox closeConfirmation(tab); - closeConfirmation.setWindowFlags(Qt::Sheet); - closeConfirmation.setWindowTitle(tr("Do you really want to close this page?")); - closeConfirmation.setInformativeText(tr("You have modified this page and when closing it you would lose the modification.\n" - "Do you really want to close this page?\n")); - closeConfirmation.setIcon(QMessageBox::Question); - closeConfirmation.addButton(QMessageBox::Yes); - closeConfirmation.addButton(QMessageBox::No); - closeConfirmation.setEscapeButton(QMessageBox::No); - if (closeConfirmation.exec() == QMessageBox::No) - return; - } -#endif hasFocus = tab->hasFocus(); if (m_profile == QWebEngineProfile::defaultProfile()) { diff --git a/examples/webenginewidgets/browser/tabwidget.h b/examples/webenginewidgets/demobrowser/tabwidget.h index 5d7f1e2c5..3a1fe7171 100644 --- a/examples/webenginewidgets/browser/tabwidget.h +++ b/examples/webenginewidgets/demobrowser/tabwidget.h @@ -49,6 +49,7 @@ QT_BEGIN_NAMESPACE class QWebEngineDownloadItem; class QWebEngineProfile; +class QWebEngineView; QT_END_NAMESPACE /* @@ -164,6 +165,7 @@ signals: public: TabWidget(QWidget *parent = 0); + ~TabWidget(); void clear(); void addWebAction(QAction *action, QWebEnginePage::WebAction webAction); @@ -194,7 +196,8 @@ public slots: void loadUrlInCurrentTab(const QUrl &url); WebView *newTab(bool makeCurrent = true); void cloneTab(int index = -1); - void closeTab(int index = -1); + void requestCloseTab(int index = -1); + void closeTab(int index); void closeOtherTabs(int index); void reloadTab(int index = -1); void reloadAllTabs(); @@ -213,6 +216,7 @@ private slots: void lineEditReturnPressed(); void windowCloseRequested(); void moveTab(int fromIndex, int toIndex); + void fullScreenRequested(const QWebEngineFullScreenRequest& request); private: QAction *m_recentlyClosedTabsAction; @@ -230,6 +234,7 @@ private: QStackedWidget *m_lineEdits; TabBar *m_tabBar; QWebEngineProfile *m_profile; + QWebEngineView *m_fullScreenView; }; #endif // TABWIDGET_H diff --git a/examples/webenginewidgets/browser/toolbarsearch.cpp b/examples/webenginewidgets/demobrowser/toolbarsearch.cpp index 42cdaec18..42cdaec18 100644 --- a/examples/webenginewidgets/browser/toolbarsearch.cpp +++ b/examples/webenginewidgets/demobrowser/toolbarsearch.cpp diff --git a/examples/webenginewidgets/browser/toolbarsearch.h b/examples/webenginewidgets/demobrowser/toolbarsearch.h index cbe00366c..cbe00366c 100644 --- a/examples/webenginewidgets/browser/toolbarsearch.h +++ b/examples/webenginewidgets/demobrowser/toolbarsearch.h diff --git a/examples/webenginewidgets/browser/urllineedit.cpp b/examples/webenginewidgets/demobrowser/urllineedit.cpp index 685277d9c..685277d9c 100644 --- a/examples/webenginewidgets/browser/urllineedit.cpp +++ b/examples/webenginewidgets/demobrowser/urllineedit.cpp diff --git a/examples/webenginewidgets/browser/urllineedit.h b/examples/webenginewidgets/demobrowser/urllineedit.h index 775aa7d18..775aa7d18 100644 --- a/examples/webenginewidgets/browser/urllineedit.h +++ b/examples/webenginewidgets/demobrowser/urllineedit.h diff --git a/examples/webenginewidgets/browser/webview.cpp b/examples/webenginewidgets/demobrowser/webview.cpp index 99986642e..c12f3db36 100644 --- a/examples/webenginewidgets/browser/webview.cpp +++ b/examples/webenginewidgets/demobrowser/webview.cpp @@ -44,7 +44,6 @@ #include "cookiejar.h" #include "downloadmanager.h" #include "featurepermissionbar.h" -#include "networkaccessmanager.h" #include "ui_passworddialog.h" #include "ui_proxy.h" #include "tabwidget.h" @@ -67,12 +66,12 @@ #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) - , m_openInNewTab(false) { #if defined(QWEBENGINEPAGE_SETNETWORKACCESSMANAGER) setNetworkAccessManager(BrowserApplication::networkAccessManager()); @@ -175,8 +174,7 @@ private: QWebEnginePage *WebPage::createWindow(QWebEnginePage::WebWindowType type) { - if (m_openInNewTab || type == QWebEnginePage::WebBrowserTab) { - m_openInNewTab = false; + if (type == QWebEnginePage::WebBrowserTab) { return mainWindow()->tabWidget()->newTab()->page(); } else if (type == QWebEnginePage::WebBrowserWindow) { BrowserApplication::instance()->newMainWindow(); @@ -274,8 +272,14 @@ void WebPage::authenticationRequired(const QUrl &requestUrl, QAuthenticator *aut passwordDialog.introLabel->setWordWrap(true); if (dialog.exec() == QDialog::Accepted) { + QByteArray key = BrowserApplication::authenticationKey(requestUrl, auth->realm()); auth->setUser(passwordDialog.userNameLineEdit->text()); auth->setPassword(passwordDialog.passwordLineEdit->text()); + auth->setOption("key", key); + BrowserApplication::instance()->setLastAuthenticator(auth); + } else { + // Set authenticator null if dialog is cancelled + *auth = QAuthenticator(); } } @@ -299,8 +303,32 @@ void WebPage::proxyAuthenticationRequired(const QUrl &requestUrl, QAuthenticator proxyDialog.introLabel->setWordWrap(true); if (dialog.exec() == QDialog::Accepted) { - auth->setUser(proxyDialog.userNameLineEdit->text()); + QString user = proxyDialog.userNameLineEdit->text(); + QByteArray key = BrowserApplication::proxyAuthenticationKey(user, proxyHost, auth->realm()); + auth->setUser(user); auth->setPassword(proxyDialog.passwordLineEdit->text()); + auth->setOption("key", key); + BrowserApplication::instance()->setLastProxyAuthenticator(auth); + } else { + // Set authenticator null if dialog is cancelled + *auth = QAuthenticator(); + } +} + +void WebPage::javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString& message, int /*lineNumber*/, const QString& sourceID) +{ + QUrl url; + url.setUrl(sourceID); + switch (level) { + case InfoMessageLevel: + // Ignore these, they can still be found in the inspector. + break; + case WarningMessageLevel: + qInfo() << "JavaScript WARNING:" << url.host() << message; + break; + case ErrorMessageLevel: + qInfo() << "JavaScript ERROR:" << url.host() << message; + break; } } @@ -314,6 +342,27 @@ WebView::WebView(QWidget* parent) 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) @@ -338,24 +387,17 @@ void WebView::setPage(WebPage *_page) void WebView::contextMenuEvent(QContextMenuEvent *event) { -#if defined(QWEBENGINEPAGE_HITTESTCONTENT) - QWebEngineHitTestResult r = page()->hitTestContent(event->pos()); - if (!r.linkUrl().isEmpty()) { - QMenu menu(this); - menu.addAction(pageAction(QWebEnginePage::OpenLinkInNewWindow)); - menu.addAction(tr("Open in New Tab"), this, SLOT(openLinkInNewTab())); - menu.addSeparator(); - menu.addAction(pageAction(QWebEnginePage::DownloadLinkToDisk)); - // Add link to bookmarks... - menu.addSeparator(); - menu.addAction(pageAction(QWebEnginePage::CopyLinkToClipboard)); - if (page()->settings()->testAttribute(QWebEngineSettings::DeveloperExtrasEnabled)) - menu.addAction(pageAction(QWebEnginePage::InspectElement)); - menu.exec(mapToGlobal(event->pos())); - return; + QMenu *menu = page()->createStandardContextMenu(); + const QList<QAction*> actions = menu->actions(); + QList<QAction*>::const_iterator it = qFind(actions.cbegin(), actions.cend(), page()->action(QWebEnginePage::OpenLinkInThisWindow)); + if (it != actions.cend()) { + (*it)->setText(tr("Open Link in This Window")); + ++it; + menu->insertAction(*it, page()->action(QWebEnginePage::OpenLinkInNewWindow)); + menu->insertAction(*it, page()->action(QWebEnginePage::OpenLinkInNewTab)); } -#endif - QWebEngineView::contextMenuEvent(event); + + menu->popup(event->globalPos()); } void WebView::wheelEvent(QWheelEvent *event) @@ -374,10 +416,7 @@ void WebView::wheelEvent(QWheelEvent *event) void WebView::openLinkInNewTab() { -#if defined(QWEBENGINEPAGE_WEBACTION_OPENLINKINNEWWINDOW) - m_page->m_openInNewTab = true; - pageAction(QWebEnginePage::OpenLinkInNewWindow)->trigger(); -#endif + pageAction(QWebEnginePage::OpenLinkInNewTab)->trigger(); } void WebView::onFeaturePermissionRequested(const QUrl &securityOrigin, QWebEnginePage::Feature feature) diff --git a/examples/webenginewidgets/browser/webview.h b/examples/webenginewidgets/demobrowser/webview.h index a147d780a..cb78fdd8a 100644 --- a/examples/webenginewidgets/browser/webview.h +++ b/examples/webenginewidgets/demobrowser/webview.h @@ -71,6 +71,7 @@ protected: QObject *createPlugin(const QString &classId, const QUrl &url, const QStringList ¶mNames, const QStringList ¶mValues); #endif virtual bool certificateError(const QWebEngineCertificateError &error) Q_DECL_OVERRIDE; + virtual void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString& message, int lineNumber, const QString& sourceID) Q_DECL_OVERRIDE; private slots: #if defined(QWEBENGINEPAGE_UNSUPPORTEDCONTENT) @@ -85,7 +86,6 @@ private: // set the webview mousepressedevent Qt::KeyboardModifiers m_keyboardModifiers; Qt::MouseButtons m_pressedButtons; - bool m_openInNewTab; QUrl m_loadingUrl; }; diff --git a/examples/webenginewidgets/browser/xbel.cpp b/examples/webenginewidgets/demobrowser/xbel.cpp index 6b4f53d2e..6b4f53d2e 100644 --- a/examples/webenginewidgets/browser/xbel.cpp +++ b/examples/webenginewidgets/demobrowser/xbel.cpp diff --git a/examples/webenginewidgets/browser/xbel.h b/examples/webenginewidgets/demobrowser/xbel.h index d95549dd8..d95549dd8 100644 --- a/examples/webenginewidgets/browser/xbel.h +++ b/examples/webenginewidgets/demobrowser/xbel.h diff --git a/examples/webenginewidgets/fancybrowser/doc/src/fancybrowser.qdoc b/examples/webenginewidgets/fancybrowser/doc/src/fancybrowser.qdoc index e6c6ada34..b798e4832 100644 --- a/examples/webenginewidgets/fancybrowser/doc/src/fancybrowser.qdoc +++ b/examples/webenginewidgets/fancybrowser/doc/src/fancybrowser.qdoc @@ -26,7 +26,7 @@ ****************************************************************************/ /*! - \example fancybrowser + \example webenginewidgets/fancybrowser \title WebEngine Fancy Browser Example \ingroup webengine-widgetexamples \brief Demonstrates how to use browse web and manipulate content @@ -48,7 +48,7 @@ The \c MainWindow class inherits QMainWindow. It implements a number of slots to perform actions on both the application and on the web content. - \snippet fancybrowser/mainwindow.h 1 + \snippet webenginewidgets/fancybrowser/mainwindow.h 1 We also declare a QString that contains the jQuery, a QWebView that displays the web content, and a QLineEdit that acts as the @@ -58,7 +58,7 @@ We start by implementing the constructor. - \snippet fancybrowser/mainwindow.cpp 1 + \snippet webenginewidgets/fancybrowser/mainwindow.cpp 1 The first part of the constructor sets the value of \c progress to 0. This value will be used later in the code to visualize the @@ -68,7 +68,7 @@ content. The jQuery library is a JavaScript library that provides different functions for manipulating HTML. - \snippet fancybrowser/mainwindow.cpp 2 + \snippet webenginewidgets/fancybrowser/mainwindow.cpp 2 The second part of the constructor creates a QWebView and connects slots to the views signals. Furthermore, we create a QLineEdit as @@ -77,13 +77,13 @@ QLineEdit to a QToolbar together with a set of navigation actions from QWebView::pageAction. - \snippet fancybrowser/mainwindow.cpp 3 + \snippet webenginewidgets/fancybrowser/mainwindow.cpp 3 The third and last part of the constructor implements two QMenus and assigns a set of actions to them. The last line sets the QWebView as the central widget in the QMainWindow. - \snippet fancybrowser/mainwindow.cpp 4 + \snippet webenginewidgets/fancybrowser/mainwindow.cpp 4 When the page is loaded, \c adjustLocation() updates the address bar; \c adjustLocation() is triggered by the \c loadFinished() @@ -92,13 +92,13 @@ the new web page has finished loading, \c adjustLocation() will be run once more to update the address bar. - \snippet fancybrowser/mainwindow.cpp 5 + \snippet webenginewidgets/fancybrowser/mainwindow.cpp 5 \c adjustTitle() sets the window title and displays the loading progress. This slot is triggered by the \c titleChanged() signal in QWebView. - \snippet fancybrowser/mainwindow.cpp 6 + \snippet webenginewidgets/fancybrowser/mainwindow.cpp 6 When a web page has loaded, \c finishLoading() is triggered by the \c loadFinished() signal in QWebView. \c finishLoading() then updates the @@ -113,7 +113,7 @@ that the images of the newly loaded page respect the state of the toggle action. - \snippet fancybrowser/mainwindow.cpp 7 + \snippet webenginewidgets/fancybrowser/mainwindow.cpp 7 The first jQuery-based function, \c highlightAllLinks(), is designed to highlight all links in the current webpage. The JavaScript code looks @@ -121,14 +121,14 @@ For each such element, the background color is set to be yellow by using CSS. - \snippet fancybrowser/mainwindow.cpp 8 + \snippet webenginewidgets/fancybrowser/mainwindow.cpp 8 The \c rotateImages() function rotates the images on the current web page. This JavaScript code relies on CSS transforms and looks up all \e {img} elements and rotates the images 180 degrees and then back again. - \snippet fancybrowser/mainwindow.cpp 9 + \snippet webenginewidgets/fancybrowser/mainwindow.cpp 9 The remaining four methods remove different elements from the current web page. \c removeGifImages() removes all GIF images on the page by looking up |