diff --git a/src/core/browser_accessibility_qt.cpp b/src/core/browser_accessibility_qt.cpp
index 5ec84affb684022819271421cb8ad39c37655472..c7bf9510de96d6acf241203315a14005af874a63 100644
--- a/src/core/browser_accessibility_qt.cpp
+++ b/src/core/browser_accessibility_qt.cpp
@@ -382,6 +382,8 @@ QAccessible::Role BrowserAccessibilityQt::role() const
         return QAccessible::StaticText;
     case ax::mojom::Role::kScrollBar:
         return QAccessible::ScrollBar;
+    case ax::mojom::Role::kScrollView:
+        return QAccessible::NoRole; // FIXME
     case ax::mojom::Role::kSearch:
         return QAccessible::Section;
     case ax::mojom::Role::kSearchBox:
@@ -392,8 +394,6 @@ QAccessible::Role BrowserAccessibilityQt::role() const
         return QAccessible::NoRole; // FIXME
     case ax::mojom::Role::kSpinButton:
         return QAccessible::SpinBox;
-    case ax::mojom::Role::kSpinButtonPart:
-        return QAccessible::NoRole; // FIXME
     case ax::mojom::Role::kSplitter:
         return QAccessible::Splitter;
     case ax::mojom::Role::kStaticText:
@@ -456,7 +456,7 @@ QAccessible::State BrowserAccessibilityQt::state() const
         state.expanded = true;
     if (HasState(ax::mojom::State::kFocusable))
         state.focusable = true;
-    if (HasState(ax::mojom::State::kHaspopup))
+    if (HasState(ax::mojom::State::kHasPopup))
         state.hasPopup = true;
     if (HasState(ax::mojom::State::kHorizontal))
     {} // FIXME
@@ -711,10 +711,7 @@ QAccessibleInterface *BrowserAccessibilityQt::cellAt(int row, int column) const
     if (row < 0 || row >= rows || column < 0 || column >= columns)
       return 0;
 
-    const std::vector<int32_t>& cell_ids = GetIntListAttribute(ax::mojom::IntListAttribute::kCellIds);
-    DCHECK_EQ(columns * rows, static_cast<int>(cell_ids.size()));
-
-    int cell_id = cell_ids[row * columns + column];
+    int cell_id = GetCellId(row, column);
     BrowserAccessibility* cell = manager()->GetFromID(cell_id);
     if (cell) {
       QAccessibleInterface *iface = static_cast<BrowserAccessibilityQt*>(cell);
diff --git a/src/core/build_config_qt.h b/src/core/build_config_qt.h
index aac1dafcb767b171d6728af02815777eef39b0ff..9c7a77d652520baca57a642025cb511300fc596f 100644
--- a/src/core/build_config_qt.h
+++ b/src/core/build_config_qt.h
@@ -51,12 +51,12 @@
 
 // This is just config sanity check
 #if QT_CONFIG(webengine_printing_and_pdf)
-#if !BUILDFLAG(ENABLE_BASIC_PRINTING) || !BUILDFLAG(ENABLE_PRINT_PREVIEW)
+#if !BUILDFLAG(ENABLE_PRINTING) || !BUILDFLAG(ENABLE_PRINT_PREVIEW)
 #error Config sanity check for webengine_printing_and_pdf failed
 #endif
 #else
-#if BUILDFLAG(ENABLE_BASIC_PRINTING) || BUILDFLAG(ENABLE_PRINT_PREVIEW)
-#error Config sanity check for ENABLE_BASIC_PRINTING, ENABLE_PRINT_PREVIEW failed
+#if BUILDFLAG(ENABLE_PRINTING) || BUILDFLAG(ENABLE_PRINT_PREVIEW)
+#error Config sanity check for ENABLE_PRINTING, ENABLE_PRINT_PREVIEW failed
 #endif
 #endif
 
diff --git a/src/core/chromium_gpu_helper.cpp b/src/core/chromium_gpu_helper.cpp
index 547fbc45ced806e566b78d90c95cfbe11efdfe9e..92a8b13edcbfe996b4dd08440ef4d5f4ed983985 100644
--- a/src/core/chromium_gpu_helper.cpp
+++ b/src/core/chromium_gpu_helper.cpp
@@ -57,10 +57,9 @@
 #include "content/common/gpu/stream_texture_qnx.h"
 #endif
 
-// FIXME: Try using content::GpuChildThread::current()
-base::MessageLoop *gpu_message_loop()
+scoped_refptr<base::SingleThreadTaskRunner> gpu_task_runner()
 {
-    return content::GpuChildThread::instance()->message_loop();
+    return content::GpuChildThread::instance()->main_thread_runner();
 }
 
 gpu::SyncPointManager *sync_point_manager()
diff --git a/src/core/chromium_gpu_helper.h b/src/core/chromium_gpu_helper.h
index be438008528c76e7e9dcbc1a4309df9099dba861..21b764997fa2dd0c4faf944d06fb4e1254bdfab6 100644
--- a/src/core/chromium_gpu_helper.h
+++ b/src/core/chromium_gpu_helper.h
@@ -42,8 +42,10 @@
 
 #include <QtGlobal> // We need this for the Q_OS_QNX define.
 
+#include "base/memory/scoped_refptr.h"
+
 namespace base {
-class MessageLoop;
+class SingleThreadTaskRunner;
 }
 
 namespace gpu {
@@ -58,7 +60,7 @@ class TextureBase;
 // From the outside, types from incompatible headers referenced in these
 // functions should only be forward-declared and considered as opaque types.
 
-base::MessageLoop *gpu_message_loop();
+scoped_refptr<base::SingleThreadTaskRunner> gpu_task_runner();
 gpu::SyncPointManager *sync_point_manager();
 gpu::MailboxManager *mailbox_manager();
 
diff --git a/src/core/client_cert_select_controller.cpp b/src/core/client_cert_select_controller.cpp
index 16d23454fd2d721f3e7a9c96db7a35c7bb7adef4..1362322f705e381074d272635cf55248b38322a4 100644
--- a/src/core/client_cert_select_controller.cpp
+++ b/src/core/client_cert_select_controller.cpp
@@ -94,7 +94,7 @@ void ClientCertSelectController::select(const QSslCertificate &certificate)
             net::X509Certificate::CreateFromBytes(derCertificate.constData(), derCertificate.length());
     for (auto &certInfo : m_clientCerts) {
         scoped_refptr<net::X509Certificate> cert = certInfo->certificate();
-        if (cert->Equals(selectedCert.get())) {
+        if (cert->EqualsExcludingChain(selectedCert.get())) {
             m_selected = true;
             net::ClientCertIdentity::SelfOwningAcquirePrivateKey(
                         std::move(certInfo),
diff --git a/src/core/common/qt_messages.h b/src/core/common/qt_messages.h
index 71e1deef0c1e287c1bba71f313c0c8c8f3473b90..987d6442b55197739941bbe1394113ec48f4bbfe 100644
--- a/src/core/common/qt_messages.h
+++ b/src/core/common/qt_messages.h
@@ -36,9 +36,6 @@ IPC_MESSAGE_ROUTED1(RenderViewObserverQt_FetchDocumentMarkup,
 IPC_MESSAGE_ROUTED1(RenderViewObserverQt_FetchDocumentInnerText,
                     uint64_t /* requestId */)
 
-IPC_MESSAGE_ROUTED1(RenderViewObserverQt_SetBackgroundColor,
-                    uint32_t /* color */)
-
 // User scripts messages
 IPC_MESSAGE_ROUTED1(RenderFrameObserverHelper_AddScript,
                     UserScriptData /* script */)
diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp
index 393b0aee13223e3d5ea46aa8a9d83da442e6c29f..5b6959a458e3f82aa335f647d105d6f75e9eb64c 100644
--- a/src/core/content_browser_client_qt.cpp
+++ b/src/core/content_browser_client_qt.cpp
@@ -78,6 +78,7 @@
 #include "net/ssl/client_cert_identity.h"
 #include "services/service_manager/public/cpp/connector.h"
 #include "services/service_manager/public/cpp/service.h"
+#include "services/service_manager/sandbox/switches.h"
 #include "third_party/blink/public/platform/modules/insecure_input/insecure_input_service.mojom.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/base/ui_base_switches.h"
@@ -181,9 +182,7 @@ class MessagePumpForUIQt : public QObject,
 {
 public:
     MessagePumpForUIQt()
-        // Usually this gets passed through Run, but since we have
-        // our own event loop, attach it explicitly ourselves.
-        : m_delegate(base::MessageLoopForUI::current())
+        : m_delegate(nullptr)
         , m_explicitLoop(0)
         , m_timerId(0)
     {
@@ -191,7 +190,10 @@ public:
 
     void Run(Delegate *delegate) override
     {
-        Q_ASSERT(delegate == m_delegate);
+        if (!m_delegate)
+            m_delegate = delegate;
+        else
+            Q_ASSERT(delegate == m_delegate);
         // This is used only when MessagePumpForUIQt is used outside of the GUI thread.
         QEventLoop loop;
         m_explicitLoop = &loop;
@@ -207,11 +209,15 @@ public:
 
     void ScheduleWork() override
     {
+        if (!m_delegate)
+            m_delegate = base::MessageLoopForUI::current();
         QCoreApplication::postEvent(this, new QEvent(QEvent::User));
     }
 
     void ScheduleDelayedWork(const base::TimeTicks &delayed_work_time) override
     {
+        if (!m_delegate)
+            m_delegate = base::MessageLoopForUI::current();
         if (delayed_work_time.is_null()) {
             killTimer(m_timerId);
             m_timerId = 0;
@@ -353,7 +359,6 @@ public:
     bool MakeCurrent(gl::GLSurface *) override { Q_UNREACHABLE(); return false; }
     void ReleaseCurrent(gl::GLSurface *) override { Q_UNREACHABLE(); }
     bool IsCurrent(gl::GLSurface *) override { Q_UNREACHABLE(); return false; }
-    void OnSetSwapInterval(int) override { Q_UNREACHABLE(); }
     scoped_refptr<gl::GPUTimingClient> CreateGPUTimingClient() override
     {
         return nullptr;
@@ -579,7 +584,7 @@ void ContentBrowserClientQt::AppendExtraCommandLineSwitches(base::CommandLine* c
     url::CustomScheme::SaveSchemes(command_line);
 
     std::string processType = command_line->GetSwitchValueASCII(switches::kProcessType);
-    if (processType == switches::kZygoteProcess)
+    if (processType == service_manager::switches::kZygoteProcess)
         command_line->AppendSwitchASCII(switches::kLang, GetApplicationLocale());
 }
 
@@ -683,7 +688,7 @@ void ContentBrowserClientQt::BindInterfaceRequestFromFrame(content::RenderFrameH
         m_frameInterfaces->TryBindInterface(interface_name, &interface_pipe);
 }
 
-void ContentBrowserClientQt::RegisterInProcessServices(StaticServiceMap* services)
+void ContentBrowserClientQt::RegisterInProcessServices(StaticServiceMap* services, content::ServiceManagerConnection* connection)
 {
     service_manager::EmbeddedServiceInfo info;
     info.factory = ServiceQt::GetInstance()->CreateServiceQtFactory();
@@ -903,9 +908,9 @@ scoped_refptr<content::LoginDelegate> ContentBrowserClientQt::CreateLoginDelegat
         bool /*is_main_frame*/,
         const GURL &url,
         bool first_auth_attempt,
-        const base::Callback<void(const base::Optional<net::AuthCredentials>&)>&auth_required_callback)
+        LoginAuthRequiredCallback auth_required_callback)
 {
-    return base::MakeRefCounted<LoginDelegateQt>(authInfo, web_contents_getter, url, first_auth_attempt, auth_required_callback);
+    return base::MakeRefCounted<LoginDelegateQt>(authInfo, web_contents_getter, url, first_auth_attempt, std::move(auth_required_callback));
 }
 
 } // namespace QtWebEngineCore
diff --git a/src/core/content_browser_client_qt.h b/src/core/content_browser_client_qt.h
index 842cf513d7003701399427c12cff2ebd8673a786..1da7ce26cf3eab1a9cfdcb5b6a47c9dc0aeaf6ac 100644
--- a/src/core/content_browser_client_qt.h
+++ b/src/core/content_browser_client_qt.h
@@ -117,7 +117,7 @@ public:
     void BindInterfaceRequestFromFrame(content::RenderFrameHost* render_frame_host,
                                        const std::string& interface_name,
                                        mojo::ScopedMessagePipeHandle interface_pipe) override;
-    void RegisterInProcessServices(StaticServiceMap* services) override;
+    void RegisterInProcessServices(StaticServiceMap* services, content::ServiceManagerConnection* connection) override;
     std::vector<ServiceManifestInfo> GetExtraServiceManifests() override;
     std::unique_ptr<base::Value> GetServiceManifestOverlay(base::StringPiece name) override;
     bool CanCreateWindow(
@@ -185,7 +185,7 @@ public:
             bool is_main_frame,
             const GURL &url,
             bool first_auth_attempt,
-            const base::Callback<void(const base::Optional<net::AuthCredentials>&)>&auth_required_callback) override;
+            LoginAuthRequiredCallback auth_required_callback) override;
     bool HandleExternalProtocol(
             const GURL &url,
             content::ResourceRequestInfo::WebContentsGetter web_contents_getter,
diff --git a/src/core/content_client_qt.cpp b/src/core/content_client_qt.cpp
index fe0ea6a0de29936fad3908a34d9ae77bfe0cff93..a2b8c4da37430dcc30d6b7c978d7a045ad315dd0 100644
--- a/src/core/content_client_qt.cpp
+++ b/src/core/content_client_qt.cpp
@@ -251,7 +251,8 @@ namespace QtWebEngineCore {
 #if defined(WIDEVINE_CDM_AVAILABLE_NOT_COMPONENT)
 static bool IsWidevineAvailable(base::FilePath *cdm_path,
                                 std::vector<media::VideoCodec> *codecs_supported,
-                                bool *supports_persistent_license)
+                                bool *supports_persistent_license,
+                                base::flat_set<media::EncryptionMode>* modes_supported)
 {
     QStringList pluginPaths;
     const base::CommandLine::StringType widevine_argument = base::CommandLine::ForCurrentProcess()->GetSwitchValueNative(switches::kCdmWidevinePath);
@@ -307,6 +308,8 @@ static bool IsWidevineAvailable(base::FilePath *cdm_path,
 
             *supports_persistent_license = false;
 
+            modes_supported->insert(media::EncryptionMode::kCenc);
+
             return true;
         }
     }
@@ -324,12 +327,15 @@ void ContentClientQt::AddContentDecryptionModules(std::vector<content::CdmInfo>
         base::FilePath cdm_path;
         std::vector<media::VideoCodec> video_codecs_supported;
         bool supports_persistent_license = false;
+        base::flat_set<media::EncryptionMode> encryption_modes_supported;
         if (IsWidevineAvailable(&cdm_path, &video_codecs_supported,
-                                &supports_persistent_license)) {
+                                &supports_persistent_license,
+                                &encryption_modes_supported)) {
             const base::Version version;
             cdms->push_back(content::CdmInfo(kWidevineCdmDisplayName, kWidevineCdmGuid, version, cdm_path,
                                              kWidevineCdmFileSystemId, video_codecs_supported,
-                                             supports_persistent_license, kWidevineKeySystem, false));
+                                             supports_persistent_license, encryption_modes_supported,
+                                             kWidevineKeySystem, false));
         }
 #endif  // defined(WIDEVINE_CDM_AVAILABLE_NOT_COMPONENT)
 
@@ -355,12 +361,14 @@ void ContentClientQt::AddContentDecryptionModules(std::vector<content::CdmInfo>
             cdms->push_back(content::CdmInfo(media::kClearKeyCdmDisplayName, media::kClearKeyCdmDifferentGuid,
                                              base::Version("0.1.0.0"), clear_key_cdm_path,
                                              media::kClearKeyCdmFileSystemId, {}, supports_persistent_license,
+                                             {media::EncryptionMode::kCenc, media::EncryptionMode::kCbcs},
                                              kExternalClearKeyDifferentGuidTestKeySystem, false));
 
             // Supported codecs are hard-coded in ExternalClearKeyProperties.
             cdms->push_back(content::CdmInfo(media::kClearKeyCdmDisplayName, media::kClearKeyCdmGuid,
                                              base::Version("0.1.0.0"), clear_key_cdm_path,
                                              media::kClearKeyCdmFileSystemId, {}, supports_persistent_license,
+                                             {media::EncryptionMode::kCenc, media::EncryptionMode::kCbcs},
                                              kExternalClearKeyKeySystem, true));
         }
 #endif  // BUILDFLAG(ENABLE_LIBRARY_CDMS)
diff --git a/src/core/content_main_delegate_qt.cpp b/src/core/content_main_delegate_qt.cpp
index 3989170a0a84873ae2e20521da180ce6bc289ecb..d9ddf3f494736a725d019ab0703b01b7ed8a96ea 100644
--- a/src/core/content_main_delegate_qt.cpp
+++ b/src/core/content_main_delegate_qt.cpp
@@ -53,6 +53,7 @@
 #include <ui/base/webui/jstemplate_builder.h>
 #include "net/grit/net_resources.h"
 #include "net/base/net_module.h"
+#include "services/service_manager/sandbox/switches.h"
 #include "url/url_util_qt.h"
 
 #include "content_client_qt.h"
@@ -171,7 +172,7 @@ content::ContentRendererClient *ContentMainDelegateQt::CreateContentRendererClie
 #if defined(OS_LINUX)
     base::CommandLine *parsedCommandLine = base::CommandLine::ForCurrentProcess();
     std::string process_type = parsedCommandLine->GetSwitchValueASCII(switches::kProcessType);
-    bool no_sandbox = parsedCommandLine->HasSwitch(switches::kNoSandbox);
+    bool no_sandbox = parsedCommandLine->HasSwitch(service_manager::switches::kNoSandbox);
 
     // Reload locale if the renderer process is sandboxed
     if (process_type == switches::kRendererProcess && !no_sandbox) {
@@ -196,7 +197,7 @@ static void SafeOverridePathImpl(const char *keyName, int key, const base::FileP
         return;
 
     // Do not create directories for overridden paths.
-    if (PathService::OverrideAndCreateIfNeeded(key, path, false, false))
+    if (base::PathService::OverrideAndCreateIfNeeded(key, path, false, false))
         return;
 
     qWarning("Path override failed for key %s and path '%s'", keyName, path.value().c_str());
diff --git a/src/core/delegated_frame_node.cpp b/src/core/delegated_frame_node.cpp
index a3afc2002e0b2fde77302878fa42b68a54722784..2c0824815475416f79b152a8389d281c0bfbb215 100644
--- a/src/core/delegated_frame_node.cpp
+++ b/src/core/delegated_frame_node.cpp
@@ -1260,7 +1260,7 @@ void DelegatedFrameNode::fetchAndSyncMailboxes(QList<MailboxTexture *> &mailboxe
         mailboxesToPull.reserve(mailboxesToFetch.size());
 
         gpu::SyncPointManager *syncPointManager = sync_point_manager();
-        base::MessageLoop *gpuMessageLoop = gpu_message_loop();
+        scoped_refptr<base::SingleThreadTaskRunner> gpuTaskRunner = gpu_task_runner();
         Q_ASSERT(m_numPendingSyncPoints == 0);
         m_numPendingSyncPoints = mailboxesToFetch.count();
         for (MailboxTexture *mailboxTexture : qAsConst(mailboxesToFetch)) {
@@ -1271,7 +1271,7 @@ void DelegatedFrameNode::fetchAndSyncMailboxes(QList<MailboxTexture *> &mailboxe
         }
         if (!mailboxesToPull.isEmpty()) {
             auto task = base::BindOnce(&DelegatedFrameNode::pullTextures, this, std::move(mailboxesToPull));
-            gpuMessageLoop->task_runner()->PostTask(FROM_HERE, std::move(task));
+            gpuTaskRunner->PostTask(FROM_HERE, std::move(task));
         }
 
         m_mailboxesFetchedWaitCond.wait(&m_mutex);
diff --git a/src/core/login_delegate_qt.cpp b/src/core/login_delegate_qt.cpp
index 34245971f5041c07ab08aaf8a88922671c91ebe8..6dd2aa5ed785017dfd60579f97c382ffbafa9154 100644
--- a/src/core/login_delegate_qt.cpp
+++ b/src/core/login_delegate_qt.cpp
@@ -61,10 +61,10 @@ LoginDelegateQt::LoginDelegateQt(
         content::ResourceRequestInfo::WebContentsGetter web_contents_getter,
         GURL url,
         bool first_auth_attempt,
-        const base::Callback<void(const base::Optional<net::AuthCredentials>&)> &auth_required_callback)
+        LoginAuthRequiredCallback auth_required_callback)
     : m_authInfo(authInfo)
     , m_url(url)
-    , m_auth_required_callback(auth_required_callback)
+    , m_auth_required_callback(std::move(auth_required_callback))
 {
     Q_ASSERT(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
 
diff --git a/src/core/login_delegate_qt.h b/src/core/login_delegate_qt.h
index 83ddc43220aab1b38aa2bb36051361ecf1a1dc4d..9ce5df84327bf63127a77c0d59810da14e556996 100644
--- a/src/core/login_delegate_qt.h
+++ b/src/core/login_delegate_qt.h
@@ -40,6 +40,7 @@
 #ifndef LOGIN_DELEGATE_QT_H
 #define LOGIN_DELEGATE_QT_H
 
+#include "content/public/browser/content_browser_client.h"
 #include "content/public/browser/login_delegate.h"
 #include "content/public/browser/resource_request_info.h"
 #include "url/gurl.h"
@@ -61,7 +62,7 @@ public:
                     content::ResourceRequestInfo::WebContentsGetter web_contents_getter,
                     GURL url,
                     bool first_auth_attempt,
-                    const base::Callback<void(const base::Optional<net::AuthCredentials>&)> &auth_required_callback);
+                    LoginAuthRequiredCallback auth_required_callback);
 
     ~LoginDelegateQt();
 
@@ -82,7 +83,7 @@ private:
     scoped_refptr<net::AuthChallengeInfo> m_authInfo;
 
     GURL m_url;
-    base::Callback<void(const base::Optional<net::AuthCredentials>&)> m_auth_required_callback;
+    LoginAuthRequiredCallback m_auth_required_callback;
 
     // This member is used to keep authentication dialog controller alive until
     // authorization is sent or cancelled.
diff --git a/src/core/ozone/platform_window_qt.h b/src/core/ozone/platform_window_qt.h
index 030a53c8732a510cf960ef29e809e4e11f83c399..b712b706aab6bc4ad5dd099d0e42ed4925f1a420 100644
--- a/src/core/ozone/platform_window_qt.h
+++ b/src/core/ozone/platform_window_qt.h
@@ -70,6 +70,7 @@ public:
     void Maximize() override { }
     void Minimize() override { }
     void Restore() override { }
+    PlatformWindowState GetPlatformWindowState() const override { return PLATFORM_WINDOW_STATE_UNKNOWN; }
     void SetCursor(PlatformCursor) override { }
     void MoveCursorTo(const gfx::Point&) override { }
     void ConfineCursorToBounds(const gfx::Rect&) override { }
diff --git a/src/core/printing/pdfium_document_wrapper_qt.cpp b/src/core/printing/pdfium_document_wrapper_qt.cpp
index 47c207a8a967abee28534a4da25c3dafe363fcb9..a18258d0ee86233dd75ba4a87ab2fcf041b81f06 100644
--- a/src/core/printing/pdfium_document_wrapper_qt.cpp
+++ b/src/core/printing/pdfium_document_wrapper_qt.cpp
@@ -50,7 +50,7 @@ int PdfiumDocumentWrapperQt::m_libraryUsers = 0;
 
 class QWEBENGINECORE_PRIVATE_EXPORT PdfiumPageWrapperQt {
 public:
-    PdfiumPageWrapperQt(void *data, int pageIndex, int targetWidth, int targetHeight)
+    PdfiumPageWrapperQt(FPDF_DOCUMENT data, int pageIndex, int targetWidth, int targetHeight)
         : m_pageData(FPDF_LoadPage(data, pageIndex))
         , m_width(FPDF_GetPageWidth(m_pageData))
         , m_height(FPDF_GetPageHeight(m_pageData))
@@ -106,7 +106,7 @@ private:
     }
 
 private:
-    void *m_pageData;
+    FPDF_PAGE m_pageData;
     int m_width;
     int m_height;
     int m_index;
@@ -124,8 +124,8 @@ PdfiumDocumentWrapperQt::PdfiumDocumentWrapperQt(const void *pdfData, size_t siz
     if (m_libraryUsers++ == 0)
         FPDF_InitLibrary();
 
-    m_documentHandle = FPDF_LoadMemDocument(pdfData, static_cast<int>(size), password);
-    m_pageCount = FPDF_GetPageCount(m_documentHandle);
+    m_documentHandle = (void *)FPDF_LoadMemDocument(pdfData, static_cast<int>(size), password);
+    m_pageCount = FPDF_GetPageCount((FPDF_DOCUMENT)m_documentHandle);
 }
 
 QImage PdfiumDocumentWrapperQt::pageAsQImage(size_t index)
@@ -140,14 +140,14 @@ QImage PdfiumDocumentWrapperQt::pageAsQImage(size_t index)
         return QImage();
     }
 
-    PdfiumPageWrapperQt pageWrapper(m_documentHandle, index,
+    PdfiumPageWrapperQt pageWrapper((FPDF_DOCUMENT)m_documentHandle, index,
                                     m_imageSize.width(), m_imageSize.height());
     return pageWrapper.image();
 }
 
 PdfiumDocumentWrapperQt::~PdfiumDocumentWrapperQt()
 {
-    FPDF_CloseDocument(m_documentHandle);
+    FPDF_CloseDocument((FPDF_DOCUMENT)m_documentHandle);
     if (--m_libraryUsers == 0)
         FPDF_DestroyLibrary();
 }
diff --git a/src/core/printing/print_view_manager_base_qt.cpp b/src/core/printing/print_view_manager_base_qt.cpp
index 6c67adbc74cc7d8d9f88509e23aab41714a4d727..0e7239ef84cc5498d096b9289bce0afc02fd8ffb 100644
--- a/src/core/printing/print_view_manager_base_qt.cpp
+++ b/src/core/printing/print_view_manager_base_qt.cpp
@@ -343,7 +343,7 @@ void PrintViewManagerBaseQt::ShouldQuitFromInnerMessageLoop()
     }
 }
 
-bool PrintViewManagerBaseQt::CreateNewPrintJob(printing::PrintJobWorkerOwner* job)
+bool PrintViewManagerBaseQt::CreateNewPrintJob(printing::PrinterQuery *job)
 {
     DCHECK(!m_isInsideInnerMessageLoop);
 
@@ -455,8 +455,7 @@ bool PrintViewManagerBaseQt::RunInnerMessageLoop() {
 
   // Need to enable recursive task.
   {
-      base::MessageLoop::ScopedNestableTaskAllower allow(
-             base::MessageLoop::current());
+      base::MessageLoop::ScopedNestableTaskAllower allow;
       run_loop.Run();
   }
 
diff --git a/src/core/printing/print_view_manager_base_qt.h b/src/core/printing/print_view_manager_base_qt.h
index eb4302fe80cd41fe424e6bdb8e5ef877615e64b4..3ade02f0d650f122d7bd13c966296630f78ffd15 100644
--- a/src/core/printing/print_view_manager_base_qt.h
+++ b/src/core/printing/print_view_manager_base_qt.h
@@ -147,7 +147,7 @@ protected:
     void TerminatePrintJob(bool cancel);
     void DisconnectFromCurrentPrintJob();
 
-    bool CreateNewPrintJob(printing::PrintJobWorkerOwner* job);
+    bool CreateNewPrintJob(printing::PrinterQuery *job);
     void ReleasePrintJob();
     void ReleasePrinterQuery();
 
diff --git a/src/core/printing/print_view_manager_qt.cpp b/src/core/printing/print_view_manager_qt.cpp
index 508042e48eee07a07789b07a8c0c89610ff91afe..1619c1001426e4ba6115a68ee207e77c92df4632 100644
--- a/src/core/printing/print_view_manager_qt.cpp
+++ b/src/core/printing/print_view_manager_qt.cpp
@@ -132,16 +132,13 @@ static base::DictionaryValue *createPrintSettings()
     printSettings->SetBoolean(printing::kSettingPrintWithPrivet, false);
     printSettings->SetBoolean(printing::kSettingPrintWithExtension, false);
 
-    printSettings->SetBoolean(printing::kSettingGenerateDraftData, false);
-    printSettings->SetBoolean(printing::kSettingPreviewModifiable, false);
-
     printSettings->SetInteger(printing::kSettingDpiHorizontal, printing::kPointsPerInch);
     printSettings->SetInteger(printing::kSettingDpiVertical, printing::kPointsPerInch);
 
     printSettings->SetInteger(printing::kSettingDuplexMode, printing::SIMPLEX);
     printSettings->SetInteger(printing::kSettingCopies, 1);
     printSettings->SetBoolean(printing::kSettingCollate, false);
-    printSettings->SetBoolean(printing::kSettingGenerateDraftData, false);
+//    printSettings->SetBoolean(printing::kSettingGenerateDraftData, false);
     printSettings->SetBoolean(printing::kSettingPreviewModifiable, false);
 
     printSettings->SetBoolean(printing::kSettingShouldPrintSelectionOnly, false);
diff --git a/src/core/profile_io_data_qt.cpp b/src/core/profile_io_data_qt.cpp
index 0bc28ba4637ae0e02126989dd5fb8d8b6a669b9f..d51ff2bb1d68335d1bde88d1b264b0329e5310bb 100644
--- a/src/core/profile_io_data_qt.cpp
+++ b/src/core/profile_io_data_qt.cpp
@@ -40,6 +40,7 @@
 #include "profile_io_data_qt.h"
 
 #include "base/task_scheduler/post_task.h"
+#include "components/certificate_transparency/ct_known_logs.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/browsing_data_remover.h"
 #include "content/public/browser/cookie_store_factory.h"
@@ -47,8 +48,8 @@
 #include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h"
 #include "chrome/browser/net/chrome_mojo_proxy_resolver_factory.h"
 #include "net/cert/cert_verifier.h"
-#include "net/cert/ct_known_logs.h"
 #include "net/cert/ct_log_verifier.h"
+#include "net/cert/ct_policy_enforcer.h"
 #include "net/cert/multi_log_ct_verifier.h"
 #include "net/extras/sqlite/sqlite_channel_id_store.h"
 #include "net/http/http_auth_handler_factory.h"
@@ -268,9 +269,10 @@ void ProfileIODataQt::generateStorage()
 
     m_storage->set_cert_verifier(net::CertVerifier::CreateDefault());
     std::unique_ptr<net::MultiLogCTVerifier> ct_verifier(new net::MultiLogCTVerifier());
-    ct_verifier->AddLogs(net::ct::CreateLogVerifiersForKnownLogs());
+//    FIXME:
+//    ct_verifier->AddLogs(net::ct::CreateLogVerifiersForKnownLogs());
     m_storage->set_cert_transparency_verifier(std::move(ct_verifier));
-    m_storage->set_ct_policy_enforcer(base::WrapUnique(new net::CTPolicyEnforcer));
+    m_storage->set_ct_policy_enforcer(base::WrapUnique(new net::DefaultCTPolicyEnforcer()));
 
     std::unique_ptr<net::HostResolver> host_resolver(net::HostResolver::CreateDefaultResolver(NULL));
 
@@ -282,7 +284,7 @@ void ProfileIODataQt::generateStorage()
     m_storage->set_proxy_resolution_service(network::CreateProxyResolutionServiceUsingMojoFactory(
                                                 std::move(m_proxyResolverFactory),
                                                 std::unique_ptr<net::ProxyConfigService>(proxyConfigService),
-                                                std::make_unique<net::PacFileFetcherImpl>(m_urlRequestContext.get()),
+                                                net::PacFileFetcherImpl::Create(m_urlRequestContext.get()),
                                                 m_dhcpPacFileFetcherFactory->Create(m_urlRequestContext.get()),
                                                 host_resolver.get(),
                                                 nullptr /* NetLog */,
diff --git a/src/core/qtwebengine_sources.gni b/src/core/qtwebengine_sources.gni
index be73cb81f8f1e58e13156b138d92c43e8c6c5858..d8aaa17b2a6c96317a29459dec28624a9535d9d8 100644
--- a/src/core/qtwebengine_sources.gni
+++ b/src/core/qtwebengine_sources.gni
@@ -124,8 +124,6 @@ source_set("qtwebengine_sources") {
       "//chrome/browser/printing/print_job_manager.h",
       "//chrome/browser/printing/print_job_worker.cc",
       "//chrome/browser/printing/print_job_worker.h",
-      "//chrome/browser/printing/print_job_worker_owner.cc",
-      "//chrome/browser/printing/print_job_worker_owner.h",
     ]
     deps += [
       "//printing/buildflags:buildflags",
diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp
index a3c5b06d12ef6c5c5d11b61047e7bf1074fb3e05..15881674c9fac9e1b7200592ed9a2e2506950b7f 100644
--- a/src/core/render_widget_host_view_qt.cpp
+++ b/src/core/render_widget_host_view_qt.cpp
@@ -66,7 +66,6 @@
 #include "content/public/browser/browser_thread.h"
 #include "content/public/common/content_switches.h"
 #include "third_party/skia/include/core/SkColor.h"
-#include "third_party/blink/public/platform/web_color.h"
 #include "third_party/blink/public/platform/web_cursor_info.h"
 #include "ui/base/clipboard/scoped_clipboard_writer.h"
 #include "ui/base/resource/resource_bundle.h"
@@ -118,14 +117,11 @@ enum ImStateFlags {
 static inline ui::LatencyInfo CreateLatencyInfo(const blink::WebInputEvent& event) {
   ui::LatencyInfo latency_info;
   // The latency number should only be added if the timestamp is valid.
-  if (event.TimeStampSeconds()) {
-    const int64_t time_micros = static_cast<int64_t>(
-        event.TimeStampSeconds() * base::Time::kMicrosecondsPerSecond);
+  if (!event.TimeStamp().is_null()) {
     latency_info.AddLatencyNumberWithTimestamp(
         ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT,
         0,
-        0,
-        base::TimeTicks() + base::TimeDelta::FromMicroseconds(time_micros),
+        event.TimeStamp(),
         1);
   }
   return latency_info;
@@ -330,7 +326,6 @@ RenderWidgetHostViewQt::RenderWidgetHostViewQt(content::RenderWidgetHost *widget
     , m_imeInProgress(false)
     , m_receivedEmptyImeEvent(false)
     , m_initPending(false)
-    , m_backgroundColor(SK_ColorWHITE)
     , m_imState(0)
     , m_anchorPositionWithinSelection(-1)
     , m_cursorPositionWithinSelection(-1)
@@ -419,11 +414,6 @@ void RenderWidgetHostViewQt::SetBounds(const gfx::Rect& screenRect)
     SetSize(screenRect.size());
 }
 
-gfx::Vector2d RenderWidgetHostViewQt::GetOffsetFromRootSurface()
-{
-    return gfx::Vector2d();
-}
-
 gfx::Size RenderWidgetHostViewQt::GetCompositorViewportPixelSize() const
 {
     if (!m_delegate || !m_delegate->window() || !m_delegate->window()->screen())
@@ -506,21 +496,12 @@ gfx::Rect RenderWidgetHostViewQt::GetViewBounds() const
     return gfx::BoundingRect(p1, p2);
 }
 
-SkColor RenderWidgetHostViewQt::background_color() const
+void RenderWidgetHostViewQt::UpdateBackgroundColor()
 {
-    return m_backgroundColor;
-}
-
-void RenderWidgetHostViewQt::SetBackgroundColor(SkColor color)
-{
-    if (m_backgroundColor == color)
-        return;
-    m_backgroundColor = color;
-    // Set the background of the compositor if necessary
-    m_delegate->setClearColor(toQt(color));
-    // Set the background of the blink::FrameView
-    host()->SetBackgroundOpaque(SkColorGetA(color) == SK_AlphaOPAQUE);
-    host()->Send(new RenderViewObserverQt_SetBackgroundColor(host()->GetRoutingID(), color));
+    auto color = GetBackgroundColor();
+    if (color) {
+        m_delegate->setClearColor(toQt(*color));
+    }
 }
 
 // Return value indicates whether the mouse is locked successfully or not.
@@ -746,13 +727,12 @@ void RenderWidgetHostViewQt::DidCreateNewRendererCompositorFrameSink(viz::mojom:
     m_compositor->setFrameSinkClient(frameSink);
 }
 
-void RenderWidgetHostViewQt::SubmitCompositorFrame(const viz::LocalSurfaceId &local_surface_id, viz::CompositorFrame frame, viz::mojom::HitTestRegionListPtr)
+void RenderWidgetHostViewQt::SubmitCompositorFrame(const viz::LocalSurfaceId &local_surface_id, viz::CompositorFrame frame, base::Optional<viz::HitTestRegionList>)
 {
     bool scrollOffsetChanged = (m_lastScrollOffset != frame.metadata.root_scroll_offset);
     bool contentsSizeChanged = (m_lastContentsSize != frame.metadata.root_layer_size);
     m_lastScrollOffset = frame.metadata.root_scroll_offset;
     m_lastContentsSize = frame.metadata.root_layer_size;
-    m_backgroundColor = frame.metadata.root_background_color;
     if (m_localSurfaceId != local_surface_id) {
         m_localSurfaceId = local_surface_id;
         // FIXME: update frame_size and device_scale_factor?
@@ -966,7 +946,7 @@ QSGNode *RenderWidgetHostViewQt::updatePaintNode(QSGNode *oldNode)
 
 void RenderWidgetHostViewQt::notifyResize()
 {
-    host()->WasResized();
+    host()->SynchronizeVisualProperties();
     host()->SendScreenRects();
 }
 
@@ -1711,7 +1691,9 @@ void RenderWidgetHostViewQt::TakeFallbackContentFrom(content::RenderWidgetHostVi
 {
     DCHECK(!static_cast<RenderWidgetHostViewBase*>(view)->IsRenderWidgetHostViewChildFrame());
     DCHECK(!static_cast<RenderWidgetHostViewBase*>(view)->IsRenderWidgetHostViewGuest());
-    SetBackgroundColor(view->background_color());
+    base::Optional<SkColor> color = view->GetBackgroundColor();
+    if (color)
+        SetBackgroundColor(*color);
 }
 
 } // namespace QtWebEngineCore
diff --git a/src/core/render_widget_host_view_qt.h b/src/core/render_widget_host_view_qt.h
index 909b3bd8485b1b93f3ec242234120ae11f272025..26fd1663175a244c0d2944dc20a73135a2b3c7bf 100644
--- a/src/core/render_widget_host_view_qt.h
+++ b/src/core/render_widget_host_view_qt.h
@@ -116,7 +116,6 @@ public:
     void InitAsFullscreen(content::RenderWidgetHostView*) override;
     void SetSize(const gfx::Size& size) override;
     void SetBounds(const gfx::Rect&) override;
-    gfx::Vector2d GetOffsetFromRootSurface() override;
     gfx::Size GetCompositorViewportPixelSize() const override;
     gfx::NativeView GetNativeView() const override;
     gfx::NativeViewAccessible GetNativeViewAccessible() override;
@@ -127,8 +126,7 @@ public:
     void Hide() override;
     bool IsShowing() override;
     gfx::Rect GetViewBounds() const override;
-    SkColor background_color() const override;
-    void SetBackgroundColor(SkColor color) override;
+    void UpdateBackgroundColor() override;
     bool LockMouse() override;
     void UnlockMouse() override;
     void UpdateCursor(const content::WebCursor&) override;
@@ -141,7 +139,7 @@ public:
     void SetTooltipText(const base::string16 &tooltip_text) override;
     void DisplayTooltipText(const base::string16& tooltip_text) override;
     void DidCreateNewRendererCompositorFrameSink(viz::mojom::CompositorFrameSinkClient* renderer_compositor_frame_sink) override;
-    void SubmitCompositorFrame(const viz::LocalSurfaceId&, viz::CompositorFrame, viz::mojom::HitTestRegionListPtr) override;
+    void SubmitCompositorFrame(const viz::LocalSurfaceId&, viz::CompositorFrame, base::Optional<viz::HitTestRegionList>) override;
     void WheelEventAck(const blink::WebMouseWheelEvent &event, content::InputEventAckState ack_result) override;
 
     void GetScreenInfo(content::ScreenInfo* results) const override;
@@ -152,6 +150,7 @@ public:
     void SetWantsAnimateOnlyBeginFrames() override;
     viz::SurfaceId GetCurrentSurfaceId() const override;
     void TakeFallbackContentFrom(content::RenderWidgetHostView *view) override;
+    void EnsureSurfaceSynchronizedForLayoutTest() override { QT_NOT_USED }
 
     // Overridden from ui::GestureProviderClient.
     void OnGestureEvent(const ui::GestureEventData& gesture) override;
@@ -243,7 +242,6 @@ private:
 
     gfx::Vector2dF m_lastScrollOffset;
     gfx::SizeF m_lastContentsSize;
-    SkColor m_backgroundColor;
     viz::LocalSurfaceId m_localSurfaceId;
 
     uint m_imState;
diff --git a/src/core/renderer/content_renderer_client_qt.cpp b/src/core/renderer/content_renderer_client_qt.cpp
index e9f404cb171ee1bda3d311d1d809d7fb19d5b84e..0466bfeb4119add8a25674f3afa72978626b6998 100644
--- a/src/core/renderer/content_renderer_client_qt.cpp
+++ b/src/core/renderer/content_renderer_client_qt.cpp
@@ -311,9 +311,11 @@ static void AddExternalClearKey(std::vector<std::unique_ptr<media::KeySystemProp
 
     std::vector<media::VideoCodec> supported_video_codecs;
     bool supports_persistent_license;
+    std::vector<media::EncryptionMode> supported_encryption_schemes;
     if (!content::IsKeySystemSupported(kExternalClearKeyKeySystem,
                                        &supported_video_codecs,
-                                       &supports_persistent_license)) {
+                                       &supports_persistent_license,
+                                       &supported_encryption_schemes)) {
         return;
     }
 
@@ -373,9 +375,11 @@ static void AddWidevine(std::vector<std::unique_ptr<media::KeySystemProperties>>
 {
     std::vector<media::VideoCodec> supported_video_codecs;
     bool supports_persistent_license = false;
+    std::vector<media::EncryptionMode> supported_encryption_schemes;
     if (!content::IsKeySystemSupported(kWidevineKeySystem,
                                        &supported_video_codecs,
-                                       &supports_persistent_license)) {
+                                       &supports_persistent_license,
+                                       &supported_encryption_schemes)) {
         DVLOG(1) << "Widevine CDM is not currently available.";
         return;
     }
@@ -417,7 +421,7 @@ static void AddWidevine(std::vector<std::unique_ptr<media::KeySystemProperties>>
     using Robustness = cdm::WidevineKeySystemProperties::Robustness;
 
     concrete_key_systems->emplace_back(new cdm::WidevineKeySystemProperties(
-                                           supported_codecs,
+                                           supported_encryption_schemes, supported_codecs,
                                            Robustness::SW_SECURE_CRYPTO,          // Maximum audio robustness.
                                            Robustness::SW_SECURE_DECODE,          // Maximum video robustness.
                                            persistent_license_support,            // persistent-license.
diff --git a/src/core/renderer/render_view_observer_qt.cpp b/src/core/renderer/render_view_observer_qt.cpp
index d37b67ebc72b4493603cc771e56e25a49ff4b7ca..07dadfd408d401c3fb4b27b2464a457d2b64b680 100644
--- a/src/core/renderer/render_view_observer_qt.cpp
+++ b/src/core/renderer/render_view_observer_qt.cpp
@@ -78,11 +78,6 @@ void RenderViewObserverQt::onFetchDocumentInnerText(quint64 requestId)
     Send(new RenderViewObserverHostQt_DidFetchDocumentInnerText(routing_id(), requestId, text.Utf16()));
 }
 
-void RenderViewObserverQt::onSetBackgroundColor(quint32 color)
-{
-    render_view()->GetWebFrameWidget()->SetBaseBackgroundColor(color);
-}
-
 void RenderViewObserverQt::OnDestruct()
 {
     delete this;
@@ -94,7 +89,6 @@ 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 abb472f0200ad951ba0c22ac52d0c46c1b0ee091..83c0cd265485f3cc449b0839745a7068c117d07d 100644
--- a/src/core/renderer/render_view_observer_qt.h
+++ b/src/core/renderer/render_view_observer_qt.h
@@ -55,7 +55,6 @@ public:
 private:
     void onFetchDocumentMarkup(quint64 requestId);
     void onFetchDocumentInnerText(quint64 requestId);
-    void onSetBackgroundColor(quint32 color);
 
     void OnDestruct() override;
 
diff --git a/src/core/renderer/user_resource_controller.cpp b/src/core/renderer/user_resource_controller.cpp
index b8cf8b0779227c1a1439d24d13d4bf602e19deb5..920fda72e2cdecf564ec84f600b9805a19830641 100644
--- a/src/core/renderer/user_resource_controller.cpp
+++ b/src/core/renderer/user_resource_controller.cpp
@@ -209,7 +209,7 @@ void UserResourceController::runScripts(UserScriptData::InjectionPoint p, blink:
             continue;
         blink::WebScriptSource source(blink::WebString::FromUTF8(script.source), script.url);
         if (script.worldId)
-            frame->ExecuteScriptInIsolatedWorld(script.worldId, &source, /*numSources = */1);
+            frame->ExecuteScriptInIsolatedWorld(script.worldId, source);
         else
             frame->ExecuteScript(source);
     }
diff --git a/src/core/resource_bundle_qt.cpp b/src/core/resource_bundle_qt.cpp
index c37854ea6b09e3a7faeb7679276ae503aa151f62..428faa34e74304072bc68b128b8bebb0804161df 100644
--- a/src/core/resource_bundle_qt.cpp
+++ b/src/core/resource_bundle_qt.cpp
@@ -40,6 +40,7 @@
 #include "base/command_line.h"
 #include "base/metrics/histogram_macros.h"
 #include "content/public/common/content_switches.h"
+#include "services/service_manager/sandbox/switches.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/resource/data_pack.h"
 #include "ui/base/resource/resource_bundle.h"
@@ -75,7 +76,7 @@ bool ResourceBundle::LocaleDataPakExists(const std::string& locale)
 #if defined(OS_LINUX)
     base::CommandLine *parsed_command_line = base::CommandLine::ForCurrentProcess();
     std::string process_type = parsed_command_line->GetSwitchValueASCII(switches::kProcessType);
-    bool no_sandbox = parsed_command_line->HasSwitch(switches::kNoSandbox);
+    bool no_sandbox = parsed_command_line->HasSwitch(service_manager::switches::kNoSandbox);
     if (process_type == switches::kRendererProcess && !no_sandbox) {
         // The Renderer Process is sandboxed thus only one locale is available in it.
         // The particular one is passed by the --lang command line option.
diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp
index 2e3f3785a71e2595f17c3131248fe76e5128d7fa..8ea7187d4962e220bbfa81012b6eef135fd8a62c 100644
--- a/src/core/web_contents_adapter.cpp
+++ b/src/core/web_contents_adapter.cpp
@@ -222,7 +222,7 @@ static void callbackOnPdfSavingFinished(WebContentsAdapterClient *adapterClient,
 }
 #endif
 
-static content::WebContents *createBlankWebContents(WebContentsAdapterClient *adapterClient, content::BrowserContext *browserContext)
+static std::unique_ptr<content::WebContents> createBlankWebContents(WebContentsAdapterClient *adapterClient, content::BrowserContext *browserContext)
 {
     content::WebContents::CreateParams create_params(browserContext, NULL);
     create_params.routing_id = MSG_ROUTING_NONE;
@@ -323,7 +323,8 @@ static void deserializeNavigationHistory(QDataStream &input, int *currentIndex,
             false,
             // The extra headers are not sync'ed across sessions.
             std::string(),
-            browserContext);
+            browserContext,
+            nullptr);
 
         entry->SetTitle(toString16(title));
         entry->SetPageState(content::PageState::CreateFromEncodedData(std::string(pageState.data(), pageState.size())));
@@ -370,7 +371,7 @@ QSharedPointer<WebContentsAdapter> WebContentsAdapter::createFromSerializedNavig
         return QSharedPointer<WebContentsAdapter>();
 
     // Unlike WebCore, Chromium only supports Restoring to a new WebContents instance.
-    content::WebContents* newWebContents = createBlankWebContents(adapterClient, adapterClient->profileAdapter()->profile());
+    std::unique_ptr<content::WebContents> newWebContents = createBlankWebContents(adapterClient, adapterClient->profileAdapter()->profile());
     content::NavigationController &controller = newWebContents->GetController();
     controller.Restore(currentIndex, content::RestoreType::LAST_SESSION_EXITED_CLEANLY, &entries);
 
@@ -385,12 +386,29 @@ QSharedPointer<WebContentsAdapter> WebContentsAdapter::createFromSerializedNavig
             content::ChildProcessSecurityPolicy::GetInstance()->GrantReadFile(id, *file);
     }
 
-    return QSharedPointer<WebContentsAdapter>::create(newWebContents);
+    return QSharedPointer<WebContentsAdapter>::create(std::move(newWebContents));
 }
 
-WebContentsAdapter::WebContentsAdapter(content::WebContents *webContents)
+WebContentsAdapter::WebContentsAdapter()
   : m_profileAdapter(nullptr)
-  , m_webContents(webContents)
+  , m_webContents(nullptr)
+#if QT_CONFIG(webengine_webchannel)
+  , m_webChannel(nullptr)
+  , m_webChannelWorld(0)
+#endif
+  , m_adapterClient(nullptr)
+  , m_nextRequestId(CallbackDirectory::ReservedCallbackIdsEnd)
+  , m_lastFindRequestId(0)
+  , m_currentDropAction(blink::kWebDragOperationNone)
+  , m_devToolsFrontend(nullptr)
+{
+    // This has to be the first thing we create, and the last we destroy.
+    WebEngineContext::current();
+}
+
+WebContentsAdapter::WebContentsAdapter(std::unique_ptr<content::WebContents> webContents)
+  : m_profileAdapter(nullptr)
+  , m_webContents(std::move(webContents))
 #if QT_CONFIG(webengine_webchannel)
   , m_webChannel(nullptr)
   , m_webChannelWorld(0)
@@ -439,7 +457,7 @@ void WebContentsAdapter::initialize(content::SiteInstance *site)
         create_params.initial_size = gfx::Size(kTestWindowWidth, kTestWindowHeight);
         create_params.context = reinterpret_cast<gfx::NativeView>(m_adapterClient);
         create_params.initially_hidden = true;
-        m_webContents.reset(content::WebContents::Create(create_params));
+        m_webContents = content::WebContents::Create(create_params);
     }
 
     content::RendererPreferences* rendererPrefs = m_webContents->GetMutableRendererPrefs();
@@ -1375,7 +1393,7 @@ void WebContentsAdapter::startDragging(QObject *dragSource, const content::DropD
     }
 
     {
-        base::MessageLoop::ScopedNestableTaskAllower allow(base::MessageLoop::current());
+        base::MessageLoop::ScopedNestableTaskAllower allow;
         drag->exec(allowedActions);
     }
 
diff --git a/src/core/web_contents_adapter.h b/src/core/web_contents_adapter.h
index fcdac94b82fa2c89216643e74809289b3590e78b..8e02a852bf6713d49a1462384405a8f42f8a356b 100644
--- a/src/core/web_contents_adapter.h
+++ b/src/core/web_contents_adapter.h
@@ -94,8 +94,8 @@ class WebEngineContext;
 class QWEBENGINECORE_PRIVATE_EXPORT WebContentsAdapter : public QEnableSharedFromThis<WebContentsAdapter> {
 public:
     static QSharedPointer<WebContentsAdapter> createFromSerializedNavigationHistory(QDataStream &input, WebContentsAdapterClient *adapterClient);
-    // Takes ownership of the WebContents.
-    WebContentsAdapter(content::WebContents *webContents = 0);
+    WebContentsAdapter();
+    WebContentsAdapter(std::unique_ptr<content::WebContents> webContents);
     ~WebContentsAdapter();
 
     void setClient(WebContentsAdapterClient *adapterClient);
diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp
index 36703c225cfd3d09fe3df8756d4d24322ac2fe76..68755ae703d6f9b81aba05a63b88efbea2e8770e 100644
--- a/src/core/web_contents_delegate_qt.cpp
+++ b/src/core/web_contents_delegate_qt.cpp
@@ -219,10 +219,10 @@ void WebContentsDelegateQt::NavigationStateChanged(content::WebContents* source,
     }
 }
 
-void WebContentsDelegateQt::AddNewContents(content::WebContents* source, content::WebContents* new_contents, WindowOpenDisposition disposition, const gfx::Rect& initial_pos, bool user_gesture, bool* was_blocked)
+void WebContentsDelegateQt::AddNewContents(content::WebContents* source, std::unique_ptr<content::WebContents> new_contents, WindowOpenDisposition disposition, const gfx::Rect& initial_pos, bool user_gesture, bool* was_blocked)
 {
     Q_UNUSED(source)
-    QSharedPointer<WebContentsAdapter> newAdapter = createWindow(new_contents, disposition, initial_pos, user_gesture);
+    QSharedPointer<WebContentsAdapter> newAdapter = createWindow(std::move(new_contents), disposition, initial_pos, user_gesture);
     if (newAdapter && !newAdapter->isInitialized())
         newAdapter->loadDefault();
     if (was_blocked)
@@ -419,7 +419,7 @@ content::JavaScriptDialogManager *WebContentsDelegateQt::GetJavaScriptDialogMana
     return JavaScriptDialogManagerQt::GetInstance();
 }
 
-void WebContentsDelegateQt::EnterFullscreenModeForTab(content::WebContents *web_contents, const GURL& origin)
+void WebContentsDelegateQt::EnterFullscreenModeForTab(content::WebContents *web_contents, const GURL& origin, const blink::WebFullscreenOptions &)
 {
     Q_UNUSED(web_contents);
     if (!m_viewClient->isFullScreenMode())
@@ -547,9 +547,9 @@ void WebContentsDelegateQt::overrideWebPreferences(content::WebContents *webCont
     m_viewClient->webEngineSettings()->overrideWebPreferences(webContents, webPreferences);
 }
 
-QWeakPointer<WebContentsAdapter> WebContentsDelegateQt::createWindow(content::WebContents *new_contents, WindowOpenDisposition disposition, const gfx::Rect& initial_pos, bool user_gesture)
+QWeakPointer<WebContentsAdapter> WebContentsDelegateQt::createWindow(std::unique_ptr<content::WebContents> new_contents, WindowOpenDisposition disposition, const gfx::Rect& initial_pos, bool user_gesture)
 {
-    QSharedPointer<WebContentsAdapter> newAdapter = QSharedPointer<WebContentsAdapter>::create(new_contents);
+    QSharedPointer<WebContentsAdapter> newAdapter = QSharedPointer<WebContentsAdapter>::create(std::move(new_contents));
 
     m_viewClient->adoptNewWindow(newAdapter, static_cast<WebContentsAdapterClient::WindowOpenDisposition>(disposition), user_gesture, toQt(initial_pos), m_initialTargetUrl);
 
diff --git a/src/core/web_contents_delegate_qt.h b/src/core/web_contents_delegate_qt.h
index a2bef7cc72e87a50674a72c4b597718e97dd8bf1..db327f768d82a82053806f7c8f02f45b55d3b68a 100644
--- a/src/core/web_contents_delegate_qt.h
+++ b/src/core/web_contents_delegate_qt.h
@@ -103,7 +103,7 @@ public:
     // WebContentsDelegate overrides
     content::WebContents *OpenURLFromTab(content::WebContents *source, const content::OpenURLParams &params) override;
     void NavigationStateChanged(content::WebContents* source, content::InvalidateTypes changed_flags) override;
-    void AddNewContents(content::WebContents* source, content::WebContents* new_contents, WindowOpenDisposition disposition, const gfx::Rect& initial_pos, bool user_gesture, bool* was_blocked) override;
+    void AddNewContents(content::WebContents *source, std::unique_ptr<content::WebContents> new_contents, WindowOpenDisposition disposition, const gfx::Rect &initial_pos, bool user_gesture, bool *was_blocked) override;
     void CloseContents(content::WebContents *source) override;
     void LoadProgressChanged(content::WebContents* source, double progress) override;
     void HandleKeyboardEvent(content::WebContents *source, const content::NativeWebKeyboardEvent &event) override;
@@ -111,7 +111,7 @@ public:
     void WebContentsCreated(content::WebContents *source_contents, int opener_render_process_id, int opener_render_frame_id,
                             const std::string &frame_name, const GURL &target_url, content::WebContents *new_contents) override;
     content::JavaScriptDialogManager *GetJavaScriptDialogManager(content::WebContents *source) override;
-    void EnterFullscreenModeForTab(content::WebContents* web_contents, const GURL& origin) override;
+    void EnterFullscreenModeForTab(content::WebContents *web_contents, const GURL &origin, const blink::WebFullscreenOptions &) override;
     void ExitFullscreenModeForTab(content::WebContents*) override;
     bool IsFullscreenForTabOrPending(const content::WebContents* web_contents) const override;
     void RunFileChooser(content::RenderFrameHost* render_frame_host, const content::FileChooserParams& params) override;
@@ -155,7 +155,7 @@ public:
     WebContentsAdapterClient *adapterClient() const { return m_viewClient; }
 
 private:
-    QWeakPointer<WebContentsAdapter> createWindow(content::WebContents *new_contents, WindowOpenDisposition disposition, const gfx::Rect& initial_pos, bool user_gesture);
+    QWeakPointer<WebContentsAdapter> createWindow(std::unique_ptr<content::WebContents> new_contents, WindowOpenDisposition disposition, const gfx::Rect& initial_pos, bool user_gesture);
     void EmitLoadStarted(const QUrl &url, bool isErrorPage = false);
     void EmitLoadFinished(bool success, const QUrl &url, bool isErrorPage = false, int errorCode = 0, const QString &errorDescription = QString());
 
diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp
index 410e13837c80f6abe5258d972bb55e527fc4c212..4b0a2f6cd0bf241480c65cb6b24d8209b0ca857f 100644
--- a/src/core/web_engine_context.cpp
+++ b/src/core/web_engine_context.cpp
@@ -373,12 +373,12 @@ WebEngineContext::WebEngineContext()
     bool disable_sandbox = qEnvironmentVariableIsSet(kDisableSandboxEnv);
     if (!disable_sandbox) {
 #if defined(Q_OS_WIN)
-        parsedCommandLine->AppendSwitch(switches::kNoSandbox);
+        parsedCommandLine->AppendSwitch(service_manager::switches::kNoSandbox);
 #elif defined(Q_OS_LINUX)
         parsedCommandLine->AppendSwitch(service_manager::switches::kDisableSetuidSandbox);
 #endif
     } else {
-        parsedCommandLine->AppendSwitch(switches::kNoSandbox);
+        parsedCommandLine->AppendSwitch(service_manager::switches::kNoSandbox);
         qInfo() << "Sandboxing disabled by user.";
     }
 
diff --git a/src/core/web_event_factory.cpp b/src/core/web_event_factory.cpp
index 6358f6830bd51d5f754012373116974f6e9b8a8a..b97235ceb7b9578e4a719d1340921bb97b8daccf 100644
--- a/src/core/web_event_factory.cpp
+++ b/src/core/web_event_factory.cpp
@@ -1146,20 +1146,17 @@ static ui::DomKey domKeyForQtKey(int qtKey)
     }
 }
 
-static inline double currentTimeForEvent(const QEvent *event)
+static inline base::TimeTicks currentTimeForEvent(const QEvent *event)
 {
     Q_ASSERT(event);
 
     if (event->type() != QEvent::Leave) {
         const QInputEvent *inputEvent = static_cast<const QInputEvent *>(event);
         if (inputEvent->timestamp())
-            return static_cast<double>(inputEvent->timestamp()) / 1000;
+            return base::TimeTicks::FromInternalValue(inputEvent->timestamp() * 1000);
     }
 
-    static QElapsedTimer timer;
-    if (!timer.isValid())
-        timer.start();
-    return static_cast<double>(timer.elapsed()) / 1000;
+    return base::TimeTicks::Now();
 }
 
 template<class T>
@@ -1328,7 +1325,7 @@ WebMouseEvent WebEventFactory::toWebMouseEvent(QMouseEvent *ev, double dpiScale)
 WebMouseEvent WebEventFactory::toWebMouseEvent(QHoverEvent *ev, double dpiScale)
 {
     WebMouseEvent webKitEvent;
-    webKitEvent.SetTimeStampSeconds(currentTimeForEvent(ev));
+    webKitEvent.SetTimeStamp(currentTimeForEvent(ev));
     webKitEvent.SetModifiers(modifiersForEvent(ev));
     webKitEvent.SetType(webEventTypeForEvent(ev));
 
@@ -1366,7 +1363,7 @@ WebMouseEvent WebEventFactory::toWebMouseEvent(QEvent *ev)
     Q_ASSERT(ev->type() == QEvent::Leave || ev->type() == QEvent::HoverLeave);
 
     WebMouseEvent webKitEvent;
-    webKitEvent.SetTimeStampSeconds(currentTimeForEvent(ev));
+    webKitEvent.SetTimeStamp(currentTimeForEvent(ev));
     webKitEvent.SetType(WebInputEvent::kMouseLeave);
     return webKitEvent;
 }
@@ -1375,7 +1372,7 @@ WebMouseEvent WebEventFactory::toWebMouseEvent(QEvent *ev)
 WebGestureEvent WebEventFactory::toWebGestureEvent(QNativeGestureEvent *ev, double dpiScale)
 {
     WebGestureEvent webKitEvent;
-    webKitEvent.SetTimeStampSeconds(currentTimeForEvent(ev));
+    webKitEvent.SetTimeStamp(currentTimeForEvent(ev));
     webKitEvent.SetModifiers(modifiersForEvent(ev));
 
     webKitEvent.SetPositionInWidget(WebFloatPoint(ev->localPos().x() / dpiScale,
@@ -1446,7 +1443,7 @@ blink::WebMouseWheelEvent WebEventFactory::toWebWheelEvent(QWheelEvent *ev, doub
     WebMouseWheelEvent webEvent;
     webEvent.SetType(webEventTypeForEvent(ev));
     webEvent.SetModifiers(modifiersForEvent(ev));
-    webEvent.SetTimeStampSeconds(currentTimeForEvent(ev));
+    webEvent.SetTimeStamp(currentTimeForEvent(ev));
     webEvent.SetPositionInWidget(ev->x() / dpiScale, ev->y() / dpiScale);
     webEvent.SetPositionInScreen(ev->globalX(), ev->globalY());
 
@@ -1468,7 +1465,7 @@ bool WebEventFactory::coalesceWebWheelEvent(blink::WebMouseWheelEvent &webEvent,
     if (toBlinkPhase(ev->phase()) != webEvent.phase)
         return false;
 
-    webEvent.SetTimeStampSeconds(currentTimeForEvent(ev));
+    webEvent.SetTimeStamp(currentTimeForEvent(ev));
     webEvent.SetPositionInWidget(ev->x() / dpiScale, ev->y() / dpiScale);
     webEvent.SetPositionInScreen(ev->globalX(), ev->globalY());
 
@@ -1482,7 +1479,7 @@ bool WebEventFactory::coalesceWebWheelEvent(blink::WebMouseWheelEvent &webEvent,
 content::NativeWebKeyboardEvent WebEventFactory::toWebKeyboardEvent(QKeyEvent *ev)
 {
     content::NativeWebKeyboardEvent webKitEvent(reinterpret_cast<gfx::NativeEvent>(ev));
-    webKitEvent.SetTimeStampSeconds(currentTimeForEvent(ev));
+    webKitEvent.SetTimeStamp(currentTimeForEvent(ev));
     webKitEvent.SetModifiers(modifiersForEvent(ev));
     webKitEvent.SetType(webEventTypeForEvent(ev));
 
diff --git a/src/tools/qwebengine_convert_dict/main.cpp b/src/tools/qwebengine_convert_dict/main.cpp
index 2a82e5945f5b8595603198d7ad6dee0126e15513..9d3888ad648cd04f5bd1ec1609647ff5cf367246 100644
--- a/src/tools/qwebengine_convert_dict/main.cpp
+++ b/src/tools/qwebengine_convert_dict/main.cpp
@@ -176,7 +176,7 @@ int main(int argc, char *argv[])
     }
 
     if (icuDataDirFound) {
-        PathService::Override(base::DIR_QT_LIBRARY_DATA, toFilePath(icuDataDir));
+        base::PathService::Override(base::DIR_QT_LIBRARY_DATA, toFilePath(icuDataDir));
     } else {
         QTextStream out(stdout);
         out << "Couldn't find ICU data directory. Please check that the following path exists: "
diff --git a/tools/scripts/take_snapshot.py b/tools/scripts/take_snapshot.py
index 6cb55e5c45bc6663586350928338561e249175ad..0373f391bd0446d49f9d30973fe3f6ab8e7e65ee 100755
--- a/tools/scripts/take_snapshot.py
+++ b/tools/scripts/take_snapshot.py
@@ -70,6 +70,7 @@ def isInChromiumBlacklist(file_path):
             not file_path.startswith('net/test/') and
             not file_path.endswith('mock_chrome_application_mac.h') and
             not file_path.endswith('perftimer.h') and
+            not file_path.endswith('test-torque.tq') and
             not 'ozone' in file_path and
             not 'core/mojo/test/' in file_path and
             not file_path.startswith('extensions/browser/'))
@@ -165,6 +166,7 @@ def isInChromiumBlacklist(file_path):
         or file_path.startswith('third_party/ashmem')
         or file_path.startswith('third_party/binutils')
         or file_path.startswith('third_party/bison')
+        or file_path.startswith('third_party/blink/perf_tests/')
         or file_path.startswith('third_party/breakpad/src/processor/testdata/')
         or file_path.startswith('third_party/boringssl/crypto_test_data.cc')
         or file_path.startswith('third_party/boringssl/src/fuzz')
@@ -229,6 +231,8 @@ def isInChromiumBlacklist(file_path):
         or file_path.startswith('third_party/wayland/src')
         or file_path.startswith('third_party/webgl')
         or file_path.startswith('third_party/webrtc/resources/')
+        or file_path.startswith('third_party/webrtc/third_party/boringssl/crypto_test_data.cc')
+        or file_path.startswith('third_party/webrtc/third_party/boringssl/src/fuzz')
         or file_path.startswith('tools/android')
         or file_path.startswith('tools/luci_go')
         or file_path.startswith('tools/memory_inspector')
@@ -242,7 +246,6 @@ def isInChromiumBlacklist(file_path):
         or file_path.startswith('ui/events/ozone/chromeos')
         or file_path.startswith('ui/file_manager')
         or file_path.startswith('ui/gfx/chromeos')
-        or file_path.startswith('v8/third_party/antlr4')
 
         ):
             return True
diff --git a/tools/scripts/version_resolver.py b/tools/scripts/version_resolver.py
index 748205d5129c07b6ad8a2ab6b26970b2b979dbf2..22f2797ad02a229338d96a54186e4eb7fb09c01a 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 = '67.0.3396.76'
-chromium_branch = '3396'
+chromium_version = '68.0.3440.125'
+chromium_branch = '3440'
 ninja_version = 'v1.8.2'
 
 json_url = 'http://omahaproxy.appspot.com/all.json'