diff --git a/src/core/access_token_store_qt.cpp b/src/core/access_token_store_qt.cpp
deleted file mode 100644
index ebc010408ff2beb106120ebac575726d352244fd..0000000000000000000000000000000000000000
--- a/src/core/access_token_store_qt.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtWebEngine module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE.Chromium file.
-
-#include "access_token_store_qt.h"
-
-#include "base/bind.h"
-#include "base/message_loop/message_loop.h"
-#include "base/strings/utf_string_conversions.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/storage_partition.h"
-
-#include "browser_context_qt.h"
-#include "browser_context_adapter.h"
-#include "content_browser_client_qt.h"
-#include "web_engine_context.h"
-
-namespace QtWebEngineCore {
-
-using device::AccessTokenStore;
-using content::BrowserThread;
-
-AccessTokenStoreQt::AccessTokenStoreQt()
-    : m_systemRequestContext(0)
-{
-}
-
-AccessTokenStoreQt::~AccessTokenStoreQt()
-{
-}
-
-void AccessTokenStoreQt::LoadAccessTokens(const LoadAccessTokensCallback& callback)
-{
-    BrowserThread::PostTaskAndReply(BrowserThread::UI, FROM_HERE
-                , base::Bind(&AccessTokenStoreQt::performWorkOnUIThread, this)
-                , base::Bind(&AccessTokenStoreQt::respondOnOriginatingThread, this, callback));
-}
-
-void AccessTokenStoreQt::performWorkOnUIThread()
-{
-    m_systemRequestContext = content::BrowserContext::GetDefaultStoragePartition(WebEngineContext::current()->defaultBrowserContext()->browserContext())->GetURLRequestContext();
-}
-
-void AccessTokenStoreQt::respondOnOriginatingThread(const LoadAccessTokensCallback& callback)
-{
-    callback.Run(m_accessTokenSet, m_systemRequestContext);
-    m_systemRequestContext = 0;
-}
-
-void AccessTokenStoreQt::SaveAccessToken(const GURL& serverUrl, const base::string16& accessToken)
-{
-    m_accessTokenSet[serverUrl] = accessToken;
-}
-
-} // namespace QtWebEngineCore
diff --git a/src/core/access_token_store_qt.h b/src/core/access_token_store_qt.h
deleted file mode 100644
index 74fc0c898a82100936023d1c813e67b3a4f1da5c..0000000000000000000000000000000000000000
--- a/src/core/access_token_store_qt.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtWebEngine module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef ACCESS_TOKEN_STORE_QT_H
-#define ACCESS_TOKEN_STORE_QT_H
-
-#include "base/memory/ref_counted.h"
-#include "device/geolocation/access_token_store.h"
-
-#include <QtCore/QFile>
-#include <QtCore/QScopedPointer>
-
-namespace net {
-class URLRequestContextGetter;
-}
-
-namespace QtWebEngineCore {
-
-class AccessTokenStoreQt : public device::AccessTokenStore {
-public:
-    AccessTokenStoreQt();
-    ~AccessTokenStoreQt();
-
-    void LoadAccessTokens(const LoadAccessTokensCallback& request) override;
-    void SaveAccessToken(const GURL& serverUrl, const base::string16& accessToken) override;
-
-private:
-    void performWorkOnUIThread();
-    void respondOnOriginatingThread(const LoadAccessTokensCallback& callback);
-
-
-    net::URLRequestContextGetter *m_systemRequestContext;
-    AccessTokenMap m_accessTokenSet;
-
-    DISALLOW_COPY_AND_ASSIGN(AccessTokenStoreQt);
-};
-
-} // namespace QtWebEngineCore
-
-#endif  // ACCESS_TOKEN_STORE_QT_H
diff --git a/src/core/browser_accessibility_manager_qt.cpp b/src/core/browser_accessibility_manager_qt.cpp
index 730786bbd5f0659e3446fd42b2a9a713df7042dd..50319e11c31b09a0fce3654d254799103686e0a3 100644
--- a/src/core/browser_accessibility_manager_qt.cpp
+++ b/src/core/browser_accessibility_manager_qt.cpp
@@ -82,9 +82,8 @@ QAccessibleInterface *BrowserAccessibilityManagerQt::rootParentAccessible()
     return QAccessible::queryAccessibleInterface(m_parentObject);
 }
 
-void BrowserAccessibilityManagerQt::NotifyAccessibilityEvent(BrowserAccessibilityEvent::Source source,
-                                                             ui::AXEvent event_type,
-                                                             BrowserAccessibility* node)
+void BrowserAccessibilityManagerQt::FireBlinkEvent(ui::AXEvent event_type,
+                                                   BrowserAccessibility* node)
 {
     BrowserAccessibilityQt *iface = static_cast<BrowserAccessibilityQt*>(node);
 
diff --git a/src/core/browser_accessibility_manager_qt.h b/src/core/browser_accessibility_manager_qt.h
index 239d7344645d82dc620beb7489b423c330b80622..e2315d98abb047846718b01c87e998d978b98315 100644
--- a/src/core/browser_accessibility_manager_qt.h
+++ b/src/core/browser_accessibility_manager_qt.h
@@ -63,10 +63,8 @@ public:
                                   const ui::AXTreeUpdate& initialTree,
                                   BrowserAccessibilityDelegate* delegate,
                                   BrowserAccessibilityFactory* factory = new BrowserAccessibilityFactoryQt());
-
-    void NotifyAccessibilityEvent(BrowserAccessibilityEvent::Source source,
-                                  ui::AXEvent event_type,
-                                  BrowserAccessibility* node) override;
+    void FireBlinkEvent(ui::AXEvent event_type,
+                        BrowserAccessibility* node) override;
 
     QAccessibleInterface *rootParentAccessible();
 
diff --git a/src/core/browser_accessibility_qt.cpp b/src/core/browser_accessibility_qt.cpp
index 8441fdad514f1738c3092ba3dc9c4d3442d77600..89a6f0992302fff939a3f4898d534cb688da758e 100644
--- a/src/core/browser_accessibility_qt.cpp
+++ b/src/core/browser_accessibility_qt.cpp
@@ -236,7 +236,9 @@ QAccessible::Role BrowserAccessibilityQt::role() const
         return QAccessible::Column;
     case ui::AX_ROLE_COLUMN_HEADER:
         return QAccessible::ColumnHeader;
-    case ui::AX_ROLE_COMBO_BOX:
+    case ui::AX_ROLE_COMBO_BOX_GROUPING:
+    case ui::AX_ROLE_COMBO_BOX_MENU_BUTTON:
+    case ui::AX_ROLE_TEXT_FIELD_WITH_COMBO_BOX:
         return QAccessible::ComboBox;
     case ui::AX_ROLE_COMPLEMENTARY:
         return QAccessible::ComplementaryContent;
diff --git a/src/core/browser_message_filter_qt.cpp b/src/core/browser_message_filter_qt.cpp
index 5248c2a736dc185fdd094dd72b36db824b47539f..72b38e1bbfded442df1aad373707408fc7d264f5 100644
--- a/src/core/browser_message_filter_qt.cpp
+++ b/src/core/browser_message_filter_qt.cpp
@@ -70,9 +70,8 @@ bool BrowserMessageFilterQt::OnMessageReceived(const IPC::Message& message)
 
 #if BUILDFLAG(ENABLE_LIBRARY_CDMS)
 void BrowserMessageFilterQt::OnIsInternalPluginAvailableForMimeType(
-    const std::string& mime_type, bool* is_available,
-    std::vector<base::string16>* additional_param_names,
-    std::vector<base::string16>* additional_param_values)
+    const std::string& mime_type,
+    base::Optional<std::vector<content::WebPluginMimeType::Param>> *opt_additional_params)
 {
     std::vector<content::WebPluginInfo> plugins;
     content::PluginService::GetInstance()->GetInternalPlugins(&plugins);
@@ -82,15 +81,11 @@ void BrowserMessageFilterQt::OnIsInternalPluginAvailableForMimeType(
         const std::vector<content::WebPluginMimeType>& mime_types = plugin.mime_types;
         for (size_t j = 0; j < mime_types.size(); ++j) {
             if (mime_types[j].mime_type == mime_type) {
-                *is_available = true;
-                *additional_param_names = mime_types[j].additional_param_names;
-                *additional_param_values = mime_types[j].additional_param_values;
+                *opt_additional_params = base::make_optional(mime_types[j].additional_params);
                 return;
             }
         }
     }
-
-    *is_available = false;
 }
 
 #endif // BUILDFLAG(ENABLE_LIBRARY_CDMS)
diff --git a/src/core/browser_message_filter_qt.h b/src/core/browser_message_filter_qt.h
index 175319805ca2fcf7a18be962d6976505bc693335..9ad9a0e6ed6a65e7df6e0a28cd29caaa5f09eed3 100644
--- a/src/core/browser_message_filter_qt.h
+++ b/src/core/browser_message_filter_qt.h
@@ -41,6 +41,7 @@
 #define BROWSER_MESSAGE_FILTER_QT_H
 
 #include "content/public/browser/browser_message_filter.h"
+#include "content/public/common/webplugininfo.h"
 #include "media/media_features.h"
 
 namespace QtWebEngineCore {
@@ -62,9 +63,7 @@ private:
     // |mime_type|.
     void OnIsInternalPluginAvailableForMimeType(
         const std::string& mime_type,
-        bool* is_available,
-        std::vector<base::string16>* additional_param_names,
-        std::vector<base::string16>* additional_param_values);
+        base::Optional<std::vector<content::WebPluginMimeType::Param>> *opt_additional_params);
 #endif
 };
 
diff --git a/src/core/common/qt_messages.h b/src/core/common/qt_messages.h
index 3bedb10d217f667e84d7791770fc17fd6b4eef3b..62d88521cf4b10f3e22461d869376189bd3a91e7 100644
--- a/src/core/common/qt_messages.h
+++ b/src/core/common/qt_messages.h
@@ -4,11 +4,12 @@
 
 // Multiply-included file, no traditional include guard.
 
+#include "base/optional.h"
 #include "media/media_features.h"
 #include "content/public/common/common_param_traits.h"
+#include "content/public/common/webplugininfo.h"
 #include "ipc/ipc_message_macros.h"
 #include "ppapi/features/features.h"
-
 #include "user_script_data.h"
 
 IPC_STRUCT_TRAITS_BEGIN(UserScriptData)
@@ -81,9 +82,7 @@ IPC_MESSAGE_ROUTED1(WebChannelIPCTransportHost_SendMessage, std::vector<char> /*
 // When the returned *|is_available| is true, |additional_param_names| and
 // |additional_param_values| contain the name-value pairs, if any, specified
 // for the *first* non-disabled plugin found that is registered for |mime_type|.
-IPC_SYNC_MESSAGE_CONTROL1_3(QtWebEngineHostMsg_IsInternalPluginAvailableForMimeType,
+IPC_SYNC_MESSAGE_CONTROL1_1(QtWebEngineHostMsg_IsInternalPluginAvailableForMimeType,
                             std::string /* mime_type */,
-                            bool /* is_available */,
-                            std::vector<base::string16> /* additional_param_names */,
-                            std::vector<base::string16> /* additional_param_values */)
+                            base::Optional<std::vector<content::WebPluginMimeType::Param>>)
 #endif
diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp
index 446764f19ae027e136b876fc397eb59635e7d83f..18d0ff1c92ccbb7d1992af41aaf6aa03abe74717 100644
--- a/src/core/content_browser_client_qt.cpp
+++ b/src/core/content_browser_client_qt.cpp
@@ -39,6 +39,7 @@
 
 #include "content_browser_client_qt.h"
 
+#include "base/json/json_reader.h"
 #include "base/memory/ptr_util.h"
 #include "base/message_loop/message_loop.h"
 #include "base/threading/thread_restrictions.h"
@@ -64,15 +65,15 @@
 #include "content/public/browser/web_contents_user_data.h"
 #include "content/public/common/content_switches.h"
 #include "content/public/common/main_function_params.h"
+#include "content/public/common/service_names.mojom.h"
 #include "content/public/common/url_constants.h"
-#include "device/geolocation/geolocation_delegate.h"
-#include "device/geolocation/geolocation_provider.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "printing/features/features.h"
 #include "net/ssl/client_cert_identity.h"
 #include "services/service_manager/public/cpp/bind_source_info.h"
 #include "services/service_manager/public/cpp/binder_registry.h"
+#include "services/service_manager/public/cpp/service.h"
 #include "third_party/WebKit/public/platform/modules/insecure_input/insecure_input_service.mojom.h"
 #include "ui/base/ui_base_switches.h"
 #include "ui/display/screen.h"
@@ -81,7 +82,8 @@
 #include "ui/gl/gl_share_group.h"
 #include "ui/gl/gpu_timing.h"
 
-#include "access_token_store_qt.h"
+#include "chrome/grit/qt_webengine_resources.h"
+
 #include "browser_context_adapter.h"
 #include "browser_context_qt.h"
 #include "browser_message_filter_qt.h"
@@ -89,11 +91,6 @@
 #include "certificate_error_controller_p.h"
 #include "desktop_screen_qt.h"
 #include "devtools_manager_delegate_qt.h"
-#ifdef QT_USE_POSITIONING
-#include "location_provider_qt.h"
-#else
-#include "device/geolocation/location_provider.h"
-#endif
 #include "media_capture_devices_dispatcher.h"
 #include "network_delegate_qt.h"
 #if BUILDFLAG(ENABLE_BASIC_PRINTING)
@@ -249,28 +246,6 @@ std::unique_ptr<base::MessagePump> messagePumpFactory()
     return base::WrapUnique(new MessagePumpForUIQt);
 }
 
-// A provider of services needed by Geolocation.
-class GeolocationDelegateQt : public device::GeolocationDelegate {
-public:
-    GeolocationDelegateQt() {}
-    scoped_refptr<device::AccessTokenStore> CreateAccessTokenStore() final
-    {
-        return scoped_refptr<device::AccessTokenStore>(new AccessTokenStoreQt);
-    }
-
-    std::unique_ptr<device::LocationProvider> OverrideSystemLocationProvider() final
-    {
-#ifdef QT_USE_POSITIONING
-        return base::WrapUnique(new LocationProviderQt);
-#else
-        return nullptr;
-#endif
-    }
-
-private:
-    DISALLOW_COPY_AND_ASSIGN(GeolocationDelegateQt);
-};
-
 }  // anonymous namespace
 
 class BrowserMainPartsQt : public content::BrowserMainParts
@@ -285,11 +260,6 @@ public:
         base::MessageLoop::InitMessagePumpForUIFactory(messagePumpFactory);
     }
 
-    void PreMainMessageLoopRun() override
-    {
-        device::GeolocationProvider::SetGeolocationDelegate(new GeolocationDelegateQt());
-    }
-
     void PostMainMessageLoopRun() override
     {
         // The BrowserContext's destructor uses the MessageLoop so it should be deleted
@@ -620,19 +590,72 @@ void ContentBrowserClientQt::BindInterfaceRequestFromFrame(content::RenderFrameH
         m_frameInterfaces->TryBindInterface(interface_name, &interface_pipe);
 }
 
-void ContentBrowserClientQt::ExposeInterfacesToRenderer(service_manager::BinderRegistry *registry,
-                                                        content::AssociatedInterfaceRegistry */*associated_registry*/,
-                                                        content::RenderProcessHost *render_process_host)
+class ServiceQt : public service_manager::Service {
+public:
+    ServiceQt();
+
+    static std::unique_ptr<service_manager::Service> Create()
+    {
+        return base::MakeUnique<ServiceQt>();
+    }
+
+private:
+    // service_manager::Service:
+    void OnBindInterface(const service_manager::BindSourceInfo& remote_info,
+                         const std::string& name,
+                         mojo::ScopedMessagePipeHandle handle) override;
+
+    service_manager::BinderRegistry m_registry;
+    service_manager::BinderRegistryWithArgs<const service_manager::BindSourceInfo&> m_registry_with_source_info;
+
+    DISALLOW_COPY_AND_ASSIGN(ServiceQt);
+};
+
+ServiceQt::ServiceQt()
 {
+    DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
 #if BUILDFLAG(ENABLE_SPELLCHECK)
-    registry->AddInterface(base::Bind(&SpellCheckHostImpl::Create, render_process_host->GetID()),
-                           content::BrowserThread::GetTaskRunnerForThread(content::BrowserThread::UI));
-#else
-    Q_UNUSED(registry);
-    Q_UNUSED(render_process_host);
+    m_registry_with_source_info.AddInterface(
+            base::Bind(&SpellCheckHostImpl::Create),
+                       content::BrowserThread::GetTaskRunnerForThread(content::BrowserThread::UI));
 #endif
 }
 
+void ServiceQt::OnBindInterface(const service_manager::BindSourceInfo& remote_info,
+                                const std::string& name,
+                                mojo::ScopedMessagePipeHandle handle)
+{
+    content::OverrideOnBindInterface(remote_info, name, &handle);
+    if (!handle.is_valid())
+        return;
+
+    if (!m_registry.TryBindInterface(name, &handle))
+        m_registry_with_source_info.TryBindInterface(name, &handle, remote_info);
+}
+
+void ContentBrowserClientQt::RegisterInProcessServices(StaticServiceMap* services)
+{
+    service_manager::EmbeddedServiceInfo info;
+    info.factory = base::Bind(&ServiceQt::Create);
+    services->insert(std::make_pair("qtwebengine", info));
+}
+
+std::unique_ptr<base::Value> ContentBrowserClientQt::GetServiceManifestOverlay(base::StringPiece name)
+{
+    ui::ResourceBundle &rb = ui::ResourceBundle::GetSharedInstance();
+    int id = -1;
+    if (name == content::mojom::kPackagedServicesServiceName)
+        id = IDR_QTWEBENGINE_CONTENT_PACKAGED_SERVICES_MANIFEST_OVERLAY;
+    else if (name == content::mojom::kRendererServiceName)
+        id = IDR_QTWEBENGINE_CONTENT_RENDERER_MANIFEST_OVERLAY;
+    if (id == -1)
+        return nullptr;
+
+    base::StringPiece manifest_contents =
+        rb.GetRawDataResourceForScale(id, ui::ScaleFactor::SCALE_FACTOR_NONE);
+    return base::JSONReader::Read(manifest_contents);
+}
+
 bool ContentBrowserClientQt::CanCreateWindow(
     content::RenderFrameHost* opener,
     const GURL& opener_url,
@@ -688,14 +711,14 @@ bool ContentBrowserClientQt::AllowGetCookie(const GURL &url,
 
 bool ContentBrowserClientQt::AllowSetCookie(const GURL &url,
                                             const GURL &first_party,
-                                            const std::string &cookie_line,
+                                            const net::CanonicalCookie& /*cookie*/,
                                             content::ResourceContext *context,
                                             int /*render_process_id*/,
                                             int /*render_frame_id*/,
                                             const net::CookieOptions& /*options*/)
 {
     NetworkDelegateQt *networkDelegate = static_cast<NetworkDelegateQt *>(context->GetRequestContext()->network_delegate());
-    return networkDelegate->canSetCookies(first_party, url, cookie_line);
+    return networkDelegate->canSetCookies(first_party, url, std::string());
 }
 
 } // namespace QtWebEngineCore
diff --git a/src/core/content_browser_client_qt.h b/src/core/content_browser_client_qt.h
index 094ad65490937afb25e3d7cacc3de82176950adf..86bd2977ce4c787c872d0575aabbf9be9fdaae55 100644
--- a/src/core/content_browser_client_qt.h
+++ b/src/core/content_browser_client_qt.h
@@ -118,10 +118,8 @@ public:
     void BindInterfaceRequestFromFrame(content::RenderFrameHost* render_frame_host,
                                        const std::string& interface_name,
                                        mojo::ScopedMessagePipeHandle interface_pipe) override;
-    void ExposeInterfacesToRenderer(service_manager::BinderRegistry *registry,
-                                    content::AssociatedInterfaceRegistry *associated_registry,
-                                    content::RenderProcessHost *render_process_host) override;
-
+    void RegisterInProcessServices(StaticServiceMap* services) override;
+    std::unique_ptr<base::Value> GetServiceManifestOverlay(base::StringPiece name) override;
     bool CanCreateWindow(
         content::RenderFrameHost* opener,
         const GURL& opener_url,
@@ -146,7 +144,7 @@ public:
 
     bool AllowSetCookie(const GURL& url,
                         const GURL& first_party,
-                        const std::string& cookie_line,
+                        const net::CanonicalCookie& cookie,
                         content::ResourceContext* context,
                         int render_process_id,
                         int render_frame_id,
diff --git a/src/core/content_client_qt.cpp b/src/core/content_client_qt.cpp
index 66c63b1b8942f6472fd63c563e56380fdc432713..a412345ea717c4eb0424e3d30c38870fd4306f25 100644
--- a/src/core/content_client_qt.cpp
+++ b/src/core/content_client_qt.cpp
@@ -263,11 +263,9 @@ void AddPepperWidevine(std::vector<content::PepperPluginInfo>* plugins)
 #endif  // defined(USE_PROPRIETARY_CODECS)
             std::string codec_string =
                 base::JoinString(codecs, ",");
-            widevine_cdm_mime_type.additional_param_names.push_back(
-                base::ASCIIToUTF16(kCdmSupportedCodecsParamName));
-            widevine_cdm_mime_type.additional_param_values.push_back(
-                base::ASCIIToUTF16(codec_string));
-
+            widevine_cdm_mime_type.additional_params.emplace_back(
+                        base::ASCIIToUTF16(kCdmSupportedCodecsParamName),
+                        base::ASCIIToUTF16(codec_string));
             widevine_cdm.mime_types.push_back(widevine_cdm_mime_type);
             widevine_cdm.permissions = kWidevineCdmPluginPermissions;
             plugins->push_back(widevine_cdm);
@@ -300,12 +298,12 @@ std::string ContentClientQt::getUserAgent()
 }
 
 base::StringPiece ContentClientQt::GetDataResource(int resource_id, ui::ScaleFactor scale_factor) const {
-    return ResourceBundle::GetSharedInstance().GetRawDataResourceForScale(resource_id, scale_factor);
+    return ui::ResourceBundle::GetSharedInstance().GetRawDataResourceForScale(resource_id, scale_factor);
 }
 
 base::RefCountedMemory *ContentClientQt::GetDataResourceBytes(int resource_id) const
 {
-    return ResourceBundle::GetSharedInstance().LoadDataResourceBytes(resource_id);
+    return ui::ResourceBundle::GetSharedInstance().LoadDataResourceBytes(resource_id);
 }
 
 base::string16 ContentClientQt::GetLocalizedString(int message_id) const
diff --git a/src/core/core_chromium.pri b/src/core/core_chromium.pri
index e62ffdbfbaf9c9f3a6df9bb4eac4117446b32cc0..783c41e883f4d4dfee165216191dd5dcfb026e25 100644
--- a/src/core/core_chromium.pri
+++ b/src/core/core_chromium.pri
@@ -35,7 +35,6 @@ qtConfig(egl): CONFIG += egl
 INCLUDEPATH += $$PWD $$PWD/api
 
 SOURCES = \
-        access_token_store_qt.cpp \
         authentication_dialog_controller.cpp \
         browser_accessibility_manager_qt.cpp \
         browser_accessibility_qt.cpp \
@@ -114,7 +113,6 @@ SOURCES = \
         webui/webui_controller_factory_qt.cpp
 
 HEADERS = \
-        access_token_store_qt.h \
         authentication_dialog_controller_p.h \
         authentication_dialog_controller.h \
         browser_accessibility_manager_qt.h \
diff --git a/src/core/devtools_frontend_qt.cpp b/src/core/devtools_frontend_qt.cpp
index f715eefbf309480a50566cdea033450ec8611376..98008fa5806a8ea1d47de240784ba26c108b8e38 100644
--- a/src/core/devtools_frontend_qt.cpp
+++ b/src/core/devtools_frontend_qt.cpp
@@ -510,7 +510,7 @@ void DevToolsFrontendQt::SendMessageAck(int request_id, const base::Value *arg)
     CallClientFunction("DevToolsAPI.embedderMessageAck", &id_value, arg, nullptr);
 }
 
-void DevToolsFrontendQt::AgentHostClosed(content::DevToolsAgentHost *agentHost, bool /*replaced*/)
+void DevToolsFrontendQt::AgentHostClosed(content::DevToolsAgentHost *agentHost)
 {
     DCHECK(agentHost == m_agentHost.get());
     m_agentHost = nullptr;
diff --git a/src/core/devtools_frontend_qt.h b/src/core/devtools_frontend_qt.h
index 7d00845baf20b6f081362f2eb84e55bf09a4e970..88cc7aeac833ee33343d49ed1a51838f0a6dc257 100644
--- a/src/core/devtools_frontend_qt.h
+++ b/src/core/devtools_frontend_qt.h
@@ -96,7 +96,7 @@ protected:
     ~DevToolsFrontendQt() override;
 
     // content::DevToolsAgentHostClient implementation.
-    void AgentHostClosed(content::DevToolsAgentHost* agent_host, bool replaced) override;
+    void AgentHostClosed(content::DevToolsAgentHost* agent_host) override;
     void DispatchProtocolMessage(content::DevToolsAgentHost* agent_host, const std::string& message) override;
 
     void SetPreferences(const std::string& json);
diff --git a/src/core/devtools_manager_delegate_qt.cpp b/src/core/devtools_manager_delegate_qt.cpp
index 305e322786dad9ff34abb22565ccc2bfb560ed7c..e926a818fa264da9003910e511eb0d38d5321644 100644
--- a/src/core/devtools_manager_delegate_qt.cpp
+++ b/src/core/devtools_manager_delegate_qt.cpp
@@ -49,7 +49,6 @@
 #include "base/memory/ptr_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
-#include "chrome/grit/qt_webengine_resources.h"
 #include "content/browser/devtools/devtools_http_handler.h"
 #include "content/public/browser/devtools_agent_host.h"
 #include "content/public/browser/devtools_frontend_host.h"
@@ -65,6 +64,8 @@
 #include "net/socket/tcp_server_socket.h"
 #include "ui/base/resource/resource_bundle.h"
 
+#include "qtwebengine/grit/qt_webengine_resources.h"
+
 #include "type_conversion.h"
 
 using content::DevToolsAgentHost;
@@ -180,7 +181,7 @@ void DevToolsManagerDelegateQt::Initialized(const net::IPEndPoint *ip_address)
 
 std::string DevToolsManagerDelegateQt::GetDiscoveryPageHTML()
 {
-    return ResourceBundle::GetSharedInstance().GetRawDataResource(IDR_DEVTOOLS_DISCOVERY_PAGE_HTML).as_string();
+    return ui::ResourceBundle::GetSharedInstance().GetRawDataResource(IDR_DEVTOOLS_DISCOVERY_PAGE_HTML).as_string();
 }
 
 std::string DevToolsManagerDelegateQt::GetFrontendResource(const std::string& path)
diff --git a/src/core/gl_surface_qt.cpp b/src/core/gl_surface_qt.cpp
index 941fbd211347f222ae0ff0825b68931116c139c6..918001adbe54547ce96636f50c6dc7a40c927c1c 100644
--- a/src/core/gl_surface_qt.cpp
+++ b/src/core/gl_surface_qt.cpp
@@ -288,9 +288,9 @@ bool GLSurfaceQtGLX::Initialize(GLSurfaceFormat format)
     const int pbuffer_attributes[] = {
         GLX_PBUFFER_WIDTH, m_size.width(),
         GLX_PBUFFER_HEIGHT, m_size.height(),
-        GLX_LARGEST_PBUFFER, False,
-        GLX_PRESERVED_CONTENTS, False,
-        0
+        GLX_LARGEST_PBUFFER, x11::False,
+        GLX_PRESERVED_CONTENTS, x11::False,
+        GLX_NONE
     };
 
     m_surfaceBuffer = glXCreatePbuffer(display, static_cast<GLXFBConfig>(g_config), pbuffer_attributes);
@@ -577,7 +577,7 @@ bool GLSurfaceQt::IsOffscreen()
     return true;
 }
 
-gfx::SwapResult GLSurfaceQt::SwapBuffers()
+gfx::SwapResult GLSurfaceQt::SwapBuffers(const PresentationCallback &callback)
 {
     LOG(ERROR) << "Attempted to call SwapBuffers on a pbuffer.";
     Q_UNREACHABLE();
diff --git a/src/core/gl_surface_qt.h b/src/core/gl_surface_qt.h
index c26cb7ed0cf7e46bc77fe2eaf0a4ad185c2c6ddf..ceb8cbba3b394e84c2ea8c762c5b53115fce3098 100644
--- a/src/core/gl_surface_qt.h
+++ b/src/core/gl_surface_qt.h
@@ -57,7 +57,7 @@ public:
     void *GetDisplay() override;
     void *GetConfig() override;
     bool IsOffscreen() override;
-    gfx::SwapResult SwapBuffers() override;
+    gfx::SwapResult SwapBuffers(const PresentationCallback &callback) override;
     gfx::Size GetSize() override;
     GLSurfaceFormat GetFormat() override;
 
diff --git a/src/core/javascript_dialog_manager_qt.cpp b/src/core/javascript_dialog_manager_qt.cpp
index fe465740539bd43b9a20d50e651c5a4dfbe547a7..bfa23d2a1c548d9675285716666d5664e423884a 100644
--- a/src/core/javascript_dialog_manager_qt.cpp
+++ b/src/core/javascript_dialog_manager_qt.cpp
@@ -71,7 +71,8 @@ void JavaScriptDialogManagerQt::RunJavaScriptDialog(content::WebContents *webCon
     runDialogForContents(webContents, dialogType, toQt(messageText), toQt(defaultPromptText), toQt(originUrl.GetOrigin()), std::move(callback));
 }
 
-void JavaScriptDialogManagerQt::RunBeforeUnloadDialog(content::WebContents *webContents, bool isReload,
+void JavaScriptDialogManagerQt::RunBeforeUnloadDialog(content::WebContents *webContents, content::RenderFrameHost */*render_frame_host*/,
+                                                      bool isReload,
                                                       content::JavaScriptDialogManager::DialogClosedCallback callback) {
     Q_UNUSED(isReload);
     runDialogForContents(webContents, WebContentsAdapterClient::UnloadDialog, QString(), QString(), QUrl(), std::move(callback));
diff --git a/src/core/javascript_dialog_manager_qt.h b/src/core/javascript_dialog_manager_qt.h
index 2856b30f0b3016b555f94eb23585afd7b1f0e1f7..aa82b690f25896854777e93c9a1abfb29dc573be 100644
--- a/src/core/javascript_dialog_manager_qt.h
+++ b/src/core/javascript_dialog_manager_qt.h
@@ -64,8 +64,10 @@ public:
                              const base::string16 &messageText, const base::string16 &defaultPromptText,
                              DialogClosedCallback callback,
                              bool *didSuppressMessage) override;
-    void RunBeforeUnloadDialog(content::WebContents *, bool isReload,
-                               content::JavaScriptDialogManager::DialogClosedCallback callback) override;
+    void RunBeforeUnloadDialog(content::WebContents *web_contents,
+                               content::RenderFrameHost *render_frame_host,
+                               bool is_reload,
+                               DialogClosedCallback callback) override;
     bool HandleJavaScriptDialog(content::WebContents *, bool accept, const base::string16 *promptOverride) override;
     void CancelDialogs(content::WebContents *contents, bool /*reset_state*/) override
     {
diff --git a/src/core/location_provider_qt.cpp b/src/core/location_provider_qt.cpp
index a507f32d15c2e0d17a9ef5a3592500665748e1bb..5f0df2c0c0203a4b9e871fe5a816ddd6f86339c1 100644
--- a/src/core/location_provider_qt.cpp
+++ b/src/core/location_provider_qt.cpp
@@ -161,8 +161,8 @@ void QtPositioningHelper::updatePosition(const QGeoPositionInfo &pos)
     if (!pos.isValid())
         return;
     Q_ASSERT(m_positionInfoSource->error() == QGeoPositionInfoSource::NoError);
-    device::Geoposition newPos;
-    newPos.error_code = device::Geoposition::ERROR_CODE_NONE;
+    device::mojom::Geoposition newPos;
+    newPos.error_code = device::mojom::Geoposition::ErrorCode::NONE;
     newPos.error_message.clear();
 
     newPos.timestamp = toTime(pos.timestamp());
@@ -195,15 +195,15 @@ void QtPositioningHelper::updatePosition(const QGeoPositionInfo &pos)
 void QtPositioningHelper::error(QGeoPositionInfoSource::Error positioningError)
 {
     Q_ASSERT(positioningError != QGeoPositionInfoSource::NoError);
-    device::Geoposition newPos;
+    device::mojom::Geoposition newPos;
     switch (positioningError) {
     case QGeoPositionInfoSource::AccessError:
-        newPos.error_code = device::Geoposition::ERROR_CODE_PERMISSION_DENIED;
+        newPos.error_code = device::mojom::Geoposition::ErrorCode::PERMISSION_DENIED;
         break;
     case QGeoPositionInfoSource::ClosedError:
     case QGeoPositionInfoSource::UnknownSourceError: // position unavailable is as good as it gets in Geoposition
     default:
-        newPos.error_code = device::Geoposition::ERROR_CODE_POSITION_UNAVAILABLE;
+        newPos.error_code = device::mojom::Geoposition::ErrorCode::POSITION_UNAVAILABLE;
         break;
     }
     if (m_locationProvider)
@@ -212,11 +212,11 @@ void QtPositioningHelper::error(QGeoPositionInfoSource::Error positioningError)
 
 void QtPositioningHelper::timeout()
 {
-    device::Geoposition newPos;
+    device::mojom::Geoposition newPos;
     // content::Geoposition::ERROR_CODE_TIMEOUT is not handled properly in the renderer process, and the timeout
     // argument used in JS never comes all the way to the browser process.
     // Let's just treat it like any other error where the position is unavailable.
-    newPos.error_code = device::Geoposition::ERROR_CODE_POSITION_UNAVAILABLE;
+    newPos.error_code = device::mojom::Geoposition::ErrorCode::POSITION_UNAVAILABLE;
     if (m_locationProvider)
         postToLocationProvider(base::Bind(&LocationProviderQt::updatePosition, m_locationProviderFactory.GetWeakPtr(), newPos));
 }
@@ -240,7 +240,7 @@ LocationProviderQt::~LocationProviderQt()
     }
 }
 
-bool LocationProviderQt::StartProvider(bool highAccuracy)
+void LocationProviderQt::StartProvider(bool highAccuracy)
 {
     QThread *guiThread = qApp->thread();
     if (!m_positioningHelper) {
@@ -249,7 +249,6 @@ bool LocationProviderQt::StartProvider(bool highAccuracy)
     }
 
     QMetaObject::invokeMethod(m_positioningHelper, "start", Qt::QueuedConnection, Q_ARG(bool, highAccuracy));
-    return true;
 }
 
 void LocationProviderQt::StopProvider()
@@ -269,7 +268,7 @@ void LocationProviderQt::SetUpdateCallback(const LocationProviderUpdateCallback&
     m_callback = callback;
 }
 
-void LocationProviderQt::updatePosition(const device::Geoposition &position)
+void LocationProviderQt::updatePosition(const device::mojom::Geoposition &position)
 {
     m_lastKnownPosition = position;
     m_callback.Run(this, position);
diff --git a/src/core/location_provider_qt.h b/src/core/location_provider_qt.h
index b1ff354a03b1a5a2034299467b72d02f3b995fd3..5c59b07ede010c5953990173d50e59131aeee6b9 100644
--- a/src/core/location_provider_qt.h
+++ b/src/core/location_provider_qt.h
@@ -42,8 +42,8 @@
 
 #include <QtCore/qcompilerdetection.h>
 
-#include "device/geolocation/geoposition.h"
-#include "device/geolocation/location_provider.h"
+#include "device/geolocation/public/cpp/geoposition.h"
+#include "device/geolocation/public/cpp/location_provider.h"
 
 QT_FORWARD_DECLARE_CLASS(QThread)
 
@@ -61,18 +61,18 @@ public:
     virtual ~LocationProviderQt();
 
     // LocationProvider
-    bool StartProvider(bool high_accuracy) override;
+    void StartProvider(bool high_accuracy) override;
     void StopProvider() override;
-    const device::Geoposition& GetPosition() override { return m_lastKnownPosition; }
+    const device::mojom::Geoposition& GetPosition() override { return m_lastKnownPosition; }
     void OnPermissionGranted() override;
     void SetUpdateCallback(const LocationProviderUpdateCallback& callback) override;
 
 private:
     friend class QtPositioningHelper;
 
-    void updatePosition(const device::Geoposition &);
+    void updatePosition(const device::mojom::Geoposition &);
 
-    device::Geoposition m_lastKnownPosition;
+    device::mojom::Geoposition m_lastKnownPosition;
     LocationProviderUpdateCallback m_callback;
     QtPositioningHelper *m_positioningHelper;
 };
diff --git a/src/core/network_delegate_qt.cpp b/src/core/network_delegate_qt.cpp
index a378584b45fb9d200f095c92b7995747651d975d..acebbcf0b458547725df3143608b12fc6fda82ff 100644
--- a/src/core/network_delegate_qt.cpp
+++ b/src/core/network_delegate_qt.cpp
@@ -281,10 +281,10 @@ void NetworkDelegateQt::OnCompleted(net::URLRequest */*request*/, bool /*started
 }
 
 bool NetworkDelegateQt::OnCanSetCookie(const net::URLRequest& request,
-                                       const std::string& cookie_line,
+                                       const net::CanonicalCookie & /*cookie*/,
                                        net::CookieOptions*)
 {
-    return canSetCookies(request.site_for_cookies(), request.url(), cookie_line);
+    return canSetCookies(request.site_for_cookies(), request.url(), std::string());
 }
 
 bool NetworkDelegateQt::OnCanGetCookies(const net::URLRequest& request, const net::CookieList&)
@@ -332,7 +332,7 @@ void NetworkDelegateQt::OnBeforeRedirect(net::URLRequest*, const GURL&)
 {
 }
 
-void NetworkDelegateQt::OnResponseStarted(net::URLRequest*)
+void NetworkDelegateQt::OnResponseStarted(net::URLRequest*, int)
 {
 }
 
diff --git a/src/core/network_delegate_qt.h b/src/core/network_delegate_qt.h
index 21e00c71086738e7d5d319d50901fc494ccb1bd1..b5165d22952582fbee4c762fc24a2c55e3cce2f7 100644
--- a/src/core/network_delegate_qt.h
+++ b/src/core/network_delegate_qt.h
@@ -62,14 +62,14 @@ public:
     // net::NetworkDelegate implementation
     int OnBeforeURLRequest(net::URLRequest* request, const net::CompletionCallback& callback, GURL* newUrl) override;
     void OnURLRequestDestroyed(net::URLRequest* request) override;
-    bool OnCanSetCookie(const net::URLRequest&, const std::string&, net::CookieOptions*) override;
+    bool OnCanSetCookie(const net::URLRequest& request, const net::CanonicalCookie& cookie, net::CookieOptions* options) override;
     int OnBeforeStartTransaction(net::URLRequest *request, const net::CompletionCallback &callback, net::HttpRequestHeaders *headers) override;
     void OnBeforeSendHeaders(net::URLRequest* request, const net::ProxyInfo& proxy_info,
                              const net::ProxyRetryInfoMap& proxy_retry_info, net::HttpRequestHeaders* headers) override;
     void OnStartTransaction(net::URLRequest *request, const net::HttpRequestHeaders &headers) override;
     int OnHeadersReceived(net::URLRequest*, const net::CompletionCallback&, const net::HttpResponseHeaders*, scoped_refptr<net::HttpResponseHeaders>*, GURL*) override;
     void OnBeforeRedirect(net::URLRequest*, const GURL&) override;
-    void OnResponseStarted(net::URLRequest*) override;
+    void OnResponseStarted(net::URLRequest*, int) override;
     void OnNetworkBytesReceived(net::URLRequest*, int64_t) override;
     void OnNetworkBytesSent(net::URLRequest *, int64_t) override;
     void OnCompleted(net::URLRequest *request, bool started, int net_error) override;
diff --git a/src/core/permission_manager_qt.cpp b/src/core/permission_manager_qt.cpp
index 95d01dd070978e6a55a9b8332288e9189783d917..c65da34af77ab64aa8a700d13c8b8e24ef88fa34 100644
--- a/src/core/permission_manager_qt.cpp
+++ b/src/core/permission_manager_qt.cpp
@@ -62,13 +62,14 @@ BrowserContextAdapter::PermissionType toQt(content::PermissionType type)
     case content::PermissionType::FLASH:
     case content::PermissionType::NOTIFICATIONS:
     case content::PermissionType::MIDI_SYSEX:
-    case content::PermissionType::PUSH_MESSAGING:
     case content::PermissionType::PROTECTED_MEDIA_IDENTIFIER:
     case content::PermissionType::MIDI:
     case content::PermissionType::DURABLE_STORAGE:
     case content::PermissionType::BACKGROUND_SYNC:
     case content::PermissionType::SENSORS:
     case content::PermissionType::ACCESSIBILITY_EVENTS:
+    case content::PermissionType::CLIPBOARD_READ:
+    case content::PermissionType::CLIPBOARD_WRITE:
     case content::PermissionType::NUM:
         break;
     }
diff --git a/src/core/qtwebengine.gni b/src/core/qtwebengine.gni
index eeaf6c15fa85cac9b4e8d79389af11f74a7e959e..60165f3205a590409c14c46b90660d9e823417e2 100644
--- a/src/core/qtwebengine.gni
+++ b/src/core/qtwebengine.gni
@@ -13,12 +13,10 @@ include_dirs = [
 
 deps = [
   "//base",
-  "//chrome/common:features",
   "//components/error_page/common",
   "//components/keyed_service/content",
   "//components/visitedlink/browser",
   "//components/visitedlink/renderer",
-  "//components/signin/core/common:signin_features",
   "//components/web_cache/browser",
   "//components/web_cache/renderer",
   "//components/spellcheck:build_features",
@@ -49,6 +47,8 @@ if (is_linux && !is_desktop_linux) {
   deps += [ "//ui/events/ozone:events_ozone_evdev"]
 }
 
+data_deps = [ "//qtwebengine/browser:service_manifests" ]
+
 defines = [
   "CHROMIUM_VERSION=\"" + chromium_version[0] + "\""
 ]
diff --git a/src/core/qtwebengine_resources.gni b/src/core/qtwebengine_resources.gni
index bc86eee7bc329de568a693cbb39ce79ad1201b4c..491b26efcab9f1f85f5ba123e90760ed98ee8aca 100644
--- a/src/core/qtwebengine_resources.gni
+++ b/src/core/qtwebengine_resources.gni
@@ -17,7 +17,7 @@ group("qtwebengine_resources") {
 repack("qtwebengine_repack_resources") {
   sources = [
     "$root_gen_dir/blink/public/resources/blink_resources.pak",
-    "$root_gen_dir/chrome/qt_webengine_resources.pak",
+    "$root_gen_dir/qtwebengine/qt_webengine_resources.pak",
     "$root_gen_dir/chrome/quota_internals_resources.pak",
     "$root_gen_dir/chrome/task_scheduler_internals_resources.pak",
     "$root_gen_dir/components/components_resources.pak",
@@ -27,7 +27,7 @@ repack("qtwebengine_repack_resources") {
   ]
   output = "$root_out_dir/qtwebengine_resources.pak"
   deps = [
-     "//chrome/browser/resources:qt_webengine_resources",
+     "//qtwebengine/browser:qt_webengine_resources",
      "//chrome/browser/resources:quota_internals_resources",
      "//chrome/browser/resources:task_scheduler_internals_resources",
      "//components/resources:components_resources_grit",
diff --git a/src/core/qtwebengine_sources.gni b/src/core/qtwebengine_sources.gni
index bdedf11d39ab3e4f78291dfa1b5e2397f17daa56..c5c642ddde18d63b516edd36e1a30b81805d0938 100644
--- a/src/core/qtwebengine_sources.gni
+++ b/src/core/qtwebengine_sources.gni
@@ -74,6 +74,8 @@ source_set("qtwebengine_sources") {
     "//chrome/common/pref_names.h",
     "//chrome/common/url_constants.cc",
     "//chrome/common/url_constants.h",
+    "//chrome/common/webui_url_constants.cc",
+    "//chrome/common/webui_url_constants.h",
     "//extensions/common/constants.cc",
     "//extensions/common/constants.h",
     "//extensions/common/url_pattern.cc",
diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp
index 49c07d3ed1c3608c25c56bb2444f9a03b40cadc3..a9e2f2ccb4ee1b319a19022b1668cadaceb9aa76 100644
--- a/src/core/render_widget_host_view_qt.cpp
+++ b/src/core/render_widget_host_view_qt.cpp
@@ -342,7 +342,7 @@ RenderWidgetHostViewQt::RenderWidgetHostViewQt(content::RenderWidgetHost* widget
 {
     auto* task_runner = base::ThreadTaskRunnerHandle::Get().get();
     m_beginFrameSource.reset(new viz::DelayBasedBeginFrameSource(
-            base::MakeUnique<viz::DelayBasedTimeSource>(task_runner)));
+            base::MakeUnique<viz::DelayBasedTimeSource>(task_runner), 0));
 
     m_host->SetView(this);
 #ifndef QT_NO_ACCESSIBILITY
@@ -732,7 +732,7 @@ void RenderWidgetHostViewQt::DidCreateNewRendererCompositorFrameSink(viz::mojom:
     m_rendererCompositorFrameSink = frameSink;
 }
 
-void RenderWidgetHostViewQt::SubmitCompositorFrame(const viz::LocalSurfaceId &local_surface_id, viz::CompositorFrame frame)
+void RenderWidgetHostViewQt::SubmitCompositorFrame(const viz::LocalSurfaceId &local_surface_id, viz::CompositorFrame frame, viz::mojom::HitTestRegionListPtr)
 {
     bool scrollOffsetChanged = (m_lastScrollOffset != frame.metadata.root_scroll_offset);
     bool contentsSizeChanged = (m_lastContentsSize != frame.metadata.root_layer_size);
diff --git a/src/core/render_widget_host_view_qt.h b/src/core/render_widget_host_view_qt.h
index 548142c84e8fe2743c696153be92e71c53dabad8..678c1a8ee13e9aa37f88c9c7516d131c4ad6a435 100644
--- a/src/core/render_widget_host_view_qt.h
+++ b/src/core/render_widget_host_view_qt.h
@@ -152,7 +152,7 @@ public:
     void SetTooltipText(const base::string16 &tooltip_text) override;
     bool HasAcceleratedSurface(const gfx::Size&) override;
     void DidCreateNewRendererCompositorFrameSink(viz::mojom::CompositorFrameSinkClient* renderer_compositor_frame_sink) override;
-    void SubmitCompositorFrame(const viz::LocalSurfaceId&, viz::CompositorFrame) override;
+    void SubmitCompositorFrame(const viz::LocalSurfaceId&, viz::CompositorFrame, viz::mojom::HitTestRegionListPtr) override;
     void WheelEventAck(const blink::WebMouseWheelEvent &event, content::InputEventAckState ack_result) override;
 
     void GetScreenInfo(content::ScreenInfo* results);
diff --git a/src/core/renderer/content_renderer_client_qt.cpp b/src/core/renderer/content_renderer_client_qt.cpp
index a77bcf7854f92989fffaed09d53aa3adb8d4a8df..63b99c7bc4c1c37e58e9f93b449349a8c0b53ff1 100644
--- a/src/core/renderer/content_renderer_client_qt.cpp
+++ b/src/core/renderer/content_renderer_client_qt.cpp
@@ -80,6 +80,7 @@
 #include "renderer/user_resource_controller.h"
 #include "renderer/web_channel_ipc_transport.h"
 #include "services/service_manager/public/cpp/binder_registry.h"
+#include "services/service_manager/public/cpp/connector.h"
 
 #include "components/grit/components_resources.h"
 
@@ -115,7 +116,7 @@ void ContentRendererClientQt::RenderThreadStarted()
     renderThread->AddObserver(UserResourceController::instance());
 
 #if BUILDFLAG(ENABLE_SPELLCHECK)
-    m_spellCheck.reset(new SpellCheck());
+    m_spellCheck.reset(new SpellCheck(this));
     renderThread->AddObserver(m_spellCheck.data());
 #endif
 }
@@ -134,7 +135,7 @@ void ContentRendererClientQt::RenderFrameCreated(content::RenderFrame* render_fr
     UserResourceController::instance()->renderFrameCreated(render_frame);
 
 #if BUILDFLAG(ENABLE_SPELLCHECK)
-    new SpellCheckProvider(render_frame, m_spellCheck.data());
+    new SpellCheckProvider(render_frame, m_spellCheck.data(), this);
 #endif
 #if BUILDFLAG(ENABLE_BASIC_PRINTING)
     new printing::PrintRenderFrameHelper(
@@ -182,22 +183,26 @@ bool ContentRendererClientQt::ShouldSuppressErrorPage(content::RenderFrame *fram
     return !(frame->GetWebkitPreferences().enable_error_page);
 }
 
-std::string domain2String(blink::WebURLError::Domain domain)
+// To tap into the chromium localized strings. Ripped from the chrome layer (highly simplified).
+void ContentRendererClientQt::GetNavigationErrorStrings(content::RenderFrame* renderFrame, const blink::WebURLRequest &failedRequest,
+                                                        const blink::WebURLError &web_error,
+                                                        std::string *errorHtml, base::string16 *errorDescription)
 {
-    switch (domain) {
-    case blink::WebURLError::Domain::kEmpty:
-        return "(null)";
-    case blink::WebURLError::Domain::kNet:
-        return "net";
-    case blink::WebURLError::Domain::kTest:
-        return "testing";
-    }
-    Q_UNREACHABLE();
-    return std::string();
+    GetNavigationErrorStringsInternal(renderFrame, failedRequest,
+                                      error_page::Error::NetError(web_error.url(), web_error.reason(), web_error.has_copy_in_cache()),
+                                      errorHtml, errorDescription);
 }
 
-// To tap into the chromium localized strings. Ripped from the chrome layer (highly simplified).
-void ContentRendererClientQt::GetNavigationErrorStrings(content::RenderFrame* renderFrame, const blink::WebURLRequest &failedRequest, const blink::WebURLError &error, std::string *errorHtml, base::string16 *errorDescription)
+void ContentRendererClientQt::GetNavigationErrorStringsForHttpStatusError(content::RenderFrame* renderFrame, const blink::WebURLRequest& failedRequest,
+                                                                          const GURL& unreachable_url, int http_status,
+                                                                          std::string* errorHtml, base::string16* errorDescription)
+{
+    GetNavigationErrorStringsInternal(renderFrame, failedRequest,
+                                      error_page::Error::HttpError(unreachable_url, http_status),
+                                      errorHtml, errorDescription);
+}
+
+void ContentRendererClientQt::GetNavigationErrorStringsInternal(content::RenderFrame */*renderFrame*/, const blink::WebURLRequest &failedRequest, const error_page::Error &error, std::string *errorHtml, base::string16 *errorDescription)
 {
     const bool isPost = QByteArray::fromStdString(failedRequest.HttpMethod().Utf8()) == QByteArrayLiteral("POST");
 
@@ -211,8 +216,8 @@ void ContentRendererClientQt::GetNavigationErrorStrings(content::RenderFrame* re
         // NetErrorHelper::GetErrorStringsForDnsProbe, but that one is harder to untangle.
 
         error_page::LocalizedError::GetStrings(
-            error.reason, domain2String(error.domain), error.unreachable_url, isPost,
-            error.stale_copy_in_cache, false, false,
+            error.reason(), error.domain(), error.url(), isPost,
+            error.stale_copy_in_cache(), false, false,
             locale, std::unique_ptr<error_page::ErrorPageParams>(), &errorStrings);
         resourceId = IDR_NET_ERROR_HTML;
 
@@ -224,7 +229,7 @@ void ContentRendererClientQt::GetNavigationErrorStrings(content::RenderFrame* re
     }
 
     if (errorDescription)
-        *errorDescription = error_page::LocalizedError::GetErrorDetails(domain2String(error.domain), error.reason, isPost);
+        *errorDescription = error_page::LocalizedError::GetErrorDetails(error.domain(), error.reason(), isPost);
 }
 
 unsigned long long ContentRendererClientQt::VisitedLinkHash(const char *canonicalUrl, size_t length)
@@ -237,6 +242,13 @@ bool ContentRendererClientQt::IsLinkVisited(unsigned long long linkHash)
     return m_visitedLinkSlave->IsVisited(linkHash);
 }
 
+void ContentRendererClientQt::GetInterface(const std::string &interface_name, mojo::ScopedMessagePipeHandle interface_pipe)
+{
+    content::RenderThread::Get()->GetConnector()->BindInterface(service_manager::Identity("qtwebengine"),
+                                                                interface_name,
+                                                                std::move(interface_pipe));
+}
+
 // The following is based on chrome/renderer/media/chrome_key_systems.cc:
 // Copyright 2013 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
@@ -246,18 +258,18 @@ bool ContentRendererClientQt::IsLinkVisited(unsigned long long linkHash)
 static const char kExternalClearKeyPepperType[] = "application/x-ppapi-clearkey-cdm";
 
 static bool IsPepperCdmAvailable(const std::string& pepper_type,
-                                 std::vector<base::string16>* additional_param_names,
-                                 std::vector<base::string16>* additional_param_values)
+                                 std::vector<content::WebPluginMimeType::Param>* additional_params)
 {
-    bool is_available = false;
+    base::Optional<std::vector<content::WebPluginMimeType::Param>> opt_additional_params;
     content::RenderThread::Get()->Send(
         new QtWebEngineHostMsg_IsInternalPluginAvailableForMimeType(
             pepper_type,
-            &is_available,
-            additional_param_names,
-            additional_param_values));
+            &opt_additional_params));
+
+    if (opt_additional_params)
+        *additional_params = *opt_additional_params;
 
-    return is_available;
+    return opt_additional_params.has_value();
 }
 
 // KeySystemProperties implementation for external Clear Key systems.
@@ -349,11 +361,8 @@ static void AddExternalClearKey(std::vector<std::unique_ptr<media::KeySystemProp
     static const char kExternalClearKeyCrashKeySystem[] =
         "org.chromium.externalclearkey.crash";
 
-    std::vector<base::string16> additional_param_names;
-    std::vector<base::string16> additional_param_values;
-    if (!IsPepperCdmAvailable(kExternalClearKeyPepperType,
-                              &additional_param_names,
-                              &additional_param_values))
+    std::vector<content::WebPluginMimeType::Param> additional_params;
+    if (!IsPepperCdmAvailable(kExternalClearKeyPepperType, &additional_params))
         return;
 
     concrete_key_systems->emplace_back(
@@ -389,11 +398,8 @@ static void AddPepperBasedWidevine(std::vector<std::unique_ptr<media::KeySystemP
 //        return;
 //#endif  // defined(WIDEVINE_CDM_MIN_GLIBC_VERSION)
 
-    std::vector<base::string16> additional_param_names;
-    std::vector<base::string16> additional_param_values;
-    if (!IsPepperCdmAvailable(kWidevineCdmPluginMimeType,
-                              &additional_param_names,
-                              &additional_param_values)) {
+    std::vector<content::WebPluginMimeType::Param> additional_params;
+    if (!IsPepperCdmAvailable(kWidevineCdmPluginMimeType, &additional_params)) {
         DVLOG(1) << "Widevine CDM is not currently available.";
         return;
     }
diff --git a/src/core/renderer/content_renderer_client_qt.h b/src/core/renderer/content_renderer_client_qt.h
index 18cf129c25f1d1a47d758e19519724840f94abc6..11538b3f075b123629f241c9640a18b24ffdd6f5 100644
--- a/src/core/renderer/content_renderer_client_qt.h
+++ b/src/core/renderer/content_renderer_client_qt.h
@@ -41,9 +41,14 @@
 
 #include "content/public/renderer/content_renderer_client.h"
 #include "components/spellcheck/spellcheck_build_features.h"
+#include "services/service_manager/public/cpp/local_interface_provider.h"
 
 #include <QScopedPointer>
 
+namespace error_page {
+class Error;
+}
+
 namespace visitedlink {
 class VisitedLinkSlave;
 }
@@ -58,7 +63,9 @@ class SpellCheck;
 
 namespace QtWebEngineCore {
 
-class ContentRendererClientQt : public content::ContentRendererClient {
+class ContentRendererClientQt : public content::ContentRendererClient
+                              , public service_manager::LocalInterfaceProvider
+{
 public:
     ContentRendererClientQt();
     ~ContentRendererClientQt();
@@ -69,6 +76,9 @@ public:
     bool HasErrorPage(int http_status_code) override;
     void GetNavigationErrorStrings(content::RenderFrame* renderFrame, const blink::WebURLRequest& failedRequest,
                                    const blink::WebURLError& error, std::string* errorHtml, base::string16* errorDescription) override;
+    void GetNavigationErrorStringsForHttpStatusError(content::RenderFrame* render_frame, const blink::WebURLRequest& failed_request,
+                                                     const GURL& unreachable_url, int http_status,
+                                                     std::string* error_html, base::string16* error_description) override;
 
     unsigned long long VisitedLinkHash(const char *canonicalUrl, size_t length) override;
     bool IsLinkVisited(unsigned long long linkHash) override;
@@ -78,6 +88,13 @@ public:
     void RunScriptsAtDocumentEnd(content::RenderFrame* render_frame) override;
 
 private:
+    // service_manager::LocalInterfaceProvider:
+    void GetInterface(const std::string& name, mojo::ScopedMessagePipeHandle request_handle) override;
+
+    void GetNavigationErrorStringsInternal(content::RenderFrame* renderFrame, const blink::WebURLRequest& failedRequest,
+                                           const error_page::Error& error, std::string* errorHtml, base::string16* errorDescription);
+
+
     QScopedPointer<visitedlink::VisitedLinkSlave> m_visitedLinkSlave;
     QScopedPointer<web_cache::WebCacheImpl> m_webCacheImpl;
 #if BUILDFLAG(ENABLE_SPELLCHECK)
diff --git a/src/core/renderer/pepper/pepper_flash_renderer_host_qt.cpp b/src/core/renderer/pepper/pepper_flash_renderer_host_qt.cpp
index bac1d7c1fa655c71be8c78d3548dcf810d6d7003..5d21201bac1a492d81d1e5170e24cccae825c683 100644
--- a/src/core/renderer/pepper/pepper_flash_renderer_host_qt.cpp
+++ b/src/core/renderer/pepper/pepper_flash_renderer_host_qt.cpp
@@ -251,12 +251,13 @@ int32_t PepperFlashRendererHostQt::OnDrawGlyphs(
             params.glyph_indices.empty())
         return PP_ERROR_FAILED;
 
-    int style = SkTypeface::kNormal;
-    if (static_cast<PP_BrowserFont_Trusted_Weight>(params.font_desc.weight) >= PP_BROWSERFONT_TRUSTED_WEIGHT_BOLD)
-        style |= SkTypeface::kBold;
+    int weight = (params.font_desc.weight + 1) * 100;
+    SkFontStyle::Slant slant = SkFontStyle::kUpright_Slant;
     if (params.font_desc.italic)
-        style |= SkTypeface::kItalic;
-    sk_sp<SkTypeface> typeface(SkTypeface::MakeFromName(params.font_desc.face.c_str(), SkFontStyle::FromOldStyle(style)));
+      slant = SkFontStyle::kItalic_Slant;
+    SkFontStyle style(weight, SkFontStyle::kNormal_Width, slant);
+    sk_sp<SkTypeface> typeface(
+        SkTypeface::MakeFromName(params.font_desc.face.c_str(), style));
     if (!typeface)
         return PP_ERROR_FAILED;
 
diff --git a/src/core/renderer_host/pepper/pepper_host_factory_qt.cpp b/src/core/renderer_host/pepper/pepper_host_factory_qt.cpp
index 46cd16751ddfbf294ff54ba3c427e6cac74cdaac..00ab4963b0ce34a98cd2e81edb6fa390c1ac63fa 100644
--- a/src/core/renderer_host/pepper/pepper_host_factory_qt.cpp
+++ b/src/core/renderer_host/pepper/pepper_host_factory_qt.cpp
@@ -86,7 +86,7 @@ std::unique_ptr<ppapi::host::ResourceHost> PepperHostFactoryQt::CreateResourceHo
         case PpapiHostMsg_Flash_Create::ID:
             return base::WrapUnique(new PepperFlashBrowserHostQt(host_, instance, resource));
         case PpapiHostMsg_FlashClipboard_Create::ID: {
-            scoped_refptr<ResourceMessageFilter> clipboard_filter(new chrome::PepperFlashClipboardMessageFilter);
+            scoped_refptr<ResourceMessageFilter> clipboard_filter(new PepperFlashClipboardMessageFilter);
             return base::WrapUnique(new MessageFilterHost(
                 host_->GetPpapiHost(), instance, resource, clipboard_filter));
         }
diff --git a/src/core/ssl_host_state_delegate_qt.cpp b/src/core/ssl_host_state_delegate_qt.cpp
index d7e86cfbcab5fb42450005e3f336ed94f5004c56..9fa62cacb3e16ca426f6fb4eaaeb87a7ea8f9b6b 100644
--- a/src/core/ssl_host_state_delegate_qt.cpp
+++ b/src/core/ssl_host_state_delegate_qt.cpp
@@ -47,13 +47,6 @@ namespace QtWebEngineCore {
 
 // Mirrors implementation in aw_ssl_host_state_delegate.cc
 
-static net::SHA256HashValue getChainFingerprint256(const net::X509Certificate &cert)
-{
-    net::SHA256HashValue fingerprint =
-            net::X509Certificate::CalculateChainFingerprint256(cert.os_cert_handle(), cert.GetIntermediateCertificates());
-    return fingerprint;
-}
-
 CertPolicy::CertPolicy()
 {
 }
@@ -64,7 +57,7 @@ CertPolicy::~CertPolicy()
 
 bool CertPolicy::Check(const net::X509Certificate& cert, net::CertStatus error) const
 {
-    net::SHA256HashValue fingerprint = getChainFingerprint256(cert);
+    net::SHA256HashValue fingerprint = cert.CalculateChainFingerprint256();
     auto allowed_iter = m_allowed.find(fingerprint);
     if ((allowed_iter != m_allowed.end()) && (allowed_iter->second & error) && ((allowed_iter->second & error) == error))
         return true;
@@ -73,7 +66,7 @@ bool CertPolicy::Check(const net::X509Certificate& cert, net::CertStatus error)
 
 void CertPolicy::Allow(const net::X509Certificate& cert, net::CertStatus error)
 {
-    net::SHA256HashValue fingerprint = getChainFingerprint256(cert);
+    net::SHA256HashValue fingerprint = cert.CalculateChainFingerprint256();
     m_allowed[fingerprint] |= error;
 }
 
diff --git a/src/core/type_conversion.h b/src/core/type_conversion.h
index eb7c9d48b924ccc25ece99827a69061cf4a7cc30..023bed21e64e2fe69445bde600ef4a54d1dd592b 100644
--- a/src/core/type_conversion.h
+++ b/src/core/type_conversion.h
@@ -132,6 +132,11 @@ inline gfx::Point toGfx(const QPoint& point)
   return gfx::Point(point.x(), point.y());
 }
 
+inline gfx::PointF toGfx(const QPointF& point)
+{
+  return gfx::PointF(point.x(), point.y());
+}
+
 inline QRect toQt(const gfx::Rect &rect)
 {
     return QRect(rect.x(), rect.y(), rect.width(), rect.height());
diff --git a/src/core/url_request_context_getter_qt.cpp b/src/core/url_request_context_getter_qt.cpp
index d3f46163980aefa93638c1559e26333b0591a1c7..7f78cbc20eb4e9ef410247fc8300faedc64235cb 100644
--- a/src/core/url_request_context_getter_qt.cpp
+++ b/src/core/url_request_context_getter_qt.cpp
@@ -80,6 +80,7 @@
 #include "net/url_request/ftp_protocol_handler.h"
 #include "net/url_request/url_request_intercepting_job_factory.h"
 #include "net/ftp/ftp_network_layer.h"
+#include "services/proxy_resolver/public/interfaces/proxy_resolver.mojom.h"
 
 #include "api/qwebengineurlschemehandler.h"
 #include "browser_context_adapter.h"
@@ -188,6 +189,8 @@ void URLRequestContextGetterQt::updateStorageSettings()
                 new ProxyConfigServiceQt(
                     net::ProxyService::CreateSystemProxyConfigService(
                         content::BrowserThread::GetTaskRunnerForThread(BrowserThread::IO)));
+        m_proxyResolverFactory = ChromeMojoProxyResolverFactory::CreateWithStrongBinding();
+
         if (m_contextInitialized)
             content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE,
                                              base::Bind(&URLRequestContextGetterQt::generateAllStorage, this));
@@ -263,9 +266,9 @@ void URLRequestContextGetterQt::generateStorage()
         m_dhcpProxyScriptFetcherFactory.reset(new net::DhcpProxyScriptFetcherFactory);
 
     m_storage->set_proxy_service(content::CreateProxyServiceUsingMojoFactory(
-                                     ChromeMojoProxyResolverFactory::GetInstance(),
+                                     std::move(m_proxyResolverFactory),
                                      std::unique_ptr<net::ProxyConfigService>(proxyConfigService),
-                                     new net::ProxyScriptFetcherImpl(m_urlRequestContext.get()),
+                                     std::make_unique<net::ProxyScriptFetcherImpl>(m_urlRequestContext.get()),
                                      m_dhcpProxyScriptFetcherFactory->Create(m_urlRequestContext.get()),
                                      host_resolver.get(),
                                      nullptr /* NetLog */,
diff --git a/src/core/url_request_context_getter_qt.h b/src/core/url_request_context_getter_qt.h
index fd80d62c2fe522e4561cc46a5487fed008f4f6d1..809e4190dcc15338bd63b7b7c6a441219092d7ff 100644
--- a/src/core/url_request_context_getter_qt.h
+++ b/src/core/url_request_context_getter_qt.h
@@ -128,6 +128,7 @@ private:
     content::URLRequestInterceptorScopedVector m_requestInterceptors;
     std::unique_ptr<net::HttpNetworkSession> m_httpNetworkSession;
     std::unique_ptr<net::HttpAuthPreferences> m_httpAuthPreferences;
+    proxy_resolver::mojom::ProxyResolverFactoryPtr m_proxyResolverFactory;
 
     QList<QByteArray> m_installedCustomSchemes;
     QWebEngineUrlRequestInterceptor* m_requestInterceptor;
diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp
index 081dbd28dda745b89db15ac517a6b424082f0b2b..770f660073d4641da9415f06c2259343145301c4 100644
--- a/src/core/web_contents_adapter.cpp
+++ b/src/core/web_contents_adapter.cpp
@@ -119,7 +119,7 @@ static const int kHistoryStreamVersion = 3;
 static QVariant fromJSValue(const base::Value *result)
 {
     QVariant ret;
-    switch (result->GetType()) {
+    switch (result->type()) {
     case base::Value::Type::NONE:
         break;
     case base::Value::Type::BOOLEAN:
@@ -428,7 +428,7 @@ void WebContentsAdapter::initialize(WebContentsAdapterClient *adapterClient)
     rendererPrefs->use_custom_colors = true;
     // Qt returns a flash time (the whole cycle) in ms, chromium expects just the interval in seconds
     const int qtCursorFlashTime = QGuiApplication::styleHints()->cursorFlashTime();
-    rendererPrefs->caret_blink_interval = 0.5 * static_cast<double>(qtCursorFlashTime) / 1000;
+    rendererPrefs->caret_blink_interval = base::TimeDelta::FromMillisecondsD(0.5 * static_cast<double>(qtCursorFlashTime));
     rendererPrefs->user_agent_override = d->browserContextAdapter->httpUserAgent().toStdString();
     rendererPrefs->accept_languages = d->browserContextAdapter->httpAcceptLanguageWithoutQualities().toStdString();
 #if BUILDFLAG(ENABLE_WEBRTC)
@@ -1342,8 +1342,8 @@ void WebContentsAdapter::startDragging(QObject *dragSource, const content::DropD
         if (d->webContents) {
             content::RenderViewHost *rvh = d->webContents->GetRenderViewHost();
             if (rvh) {
-                rvh->GetWidget()->DragSourceEndedAt(gfx::Point(d->lastDragClientPos.x(), d->lastDragClientPos.y()),
-                                                    gfx::Point(d->lastDragScreenPos.x(), d->lastDragScreenPos.y()),
+                rvh->GetWidget()->DragSourceEndedAt(gfx::PointF(d->lastDragClientPos.x(), d->lastDragClientPos.y()),
+                                                    gfx::PointF(d->lastDragScreenPos.x(), d->lastDragScreenPos.y()),
                                                     d->currentDropAction);
                 rvh->GetWidget()->DragSourceSystemDragEnded();
             }
@@ -1408,7 +1408,7 @@ static void fillDropDataFromMimeData(content::DropData *dropData, const QMimeDat
     }
 }
 
-void WebContentsAdapter::enterDrag(QDragEnterEvent *e, const QPoint &screenPos)
+void WebContentsAdapter::enterDrag(QDragEnterEvent *e, const QPointF &screenPos)
 {
     Q_D(WebContentsAdapter);
 
@@ -1420,7 +1420,7 @@ void WebContentsAdapter::enterDrag(QDragEnterEvent *e, const QPoint &screenPos)
 
     content::RenderViewHost *rvh = d->webContents->GetRenderViewHost();
     rvh->GetWidget()->FilterDropData(d->currentDropData.get());
-    rvh->GetWidget()->DragTargetDragEnter(*d->currentDropData, toGfx(e->pos()), toGfx(screenPos),
+    rvh->GetWidget()->DragTargetDragEnter(*d->currentDropData, toGfx(e->posF()), toGfx(screenPos),
                                           toWeb(e->possibleActions()),
                                           flagsFromModifiers(e->keyboardModifiers()));
 }
@@ -1462,11 +1462,11 @@ static int toWeb(Qt::KeyboardModifiers modifiers)
     return result;
 }
 
-Qt::DropAction WebContentsAdapter::updateDragPosition(QDragMoveEvent *e, const QPoint &screenPos)
+Qt::DropAction WebContentsAdapter::updateDragPosition(QDragMoveEvent *e, const QPointF &screenPos)
 {
     Q_D(WebContentsAdapter);
     content::RenderViewHost *rvh = d->webContents->GetRenderViewHost();
-    d->lastDragClientPos = toGfx(e->pos());
+    d->lastDragClientPos = toGfx(e->posF());
     d->lastDragScreenPos = toGfx(screenPos);
     rvh->GetWidget()->DragTargetDragOver(d->lastDragClientPos, d->lastDragScreenPos, toWeb(e->possibleActions()),
                                          toWeb(e->mouseButtons()) | toWeb(e->keyboardModifiers()));
@@ -1503,7 +1503,7 @@ void WebContentsAdapter::updateDragAction(int action)
     d->currentDropAction = static_cast<blink::WebDragOperation>(action);
 }
 
-void WebContentsAdapter::endDragging(const QPoint &clientPos, const QPoint &screenPos)
+void WebContentsAdapter::endDragging(const QPointF &clientPos, const QPointF &screenPos)
 {
     Q_D(WebContentsAdapter);
     content::RenderViewHost *rvh = d->webContents->GetRenderViewHost();
@@ -1586,7 +1586,7 @@ FaviconManager *WebContentsAdapter::faviconManager()
 void WebContentsAdapter::viewSource()
 {
     Q_D(WebContentsAdapter);
-    d->webContents->ViewSource();
+    d->webContents->GetMainFrame()->ViewSource();
 }
 
 bool WebContentsAdapter::canViewSource()
diff --git a/src/core/web_contents_adapter.h b/src/core/web_contents_adapter.h
index 367e44397a711e2c8f17c0c9f8d8abe10df16b19..54b07b4ff375156f968a7d9a246623e3afa4555b 100644
--- a/src/core/web_contents_adapter.h
+++ b/src/core/web_contents_adapter.h
@@ -173,10 +173,10 @@ public:
 
     void startDragging(QObject *dragSource, const content::DropData &dropData,
                        Qt::DropActions allowedActions, const QPixmap &pixmap, const QPoint &offset);
-    void enterDrag(QDragEnterEvent *e, const QPoint &screenPos);
-    Qt::DropAction updateDragPosition(QDragMoveEvent *e, const QPoint &screenPos);
+    void enterDrag(QDragEnterEvent *e, const QPointF &screenPos);
+    Qt::DropAction updateDragPosition(QDragMoveEvent *e, const QPointF &screenPos);
     void updateDragAction(int action);
-    void endDragging(const QPoint &clientPos, const QPoint &screenPos);
+    void endDragging(const QPointF &clientPos, const QPointF &screenPos);
     void leaveDrag();
     void printToPDF(const QPageLayout&, const QString&);
     quint64 printToPDFCallbackResult(const QPageLayout &,
diff --git a/src/core/web_contents_adapter_p.h b/src/core/web_contents_adapter_p.h
index 50096c92e8f4c59eab469fe27b727ae20b631025..5b902fc946ef52e4487ddc7b2ae4779586da58c2 100644
--- a/src/core/web_contents_adapter_p.h
+++ b/src/core/web_contents_adapter_p.h
@@ -53,10 +53,10 @@
 
 #include "web_contents_adapter.h"
 
-#include <base/callback.h>
+#include "base/callback.h"
 #include "base/memory/ref_counted.h"
-#include <ui/gfx/geometry/point.h>
-#include <third_party/WebKit/public/platform/WebDragOperation.h>
+#include "ui/gfx/geometry/point_f.h"
+#include "third_party/WebKit/public/platform/WebDragOperation.h"
 
 #include <QScopedPointer>
 #include <QSharedPointer>
@@ -98,8 +98,8 @@ public:
     std::unique_ptr<content::DropData> currentDropData;
     blink::WebDragOperation currentDropAction;
     bool updateDragActionCalled;
-    gfx::Point lastDragClientPos;
-    gfx::Point lastDragScreenPos;
+    gfx::PointF lastDragClientPos;
+    gfx::PointF lastDragScreenPos;
     std::unique_ptr<QTemporaryDir> dndTmpDir;
     DevToolsFrontendQt *devToolsFrontend;
 };
diff --git a/src/core/web_contents_view_qt.cpp b/src/core/web_contents_view_qt.cpp
index 0ad3c1c389c2e9739dee7bf16381c7ce4d6a3c7b..1e7e718da628afd68f1fa41dd65649433dcce7de 100644
--- a/src/core/web_contents_view_qt.cpp
+++ b/src/core/web_contents_view_qt.cpp
@@ -258,5 +258,20 @@ void WebContentsViewQt::GetScreenInfo(content::ScreenInfo* results) const
         rwhv->GetScreenInfo(results);
 }
 
+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);
+}
+
 
 } // namespace QtWebEngineCore
diff --git a/src/core/web_contents_view_qt.h b/src/core/web_contents_view_qt.h
index 5db4e2879b9724ede9f247839b5bb28326c8b1d0..1e4b275350ccf19a648f31fad162b465afe3410d 100644
--- a/src/core/web_contents_view_qt.h
+++ b/src/core/web_contents_view_qt.h
@@ -120,6 +120,9 @@ public:
 
     void GetScreenInfo(content::ScreenInfo* results) const override;
 
+    void FocusThroughTabTraversal(bool reverse) override;
+
+
 #if defined(OS_MACOSX)
     void SetAllowOtherViews(bool allow) override { m_allowOtherViews = allow; }
     bool GetAllowOtherViews() const override { return m_allowOtherViews; }
diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp
index e6907cb8a05096e00f453525b1ccac778b6298a7..b9820d4df64878ebc1c5b87d814000a2d260d4bc 100644
--- a/src/core/web_engine_context.cpp
+++ b/src/core/web_engine_context.cpp
@@ -72,6 +72,7 @@
 #include "gpu/ipc/host/gpu_switches.h"
 #include "net/base/port_util.h"
 #include "ppapi/features/features.h"
+#include "services/service_manager/sandbox/switches.h"
 #include "ui/events/event_switches.h"
 #include "ui/native_theme/native_theme_features.h"
 #include "ui/gl/gl_switches.h"
@@ -332,7 +333,7 @@ WebEngineContext::WebEngineContext()
 #if defined(Q_OS_WIN)
         parsedCommandLine->AppendSwitch(switches::kNoSandbox);
 #elif defined(Q_OS_LINUX)
-        parsedCommandLine->AppendSwitch(switches::kDisableSetuidSandbox);
+        parsedCommandLine->AppendSwitch(service_manager::switches::kDisableSetuidSandbox);
 #endif
     } else {
         parsedCommandLine->AppendSwitch(switches::kNoSandbox);
diff --git a/src/core/web_engine_settings.cpp b/src/core/web_engine_settings.cpp
index d16c2bd156ae87c41bc5e48be9b6d57fb6d1f292..4cd4b6452f360f975b17c9ec285c0974a2ea82b3 100644
--- a/src/core/web_engine_settings.cpp
+++ b/src/core/web_engine_settings.cpp
@@ -276,10 +276,10 @@ void WebEngineSettings::initDefaults()
         QtWebEngineCore::WebEngineContext::current();
         base::CommandLine* commandLine = base::CommandLine::ForCurrentProcess();
         bool smoothScrolling = commandLine->HasSwitch(switches::kEnableSmoothScrolling);
-        bool webGL = content::GpuProcessHost::gpu_enabled() &&
+        bool webGL =
                 !commandLine->HasSwitch(switches::kDisable3DAPIs) &&
                 !commandLine->HasSwitch(switches::kDisableWebGL);
-        bool accelerated2dCanvas = content::GpuProcessHost::gpu_enabled() &&
+        bool accelerated2dCanvas =
                 !commandLine->HasSwitch(switches::kDisableAccelerated2dCanvas);
         bool allowRunningInsecureContent = commandLine->HasSwitch(switches::kAllowRunningInsecureContent);
         s_defaultAttributes.insert(ScrollAnimatorEnabled, smoothScrolling);
diff --git a/src/core/web_event_factory.cpp b/src/core/web_event_factory.cpp
index 4fb89d4e67ba03cd3b76950443283d14a32ec7e4..44c04e3e6180f5dd7a1f5e489bf00bde0dedf544 100644
--- a/src/core/web_event_factory.cpp
+++ b/src/core/web_event_factory.cpp
@@ -1203,15 +1203,13 @@ static WebPointerProperties::PointerType pointerTypeForTabletEvent(const QTablet
 WebMouseEvent WebEventFactory::toWebMouseEvent(QMouseEvent *ev, double dpiScale)
 {
     WebMouseEvent webKitEvent(webEventTypeForEvent(ev),
-                              ev->x() / dpiScale,
-                              ev->y() / dpiScale,
-                              ev->globalX(),
-                              ev->globalY(),
+                              WebFloatPoint(ev->x() / dpiScale, ev->y() / dpiScale),
+                              WebFloatPoint(ev->globalX(), ev->globalY()),
+                              mouseButtonForEvent<QMouseEvent>(ev),
+                              0,
                               modifiersForEvent(ev),
                               currentTimeForEvent(ev));
 
-    webKitEvent.button = mouseButtonForEvent<QMouseEvent>(ev);
-    webKitEvent.click_count = 0;
     webKitEvent.pointer_type = WebPointerProperties::PointerType::kMouse;
 
     return webKitEvent;
@@ -1235,10 +1233,10 @@ WebMouseEvent WebEventFactory::toWebMouseEvent(QHoverEvent *ev, double dpiScale)
 WebMouseEvent WebEventFactory::toWebMouseEvent(QTabletEvent *ev, double dpiScale)
 {
     WebMouseEvent webKitEvent(webEventTypeForEvent(ev),
-                              ev->x() / dpiScale,
-                              ev->y() / dpiScale,
-                              ev->globalX(),
-                              ev->globalY(),
+                              WebFloatPoint(ev->x() / dpiScale, ev->y() / dpiScale),
+                              WebFloatPoint(ev->globalX(), ev->globalY()),
+                              mouseButtonForEvent<QTabletEvent>(ev),
+                              0,
                               modifiersForEvent(ev),
                               currentTimeForEvent(ev));
 
@@ -1248,9 +1246,6 @@ WebMouseEvent WebEventFactory::toWebMouseEvent(QTabletEvent *ev, double dpiScale
     webKitEvent.tangential_pressure = ev->tangentialPressure();
     webKitEvent.twist = ev->rotation();
     webKitEvent.pointer_type = pointerTypeForTabletEvent(ev);
-
-    webKitEvent.button = mouseButtonForEvent<QTabletEvent>(ev);
-    webKitEvent.click_count = 0;
     return webKitEvent;
 }
 
diff --git a/tools/scripts/git_submodule.py b/tools/scripts/git_submodule.py
index fcf2af37a0b833aac4ba97c3359a289c1db3b663..c2f5d9c312cb36edc1d302f6783796ddc81d4889 100644
--- a/tools/scripts/git_submodule.py
+++ b/tools/scripts/git_submodule.py
@@ -81,8 +81,10 @@ class DEPSParser:
 
                 if len(rev) == 40: # Length of a git shasum
                     submodule.ref = rev
+                elif len(rev) == 0:
+                    submodule.ref = 'master'
                 else:
-                    sys.exit("Invalid shasum: " + str(rev))
+                    sys.exit("Invalid shasum: " + str(scope[dep]))
                 submodules.append(submodule)
         return submodules
 
diff --git a/tools/scripts/init-repository.py b/tools/scripts/init-repository.py
index dc5cdb8ce74eb71c2cf539f1c08b429a7eed1490..a5bef10c36d72112b149cc2e19c930f7d446404b 100755
--- a/tools/scripts/init-repository.py
+++ b/tools/scripts/init-repository.py
@@ -79,8 +79,8 @@ def updateLastChange():
     os.chdir(chromium_src)
     print 'updating LASTCHANGE files'
     subprocess.call(['python', 'build/util/lastchange.py', '-o', 'build/util/LASTCHANGE'])
-    subprocess.call(['python', 'build/util/lastchange.py', '-s', 'third_party/WebKit', '-o', 'build/util/LASTCHANGE.blink'])
     subprocess.call(['python', 'build/util/lastchange.py', '-m', 'SKIA_COMMIT_HASH', '-s', 'third_party/skia', '--header', 'skia/ext/skia_commit_hash.h'])
+    subprocess.call(['python', 'build/util/lastchange.py', '-m', 'GPU_LISTS_VERSION', '--revision-id-only', '--header', 'gpu/config/gpu_lists_version.h'])
     os.chdir(currentDir)
 
 def initUpstreamSubmodules():
diff --git a/tools/scripts/take_snapshot.py b/tools/scripts/take_snapshot.py
index a6274f0aa72c3a77ecd730ac19a1ed7cf5bcdab2..0b279f5d3969a4a23d30f6c8d7a40b1aa9228593 100755
--- a/tools/scripts/take_snapshot.py
+++ b/tools/scripts/take_snapshot.py
@@ -92,18 +92,18 @@ def isInChromiumBlacklist(file_path):
             not 'third_party/chromevox' in file_path and
             not 'media/webrtc/desktop_media_list.h' in file_path and
             not 'media/webrtc/desktop_streams_registry.' in file_path and
-            not 'browser/custom_handlers/protocol_handler_registry.' in file_path and
-            not 'browser/custom_handlers/protocol_handler_registry_factory.' in file_path and
             not 'browser/net/chrome_mojo_proxy_resolver_factory.' in file_path and
+            not '/browser/custom_handlers/' in file_path and
             not '/browser/devtools/' in file_path and
             not '/browser/ui/webui/' in file_path and
             not 'common/chrome_constants.' in file_path and
             not 'common/chrome_paths' in file_path and
             not 'common/chrome_switches.' in file_path and
             not 'common/content_restriction.h' in file_path and
-            not 'common/custom_handlers/protocol_handler.' in file_path and
+            not 'common/custom_handlers/' in file_path and
             not 'common/spellcheck_' in file_path and
             not 'common/url_constants' in file_path and
+            not 'common/webui_url_constants' in file_path and
             not '/extensions/api/' in file_path and
             not '/extensions/browser/api/' in file_path and
             not '/extensions/permissions/' in file_path and
@@ -319,8 +319,8 @@ def exportChromium():
     files = listFilesInCurrentRepository()
     # Add LASTCHANGE files which are not tracked by git.
     files.append('build/util/LASTCHANGE')
-    files.append('build/util/LASTCHANGE.blink')
     files.append('skia/ext/skia_commit_hash.h')
+    files.append('gpu/config/gpu_lists_version.h')
     print 'copying files to ' + third_party_chromium
     for i in xrange(len(files)):
         printProgress(i+1, len(files))
diff --git a/tools/scripts/version_resolver.py b/tools/scripts/version_resolver.py
index 7a22765ef2d1bc0a98dadeaab01e31a4d73d33cf..6e2ab7cdadbc39ea645433fe069217d293988d23 100644
--- a/tools/scripts/version_resolver.py
+++ b/tools/scripts/version_resolver.py
@@ -38,8 +38,8 @@ import json
 import urllib2
 import git_submodule as GitSubmodule
 
-chromium_version = '63.0.3239.117'
-chromium_branch = '3239'
+chromium_version = '64.0.3282.139'
+chromium_branch = '3282'
 ninja_version = 'v1.8.2'
 
 json_url = 'http://omahaproxy.appspot.com/all.json'