summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-05-20 06:08:18 +0200
committerLiang Qi <liang.qi@qt.io>2016-05-20 06:08:18 +0200
commit6c344184df2dd6573681a0d2022daa55b6a36f38 (patch)
tree91493089f958b95138bdbd3f838188450e4349bb
parentbfc5eb719d30decaf5c65e2747d49a6eec28794d (diff)
parentbc317d32a65eb08da7df10bec6417829533cfc3a (diff)
Merge remote-tracking branch 'origin/5.6' into 5.7
Conflicts: src/3rdparty src/core/browser_context_adapter.cpp src/core/web_contents_adapter.cpp tests/auto/widgets/qwebenginepage/BLACKLIST Change-Id: I45ee0a33f6316f585555d58fede8072fe514aecf
-rw-r--r--dist/changes-5.6.165
-rw-r--r--examples/webenginewidgets/cookiebrowser/cookiebrowser.pro3
-rw-r--r--examples/webenginewidgets/demobrowser/demobrowser.pro4
-rw-r--r--examples/webenginewidgets/simplebrowser/main.cpp18
-rw-r--r--src/core/api/qwebenginecookiestore.h2
-rw-r--r--src/core/api/qwebengineurlrequestinterceptor.h2
-rw-r--r--src/core/api/qwebengineurlschemehandler.h2
-rw-r--r--src/core/browser_context_adapter.cpp19
-rw-r--r--src/core/browser_context_adapter.h1
-rw-r--r--src/core/clipboard_qt.cpp4
-rw-r--r--src/core/renderer/content_renderer_client_qt.cpp2
-rw-r--r--src/core/web_contents_adapter.cpp6
-rw-r--r--src/webengine/api/qquickwebengineprofile.h2
-rw-r--r--src/webengine/doc/src/webengineview.qdoc7
-rw-r--r--src/webenginewidgets/api/qwebenginedownloaditem.h2
-rw-r--r--src/webenginewidgets/api/qwebenginepage.h8
-rw-r--r--src/webenginewidgets/api/qwebengineprofile.h6
-rw-r--r--src/webenginewidgets/api/qwebenginesettings.h2
-rw-r--r--src/webenginewidgets/api/qwebengineview.h6
-rw-r--r--src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc3
-rw-r--r--src/webenginewidgets/doc/src/qwebengineview_lgpl.qdoc6
-rw-r--r--tests/auto/widgets/qwebenginepage/BLACKLIST3
-rw-r--r--tests/auto/widgets/qwebenginepage/resources/pasteimage.html30
-rw-r--r--tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp31
-rw-r--r--tests/auto/widgets/qwebenginepage/tst_qwebenginepage.qrc1
25 files changed, 201 insertions, 34 deletions
diff --git a/dist/changes-5.6.1 b/dist/changes-5.6.1
new file mode 100644
index 000000000..5a568bda9
--- /dev/null
+++ b/dist/changes-5.6.1
@@ -0,0 +1,65 @@
+Qt 5.6.1 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 5.6.0.
+
+Qt 5.6 introduces many new features and improvements as well as bugfixes
+over the 5.5.x series. For more details, refer to the online documentation
+included in this distribution. The documentation is also available online:
+
+ http://doc.qt.io/qt-5/index.html
+
+The Qt version 5.6 series is binary compatible with the 5.5.x series.
+Applications compiled for 5.5 will continue to run with 5.6.
+
+Some of the changes listed in this file include issue tracking numbers
+corresponding to tasks in the Qt Bug Tracker:
+
+ https://bugreports.qt.io/
+
+Each of these identifiers can be entered in the bug tracker to obtain more
+information about a particular change.
+
+****************************************************************************
+* General *
+****************************************************************************
+
+ - Chromium Snapshot:
+ * Security fixes from Chromium up to version 50.0.2661.94
+ * [QTBUG-52602] Fixed devtools so it works with newer Chrome releases.
+ * [QTBUG-52085, QTBUG-53108] qrc urls can now load local files.
+
+ - QtWebEngineCore:
+ * [QTBUG-52124] Fixed crashes due to multithreaded use of qputenv.
+ * [QTBUG-52216] Fixed access of labels of MediaStream tracks.
+ * [QTBUG-52715] Fixed copying images to clipboard.
+ * [QTBUG-51789] Fixed crashes when instantiating QCoreApplication.
+ * [QTBUG-52121] Ensured cookies are flushed to disk on exit.
+ * Fixed numerous race-conditions when changing profile settings and using
+ custom URL scheme handlers.
+
+ - WebEnginePage:
+ * [QTBUG-48995] Stopped triggering extra urlChanged signals.
+ * [QTBUG-51319] Accepted certificate errors are now remembered correctly.
+ * [QTBUG-51851, QTBUG-51969] Fixed zoom behavior.
+ * [QTBUG-53033] Reset the selected text of a page when setHtml is called.
+ * Fixed memory leak in standardContextMenu()
+
+
+****************************************************************************
+* Platform Specific Changes *
+****************************************************************************
+
+ - Linux:
+ * NSS is now only used for certificate handling. BoringSSL is used
+ for SSL encryption like on OS X and Windows.
+ * [QTBUG-48298] Fixed compilation against old Linux kernel headers.
+
+ - Windows:
+ * [QTBUG-51920] Fixed building on Japanese Windows.
+ * [QTBUG-50252] Fixed doubled characters when using IME.
+ * [QTBUG-51971] Fixed CommandLine initialization.
+ * [QTBUG-51847] Fixed compilation issue with moc.
+ * [QTBUG-46720] Added support for linking to QtWebEngine from a plugin.
+
+ - OS X:
+ * [QTBUG-51939] Fixed QtWebEngineProcess not being found after
+ macdeployqt is used.
diff --git a/examples/webenginewidgets/cookiebrowser/cookiebrowser.pro b/examples/webenginewidgets/cookiebrowser/cookiebrowser.pro
index 66ea064ef..6b249cf59 100644
--- a/examples/webenginewidgets/cookiebrowser/cookiebrowser.pro
+++ b/examples/webenginewidgets/cookiebrowser/cookiebrowser.pro
@@ -17,3 +17,6 @@ FORMS += \
RESOURCES += \
cookiebrowser.qrc
+
+target.path = $$[QT_INSTALL_EXAMPLES]/webenginewidgets/cookiebrowser
+INSTALLS += target
diff --git a/examples/webenginewidgets/demobrowser/demobrowser.pro b/examples/webenginewidgets/demobrowser/demobrowser.pro
index 87f362f90..aef7b9eac 100644
--- a/examples/webenginewidgets/demobrowser/demobrowser.pro
+++ b/examples/webenginewidgets/demobrowser/demobrowser.pro
@@ -86,7 +86,9 @@ mac {
TARGET = Demobrowser
}
-EXAMPLE_FILES = Info_mac.plist demobrowser.icns demobrowser.ico demobrowser.rc
+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
diff --git a/examples/webenginewidgets/simplebrowser/main.cpp b/examples/webenginewidgets/simplebrowser/main.cpp
index 761403fb5..750e7ae43 100644
--- a/examples/webenginewidgets/simplebrowser/main.cpp
+++ b/examples/webenginewidgets/simplebrowser/main.cpp
@@ -42,6 +42,18 @@
#include "browserwindow.h"
#include <QApplication>
+QString getCommandLineUrlArgument()
+{
+ 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();
+}
+
int main(int argc, char **argv)
{
QApplication app(argc, argv);
@@ -50,9 +62,9 @@ int main(int argc, char **argv)
BrowserWindow *window = new BrowserWindow();
Browser::instance().addWindow(window);
- QStringList args = QCoreApplication::arguments();
- if (args.count() > 1)
- window->loadPage(args.last());
+ const QString url = getCommandLineUrlArgument();
+ if (!url.isEmpty())
+ window->loadPage(url);
else
window->loadHomePage();
diff --git a/src/core/api/qwebenginecookiestore.h b/src/core/api/qwebenginecookiestore.h
index 3b7b5e89b..5001ba3a1 100644
--- a/src/core/api/qwebenginecookiestore.h
+++ b/src/core/api/qwebenginecookiestore.h
@@ -73,7 +73,7 @@ Q_SIGNALS:
void cookieRemoved(const QNetworkCookie &cookie);
private:
- explicit QWebEngineCookieStore(QObject *parent = 0);
+ explicit QWebEngineCookieStore(QObject *parent = Q_NULLPTR);
friend class QtWebEngineCore::BrowserContextAdapter;
friend class QtWebEngineCore::CookieMonsterDelegateQt;
Q_DISABLE_COPY(QWebEngineCookieStore)
diff --git a/src/core/api/qwebengineurlrequestinterceptor.h b/src/core/api/qwebengineurlrequestinterceptor.h
index fb5861c7d..6e0f93e49 100644
--- a/src/core/api/qwebengineurlrequestinterceptor.h
+++ b/src/core/api/qwebengineurlrequestinterceptor.h
@@ -55,7 +55,7 @@ class QWEBENGINE_EXPORT QWebEngineUrlRequestInterceptor : public QObject
Q_OBJECT
Q_DISABLE_COPY(QWebEngineUrlRequestInterceptor)
public:
- explicit QWebEngineUrlRequestInterceptor(QObject *p = 0)
+ explicit QWebEngineUrlRequestInterceptor(QObject *p = Q_NULLPTR)
: QObject (p)
{
}
diff --git a/src/core/api/qwebengineurlschemehandler.h b/src/core/api/qwebengineurlschemehandler.h
index 5075af6d5..757c461f4 100644
--- a/src/core/api/qwebengineurlschemehandler.h
+++ b/src/core/api/qwebengineurlschemehandler.h
@@ -55,7 +55,7 @@ class QWebEngineUrlRequestJob;
class QWEBENGINE_EXPORT QWebEngineUrlSchemeHandler : public QObject {
Q_OBJECT
public:
- QWebEngineUrlSchemeHandler(QObject *parent = 0);
+ QWebEngineUrlSchemeHandler(QObject *parent = Q_NULLPTR);
~QWebEngineUrlSchemeHandler();
virtual void requestStarted(QWebEngineUrlRequestJob*) = 0;
diff --git a/src/core/browser_context_adapter.cpp b/src/core/browser_context_adapter.cpp
index ba9d671ae..e3b757587 100644
--- a/src/core/browser_context_adapter.cpp
+++ b/src/core/browser_context_adapter.cpp
@@ -104,7 +104,8 @@ void BrowserContextAdapter::setStorageName(const QString &storageName)
m_name = storageName;
if (m_browserContext->url_request_getter_.get())
m_browserContext->url_request_getter_->updateStorageSettings();
- m_visitedLinksManager.reset();
+ if (m_visitedLinksManager)
+ resetVisitedLinksManager();
}
void BrowserContextAdapter::setOffTheRecord(bool offTheRecord)
@@ -114,7 +115,8 @@ void BrowserContextAdapter::setOffTheRecord(bool offTheRecord)
m_offTheRecord = offTheRecord;
if (m_browserContext->url_request_getter_.get())
m_browserContext->url_request_getter_->updateStorageSettings();
- m_visitedLinksManager.reset();
+ if (m_visitedLinksManager)
+ resetVisitedLinksManager();
}
BrowserContextQt *BrowserContextAdapter::browserContext()
@@ -125,7 +127,7 @@ BrowserContextQt *BrowserContextAdapter::browserContext()
WebEngineVisitedLinksManager *BrowserContextAdapter::visitedLinksManager()
{
if (!m_visitedLinksManager)
- m_visitedLinksManager.reset(new WebEngineVisitedLinksManager(this));
+ resetVisitedLinksManager();
return m_visitedLinksManager.data();
}
@@ -198,7 +200,8 @@ void BrowserContextAdapter::setDataPath(const QString &path)
m_dataPath = path;
if (m_browserContext->url_request_getter_.get())
m_browserContext->url_request_getter_->updateStorageSettings();
- m_visitedLinksManager.reset();
+ if (m_visitedLinksManager)
+ resetVisitedLinksManager();
}
QString BrowserContextAdapter::cachePath() const
@@ -339,7 +342,8 @@ void BrowserContextAdapter::setVisitedLinksPolicy(BrowserContextAdapter::Visited
if (m_visitedLinksPolicy == visitedLinksPolicy)
return;
m_visitedLinksPolicy = visitedLinksPolicy;
- m_visitedLinksManager.reset();
+ if (m_visitedLinksManager)
+ resetVisitedLinksManager();
}
int BrowserContextAdapter::httpCacheMaxSize() const
@@ -500,4 +504,9 @@ bool BrowserContextAdapter::isSpellCheckEnabled() const
#endif
}
+void BrowserContextAdapter::resetVisitedLinksManager()
+{
+ m_visitedLinksManager.reset(new WebEngineVisitedLinksManager(this));
+}
+
} // namespace QtWebEngineCore
diff --git a/src/core/browser_context_adapter.h b/src/core/browser_context_adapter.h
index c3c3f153d..94bc5fcde 100644
--- a/src/core/browser_context_adapter.h
+++ b/src/core/browser_context_adapter.h
@@ -175,6 +175,7 @@ public:
private:
void updateCustomUrlSchemeHandlers();
+ void resetVisitedLinksManager();
QString m_name;
bool m_offTheRecord;
diff --git a/src/core/clipboard_qt.cpp b/src/core/clipboard_qt.cpp
index cd57995ea..bd62f4872 100644
--- a/src/core/clipboard_qt.cpp
+++ b/src/core/clipboard_qt.cpp
@@ -285,6 +285,8 @@ void ClipboardQt::ReadAvailableTypes(ui::ClipboardType type, std::vector<base::s
types->clear();
const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData(type == ui::CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
+ if (mimeData->hasImage())
+ types->push_back(toString16(QStringLiteral("image/png")));
Q_FOREACH (const QString &mimeType, mimeData->formats())
types->push_back(toString16(mimeType));
*contains_filenames = false;
@@ -328,8 +330,6 @@ void ClipboardQt::ReadRTF(ui::ClipboardType type, std::string* result) const
SkBitmap ClipboardQt::ReadImage(ui::ClipboardType type) const
{
- // FIXME: Untested, pasting image data seems to only be supported through
- // FileReader.readAsDataURL in JavaScript and this isn't working down the pipe for some reason.
const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData(type == ui::CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
QImage image = qvariant_cast<QImage>(mimeData->imageData());
diff --git a/src/core/renderer/content_renderer_client_qt.cpp b/src/core/renderer/content_renderer_client_qt.cpp
index 6094be847..5d1780cbe 100644
--- a/src/core/renderer/content_renderer_client_qt.cpp
+++ b/src/core/renderer/content_renderer_client_qt.cpp
@@ -93,8 +93,6 @@ public:
blink::WebString qrcScheme(base::ASCIIToUTF16(kQrcSchemeQt));
// mark qrc as a secure scheme (avoids deprecation warnings)
blink::WebSecurityPolicy::registerURLSchemeAsSecure(qrcScheme);
- // mark qrc as a local scheme (allows local access to qrc)
- blink::WebSecurityPolicy::registerURLSchemeAsLocal(qrcScheme);
}
};
diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp
index 82d21696c..0ed0b91f9 100644
--- a/src/core/web_contents_adapter.cpp
+++ b/src/core/web_contents_adapter.cpp
@@ -426,6 +426,12 @@ void WebContentsAdapter::initialize(WebContentsAdapterClient *adapterClient)
PrintViewManagerQt::CreateForWebContents(webContents());
#endif // defined(ENABLE_BASIC_PRINTING)
+ // Create an instance of WebEngineVisitedLinksManager to catch the first
+ // content::NOTIFICATION_RENDERER_PROCESS_CREATED event. This event will
+ // force to initialize visited links in VisitedLinkSlave.
+ // It must be done before creating a RenderView.
+ d->browserContextAdapter->visitedLinksManager();
+
// Create a RenderView with the initial empty document
content::RenderViewHost *rvh = d->webContents->GetRenderViewHost();
Q_ASSERT(rvh);
diff --git a/src/webengine/api/qquickwebengineprofile.h b/src/webengine/api/qquickwebengineprofile.h
index 4f9684a86..9240132b2 100644
--- a/src/webengine/api/qquickwebengineprofile.h
+++ b/src/webengine/api/qquickwebengineprofile.h
@@ -150,7 +150,7 @@ private Q_SLOTS:
private:
Q_DECLARE_PRIVATE(QQuickWebEngineProfile)
- QQuickWebEngineProfile(QQuickWebEngineProfilePrivate *, QObject *parent = 0);
+ QQuickWebEngineProfile(QQuickWebEngineProfilePrivate *, QObject *parent = Q_NULLPTR);
QQuickWebEngineSettings *settings() const;
friend class QQuickWebEngineSettings;
diff --git a/src/webengine/doc/src/webengineview.qdoc b/src/webengine/doc/src/webengineview.qdoc
index 444f0f398..a4630484e 100644
--- a/src/webengine/doc/src/webengineview.qdoc
+++ b/src/webengine/doc/src/webengineview.qdoc
@@ -47,8 +47,11 @@
\section2 Loading Web Pages
An application can load pages into the WebEngineView, using either the \l url property or the
- \l loadHtml method and navigate within the view's session history. The history is represented
- by a WebEngineHistory data model that is held by the \l navigationHistory property.
+ \l loadHtml method and navigate within the view's session history. The GET
+ method is always used to load URLs.
+
+ The history is represented by a WebEngineHistory data model that is held by
+ the \l navigationHistory property.
The following sample QML application loads a web page using the \c url property:
diff --git a/src/webenginewidgets/api/qwebenginedownloaditem.h b/src/webenginewidgets/api/qwebenginedownloaditem.h
index 390a1a598..80b5c06c5 100644
--- a/src/webenginewidgets/api/qwebenginedownloaditem.h
+++ b/src/webenginewidgets/api/qwebenginedownloaditem.h
@@ -99,7 +99,7 @@ private:
friend class QWebEngineProfilePrivate;
- QWebEngineDownloadItem(QWebEngineDownloadItemPrivate*, QObject *parent = 0);
+ QWebEngineDownloadItem(QWebEngineDownloadItemPrivate*, QObject *parent = Q_NULLPTR);
QScopedPointer<QWebEngineDownloadItemPrivate> d_ptr;
};
diff --git a/src/webenginewidgets/api/qwebenginepage.h b/src/webenginewidgets/api/qwebenginepage.h
index 0c6450d20..2ac8e0f3e 100644
--- a/src/webenginewidgets/api/qwebenginepage.h
+++ b/src/webenginewidgets/api/qwebenginepage.h
@@ -188,8 +188,8 @@ public:
KilledTerminationStatus
};
- explicit QWebEnginePage(QObject *parent = 0);
- QWebEnginePage(QWebEngineProfile *profile, QObject *parent = 0);
+ explicit QWebEnginePage(QObject *parent = Q_NULLPTR);
+ QWebEnginePage(QWebEngineProfile *profile, QObject *parent = Q_NULLPTR);
~QWebEnginePage();
QWebEngineHistory *history() const;
@@ -208,10 +208,10 @@ public:
virtual bool event(QEvent*);
#ifdef Q_QDOC
- void findText(const QString &subString, FindFlags options = 0);
+ void findText(const QString &subString, FindFlags options = FindFlags());
void findText(const QString &subString, FindFlags options, FunctorOrLambda resultCallback);
#else
- void findText(const QString &subString, FindFlags options = 0, const QWebEngineCallback<bool> &resultCallback = QWebEngineCallback<bool>());
+ void findText(const QString &subString, FindFlags options = FindFlags(), const QWebEngineCallback<bool> &resultCallback = QWebEngineCallback<bool>());
#endif
QMenu *createStandardContextMenu();
diff --git a/src/webenginewidgets/api/qwebengineprofile.h b/src/webenginewidgets/api/qwebengineprofile.h
index 22a913fb2..d981fa5bb 100644
--- a/src/webenginewidgets/api/qwebengineprofile.h
+++ b/src/webenginewidgets/api/qwebengineprofile.h
@@ -63,8 +63,8 @@ class QWebEngineUrlSchemeHandler;
class QWEBENGINEWIDGETS_EXPORT QWebEngineProfile : public QObject {
Q_OBJECT
public:
- explicit QWebEngineProfile(QObject *parent = 0);
- explicit QWebEngineProfile(const QString &name, QObject *parent = 0);
+ explicit QWebEngineProfile(QObject *parent = Q_NULLPTR);
+ explicit QWebEngineProfile(const QString &name, QObject *parent = Q_NULLPTR);
virtual ~QWebEngineProfile();
enum HttpCacheType {
@@ -132,7 +132,7 @@ private Q_SLOTS:
private:
Q_DISABLE_COPY(QWebEngineProfile)
Q_DECLARE_PRIVATE(QWebEngineProfile)
- QWebEngineProfile(QWebEngineProfilePrivate *, QObject *parent = 0);
+ QWebEngineProfile(QWebEngineProfilePrivate *, QObject *parent = Q_NULLPTR);
friend class QWebEnginePagePrivate;
friend class QWebEngineUrlSchemeHandler;
diff --git a/src/webenginewidgets/api/qwebenginesettings.h b/src/webenginewidgets/api/qwebenginesettings.h
index 6dc1b539b..0ba728c94 100644
--- a/src/webenginewidgets/api/qwebenginesettings.h
+++ b/src/webenginewidgets/api/qwebenginesettings.h
@@ -114,7 +114,7 @@ private:
friend class QWebEngineProfilePrivate;
~QWebEngineSettings();
- explicit QWebEngineSettings(QWebEngineSettings *parentSettings = 0);
+ explicit QWebEngineSettings(QWebEngineSettings *parentSettings = Q_NULLPTR);
};
QT_END_NAMESPACE
diff --git a/src/webenginewidgets/api/qwebengineview.h b/src/webenginewidgets/api/qwebengineview.h
index f7e846861..cb66bb75f 100644
--- a/src/webenginewidgets/api/qwebengineview.h
+++ b/src/webenginewidgets/api/qwebengineview.h
@@ -65,7 +65,7 @@ class QWEBENGINEWIDGETS_EXPORT QWebEngineView : public QWidget {
Q_PROPERTY(qreal zoomFactor READ zoomFactor WRITE setZoomFactor)
public:
- explicit QWebEngineView(QWidget* parent = 0);
+ explicit QWebEngineView(QWidget* parent = Q_NULLPTR);
virtual ~QWebEngineView();
QWebEnginePage* page() const;
@@ -95,10 +95,10 @@ public:
void setZoomFactor(qreal factor);
#ifdef Q_QDOC
- void findText(const QString &subString, QWebEnginePage::FindFlags options = 0);
+ void findText(const QString &subString, QWebEnginePage::FindFlags options = QWebEnginePage::FindFlags());
void findText(const QString &subString, QWebEnginePage::FindFlags options, FunctorOrLambda resultCallback);
#else
- void findText(const QString &subString, QWebEnginePage::FindFlags options = 0, const QWebEngineCallback<bool> &resultCallback = QWebEngineCallback<bool>());
+ void findText(const QString &subString, QWebEnginePage::FindFlags options = QWebEnginePage::FindFlags(), const QWebEngineCallback<bool> &resultCallback = QWebEngineCallback<bool>());
#endif
virtual QSize sizeHint() const Q_DECL_OVERRIDE;
diff --git a/src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc b/src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc
index 0eaa7cbd0..fab4827a0 100644
--- a/src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc
+++ b/src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc
@@ -39,7 +39,8 @@
and findText().
A page can be loaded using load() or setUrl(). Alternatively, if you have
- the HTML content readily available, you can use setHtml().
+ the HTML content readily available, you can use setHtml(). The GET method is
+ always used to load URLs.
The QWebEnginePage class also offers methods to retrieve both the URL currently
loaded by the page (see url()) as well as the URL originally requested
diff --git a/src/webenginewidgets/doc/src/qwebengineview_lgpl.qdoc b/src/webenginewidgets/doc/src/qwebengineview_lgpl.qdoc
index feaa802d7..5a4c1b52b 100644
--- a/src/webenginewidgets/doc/src/qwebengineview_lgpl.qdoc
+++ b/src/webenginewidgets/doc/src/qwebengineview_lgpl.qdoc
@@ -37,8 +37,10 @@
It can be used in various applications to display web content live from the
Internet.
- A \e {web site} can be loaded to a web view with the load() function. Like all
- Qt widgets, the show() function must be invoked in order to display
+ A \e {web site} can be loaded to a web view with the load() function. The
+ GET method is always used to load URLs.
+
+ Like all Qt widgets, the show() function must be invoked in order to display
the web view. The snippet below illustrates this:
\snippet simple/main.cpp Using QWebEngineView
diff --git a/tests/auto/widgets/qwebenginepage/BLACKLIST b/tests/auto/widgets/qwebenginepage/BLACKLIST
index d4481dc3f..30b43d6b7 100644
--- a/tests/auto/widgets/qwebenginepage/BLACKLIST
+++ b/tests/auto/widgets/qwebenginepage/BLACKLIST
@@ -6,3 +6,6 @@ osx
[getUserMediaRequest]
windows
+
+[setHtmlWithImageResource]
+*
diff --git a/tests/auto/widgets/qwebenginepage/resources/pasteimage.html b/tests/auto/widgets/qwebenginepage/resources/pasteimage.html
new file mode 100644
index 000000000..cc37d9319
--- /dev/null
+++ b/tests/auto/widgets/qwebenginepage/resources/pasteimage.html
@@ -0,0 +1,30 @@
+<html>
+ <head>
+ <meta charset="UTF-8">
+ <script>
+ window.onload = function() {
+ document.getElementById("pasteArea").focus();
+ }
+ document.onpaste = function(event) {
+ var items = (event.clipboardData || event.originalEvent.clipboardData).items;
+ var blob = null;
+ for (var i = 0; i < items.length; ++i) {
+ if (items[i].type.indexOf("image/png") !== -1) {
+ blob = items[i].getAsFile();
+ break;
+ }
+ }
+ if (!blob)
+ return;
+ var reader = new FileReader();
+ reader.onload = function(event) {
+ window.myImageDataURL = event.target.result;
+ }
+ reader.readAsDataURL(blob);
+ };
+ </script>
+ </head>
+ <body>
+ <textarea id="pasteArea" placeholder="paste here"></textarea>
+ </body>
+</html>
diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
index d617c23a0..df290babf 100644
--- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
+++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
@@ -32,6 +32,7 @@
#include <QPushButton>
#include <QStateMachine>
#include <QStyle>
+#include <QtGui/QClipboard>
#include <QtTest/QtTest>
#include <QTextCharFormat>
#include <QWebChannel>
@@ -121,6 +122,7 @@ private Q_SLOTS:
void geolocationRequestJS();
void loadFinished();
void actionStates();
+ void pasteImage();
void popupFormSubmission();
void userStyleSheet();
void userStyleSheetFromLocalFileUrl();
@@ -462,6 +464,35 @@ void tst_QWebEnginePage::actionStates()
QTRY_VERIFY(!stopAction->isEnabled());
}
+static QImage imageWithoutAlpha(const QImage &image)
+{
+ QImage result = image;
+ QPainter painter(&result);
+ painter.fillRect(result.rect(), Qt::green);
+ painter.drawImage(0, 0, image);
+ return result;
+}
+
+void tst_QWebEnginePage::pasteImage()
+{
+ // Pixels with an alpha value of 0 will have different RGB values after the
+ // test -> clipboard -> webengine -> test roundtrip.
+ // Clear the alpha channel to make QCOMPARE happy.
+ const QImage origImage = imageWithoutAlpha(QImage(":/resources/image.png"));
+ QClipboard *clipboard = QGuiApplication::clipboard();
+ clipboard->setImage(origImage);
+ QWebEnginePage *page = m_view->page();
+ page->load(QUrl("qrc:///resources/pasteimage.html"));
+ QVERIFY(waitForSignal(m_view, SIGNAL(loadFinished(bool))));
+ page->triggerAction(QWebEnginePage::Paste);
+ QTRY_VERIFY(evaluateJavaScriptSync(page,
+ "window.myImageDataURL ? window.myImageDataURL.length : 0").toInt() > 0);
+ QByteArray data = evaluateJavaScriptSync(page, "window.myImageDataURL").toByteArray();
+ data.remove(0, data.indexOf(";base64,") + 8);
+ const QImage image = QImage::fromData(QByteArray::fromBase64(data), "PNG");
+ QCOMPARE(image, origImage);
+}
+
class ConsolePage : public QWebEnginePage
{
public:
diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.qrc b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.qrc
index c7bffd5bb..91adeb694 100644
--- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.qrc
+++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.qrc
@@ -12,6 +12,7 @@
<file>resources/script.html</file>
<file>resources/user.css</file>
<file>resources/image.png</file>
+ <file>resources/pasteimage.html</file>
<file>resources/style.css</file>
<file>resources/test1.html</file>
<file>resources/test2.html</file>