diff --git a/.qmake.conf b/.qmake.conf
index 65f02f1b4eb..fffea1245fe 100644
--- a/.qmake.conf
+++ b/.qmake.conf
@@ -5,4 +5,4 @@ QTWEBENGINE_OUT_ROOT = $$shadowed($$PWD)
 load(qt_build_config)
 CONFIG += warning_clean
 
-MODULE_VERSION = 5.12.5
+MODULE_VERSION = 5.12.10
diff --git a/dist/changes-5.12.10 b/dist/changes-5.12.10
new file mode 100644
index 00000000000..3f706d6b11c
--- /dev/null
+++ b/dist/changes-5.12.10
@@ -0,0 +1,91 @@
+Qt 5.12.10 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 5.12.9.
+
+For more details, refer to the online documentation included in this
+distribution. The documentation is also available online:
+
+  https://doc.qt.io/qt-5.12/index.html
+
+The Qt version 5.12 series is binary compatible with the 5.11.x series.
+Applications compiled for 5.11 will continue to run with 5.12.
+
+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.
+
+****************************************************************************
+*                          Library                                         *
+****************************************************************************
+
+General
+-------
+
+  - [QTBUG-75391] Fix pasting Unicode characters copied from WebEngine on macOS
+  - [QTBUG-83710] Fix input of keys requiring AltGr on Windows
+  - [QTBUG-84337] Fixed GPU switching with CoreProfile on macOS (for e.g. AirPlay)
+  - [QTBUG-86018] Fixed build with Bison 3.7
+  - Fixed build with the linux-clang 10 spec
+
+Chromium
+--------
+
+  - Security fixes from Chromium up to version 86.0.4240.111, including:
+
+    - CVE-2020-6459
+    - CVE-2020-6462: Use after free in task scheduling
+    - CVE-2020-6470
+    - CVE-2020-6474
+    - CVE-2020-6481
+    - CVE-2020-6489
+    - CVE-2020-6490
+    - CVE-2020-6511: Side-channel information leakage in CSP
+    - CVE-2020-6512: Type Confusion in V8
+    - CVE-2020-6513: Heap buffer overflow in PDFium
+    - CVE-2020-6514: Inappropriate implementation in WebRTC
+    - CVE-2020-6518: Use after free in developer tools
+    - CVE-2020-6523: Out of bounds write in Skia
+    - CVE-2020-6524: Heap buffer overflow in WebAudio
+    - CVE-2020-6529: Inappropriate implementation in WebRTC
+    - CVE-2020-6532: Use after free in SCTP
+    - CVE-2020-6535: Insufficient data validation in WebUI
+    - CVE-2020-6534: Heap buffer overflow in WebRTC
+    - CVE-2020-6540: Heap buffer overflow in Skia
+    - CVE-2020-6541: Use after free in WebUSB
+    - CVE-2020-6542: Use after free in ANGLE
+    - CVE-2020-6543: Use after free in task scheduling
+    - CVE-2020-6544: Use after free in media
+    - CVE-2020-6545: Use after free in audio
+    - CVE-2020-6548: Heap buffer overflow in Skia
+    - CVE-2020-6549: Use after free in media
+    - CVE-2020-6559: Use after free in presentation API
+    - CVE-2020-6561: Inappropriate implementation in Content Security Policy
+    - CVE-2020-6562: Insufficient policy enforcement in Blink
+    - CVE-2020-6569: Integer overflow in WebUSB
+    - CVE-2020-6571: Incorrect security UI in Omnibox
+    - CVE-2020-6573: Use after free in video
+    - CVE-2020-15962: Insufficient policy enforcement in serial
+    - CVE-2020-15964: Insufficient data validation in media
+    - CVE-2020-15965: Out of bounds write in V8
+    - CVE-2020-15968: Use after free in Blink
+    - CVE-2020-15969: Use after free in WebRTC.
+    - CVE-2020-15999: Heap buffer overflow in freetype
+    - CVE-2020-16001: Use after free in media.
+    - CVE-2020-16002: Use after free in PDFium.
+    - CVE-2020-16003: Use after free in printing.
+    - Security Bug 1051439
+    - Security bug 1052492
+    - Security bug 1054229
+    - Security Bug 1057369
+    - Security Bug 1058515
+    - Security bug 1065122
+    - Security bug 1065731
+    - Security bugs 1087629 and 1029569
+    - Security issue 1098860
+    - Security issue 1102137
+    - Security bug 1102408
+    - Security bug 1111149
+
diff --git a/dist/changes-5.12.6 b/dist/changes-5.12.6
new file mode 100644
index 00000000000..386eac2338d
--- /dev/null
+++ b/dist/changes-5.12.6
@@ -0,0 +1,64 @@
+Qt 5.12.6 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 5.12.0 through 5.12.5.
+
+For more details, refer to the online documentation included in this
+distribution. The documentation is also available online:
+
+https://doc.qt.io/qt-5/index.html
+
+The Qt version 5.12 series is binary compatible with the 5.11.x series.
+Applications compiled for 5.11 will continue to run with 5.12.
+
+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.
+
+****************************************************************************
+*                              Qt 5.12.6 Changes                           *
+****************************************************************************
+
+General
+-------
+
+  - [QTBUG-77072,QTBUG-78084] Fixed flashing when closing popup on macOS.
+  - [QTBUG-78733] Fixed building with Visual Studio 2019.
+  - [QTBUG-77037] Fixed building with Pulseaudio 13.
+  - Fixed building with system ICU 65.
+
+Chromium
+--------
+
+ - Security fixes from Chromium up to version 77.0.3865.120, including:
+
+    - CVE-2019-5869
+    - CVE-2019-5870
+    - CVE-2019-5875
+    - CVE-2019-5876
+    - CVE-2019-13659
+    - CVE-2019-13660
+    - CVE-2019-13664
+    - CVE-2019-13665
+    - CVE-2019-13674
+    - CVE-2019-13675
+    - CVE-2019-13687
+    - CVE-2019-13688
+    - CVE-2019-13691
+    - CVE-2019-13692
+    - CVE-2019-13693
+    - CVE-2019-13694
+    - CVE-2019-13695
+    - CVE-2019-13697
+    - Security issue 946351
+    - Security issue 957160
+    - Security issue 960354
+    - Security issue 964938
+    - Security issue 979373
+    - Security issue 981459
+    - Security issue 986727
+    - Security issue 990234
+
+ - Security fix from Chrome 78: CVE-2019-13720.
diff --git a/dist/changes-5.12.7 b/dist/changes-5.12.7
new file mode 100644
index 00000000000..4fdbb17d08d
--- /dev/null
+++ b/dist/changes-5.12.7
@@ -0,0 +1,78 @@
+Qt 5.12.7 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 5.12.0 through 5.12.6.
+
+For more details, refer to the online documentation included in this
+distribution. The documentation is also available online:
+
+https://doc.qt.io/qt-5/index.html
+
+The Qt version 5.12 series is binary compatible with the 5.11.x series.
+Applications compiled for 5.11 will continue to run with 5.12.
+
+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.
+
+****************************************************************************
+*                              Qt 5.12.7 Changes                           *
+****************************************************************************
+
+General
+-------
+
+  - [QTBUG-78280, QTBUG-80696] Fix pepper flash plugin permission
+
+Chromium
+--------
+
+  - Security fixes from Chromium up to version 79.0.3945.130, including:
+
+    - CVE-2019-13700
+    - CVE-2019-13714
+    - CVE-2019-13715
+    - CVE-2019-13718
+    - CVE-2019-13728
+    - CVE-2019-13730
+    - CVE-2019-13732
+    - CVE-2019-13734
+    - CVE-2019-13735
+    - CVE-2019-13736
+    - CVE-2019-13737
+    - CVE-2019-13738
+    - CVE-2019-13739
+    - CVE-2019-13741
+    - CVE-2019-13747
+    - CVE-2019-13750
+    - CVE-2019-13751
+    - CVE-2019-13752
+    - CVE-2019-13753
+    - CVE-2019-13757
+    - CVE-2019-13758
+    - CVE-2019-13761
+    - CVE-2019-13762
+    - CVE-2019-13764
+    - CVE-2019-15903
+    - CVE-2020-0601
+    - CVE-2020-6377
+    - Security bug 889276
+    - Security bug 955191
+    - Security bug 993266
+    - Security bug 1006544
+    - Security bug 1011551
+    - Security bug 1017020
+    - Security bug 1017961
+    - Security bug 1018406
+    - Security bug 1025089
+    - Security bug 1027905
+    - Security bug 1028722
+    - Security bug 1029002
+    - Security bug 1029027
+    - Security bug 1029210
+    - Security bug 1029506
+    - Security bug 1033260
+    - Security bug 1034695
+    - Security bug 1035371
diff --git a/dist/changes-5.12.8 b/dist/changes-5.12.8
new file mode 100644
index 00000000000..5a474e9c08c
--- /dev/null
+++ b/dist/changes-5.12.8
@@ -0,0 +1,73 @@
+Qt 5.12.8 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 5.12.0 through 5.12.7.
+
+For more details, refer to the online documentation included in this
+distribution. The documentation is also available online:
+
+https://doc.qt.io/qt-5/index.html
+
+The Qt version 5.12 series is binary compatible with the 5.11.x series.
+Applications compiled for 5.11 will continue to run with 5.12.
+
+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.
+
+****************************************************************************
+*                              Qt 5.12.8 Changes                           *
+****************************************************************************
+
+General
+-------
+
+  - [QTBUG-81313] Enabled running with glibc 2.30 in Linux sandbox
+  - [QTBUG-81521] Update navigation actions when load finishes in a subframe
+  - [QTBUG-78490] Fixed crash when initiaing loads from urlChanged handlers
+
+Chromium
+--------
+
+  - Security fixes from Chromium up to version 80.0.3987.149, including:
+
+    - CVE-2019-18197 - Multiple vulnerabilities in XML
+    - CVE-2019-19923 - Out of bounds memory access in SQLite
+    - CVE-2019-19925 - Multiple vulnerabilities in SQLite
+    - CVE-2019-19926 - Inappropriate implementation in SQLite
+    - CVE-2019-20503 - Out of bounds read in usersctplib
+    - CVE-2020-6381 - Integer overflow in Javascript
+    - CVE-2020-6383 - Type confusion in V8
+    - CVE-2020-6384 - Use after free in WebAudio
+    - CVE-2020-6388 - Out of bounds memory access in WebAudio
+    - CVE-2020-6389 - Out of bounds write in WebRTC
+    - CVE-2020-6391 - Insufficient validation of untrusted input in Blink
+    - CVE-2020-6393 - Insufficient policy enforcement in Blink
+    - CVE-2020-6394 - Insufficient policy enforcement in Blink
+    - CVE-2020-6398 - Uninitialized use in PDFium
+    - CVE-2020-6399 - Insufficient policy enforcement in AppCache
+    - CVE-2020-6401
+    - CVE-2020-6405 - Out of bounds read in SQLite
+    - CVE-2020-6406 - Use after free in audio
+    - CVE-2020-6410 - Insufficient policy enforcement in navigation
+    - CVE-2020-6411
+    - CVE-2020-6412 - Insufficient validation of untrusted input in Omnibox
+    - CVE-2020-6413 - Inappropriate implementation in Blink
+    - CVE-2020-6418 - Type confusion in V8
+    - CVE-2020-6420 - Insufficient policy enforcement in media
+    - Security bug 1016038
+    - Security bug 1016506
+    - Security bug 1018629
+    - Security bug 1020031
+    - Security bug 1025442
+    - Security bug 1026293
+    - Security bug 1029865
+    - Security bug 1031909
+    - Security bug 1033461
+    - Security bug 1035723
+    - Security bug 1040700
+    - Security bug 1044570
+    - Security bug 1047097
+
diff --git a/dist/changes-5.12.9 b/dist/changes-5.12.9
new file mode 100644
index 00000000000..57badb1a30d
--- /dev/null
+++ b/dist/changes-5.12.9
@@ -0,0 +1,55 @@
+Qt 5.12.9 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 5.12.0 through 5.12.8.
+
+For more details, refer to the online documentation included in this
+distribution. The documentation is also available online:
+
+https://doc.qt.io/qt-5/index.html
+
+The Qt version 5.12 series is binary compatible with the 5.11.x series.
+Applications compiled for 5.11 will continue to run with 5.12.
+
+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.
+
+****************************************************************************
+*                              Qt 5.12.9 Changes                           *
+****************************************************************************
+
+General
+-------
+
+  - [QTBUG-83318] Fix macOS build after 10.15.4
+
+Chromium
+--------
+
+  - Security fixes from Chromium up to version 83.0.4103.97, including:
+
+    - CVE-2020-6423
+    - CVE-2020-6431
+    - CVE-2020-6432
+    - CVE-2020-6441
+    - CVE-2020-6443
+    - CVE-2020-6450
+    - CVE-2020-6451
+    - CVE-2020-6452
+    - CVE-2020-6455
+    - CVE-2020-6460
+    - CVE-2020-6461
+    - CVE-2020-6464
+    - CVE-2020-6467
+    - CVE-2020-6468
+    - CVE-2020-6493
+    - Security Bug 1025302
+    - Security Bug 1025740
+    - Security Bug 1050090
+    - Security Bug 1065094
+    - Security Bug 1066893
+    - Security Bug 1070012
+    - Security Bug 1075907
diff --git a/src/3rdparty b/src/3rdparty
index 111349f18a4..92253f4cc04 160000
--- a/src/3rdparty
+++ b/src/3rdparty
@@ -1 +1 @@
-Subproject commit 111349f18a4d352d40c1c106a6f8e98a9f843894
+Subproject commit 92253f4cc04b8fddd238e2fc9309d8c33c8bdc05
diff --git a/src/core/clipboard_qt.cpp b/src/core/clipboard_qt.cpp
index 44756bdfe93..c3724d4090f 100644
--- a/src/core/clipboard_qt.cpp
+++ b/src/core/clipboard_qt.cpp
@@ -235,7 +235,14 @@ void ClipboardQt::WriteText(const char* text_data, size_t text_len)
 
 void ClipboardQt::WriteHTML(const char* markup_data, size_t markup_len, const char* url_data, size_t url_len)
 {
-    getUncommittedData()->setHtml(QString::fromUtf8(markup_data, markup_len));
+    QString markup_string = QString::fromUtf8(markup_data, markup_len);
+#if defined (Q_OS_MACOS)
+    // We need to prepend the charset on macOS to prevent garbled Unicode characters
+    // when pasting to certain applications (e.g. Notes, TextEdit)
+    // Mirrors the behavior in ui/base/clipboard/clipboard_mac.mm in Chromium.
+    markup_string.prepend(QLatin1String("<meta charset='utf-8'>"));
+#endif
+    getUncommittedData()->setHtml(markup_string);
 }
 
 void ClipboardQt::WriteRTF(const char* rtf_data, size_t data_len)
diff --git a/src/core/config/mac_osx.pri b/src/core/config/mac_osx.pri
index 4426901cf71..7b77a8bf7f4 100644
--- a/src/core/config/mac_osx.pri
+++ b/src/core/config/mac_osx.pri
@@ -9,6 +9,10 @@ isEmpty(QMAKE_MAC_SDK_VERSION) {
      isEmpty(QMAKE_MAC_SDK_VERSION): error("Could not resolve SDK version for \'$${QMAKE_MAC_SDK}\'")
 }
 
+# chromium/build/mac/find_sdk.py expects the SDK version (mac_sdk_min) in Major.Minor format.
+# If Patch version is provided it fails with "Exception: No Major.Minor.Patch+ SDK found"
+QMAKE_MAC_SDK_VERSION_MAJOR_MINOR = $$section(QMAKE_MAC_SDK_VERSION, ".", 0, 1)
+
 QMAKE_CLANG_DIR = "/usr"
 QMAKE_CLANG_PATH = $$eval(QMAKE_MAC_SDK.macx-clang.$${QMAKE_MAC_SDK}.QMAKE_CXX)
 !isEmpty(QMAKE_CLANG_PATH) {
@@ -27,7 +31,7 @@ gn_args += \
     clang_base_path=\"$${QMAKE_CLANG_DIR}\" \
     clang_use_chrome_plugins=false \
     mac_deployment_target=\"$${QMAKE_MACOSX_DEPLOYMENT_TARGET}\" \
-    mac_sdk_min=\"$${QMAKE_MAC_SDK_VERSION}\" \
+    mac_sdk_min=\"$${QMAKE_MAC_SDK_VERSION_MAJOR_MINOR}\" \
     mac_views_browser=false \
     toolkit_views=false \
     use_external_popup_menu=false
diff --git a/src/core/content_client_qt.cpp b/src/core/content_client_qt.cpp
index df1bc303de2..61194bae080 100644
--- a/src/core/content_client_qt.cpp
+++ b/src/core/content_client_qt.cpp
@@ -125,7 +125,8 @@ static QString getLocalAppDataDir()
 static const int32_t kPepperFlashPermissions = ppapi::PERMISSION_DEV |
                                                ppapi::PERMISSION_PRIVATE |
                                                ppapi::PERMISSION_BYPASS_USER_GESTURE |
-                                               ppapi::PERMISSION_FLASH;
+                                               ppapi::PERMISSION_FLASH |
+                                               ppapi::PERMISSION_SOCKET;
 
 namespace switches {
 const char kPpapiFlashPath[]    = "ppapi-flash-path";
diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp
index 20de0546f5b..c840b7f43be 100644
--- a/src/core/web_contents_delegate_qt.cpp
+++ b/src/core/web_contents_delegate_qt.cpp
@@ -409,8 +409,10 @@ void WebContentsDelegateQt::DidFinishLoad(content::RenderFrameHost* render_frame
         return;
     }
 
-    if (render_frame_host->GetParent())
+    if (render_frame_host->GetParent()) {
+        m_viewClient->updateNavigationActions();
         return;
+    }
 
     if (!m_faviconManager->hasCandidate())
         m_viewClient->iconChanged(QUrl());
diff --git a/src/core/web_event_factory.cpp b/src/core/web_event_factory.cpp
index fc6287dd9b1..8042c091478 100644
--- a/src/core/web_event_factory.cpp
+++ b/src/core/web_event_factory.cpp
@@ -171,8 +171,15 @@ static QString qtTextForKeyEvent(const QKeyEvent *ev, int qtKey, Qt::KeyboardMod
 {
     QString text = ev->text();
 
-    if ((qtModifiers & Qt::ControlModifier) && keyboardDriver() == KeyboardDriver::Xkb)
+    if (keyboardDriver() == KeyboardDriver::Xkb && (qtModifiers & Qt::ControlModifier)) {
         text.clear();
+    }
+
+    // Keep text for Ctrl+Alt key combinations on Windows. It is an alternative for AltGr.
+    if (keyboardDriver() == KeyboardDriver::Windows
+            && (qtModifiers & Qt::ControlModifier) && !(qtModifiers & Qt::AltModifier)) {
+        text.clear();
+    }
 
     return text;
 }
diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
index 8097689ade7..60aaead671a 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -356,7 +356,9 @@ void QQuickWebEngineViewPrivate::urlChanged(const QUrl &url)
 {
     Q_Q(QQuickWebEngineView);
     Q_UNUSED(url);
-    Q_EMIT q->urlChanged();
+    QTimer::singleShot(0, q, [q]() {
+        Q_EMIT q->urlChanged();
+    });
 }
 
 void QQuickWebEngineViewPrivate::iconChanged(const QUrl &url)
diff --git a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp
index d3c88148eab..7db223ad9a8 100644
--- a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp
+++ b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp
@@ -47,7 +47,7 @@ namespace QtWebEngineCore {
 RenderWidgetHostViewQtDelegateQuickWindow::RenderWidgetHostViewQtDelegateQuickWindow(RenderWidgetHostViewQtDelegate *realDelegate)
     : m_realDelegate(realDelegate)
 {
-    setFlags(Qt::ToolTip | Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus);
+    setFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus);
 }
 
 RenderWidgetHostViewQtDelegateQuickWindow::~RenderWidgetHostViewQtDelegateQuickWindow()
diff --git a/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp b/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp
index 653a1e421b8..7c99100eb40 100644
--- a/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp
+++ b/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp
@@ -83,6 +83,7 @@ void tst_QWebEngineUrlRequestInterceptor::cleanup()
 
 void tst_QWebEngineUrlRequestInterceptor::initTestCase()
 {
+     QSKIP("Interceptor has race condition in 5.12, skipping the test.");
 }
 
 void tst_QWebEngineUrlRequestInterceptor::cleanupTestCase()
diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
index f27dae3c791..080bba6434e 100644
--- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
+++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
@@ -1327,20 +1327,39 @@ void tst_QWebEnginePage::textEditing()
 void tst_QWebEnginePage::backActionUpdate()
 {
     QWebEngineView view;
+    view.resize(640, 480);
+    view.show();
+
     QWebEnginePage *page = view.page();
+    QSignalSpy loadSpy(page, &QWebEnginePage::loadFinished);
     QAction *action = page->action(QWebEnginePage::Back);
     QVERIFY(!action->isEnabled());
-    QSignalSpy loadSpy(page, SIGNAL(loadFinished(bool)));
-    QUrl url = QUrl("qrc:///resources/framedindex.html");
-    page->load(url);
-    QTRY_COMPARE(loadSpy.count(), 1);
+
+    page->load(QUrl("qrc:///resources/framedindex.html"));
+    QTRY_COMPARE_WITH_TIMEOUT(loadSpy.count(), 1, 20000);
     QVERIFY(!action->isEnabled());
-    QTest::mouseClick(&view, Qt::LeftButton, 0, QPoint(10, 10));
-    QEXPECT_FAIL("", "Behavior change: Load signals are emitted only for the main frame in QtWebEngine.", Continue);
-    QTRY_COMPARE_WITH_TIMEOUT(loadSpy.count(), 2, 100);
 
-    QEXPECT_FAIL("", "FIXME: Mouse events aren't passed from the QWebEngineView down to the RWHVQtDelegateWidget", Continue);
-    QVERIFY(action->isEnabled());
+    auto firstAnchorCenterInFrame = [](QWebEnginePage *page, const QString &frameName) {
+        QVariantList rectList = evaluateJavaScriptSync(page,
+            "(function(){"
+            "var frame = document.getElementsByName('" + frameName + "')[0];"
+            "var anchor = frame.contentDocument.getElementsByTagName('a')[0];"
+            "var rect = anchor.getBoundingClientRect();"
+            "return [(rect.left + rect.right) / 2, (rect.top + rect.bottom) / 2];"
+        "})()").toList();
+
+        if (rectList.count() != 2) {
+            qWarning("firstAnchorCenterInFrame failed.");
+            return QPoint();
+        }
+
+        return QPoint(rectList.at(0).toInt(), rectList.at(1).toInt());
+    };
+
+    QVERIFY(evaluateJavaScriptSync(page, "document.getElementsByName('frame_b')[0].contentDocument == undefined").toBool());
+    QTest::mouseClick(view.focusProxy(), Qt::LeftButton, 0, firstAnchorCenterInFrame(page, "frame_c"));
+    QTRY_VERIFY(evaluateJavaScriptSync(page, "document.getElementsByName('frame_b')[0].contentDocument != undefined").toBool());
+    QTRY_VERIFY(action->isEnabled());
 }
 
 #if defined(QWEBENGINEPAGE_SETTINGS)
