diff --git a/examples/webengine/recipebrowser/resources/pages/burger.html b/examples/webengine/recipebrowser/resources/pages/burger.html
index b10170cbdd2f12ae17ef4dc602a3c034ab04d316..6651cc0f06e4b8a7c7dfd7d43c0dadc026c0a447 100644
--- a/examples/webengine/recipebrowser/resources/pages/burger.html
+++ b/examples/webengine/recipebrowser/resources/pages/burger.html
@@ -11,6 +11,7 @@
   <div id="content">
 
 <img src="images/burger.jpg" alt="Insanity Burger" title="Insanity Burger" />
+
 Insanity burger
 ===============
 
diff --git a/examples/webengine/recipebrowser/resources/pages/cupcakes.html b/examples/webengine/recipebrowser/resources/pages/cupcakes.html
index e212478256e1112bbec0242dd0727832b512368d..4791c7ffafdce22026de3fcf979c08c58b8b15ca 100644
--- a/examples/webengine/recipebrowser/resources/pages/cupcakes.html
+++ b/examples/webengine/recipebrowser/resources/pages/cupcakes.html
@@ -11,6 +11,7 @@
   <div id="content">
 
 <img src="images/cupcakes.jpg" alt="Cupcakes" title="Cupcakes" />
+
 Cupcakes
 =============
 
diff --git a/examples/webengine/recipebrowser/resources/pages/pasta.html b/examples/webengine/recipebrowser/resources/pages/pasta.html
index 4de65292e2cec302f4ce6f242b1a124ba0702736..41ed1a756bfce17a312dd299ba20f9eb2c964d46 100644
--- a/examples/webengine/recipebrowser/resources/pages/pasta.html
+++ b/examples/webengine/recipebrowser/resources/pages/pasta.html
@@ -11,6 +11,7 @@
   <div id="content">
 
 <img src="images/pasta.jpg" alt="Pasta" title="Pasta" />
+
 Pasta
 =============
 
diff --git a/examples/webengine/recipebrowser/resources/pages/pizza.html b/examples/webengine/recipebrowser/resources/pages/pizza.html
index c63102934f4e2358bedafe5f02460969cd14cf32..348d809e8a3e21dad2dc9d8e62e3534f5a69d61a 100644
--- a/examples/webengine/recipebrowser/resources/pages/pizza.html
+++ b/examples/webengine/recipebrowser/resources/pages/pizza.html
@@ -11,6 +11,7 @@
   <div id="content">
 
 <img src="images/pizza.jpg" alt="Pizza Diavola" title="Pizza Diavola" />
+
 Pizza Diavola
 =============
 
diff --git a/examples/webengine/recipebrowser/resources/pages/skewers.html b/examples/webengine/recipebrowser/resources/pages/skewers.html
index 6fbf90cb436ebe25332bd57f8453693ed1fdc003..aca4c48590833c8dbc3b9a433d92645579894b44 100644
--- a/examples/webengine/recipebrowser/resources/pages/skewers.html
+++ b/examples/webengine/recipebrowser/resources/pages/skewers.html
@@ -11,6 +11,7 @@
   <div id="content">
 
 <img src="images/skewers.jpg" alt="Grilled skewers" title="Grilled skewers" />
+
 Grilled skewers
 ======================
 
diff --git a/examples/webengine/recipebrowser/resources/pages/soup.html b/examples/webengine/recipebrowser/resources/pages/soup.html
index e99f016cff46657a67f67212581d6fd671d02bcb..1b7027e5de118f7f4c1e880762c720245c7cc637 100644
--- a/examples/webengine/recipebrowser/resources/pages/soup.html
+++ b/examples/webengine/recipebrowser/resources/pages/soup.html
@@ -11,6 +11,7 @@
   <div id="content">
 
 <img src="images/soup.jpg" alt="Soup" title="Soup" />
+
 Soup
 =============
 
diff --git a/examples/webengine/recipebrowser/resources/pages/steak.html b/examples/webengine/recipebrowser/resources/pages/steak.html
index c58395d10c53776a39809a126093c86680f3bfbb..a56313e27d6dcf6b1f6ccda85650ee0ba4e26251 100644
--- a/examples/webengine/recipebrowser/resources/pages/steak.html
+++ b/examples/webengine/recipebrowser/resources/pages/steak.html
@@ -11,6 +11,7 @@
   <div id="content">
 
 <img src="images/steak.jpg" alt="Grilled steak and rice" title="Grilled steak and rice" />
+
 Grilled steak and rice
 ======================
 
diff --git a/examples/webengine/recipebrowser/resources/qml/RecipeList.qml b/examples/webengine/recipebrowser/resources/qml/RecipeList.qml
index 24be23a64dbb4c11b01e29963839e0a1285e32b7..41806986cfc703a1eb29407d807019c5c1c9fd9e 100644
--- a/examples/webengine/recipebrowser/resources/qml/RecipeList.qml
+++ b/examples/webengine/recipebrowser/resources/qml/RecipeList.qml
@@ -48,7 +48,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 2.0
+import QtQuick 2.1
 import QtQuick.Controls 2.0
 import QtQuick.Controls.Material 2.0
 import QtQuick.Layouts 1.0
diff --git a/examples/webengine/recipebrowser/resources/qml/main.qml b/examples/webengine/recipebrowser/resources/qml/main.qml
index 2639b6b5d459b86c6d16b3567dc7adefed3069e4..a9893ed67ecf01312fe4091f694cf2f22d100946 100644
--- a/examples/webengine/recipebrowser/resources/qml/main.qml
+++ b/examples/webengine/recipebrowser/resources/qml/main.qml
@@ -49,7 +49,7 @@
 ****************************************************************************/
 
 import QtQml 2.0
-import QtQuick 2.0
+import QtQuick 2.1
 import QtQuick.Controls 2.0
 import QtQuick.Controls.Material 2.0
 import QtQuick.Layouts 1.0
@@ -98,7 +98,7 @@ ApplicationWindow {
             Layout.fillWidth: true
             Layout.fillHeight: true
             focus: true
-            KeyNavigation.tab: webView
+            activeFocusOnTab: true
             onRecipeSelected: function(url) {
                 webView.showRecipe(url)
             }
@@ -109,8 +109,6 @@ ApplicationWindow {
             Layout.preferredWidth: 2 * parent.width / 3
             Layout.fillWidth: true
             Layout.fillHeight: true
-            KeyNavigation.tab: recipeList
-            KeyNavigation.priority: KeyNavigation.BeforeItem
             // Make sure focus is not taken by the web view, so user can continue navigating
             // recipes with the keyboard.
             settings.focusOnNavigationEnabled: false
diff --git a/src/3rdparty b/src/3rdparty
index d245970d5e4247e9f348b4a3be4a3a86d09c0b90..10fd63a07a381a3ab3b27ef8906817173e3ffbb8 160000
--- a/src/3rdparty
+++ b/src/3rdparty
@@ -1 +1 @@
-Subproject commit d245970d5e4247e9f348b4a3be4a3a86d09c0b90
+Subproject commit 10fd63a07a381a3ab3b27ef8906817173e3ffbb8
diff --git a/src/core/common/qt_messages.h b/src/core/common/qt_messages.h
index 1862ff29f9f087763518055c1d1f3d83b02760cd..9add826ae1c4a4672eae2e0446aaccd49dbdd45e 100644
--- a/src/core/common/qt_messages.h
+++ b/src/core/common/qt_messages.h
@@ -65,6 +65,9 @@ IPC_MESSAGE_ROUTED2(RenderViewObserverHostQt_DidFetchDocumentInnerText,
                     uint64_t /* requestId */,
                     base::string16 /* innerText */)
 
+IPC_MESSAGE_ROUTED1(RenderViewObserverQt_SetBackgroundColor,
+                    uint32_t /* color */)
+
 IPC_MESSAGE_ROUTED0(RenderViewObserverHostQt_DidFirstVisuallyNonEmptyLayout)
 
 //-----------------------------------------------------------------------------
diff --git a/src/core/config/common.pri b/src/core/config/common.pri
index 56e6d547a0904bdb36be14fc8347ff1b7ed0a559..6f3ce75b3b667c8725b0ab79e54ed0706fcd3819 100644
--- a/src/core/config/common.pri
+++ b/src/core/config/common.pri
@@ -72,6 +72,13 @@ precompile_header {
     gn_args += enable_precompiled_headers=false
 }
 
+CONFIG(release, debug|release):!isDeveloperBuild() {
+    gn_args += is_official_build=true
+} else {
+    gn_args += is_official_build=false
+    !isDeveloperBuild(): gn_args += is_unsafe_developer_build=false
+}
+
 CONFIG(release, debug|release) {
     gn_args += is_debug=false
     force_debug_info {
diff --git a/src/core/config/linux.pri b/src/core/config/linux.pri
index d04aea1407a4073dc6bed39fb002bd2df2096c75..3eb4369100b5a7fea69f2dc29c691f0012faa2fd 100644
--- a/src/core/config/linux.pri
+++ b/src/core/config/linux.pri
@@ -10,6 +10,7 @@ gn_args += \
     use_bundled_fontconfig=false \
     use_sysroot=false \
     enable_session_service=false \
+    is_cfi=false \
     toolkit_views=false \
     use_ozone=true \
     ozone_auto_platforms=false \
diff --git a/src/core/config/windows.pri b/src/core/config/windows.pri
index 3b42a0b9a27e4c7641121a7d2dda38a4d1a893cf..9eb15830d7025b220de2bcc5f08f6dfa5c9d59a3 100644
--- a/src/core/config/windows.pri
+++ b/src/core/config/windows.pri
@@ -6,7 +6,8 @@ gn_args += \
     enable_session_service=false \
     ninja_use_custom_environment_files=false \
     is_multi_dll_chrome=false \
-    win_linker_timing=true
+    win_linker_timing=true \
+    com_init_check_hook_disabled=true
 
 isDeveloperBuild() {
     gn_args += \
diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp
index 39ec143828f4ea68749efd0360d763c66e17eef4..414fc6582fbc1531ce313b4c4309032c84df6cec 100644
--- a/src/core/render_widget_host_view_qt.cpp
+++ b/src/core/render_widget_host_view_qt.cpp
@@ -40,6 +40,7 @@
 #include "render_widget_host_view_qt.h"
 
 #include "browser_accessibility_manager_qt.h"
+#include "common/qt_messages.h"
 #include "compositor/compositor.h"
 #include "qtwebenginecoreglobal_p.h"
 #include "render_widget_host_view_qt_delegate.h"
@@ -439,6 +440,7 @@ void RenderWidgetHostViewQt::UpdateBackgroundColor()
     auto color = GetBackgroundColor();
     if (color) {
         m_delegate->setClearColor(toQt(*color));
+        host()->Send(new RenderViewObserverQt_SetBackgroundColor(host()->GetRoutingID(), *color));
     }
 }
 
@@ -1108,7 +1110,7 @@ void RenderWidgetHostViewQt::closePopup()
     // (hiding the widget and automatic memory cleanup via
     // RenderWidget::CloseWidgetSoon() -> RenderWidgetHostImpl::ShutdownAndDestroyWidget(true).
     host()->SetActive(false);
-    host()->Blur();
+    host()->LostFocus();
 }
 
 void RenderWidgetHostViewQt::ProcessAckedTouchEvent(const content::TouchEventWithLatencyInfo &touch, content::InputEventAckState ack_result) {
@@ -1631,7 +1633,7 @@ void RenderWidgetHostViewQt::handleFocusEvent(QFocusEvent *ev)
         ev->accept();
     } else if (ev->lostFocus()) {
         host()->SetActive(false);
-        host()->Blur();
+        host()->LostFocus();
         ev->accept();
     }
 }
diff --git a/src/core/renderer/render_view_observer_qt.cpp b/src/core/renderer/render_view_observer_qt.cpp
index 07dadfd408d401c3fb4b27b2464a457d2b64b680..2795de4b98b5f046a647a57d371993c996966ced 100644
--- a/src/core/renderer/render_view_observer_qt.cpp
+++ b/src/core/renderer/render_view_observer_qt.cpp
@@ -78,6 +78,11 @@ void RenderViewObserverQt::onFetchDocumentInnerText(quint64 requestId)
     Send(new RenderViewObserverHostQt_DidFetchDocumentInnerText(routing_id(), requestId, text.Utf16()));
 }
 
+void RenderViewObserverQt::onSetBackgroundColor(quint32 color)
+{
+    render_view()->GetWebView()->SetBaseBackgroundColor(color);
+}
+
 void RenderViewObserverQt::OnDestruct()
 {
     delete this;
@@ -89,6 +94,7 @@ bool RenderViewObserverQt::OnMessageReceived(const IPC::Message& message)
     IPC_BEGIN_MESSAGE_MAP(RenderViewObserverQt, message)
         IPC_MESSAGE_HANDLER(RenderViewObserverQt_FetchDocumentMarkup, onFetchDocumentMarkup)
         IPC_MESSAGE_HANDLER(RenderViewObserverQt_FetchDocumentInnerText, onFetchDocumentInnerText)
+        IPC_MESSAGE_HANDLER(RenderViewObserverQt_SetBackgroundColor, onSetBackgroundColor)
         IPC_MESSAGE_UNHANDLED(handled = false)
     IPC_END_MESSAGE_MAP()
     return handled;
diff --git a/src/core/renderer/render_view_observer_qt.h b/src/core/renderer/render_view_observer_qt.h
index 83c0cd265485f3cc449b0839745a7068c117d07d..abb472f0200ad951ba0c22ac52d0c46c1b0ee091 100644
--- a/src/core/renderer/render_view_observer_qt.h
+++ b/src/core/renderer/render_view_observer_qt.h
@@ -55,6 +55,7 @@ public:
 private:
     void onFetchDocumentMarkup(quint64 requestId);
     void onFetchDocumentInnerText(quint64 requestId);
+    void onSetBackgroundColor(quint32 color);
 
     void OnDestruct() override;
 
diff --git a/src/core/web_contents_adapter_client.h b/src/core/web_contents_adapter_client.h
index cdfcae450ce45a7498b1c0216b29c3d6a07ff284..beb41e17f4d57f096db01a5f6d4376bc0845ee3a 100644
--- a/src/core/web_contents_adapter_client.h
+++ b/src/core/web_contents_adapter_client.h
@@ -448,7 +448,7 @@ public:
     virtual void didFindText(quint64 requestId, int matchCount) = 0;
     virtual void didPrintPage(quint64 requestId, QSharedPointer<QByteArray>) = 0;
     virtual void didPrintPageToPdf(const QString &filePath, bool success) = 0;
-    virtual void passOnFocus(bool reverse) = 0;
+    virtual bool passOnFocus(bool reverse) = 0;
     // returns the last QObject (QWidget/QQuickItem) based object in the accessibility
     // hierarchy before going into the BrowserAccessibility tree
     virtual QObject *accessibilityParentObject() = 0;
diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp
index adc05253d8d954ce9d32e9505c0f5c315c9e3763..021044a7126bb27b2418acb73a77270d6fa2f075 100644
--- a/src/core/web_contents_delegate_qt.cpp
+++ b/src/core/web_contents_delegate_qt.cpp
@@ -704,6 +704,12 @@ void WebContentsDelegateQt::UnregisterProtocolHandler(content::WebContents *webC
     registry->RemoveHandler(handler);
 }
 
+bool WebContentsDelegateQt::TakeFocus(content::WebContents *source, bool reverse)
+{
+    Q_UNUSED(source);
+    return m_viewClient->passOnFocus(reverse);
+}
+
 FaviconManager *WebContentsDelegateQt::faviconManager()
 {
     return m_faviconManager.data();
diff --git a/src/core/web_contents_delegate_qt.h b/src/core/web_contents_delegate_qt.h
index ee1bca81fd4a3f74d0620631bb5de8145159c717..1629222c25e1d93bfc184c1d6d642570b449c8f4 100644
--- a/src/core/web_contents_delegate_qt.h
+++ b/src/core/web_contents_delegate_qt.h
@@ -129,6 +129,7 @@ public:
     bool CheckMediaAccessPermission(content::RenderFrameHost* render_frame_host, const GURL& security_origin, blink::MediaStreamType type) override;
     void RegisterProtocolHandler(content::WebContents* web_contents, const std::string& protocol, const GURL& url, bool user_gesture) override;
     void UnregisterProtocolHandler(content::WebContents* web_contents, const std::string& protocol, const GURL& url, bool user_gesture) override;
+    bool TakeFocus(content::WebContents *source, bool reverse) override;
 
     // WebContentsObserver overrides
     void RenderFrameDeleted(content::RenderFrameHost *render_frame_host) override;
diff --git a/src/core/web_contents_view_qt.cpp b/src/core/web_contents_view_qt.cpp
index 7177a8713c7ad78eff025fca57b06ae66e145d73..ef7c096653ddd8e53abdc4bcd5995c6cb1a6ed7c 100644
--- a/src/core/web_contents_view_qt.cpp
+++ b/src/core/web_contents_view_qt.cpp
@@ -55,6 +55,7 @@
 #include "content/browser/renderer_host/render_view_host_impl.h"
 #include "content/browser/renderer_host/render_widget_host_impl.h"
 #include "content/browser/web_contents/web_contents_impl.h"
+#include "content/public/browser/web_contents_delegate.h"
 #include "content/public/common/context_menu_params.h"
 #include "ui/gfx/image/image_skia.h"
 
@@ -141,6 +142,22 @@ void WebContentsViewQt::SetInitialFocus()
     Focus();
 }
 
+void WebContentsViewQt::FocusThroughTabTraversal(bool reverse)
+{
+    content::WebContentsImpl *web_contents = static_cast<content::WebContentsImpl*>(m_webContents);
+    if (web_contents->ShowingInterstitialPage()) {
+        web_contents->GetInterstitialPage()->FocusThroughTabTraversal(reverse);
+        return;
+    }
+    content::RenderWidgetHostView *fullscreen_view = web_contents->GetFullscreenRenderWidgetHostView();
+    if (fullscreen_view) {
+        fullscreen_view->Focus();
+        return;
+    }
+    web_contents->GetRenderViewHost()->SetInitialFocus(reverse);
+}
+
+
 ASSERT_ENUMS_MATCH(WebEngineContextMenuData::MediaTypeNone, blink::WebContextMenuData::kMediaTypeNone)
 ASSERT_ENUMS_MATCH(WebEngineContextMenuData::MediaTypeImage, blink::WebContextMenuData::kMediaTypeImage)
 ASSERT_ENUMS_MATCH(WebEngineContextMenuData::MediaTypeVideo, blink::WebContextMenuData::kMediaTypeVideo)
@@ -265,25 +282,22 @@ void WebContentsViewQt::UpdateDragCursor(blink::WebDragOperation dragOperation)
 #endif // QT_CONFIG(draganddrop)
 }
 
-void WebContentsViewQt::TakeFocus(bool reverse)
+void WebContentsViewQt::GotFocus(content::RenderWidgetHostImpl* render_widget_host)
 {
-    m_client->passOnFocus(reverse);
+    content::WebContentsImpl *web_contents = static_cast<content::WebContentsImpl*>(m_webContents);
+    web_contents->NotifyWebContentsFocused(render_widget_host);
 }
 
-void WebContentsViewQt::FocusThroughTabTraversal(bool reverse)
+void WebContentsViewQt::LostFocus(content::RenderWidgetHostImpl* render_widget_host)
 {
     content::WebContentsImpl *web_contents = static_cast<content::WebContentsImpl*>(m_webContents);
-    if (web_contents->ShowingInterstitialPage()) {
-        web_contents->GetInterstitialPage()->FocusThroughTabTraversal(reverse);
-        return;
-    }
-    content::RenderWidgetHostView *fullscreen_view = web_contents->GetFullscreenRenderWidgetHostView();
-    if (fullscreen_view) {
-        fullscreen_view->Focus();
-        return;
-    }
-    web_contents->GetRenderViewHost()->SetInitialFocus(reverse);
+    web_contents->NotifyWebContentsLostFocus(render_widget_host);
 }
 
+void WebContentsViewQt::TakeFocus(bool reverse)
+{
+    if (m_webContents->GetDelegate())
+        m_webContents->GetDelegate()->TakeFocus(m_webContents, reverse);
+}
 
 } // namespace QtWebEngineCore
diff --git a/src/core/web_contents_view_qt.h b/src/core/web_contents_view_qt.h
index 7cd3910f20bf39b0b508f8053c25d146c1e076f7..ec09f9aae2bb84025005b0d76a992525e90fd1fc 100644
--- a/src/core/web_contents_view_qt.h
+++ b/src/core/web_contents_view_qt.h
@@ -69,6 +69,7 @@ public:
     void setClient(WebContentsAdapterClient* client);
     WebContentsAdapterClient *client() { return m_client; }
 
+    // content::WebContentsView overrides:
     content::RenderWidgetHostViewBase *CreateViewForWidget(content::RenderWidgetHost* render_widget_host, bool is_guest_view_hack) override;
 
     void CreateView(const gfx::Size& initial_size, gfx::NativeView context) override;
@@ -107,6 +108,14 @@ public:
 
     gfx::Rect GetViewBounds() const override { return gfx::Rect(); }
 
+    void FocusThroughTabTraversal(bool reverse) override;
+
+#if defined(OS_MACOSX)
+    void CloseTabAfterEventTracking() override { QT_NOT_YET_IMPLEMENTED }
+    bool IsEventTracking() const override { QT_NOT_YET_IMPLEMENTED; return false; }
+#endif // defined(OS_MACOSX)
+
+    // content::RenderViewHostDelegateView overrides:
     void StartDragging(const content::DropData& drop_data, blink::WebDragOperationsMask allowed_ops,
                        const gfx::ImageSkia& image, const gfx::Vector2d& image_offset,
                        const content::DragEventSourceInfo& event_info,
@@ -116,16 +125,10 @@ public:
 
     void ShowContextMenu(content::RenderFrameHost *, const content::ContextMenuParams &params) override;
 
+    void GotFocus(content::RenderWidgetHostImpl *render_widget_host) override;
+    void LostFocus(content::RenderWidgetHostImpl *render_widget_host) override;
     void TakeFocus(bool reverse) override;
 
-    void FocusThroughTabTraversal(bool reverse) override;
-
-
-#if defined(OS_MACOSX)
-    void CloseTabAfterEventTracking() override { QT_NOT_YET_IMPLEMENTED }
-    bool IsEventTracking() const override { QT_NOT_YET_IMPLEMENTED; return false; }
-#endif // defined(OS_MACOSX)
-
 private:
     content::WebContents *m_webContents;
     WebContentsAdapterClient *m_client;
diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
index 3290fe4484b10ba8baabfbe2c98b8bb55f8b969b..9826ebfe24e563455285810bdb318e50fee7819d 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -348,12 +348,16 @@ void QQuickWebEngineViewPrivate::runFileChooser(QSharedPointer<FilePickerControl
         ui()->showFilePicker(controller);
 }
 
-void QQuickWebEngineViewPrivate::passOnFocus(bool reverse)
+bool QQuickWebEngineViewPrivate::passOnFocus(bool reverse)
 {
     Q_Q(QQuickWebEngineView);
     // The child delegate currently has focus, find the next one from there and give it focus.
     QQuickItem *next = q->scopedFocusItem()->nextItemInFocusChain(!reverse);
-    next->forceActiveFocus(reverse ? Qt::BacktabFocusReason : Qt::TabFocusReason);
+    if (next) {
+        next->forceActiveFocus(reverse ? Qt::BacktabFocusReason : Qt::TabFocusReason);
+        return true;
+    }
+    return false;
 }
 
 void QQuickWebEngineViewPrivate::titleChanged(const QString &title)
diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h
index e625e0ccc615a2161d6e359460d5675b50b2c71c..aa0a765f86da1ad86f2f6bc824438d74202fed60 100644
--- a/src/webengine/api/qquickwebengineview_p_p.h
+++ b/src/webengine/api/qquickwebengineview_p_p.h
@@ -133,7 +133,7 @@ public:
     void didFindText(quint64, int) override;
     void didPrintPage(quint64 requestId, QSharedPointer<QByteArray>) override;
     void didPrintPageToPdf(const QString &filePath, bool success) override;
-    void passOnFocus(bool reverse) override;
+    bool passOnFocus(bool reverse) override;
     void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString& message, int lineNumber, const QString& sourceID) override;
     void authenticationRequired(QSharedPointer<QtWebEngineCore::AuthenticationDialogController>) override;
     void runMediaAccessPermissionRequest(const QUrl &securityOrigin, MediaRequestFlags requestFlags) override;
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp
index 696b6723f0a38dad4865768a5e60d397e242f3af..9c6749f391e278de930bcf678200e10dfacee583 100644
--- a/src/webenginewidgets/api/qwebenginepage.cpp
+++ b/src/webenginewidgets/api/qwebenginepage.cpp
@@ -456,10 +456,11 @@ void QWebEnginePagePrivate::didPrintPage(quint64 requestId, QSharedPointer<QByte
 #endif
 }
 
-void QWebEnginePagePrivate::passOnFocus(bool reverse)
+bool QWebEnginePagePrivate::passOnFocus(bool reverse)
 {
     if (view)
-        view->focusNextPrevChild(!reverse);
+        return view->focusNextPrevChild(!reverse);
+    return false;
 }
 
 void QWebEnginePagePrivate::authenticationRequired(QSharedPointer<AuthenticationDialogController> controller)
@@ -1789,9 +1790,11 @@ void QWebEnginePagePrivate::setToolTip(const QString &toolTipText)
     }
 
     // Update tooltip if text was changed.
-    QString escapedTip = toolTipText.toHtmlEscaped().left(MaxTooltipLength);
-    if (view->toolTip() != escapedTip)
-        view->setToolTip(escapedTip);
+    QString wrappedTip = QLatin1String("<p style=\"white-space:pre\">")
+            % toolTipText.toHtmlEscaped().left(MaxTooltipLength)
+            % QLatin1String("</p>");
+    if (view->toolTip() != wrappedTip)
+        view->setToolTip(wrappedTip);
 }
 
 void QWebEnginePagePrivate::printRequested()
diff --git a/src/webenginewidgets/api/qwebenginepage_p.h b/src/webenginewidgets/api/qwebenginepage_p.h
index 0db462a0ae10b64664ce2a45c0c7e9793de549fa..5feefeb0e4fdbf81cad74031fa069cc52c1a24ea 100644
--- a/src/webenginewidgets/api/qwebenginepage_p.h
+++ b/src/webenginewidgets/api/qwebenginepage_p.h
@@ -127,7 +127,7 @@ public:
     void didFindText(quint64 requestId, int matchCount) override;
     void didPrintPage(quint64 requestId, QSharedPointer<QByteArray> result) override;
     void didPrintPageToPdf(const QString &filePath, bool success) override;
-    void passOnFocus(bool reverse) override;
+    bool passOnFocus(bool reverse) override;
     void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString& message, int lineNumber, const QString& sourceID) override;
     void authenticationRequired(QSharedPointer<QtWebEngineCore::AuthenticationDialogController>) override;
     void releaseProfile() override;