summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config.tests/re2/re2.cpp (renamed from config.tests/srtp/srtp.cpp)8
-rw-r--r--config.tests/re2/re2.pro3
-rw-r--r--config.tests/srtp/srtp.pro3
-rw-r--r--config_help.txt13
-rw-r--r--configure.json12
-rw-r--r--configure.pri4
-rw-r--r--dist/changes-5.6.373
-rw-r--r--mkspecs/features/configure.prf11
-rw-r--r--mkspecs/features/functions.prf5
-rw-r--r--qtwebengine.pro2
-rw-r--r--src/core/config/linux.pri8
-rw-r--r--src/core/delegated_frame_node.cpp1
-rw-r--r--src/core/render_widget_host_view_qt.cpp18
-rw-r--r--src/core/render_widget_host_view_qt.h2
-rw-r--r--src/core/surface_factory_qt.cpp30
-rw-r--r--src/core/web_contents_adapter.cpp37
-rw-r--r--src/core/web_contents_adapter.h2
-rw-r--r--src/core/web_contents_adapter_p.h2
-rw-r--r--src/core/web_engine_context.cpp6
-rw-r--r--src/core/web_event_factory.cpp2
-rw-r--r--src/core/web_event_factory.h6
-rw-r--r--src/webengine/doc/src/qtwebengine-features.qdoc4
-rw-r--r--src/webengine/render_widget_host_view_qt_delegate_quick.cpp2
-rw-r--r--src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp10
24 files changed, 212 insertions, 52 deletions
diff --git a/config.tests/srtp/srtp.cpp b/config.tests/re2/re2.cpp
index 7dfcc832a..f2c0b0170 100644
--- a/config.tests/srtp/srtp.cpp
+++ b/config.tests/re2/re2.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtWebEngine module of the Qt Toolkit.
@@ -26,10 +26,10 @@
**
****************************************************************************/
-#include <srtp/srtp.h>
+#include <re2/re2.h>
int main(int, char **)
{
- err_status_t status = srtp_init();
- return status == err_status_ok;
+ RE2 re2("dummytest");
+ return 0;
}
diff --git a/config.tests/re2/re2.pro b/config.tests/re2/re2.pro
new file mode 100644
index 000000000..b1a26d918
--- /dev/null
+++ b/config.tests/re2/re2.pro
@@ -0,0 +1,3 @@
+SOURCES += re2.cpp
+LIBS += -lre2
+CONFIG -= qt
diff --git a/config.tests/srtp/srtp.pro b/config.tests/srtp/srtp.pro
deleted file mode 100644
index 2151d64aa..000000000
--- a/config.tests/srtp/srtp.pro
+++ /dev/null
@@ -1,3 +0,0 @@
-linux:SOURCES += srtp.cpp
-LIBS += -lsrtp
-CONFIG -= qt
diff --git a/config_help.txt b/config_help.txt
new file mode 100644
index 000000000..6ff24f8c8
--- /dev/null
+++ b/config_help.txt
@@ -0,0 +1,13 @@
+Webengine options:
+
+ -alsa ................ Enable ALSA support [auto] (Linux only)
+ -webengine-icu ....... Select used ICU libraries [system/qt] (Linux only)
+ -ffmpeg .............. Select used FFmpeg libraries [system/qt] (Linux only)
+ -opus ................ Select used Opus libraries [system/qt] (Linux only)
+ -webp ................ Select used WebP libraries [system/qt] (Linux only)
+ -pepper-plugins ...... Enable use of Pepper Flash and Widevine plugins [auto]
+ -printing-and-pdf .... Enable use of printing and output to PDF [auto]
+ -proprietary-codecs .. Enable support for proprietary codecs [no]
+ -pulseaudio .......... Enable PulseAudio support [auto] (Linux only)
+ -spellchecker ........ Enable support for spellchecker [yes]
+ -webrtc .............. Enable support for WebRTC [auto]
diff --git a/configure.json b/configure.json
index 19a32a17c..a176b845b 100644
--- a/configure.json
+++ b/configure.json
@@ -97,6 +97,11 @@
"label": "embedded",
"type": "embedded"
},
+ "re2": {
+ "label": "re2",
+ "test": "re2",
+ "type": "compile"
+ },
"glibc": {
"label": "glibc > 2.16",
"type": "detectGlibc"
@@ -210,6 +215,12 @@
"condition": "libs.icu",
"output": [ "privateFeature" ]
},
+ "system-re2": {
+ "label": "re2",
+ "autoDetect": "config.unix",
+ "condition": "tests.re2",
+ "output": [ "privateFeature" ]
+ },
"system-ninja": {
"label": "Using system ninja",
"condition": "tests.ninja",
@@ -276,6 +287,7 @@
"section": "System libraries",
"condition": "config.unix",
"entries": [
+ "system-re2",
"system-icu",
"system-webp",
"system-opus",
diff --git a/configure.pri b/configure.pri
index 0030ce3bb..f8ecd3db6 100644
--- a/configure.pri
+++ b/configure.pri
@@ -18,9 +18,9 @@ defineTest(isPythonVersionSupported) {
}
defineTest(qtConfTest_detectPython2) {
- python = $$qtConfFindInPath("python2")
+ python = $$qtConfFindInPath("python2$$EXE_SUFFIX")
isEmpty(python) {
- qtLog("'python2' not found in PATH. Checking for 'python'.")
+ qtLog("'python2$$EXE_SUFFIX' not found in PATH. Checking for 'python$$EXE_SUFFIX'.")
python = $$qtConfFindInPath("python$$EXE_SUFFIX")
}
isEmpty(python) {
diff --git a/dist/changes-5.6.3 b/dist/changes-5.6.3
new file mode 100644
index 000000000..88af64f80
--- /dev/null
+++ b/dist/changes-5.6.3
@@ -0,0 +1,73 @@
+Qt 5.6.3 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 5.6.0.
+
+Qt WebEngine 5.6.3 contains a merge from Qt WebEngine 5.7.1 and all
+bug-fixes in Qt 5.7.1 are also in Qt 5.6.3. These are listed both here
+and in changes-5.7.1.
+
+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:
+ * Updated the Chromium version to 49.0.2623.111.
+ * Backported security fixes from Chromium up to version 59.0.3071.104.
+ Including: CVE-2016-5133, CVE-2016-5147, CVE-2016-5153, CVE-2016-5155,
+ CVE-2016-5161, CVE-2016-5166, CVE-2016-5170, CVE-2016-5171,
+ CVE-2016-5172, CVE-2016-5181, CVE-2016-5185, CVE-2016-5186,
+ CVE-2016-5187, CVE-2016-5188, CVE-2016-5192, CVE-2016-5198.
+ CVE-2016-5205, CVE-2016-5207, CVE-2016-5208, CVE-2016-5214,
+ CVE-2016-5215, CVE-2016-5221, CVE-2016-5222, CVE-2016-5224,
+ CVE-2016-5225, CVE-2016-9650, CVE-2016-9651, CVE-2016-9652,
+ CVE-2017-5006, CVE-2017-5007, CVE-2017-5008, CVE-2017-5009,
+ CVE-2017-5010, CVE-2017-5012, CVE-2017-5015, CVE-2017-5016,
+ CVE-2017-5017, CVE-2017-5019, CVE-2017-5023, CVE-2017-5024,
+ CVE-2017-5025, CVE-2017-5026, CVE-2017-5027, CVE-2017-5029,
+ CVE-2017-5033, CVE-2017-5037, CVE-2017-5044, CVE-2017-5046,
+ CVE-2017-5047, CVE-2017-5048, CVE-2017-5049, CVE-2017-5050,
+ CVE-2017-5051, CVE-2017-5052, CVE-2017-5054, CVE-2017-5059,
+ CVE-2017-5061, CVE-2017-5062, CVE-2017-5065, CVE-2017-5067,
+ CVE-2017-5069, CVE-2017-5070, CVE-2017-5071, CVE-2017-5075,
+ CVE-2017-5076, CVE-2017-5078, CVE-2017-5083 and CVE-2017-5089
+ * Added support for macOS 10.12 Sierra.
+ * Backported various crash and assertion fixes.
+
+ - QtWebEngineCore:
+ * [QTBUG-51244, QTBUG-54795] Fixed select control issues.
+ * Fixed several focus issues.
+ * Fixed regression with fine-grained wheel events.
+ * [QTBUG-54221] Fixed editing short-cuts in plugins.
+ * [QTBUG-54222] Fixed potential infinite loop on history load.
+ * Fixed Flash plugin clipboard access.
+
+****************************************************************************
+* Platform Specific Changes *
+****************************************************************************
+
+ - Linux:
+ * [QTBUG-55367] Fixed reading timezone when running sandboxed.
+ * Fixed crash when using Wayland QPA.
+ * Improved OpenGL check, so EGL/GLES2 mode can be used with Desktop
+ OpenGL if the driver has the ARB_ES2_compatibility extension.
+
+ - Windows:
+ * It is no longer possible to build on a 32-bit Windows host, but
+ 32-bit binaries can still be built on a 64-bit host.
+ * [QTBUG-52201, QTBUG-55501, QTBUG-56020] Fixed crashes and asserts
+ upon initialization of the global shared OpenGL context.
diff --git a/mkspecs/features/configure.prf b/mkspecs/features/configure.prf
index 37128bf93..2264ba704 100644
--- a/mkspecs/features/configure.prf
+++ b/mkspecs/features/configure.prf
@@ -50,6 +50,7 @@ defineTest(runConfigure) {
qtConfig(system-opus): WEBENGINE_CONFIG += use_system_opus
qtConfig(system-ffmpeg): WEBENGINE_CONFIG += use_system_ffmpeg
qtConfig(system-icu): WEBENGINE_CONFIG += use_system_icu
+ qtConfig(system-re2): WEBENGINE_CONFIG += use_system_re2
!contains(WEBENGINE_CONFIG, use_system_libwebp): WEBENGINE_CONFIG += use_bundled_libwebp
!contains(WEBENGINE_CONFIG, use_system_opus): WEBENGINE_CONFIG += use_bundled_opus
@@ -122,11 +123,6 @@ defineTest(runConfigure) {
log("Compatible system libvpx not found. Using Chromium's copy.$${EOL}")
WEBENGINE_CONFIG += use_bundled_libvpx
}
- config_srtp: WEBENGINE_CONFIG += use_system_libsrtp
- else {
- log("System libsrtp not found. Using Chromium's copy.$${EOL}")
- WEBENGINE_CONFIG += use_bundled_srtp
- }
config_snappy: WEBENGINE_CONFIG += use_system_snappy
else {
log("System snappy not found. Using Chromium's copy.$${EOL}")
@@ -162,11 +158,6 @@ defineTest(runConfigure) {
!isEmpty(use_bundled): log(" Optional bundled libraries used .... $$use_bundled$${EOL}")
}
log("Configurable features:$${EOL}")
- use?(proprietary_codecs) {
- log(" Proprietary codecs (H264, MP3) ..... Enabled$${EOL}")
- } else {
- log(" Proprietary codecs (H264, MP3) ..... Not enabled (Default, enable with -proprietary-codecs)$${EOL}")
- }
qtHaveModule(positioning): {
log(" Geolocation ........................ Enabled$${EOL}")
} else {
diff --git a/mkspecs/features/functions.prf b/mkspecs/features/functions.prf
index 56894e58a..b78d2a112 100644
--- a/mkspecs/features/functions.prf
+++ b/mkspecs/features/functions.prf
@@ -81,9 +81,10 @@ defineTest(isPlatformSupported) {
defineTest(isArchSupported) {
contains(QT_ARCH, "i386")|contains(QT_ARCH, "x86_64"): return(true)
contains(QT_ARCH, "arm")|contains(QT_ARCH, "arm64"): return(true)
- contains(QT_ARCH, "mips")|contains(QT_ARCH, "mips64"): return(true)
+ contains(QT_ARCH, "mips"): return(true)
+# contains(QT_ARCH, "mips64"): return(true)
- skipBuild("QtWebEngine can only be built for x86, x86-64, ARM, Aarch64, MIPSel, and MIPS64 architectures.")
+ skipBuild("QtWebEngine can only be built for x86, x86-64, ARM, Aarch64, and MIPSel architectures.")
return(false)
}
diff --git a/qtwebengine.pro b/qtwebengine.pro
index 034e946c4..1375bc540 100644
--- a/qtwebengine.pro
+++ b/qtwebengine.pro
@@ -25,5 +25,5 @@ OTHER_FILES = \
config.tests/libcap/* \
config.tests/libvpx/* \
config.tests/snappy/* \
- config.tests/srtp/* \
+ config.tests/re2/* \
mkspecs/features/*
diff --git a/src/core/config/linux.pri b/src/core/config/linux.pri
index 60cfa6857..28278e903 100644
--- a/src/core/config/linux.pri
+++ b/src/core/config/linux.pri
@@ -106,10 +106,14 @@ host_build {
} else {
gn_args += custom_toolchain=\"$$QTWEBENGINE_OUT_ROOT/src/toolchain:target\"
gn_args += host_toolchain=\"$$QTWEBENGINE_OUT_ROOT/src/toolchain:host\"
+ GN_TARGET_CPU = $$gnArch($$QT_ARCH)
cross_compile {
gn_args += v8_snapshot_toolchain=\"$$QTWEBENGINE_OUT_ROOT/src/toolchain:v8_snapshot\"
- GN_TARGET_CPU = $$gnArch($$QT_ARCH)
+ # FIXME: we should set host_cpu in case host-toolchain doesn't match os arch,
+ # but currently we don't it available at this point
gn_args += target_cpu=\"$$GN_TARGET_CPU\"
+ } else {
+ gn_args += host_cpu=\"$$GN_TARGET_CPU\"
}
!contains(QT_CONFIG, no-pkg-config) {
# Strip '>2 /dev/null' from $$pkgConfigExecutable()
@@ -139,7 +143,6 @@ host_build {
use?(system_libevent): gn_args += use_system_libevent=true
use?(system_libwebp): gn_args += use_system_libwebp=true
- #use?(system_libsrtp): gn_args += use_system_libsrtp=true
use?(system_libxslt): gn_args += use_system_libxml=true use_system_libxslt=true
#use?(system_jsoncpp): gn_args += use_system_jsoncpp=true
use?(system_opus): gn_args += use_system_opus=true
@@ -147,5 +150,6 @@ host_build {
use?(system_vpx): gn_args += use_system_libvpx=true
use?(system_icu): gn_args += use_system_icu=true icu_use_data_file=false
use?(system_ffmpeg): gn_args += use_system_ffmpeg=true
+ use?(system_re2): gn_args += use_system_re2=true
#use?(system_protobuf): gn_args += use_system_protobuf=true
}
diff --git a/src/core/delegated_frame_node.cpp b/src/core/delegated_frame_node.cpp
index 5d6353740..e1902a3eb 100644
--- a/src/core/delegated_frame_node.cpp
+++ b/src/core/delegated_frame_node.cpp
@@ -923,6 +923,7 @@ void DelegatedFrameNode::commit(ChromiumCompositorData *chromiumCompositorData,
rpLayer->setRect(toQt(pass->output_rect));
rpLayer->setSize(toQt(pass->output_rect.size()));
rpLayer->setFormat(pass->has_transparent_background ? GL_RGBA : GL_RGB);
+ rpLayer->setMirrorVertical(true);
} else
renderPassParent = this;
diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp
index 0c98c9e21..8d79a1869 100644
--- a/src/core/render_widget_host_view_qt.cpp
+++ b/src/core/render_widget_host_view_qt.cpp
@@ -80,6 +80,7 @@
#include <QFocusEvent>
#include <QGuiApplication>
#include <QInputMethodEvent>
+#include <QLoggingCategory>
#include <QTextFormat>
#include <QKeyEvent>
#include <QMouseEvent>
@@ -919,11 +920,11 @@ bool RenderWidgetHostViewQt::forwardEvent(QEvent *event)
case QEvent::TouchCancel:
handleTouchEvent(static_cast<QTouchEvent*>(event));
break;
+#ifndef QT_NO_GESTURES
case QEvent::NativeGesture:
handleGestureEvent(static_cast<QNativeGestureEvent *>(event));
break;
- case QEvent::HoverEnter:
- case QEvent::HoverLeave:
+#endif // QT_NO_GESTURES
case QEvent::HoverMove:
handleHoverEvent(static_cast<QHoverEvent*>(event));
break;
@@ -1316,6 +1317,7 @@ void RenderWidgetHostViewQt::clearPreviousTouchMotionState()
m_touchMotionStarted = false;
}
+#ifndef QT_NO_GESTURES
void RenderWidgetHostViewQt::handleGestureEvent(QNativeGestureEvent *ev)
{
const Qt::NativeGestureType type = ev->gestureType();
@@ -1326,12 +1328,22 @@ void RenderWidgetHostViewQt::handleGestureEvent(QNativeGestureEvent *ev)
static_cast<double>(dpiScale())));
}
}
+#endif
+
+Q_DECLARE_LOGGING_CATEGORY(QWEBENGINE_TOUCH_HANDLING);
+Q_LOGGING_CATEGORY(QWEBENGINE_TOUCH_HANDLING, "qt.webengine.touch");
void RenderWidgetHostViewQt::handleTouchEvent(QTouchEvent *ev)
{
// On macOS instead of handling touch events, we use the OS provided QNativeGestureEvents.
#ifdef Q_OS_MACOS
- return;
+ if (ev->spontaneous()) {
+ return;
+ } else {
+ qCWarning(QWEBENGINE_TOUCH_HANDLING)
+ << "Sending simulated touch events to Chromium does not work properly on macOS. "
+ "Consider using QNativeGestureEvents or QMouseEvents.";
+ }
#endif
// Chromium expects the touch event timestamps to be comparable to base::TimeTicks::Now().
diff --git a/src/core/render_widget_host_view_qt.h b/src/core/render_widget_host_view_qt.h
index cb1a5980d..311626492 100644
--- a/src/core/render_widget_host_view_qt.h
+++ b/src/core/render_widget_host_view_qt.h
@@ -183,7 +183,9 @@ public:
void handleKeyEvent(QKeyEvent*);
void handleWheelEvent(QWheelEvent*);
void handleTouchEvent(QTouchEvent*);
+#ifndef QT_NO_GESTURES
void handleGestureEvent(QNativeGestureEvent *);
+#endif
void handleHoverEvent(QHoverEvent*);
void handleFocusEvent(QFocusEvent*);
void handleInputMethodEvent(QInputMethodEvent*);
diff --git a/src/core/surface_factory_qt.cpp b/src/core/surface_factory_qt.cpp
index 9e72885c3..6e5e13866 100644
--- a/src/core/surface_factory_qt.cpp
+++ b/src/core/surface_factory_qt.cpp
@@ -56,13 +56,7 @@
#if defined(USE_OZONE)
#include <EGL/egl.h>
-
-#ifndef QT_LIBDIR_EGL
-#define QT_LIBDIR_EGL "/usr/lib"
-#endif
-#ifndef QT_LIBDIR_GLES2
-#define QT_LIBDIR_GLES2 QT_LIBDIR_EGL
-#endif
+#include <dlfcn.h>
namespace QtWebEngineCore {
@@ -99,29 +93,21 @@ base::NativeLibrary LoadLibrary(const base::FilePath& filename) {
bool GLOzoneQt::LoadGLES2Bindings()
{
- base::FilePath libEGLPath = QtWebEngineCore::toFilePath(QT_LIBDIR_EGL);
- libEGLPath = libEGLPath.Append("libEGL.so.1");
- base::NativeLibrary eglLibrary = LoadLibrary(libEGLPath);
- if (!eglLibrary)
- return false;
-
- base::FilePath libGLES2Path = QtWebEngineCore::toFilePath(QT_LIBDIR_GLES2);
- libGLES2Path = libGLES2Path.Append("libGLESv2.so.2");
- base::NativeLibrary gles2Library = LoadLibrary(libGLES2Path);
- if (!gles2Library)
+ base::NativeLibrary eglgles2Library = dlopen(NULL, RTLD_LAZY);
+ if (!eglgles2Library) {
+ LOG(ERROR) << "Failed to open EGL/GLES2 context " << dlerror();
return false;
+ }
- gl::GLGetProcAddressProc get_proc_address = reinterpret_cast<gl::GLGetProcAddressProc>(base::GetFunctionPointerFromNativeLibrary(eglLibrary, "eglGetProcAddress"));
+ gl::GLGetProcAddressProc get_proc_address = reinterpret_cast<gl::GLGetProcAddressProc>(base::GetFunctionPointerFromNativeLibrary(eglgles2Library, "eglGetProcAddress"));
if (!get_proc_address) {
LOG(ERROR) << "eglGetProcAddress not found.";
- base::UnloadNativeLibrary(eglLibrary);
- base::UnloadNativeLibrary(gles2Library);
+ base::UnloadNativeLibrary(eglgles2Library);
return false;
}
gl::SetGLGetProcAddressProc(get_proc_address);
- gl::AddGLNativeLibrary(eglLibrary);
- gl::AddGLNativeLibrary(gles2Library);
+ gl::AddGLNativeLibrary(eglgles2Library);
return true;
}
diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp
index c9b46b38a..e350aadde 100644
--- a/src/core/web_contents_adapter.cpp
+++ b/src/core/web_contents_adapter.cpp
@@ -92,6 +92,7 @@
#include <QVariant>
#include <QtCore/qelapsedtimer.h>
#include <QtCore/qmimedata.h>
+#include <QtCore/qtemporarydir.h>
#include <QtGui/qaccessible.h>
#include <QtGui/qdrag.h>
#include <QtGui/qpixmap.h>
@@ -1203,7 +1204,11 @@ void WebContentsAdapter::startDragging(QObject *dragSource, const content::DropD
QDrag::cancel();
});
- drag->setMimeData(mimeDataFromDropData(*d->currentDropData));
+ QMimeData *mimeData = mimeDataFromDropData(*d->currentDropData);
+ if (handleDropDataFileContents(dropData, mimeData))
+ allowedActions = Qt::MoveAction;
+
+ drag->setMimeData(mimeData);
if (!pixmap.isNull()) {
drag->setPixmap(pixmap);
drag->setHotSpot(offset);
@@ -1229,6 +1234,36 @@ void WebContentsAdapter::startDragging(QObject *dragSource, const content::DropD
}
}
+bool WebContentsAdapter::handleDropDataFileContents(const content::DropData &dropData,
+ QMimeData *mimeData)
+{
+ if (dropData.file_contents.empty())
+ return false;
+
+ Q_D(WebContentsAdapter);
+ if (!d->dndTmpDir) {
+ d->dndTmpDir.reset(new QTemporaryDir);
+ if (!d->dndTmpDir->isValid()) {
+ d->dndTmpDir.reset();
+ return false;
+ }
+ }
+
+ const auto maybeFilename = dropData.GetSafeFilenameForImageFileContents();
+ const QString fileName = maybeFilename ? toQt(maybeFilename->AsUTF16Unsafe()) : QString();
+ const QString &filePath = d->dndTmpDir->filePath(fileName);
+ QFile file(filePath);
+ if (!file.open(QIODevice::WriteOnly)) {
+ qWarning("Cannot write temporary file %s.", qUtf8Printable(filePath));
+ return false;
+ }
+ file.write(QByteArray::fromStdString(dropData.file_contents));
+
+ const QUrl &targetUrl = QUrl::fromLocalFile(filePath);
+ mimeData->setUrls(QList<QUrl>{targetUrl});
+ return true;
+}
+
static void fillDropDataFromMimeData(content::DropData *dropData, const QMimeData *mimeData)
{
Q_ASSERT(dropData->filenames.empty());
diff --git a/src/core/web_contents_adapter.h b/src/core/web_contents_adapter.h
index 10c65a6cb..46c8d2604 100644
--- a/src/core/web_contents_adapter.h
+++ b/src/core/web_contents_adapter.h
@@ -58,6 +58,7 @@ QT_BEGIN_NAMESPACE
class QAccessibleInterface;
class QDragEnterEvent;
class QDragMoveEvent;
+class QMimeData;
class QPageLayout;
class QString;
class QWebChannel;
@@ -187,6 +188,7 @@ private:
Q_DISABLE_COPY(WebContentsAdapter)
Q_DECLARE_PRIVATE(WebContentsAdapter)
void waitForUpdateDragActionCalled();
+ bool handleDropDataFileContents(const content::DropData &dropData, QMimeData *mimeData);
QScopedPointer<WebContentsAdapterPrivate> d_ptr;
};
diff --git a/src/core/web_contents_adapter_p.h b/src/core/web_contents_adapter_p.h
index f24070523..94f3ca08b 100644
--- a/src/core/web_contents_adapter_p.h
+++ b/src/core/web_contents_adapter_p.h
@@ -61,6 +61,7 @@
#include <QScopedPointer>
#include <QSharedPointer>
+QT_FORWARD_DECLARE_CLASS(QTemporaryDir)
QT_FORWARD_DECLARE_CLASS(QWebChannel)
class WebEngineContext;
@@ -98,6 +99,7 @@ public:
bool updateDragActionCalled;
gfx::Point lastDragClientPos;
gfx::Point lastDragScreenPos;
+ std::unique_ptr<QTemporaryDir> dndTmpDir;
};
} // namespace QtWebEngineCore
diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp
index 54564718f..05750d4ba 100644
--- a/src/core/web_engine_context.cpp
+++ b/src/core/web_engine_context.cpp
@@ -67,6 +67,7 @@
#include "content/renderer/in_process_renderer_thread.h"
#include "content/utility/in_process_utility_thread.h"
#include "gpu/command_buffer/service/gpu_switches.h"
+#include "net/base/port_util.h"
#include "ppapi/features/features.h"
#include "ui/events/event_switches.h"
#include "ui/native_theme/native_theme_switches.h"
@@ -460,6 +461,11 @@ WebEngineContext::WebEngineContext()
base::ThreadRestrictions::SetIOAllowed(true);
+ if (parsedCommandLine->HasSwitch(switches::kExplicitlyAllowedPorts)) {
+ std::string allowedPorts = parsedCommandLine->GetSwitchValueASCII(switches::kExplicitlyAllowedPorts);
+ net::SetExplicitlyAllowedPorts(allowedPorts);
+ }
+
#if BUILDFLAG(ENABLE_PLUGINS)
// Creating pepper plugins from the page (which calls PluginService::GetPluginInfoArray)
// might fail unless the page queried the list of available plugins at least once
diff --git a/src/core/web_event_factory.cpp b/src/core/web_event_factory.cpp
index 7f164d6bd..0ae71114b 100644
--- a/src/core/web_event_factory.cpp
+++ b/src/core/web_event_factory.cpp
@@ -1213,6 +1213,7 @@ WebMouseEvent WebEventFactory::toWebMouseEvent(QHoverEvent *ev, double dpiScale)
return webKitEvent;
}
+#ifndef QT_NO_GESTURES
WebGestureEvent WebEventFactory::toWebGestureEvent(QNativeGestureEvent *ev, double dpiScale)
{
WebGestureEvent webKitEvent;
@@ -1249,6 +1250,7 @@ WebGestureEvent WebEventFactory::toWebGestureEvent(QNativeGestureEvent *ev, doub
return webKitEvent;
}
+#endif
blink::WebMouseWheelEvent WebEventFactory::toWebWheelEvent(QWheelEvent *ev, double dpiScale)
{
diff --git a/src/core/web_event_factory.h b/src/core/web_event_factory.h
index b5e465610..259795c1f 100644
--- a/src/core/web_event_factory.h
+++ b/src/core/web_event_factory.h
@@ -41,7 +41,9 @@
#define WEB_EVENT_FACTORY_H
#include "content/public/browser/native_web_keyboard_event.h"
+#ifndef QT_NO_GESTURES
#include "third_party/WebKit/public/platform/WebGestureEvent.h"
+#endif
#include "third_party/WebKit/public/platform/WebMouseEvent.h"
#include "third_party/WebKit/public/platform/WebMouseWheelEvent.h"
@@ -52,7 +54,9 @@ class QHoverEvent;
class QKeyEvent;
class QMouseEvent;
class QWheelEvent;
+#ifndef QT_NO_GESTURES
class QNativeGestureEvent;
+#endif
QT_END_NAMESPACE
class WebEventFactory {
@@ -60,7 +64,9 @@ class WebEventFactory {
public:
static blink::WebMouseEvent toWebMouseEvent(QMouseEvent*, double dpiScale);
static blink::WebMouseEvent toWebMouseEvent(QHoverEvent*, double dpiScale);
+#ifndef QT_NO_GESTURES
static blink::WebGestureEvent toWebGestureEvent(QNativeGestureEvent *, double dpiScale);
+#endif
static blink::WebMouseWheelEvent toWebWheelEvent(QWheelEvent*, double dpiScale);
static content::NativeWebKeyboardEvent toWebKeyboardEvent(QKeyEvent*);
};
diff --git a/src/webengine/doc/src/qtwebengine-features.qdoc b/src/webengine/doc/src/qtwebengine-features.qdoc
index 7850ff35d..545d230ef 100644
--- a/src/webengine/doc/src/qtwebengine-features.qdoc
+++ b/src/webengine/doc/src/qtwebengine-features.qdoc
@@ -55,10 +55,10 @@
Qt WebEngine supports the MPEG-4 Part 14 (MP4) file format only if the
required proprietary audio and video codecs, such as H.264 and MPEG layer-3
(MP3), have been enabled. Proprietary codecs can be enabled by passing the
- following option to qmake when building Qt WebEngine:
+ following option when configuring Qt:
\code
- qmake WEBENGINE_CONFIG+=use_proprietary_codecs
+ -proprietary-codecs
\endcode
\warning When distributing proprietary codec libraries, you must acquire
diff --git a/src/webengine/render_widget_host_view_qt_delegate_quick.cpp b/src/webengine/render_widget_host_view_qt_delegate_quick.cpp
index 650a40988..047737254 100644
--- a/src/webengine/render_widget_host_view_qt_delegate_quick.cpp
+++ b/src/webengine/render_widget_host_view_qt_delegate_quick.cpp
@@ -226,8 +226,10 @@ bool RenderWidgetHostViewQtDelegateQuick::event(QEvent *event)
if (event->type() == QEvent::ShortcutOverride)
return m_client->handleShortcutOverrideEvent(static_cast<QKeyEvent *>(event));
+#ifndef QT_NO_GESTURES
if (event->type() == QEvent::NativeGesture)
return m_client->forwardEvent(event);
+#endif
return QQuickItem::event(event);
}
diff --git a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp
index a504506a0..55b6001d1 100644
--- a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp
+++ b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp
@@ -162,7 +162,14 @@ RenderWidgetHostViewQtDelegateWidget::RenderWidgetHostViewQtDelegateWidget(Rende
void RenderWidgetHostViewQtDelegateWidget::removeParentBeforeParentDelete()
{
+ // Unset the parent, because parent is being destroyed, but the owner of this
+ // RenderWidgetHostViewQtDelegateWidget is actually a RenderWidgetHostViewQt instance.
setParent(Q_NULLPTR);
+
+ // If this widget represents a popup window, make sure to close it, so that if the popup was the
+ // last visible top level window, the application event loop can quit if it deems it necessarry.
+ if (m_isPopup)
+ close();
}
void RenderWidgetHostViewQtDelegateWidget::initAsChild(WebContentsAdapterClient* container)
@@ -430,6 +437,9 @@ bool RenderWidgetHostViewQtDelegateWidget::event(QEvent *event)
case QEvent::DragLeave:
case QEvent::DragMove:
case QEvent::Drop:
+ case QEvent::HoverEnter:
+ case QEvent::HoverLeave:
+ case QEvent::HoverMove:
// Let the parent handle these events.
return false;
default: