summaryrefslogtreecommitdiffstats
path: root/src/core
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2018-02-01 12:19:37 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2018-03-15 16:52:24 +0000
commit6b35497375c07c49cca7317a4452acc6adc7a1cd (patch)
tree5531da6c89bb3da6495e8c83a0b86bff638f3baa /src/core
parent91e13af7e1056a7bad83eb34ebf63fdd45e24bea (diff)
Basic adaptations for 65-based
Change-Id: I121b14d6a44e80f5eea4b159c58f7010d472926e Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'src/core')
-rw-r--r--src/core/browser_context_qt.cpp7
-rw-r--r--src/core/browsing_data_remover_delegate_qt.cpp5
-rw-r--r--src/core/browsing_data_remover_delegate_qt.h4
-rw-r--r--src/core/chromium_gpu_helper.cpp8
-rw-r--r--src/core/chromium_gpu_helper.h10
-rw-r--r--src/core/chromium_overrides.cpp8
-rw-r--r--src/core/config/common.pri8
-rw-r--r--src/core/config/linux.pri7
-rw-r--r--src/core/content_browser_client_qt.cpp7
-rw-r--r--src/core/content_client_qt.cpp7
-rw-r--r--src/core/delegated_frame_node.cpp10
-rw-r--r--src/core/desktop_screen_qt.cpp1
-rw-r--r--src/core/gl_surface_qt.cpp9
-rw-r--r--src/core/network_delegate_qt.cpp1
-rw-r--r--src/core/print_view_manager_base_qt.cpp129
-rw-r--r--src/core/print_view_manager_base_qt.h30
-rw-r--r--src/core/printing_message_filter_qt.cpp12
-rw-r--r--src/core/qtwebengine_sources.gni9
-rw-r--r--src/core/quota_permission_context_qt.cpp2
-rw-r--r--src/core/render_widget_host_view_qt.cpp17
-rw-r--r--src/core/render_widget_host_view_qt.h5
-rw-r--r--src/core/renderer/content_renderer_client_qt.cpp12
-rw-r--r--src/core/renderer/content_renderer_client_qt.h10
-rw-r--r--src/core/ssl_host_state_delegate_qt.cpp5
-rw-r--r--src/core/ssl_host_state_delegate_qt.h2
-rw-r--r--src/core/type_conversion.cpp16
-rw-r--r--src/core/url_request_context_getter_qt.cpp15
-rw-r--r--src/core/web_contents_adapter.cpp5
-rw-r--r--src/core/web_contents_delegate_qt.cpp2
-rw-r--r--src/core/web_contents_delegate_qt.h2
-rw-r--r--src/core/web_engine_context.cpp29
-rw-r--r--src/core/web_engine_context.h2
-rw-r--r--src/core/web_event_factory.cpp19
33 files changed, 253 insertions, 162 deletions
diff --git a/src/core/browser_context_qt.cpp b/src/core/browser_context_qt.cpp
index e87dd611a..16adf0308 100644
--- a/src/core/browser_context_qt.cpp
+++ b/src/core/browser_context_qt.cpp
@@ -82,8 +82,9 @@ BrowserContextQt::BrowserContextQt(BrowserContextAdapter *adapter)
// Initial spellcheck settings
registry->RegisterStringPref(prefs::kAcceptLanguages, std::string());
registry->RegisterListPref(spellcheck::prefs::kSpellCheckDictionaries, base::MakeUnique<base::ListValue>());
+ registry->RegisterListPref(spellcheck::prefs::kSpellCheckForcedDictionaries, base::MakeUnique<base::ListValue>());
registry->RegisterStringPref(spellcheck::prefs::kSpellCheckDictionary, std::string());
- registry->RegisterBooleanPref(spellcheck::prefs::kEnableSpellcheck, false);
+ registry->RegisterBooleanPref(spellcheck::prefs::kSpellCheckEnable, false);
registry->RegisterBooleanPref(spellcheck::prefs::kSpellCheckUseSpellingService, false);
#endif //ENABLE_SPELLCHECK
m_prefService = factory.Create(registry);
@@ -242,12 +243,12 @@ QStringList BrowserContextQt::spellCheckLanguages() const
void BrowserContextQt::setSpellCheckEnabled(bool enabled)
{
- m_prefService->SetBoolean(spellcheck::prefs::kEnableSpellcheck, enabled);
+ m_prefService->SetBoolean(spellcheck::prefs::kSpellCheckEnable, enabled);
}
bool BrowserContextQt::isSpellCheckEnabled() const
{
- return m_prefService->GetBoolean(spellcheck::prefs::kEnableSpellcheck);
+ return m_prefService->GetBoolean(spellcheck::prefs::kSpellCheckEnable);
}
#endif //ENABLE_SPELLCHECK
} // namespace QtWebEngineCore
diff --git a/src/core/browsing_data_remover_delegate_qt.cpp b/src/core/browsing_data_remover_delegate_qt.cpp
index aeb7a4884..78e6893ea 100644
--- a/src/core/browsing_data_remover_delegate_qt.cpp
+++ b/src/core/browsing_data_remover_delegate_qt.cpp
@@ -40,6 +40,7 @@
#include "browsing_data_remover_delegate_qt.h"
#include "base/bind.h"
+#include "base/callback.h"
#include "components/web_cache/browser/web_cache_manager.h"
#include "content/public/browser/browsing_data_remover.h"
@@ -70,7 +71,7 @@ void BrowsingDataRemoverDelegateQt::RemoveEmbedderData(
int remove_mask,
const content::BrowsingDataFilterBuilder& filter_builder,
int origin_type_mask,
- const base::Closure &callback) {
+ base::OnceClosure callback) {
Q_UNUSED(delete_begin);
Q_UNUSED(delete_end);
Q_UNUSED(filter_builder);
@@ -79,7 +80,7 @@ void BrowsingDataRemoverDelegateQt::RemoveEmbedderData(
if (remove_mask & content::BrowsingDataRemover::DATA_TYPE_CACHE)
web_cache::WebCacheManager::GetInstance()->ClearCache();
- callback.Run();
+ std::move(callback).Run();
}
} // namespace QtWebEngineCore
diff --git a/src/core/browsing_data_remover_delegate_qt.h b/src/core/browsing_data_remover_delegate_qt.h
index 204f4e625..fa99cdf90 100644
--- a/src/core/browsing_data_remover_delegate_qt.h
+++ b/src/core/browsing_data_remover_delegate_qt.h
@@ -56,9 +56,9 @@ public:
const base::Time &delete_begin,
const base::Time &delete_end,
int remove_mask,
- const content::BrowsingDataFilterBuilder& filter_builder,
+ const content::BrowsingDataFilterBuilder &filter_builder,
int origin_type_mask,
- const base::Closure &callback) override;
+ base::OnceClosure callback) override;
};
} // namespace QtWebEngineCore
diff --git a/src/core/chromium_gpu_helper.cpp b/src/core/chromium_gpu_helper.cpp
index 483f68aac..73a4da70f 100644
--- a/src/core/chromium_gpu_helper.cpp
+++ b/src/core/chromium_gpu_helper.cpp
@@ -69,25 +69,25 @@ gpu::SyncPointManager *sync_point_manager()
return gpuChannelManager->sync_point_manager();
}
-gpu::gles2::MailboxManager *mailbox_manager()
+gpu::MailboxManager *mailbox_manager()
{
gpu::GpuChannelManager *gpuChannelManager = content::GpuChildThread::instance()->gpu_channel_manager();
return gpuChannelManager->mailbox_manager();
}
-gpu::gles2::TextureBase* ConsumeTexture(gpu::gles2::MailboxManager *mailboxManager, unsigned target, const gpu::Mailbox& mailbox)
+gpu::TextureBase* ConsumeTexture(gpu::MailboxManager *mailboxManager, unsigned target, const gpu::Mailbox& mailbox)
{
Q_UNUSED(target);
return mailboxManager->ConsumeTexture(mailbox);
}
-unsigned int service_id(gpu::gles2::TextureBase *tex)
+unsigned int service_id(gpu::TextureBase *tex)
{
return tex->service_id();
}
#ifdef Q_OS_QNX
-EGLStreamData eglstream_connect_consumer(gpu::gles2::Texture *tex)
+EGLStreamData eglstream_connect_consumer(gpu::Texture *tex)
{
EGLStreamData egl_stream;
content::StreamTexture* image = static_cast<content::StreamTexture *>(tex->GetLevelImage(GL_TEXTURE_EXTERNAL_OES, 0));
diff --git a/src/core/chromium_gpu_helper.h b/src/core/chromium_gpu_helper.h
index 9954dc1d0..848a43c7e 100644
--- a/src/core/chromium_gpu_helper.h
+++ b/src/core/chromium_gpu_helper.h
@@ -50,11 +50,9 @@ class MessageLoop;
namespace gpu {
struct Mailbox;
class SyncPointManager;
-namespace gles2 {
class MailboxManager;
class TextureBase;
}
-}
// These functions wrap code that needs to include headers that are
// incompatible with Qt GL headers.
@@ -63,10 +61,10 @@ class TextureBase;
base::MessageLoop *gpu_message_loop();
gpu::SyncPointManager *sync_point_manager();
-gpu::gles2::MailboxManager *mailbox_manager();
+gpu::MailboxManager *mailbox_manager();
-gpu::gles2::TextureBase* ConsumeTexture(gpu::gles2::MailboxManager *mailboxManager, unsigned target, const gpu::Mailbox& mailbox);
-unsigned int service_id(gpu::gles2::TextureBase *tex);
+gpu::TextureBase* ConsumeTexture(gpu::MailboxManager *mailboxManager, unsigned target, const gpu::Mailbox& mailbox);
+unsigned int service_id(gpu::TextureBase *tex);
#ifdef Q_OS_QNX
typedef void* EGLDisplay;
@@ -79,7 +77,7 @@ struct EGLStreamData {
EGLStreamData(): egl_display(NULL), egl_str_handle(NULL) {}
};
-EGLStreamData eglstream_connect_consumer(gpu::gles2::Texture *tex);
+EGLStreamData eglstream_connect_consumer(gpu::Texture *tex);
#endif
#endif // CHROMIUM_GPU_HELPER_H
diff --git a/src/core/chromium_overrides.cpp b/src/core/chromium_overrides.cpp
index d1cc951d2..3db107ab1 100644
--- a/src/core/chromium_overrides.cpp
+++ b/src/core/chromium_overrides.cpp
@@ -74,6 +74,10 @@
#include "net/ssl/openssl_client_key_store.h"
#endif
+#if defined(OS_WIN)
+#include "gpu/ipc/service/direct_composition_surface_win.h"
+#endif
+
namespace QtWebEngineCore {
void GetScreenInfoFromNativeWindow(QWindow* window, content::ScreenInfo* results)
{
@@ -196,6 +200,10 @@ ui::OSExchangeDataProviderFactory::CreateProvider() {
return nullptr;
}
+#if defined(OS_WIN)
+bool gpu::DirectCompositionSurfaceWin::IsHDRSupported()
+{ return false; }
+#endif
#if defined(USE_OPENSSL_CERTS)
namespace net {
diff --git a/src/core/config/common.pri b/src/core/config/common.pri
index ab2a60978..327144007 100644
--- a/src/core/config/common.pri
+++ b/src/core/config/common.pri
@@ -15,9 +15,11 @@ gn_args += \
enable_swiftshader=false \
use_custom_libcxx=false
-!win32: gn_args += \
- use_jumbo_build=true \
- jumbo_file_merge_limit=50
+# Jumbo disabled for now due to OOM issues.
+# !win32: gn_args += \
+# use_jumbo_build=true \
+# jumbo_file_merge_limit=20 \
+# jumbo_build_excluded="[\"browser\"]"
qtConfig(webengine-printing-and-pdf) {
gn_args += enable_basic_printing=true enable_print_preview=true
diff --git a/src/core/config/linux.pri b/src/core/config/linux.pri
index f4b6ff4e8..93ac471d4 100644
--- a/src/core/config/linux.pri
+++ b/src/core/config/linux.pri
@@ -4,11 +4,12 @@ QT_FOR_CONFIG += gui-private webengine-private
gn_args += \
use_cups=false \
- use_gconf=false \
use_gio=false \
use_gnome_keyring=false \
use_kerberos=false \
- linux_use_bundled_binutils=false
+ linux_use_bundled_binutils=false \
+ use_udev=true \
+ use_bundled_fontconfig=false
gcc:!clang: greaterThan(QT_GCC_MAJOR_VERSION, 5): gn_args += no_delete_null_pointer_checks=true
@@ -127,7 +128,7 @@ host_build {
qtConfig(webengine-printing-and-pdf): gn_args += pdfium_use_system_zlib=true
}
qtConfig(webengine-system-png): gn_args += use_system_libpng=true
- qtConfig(system-jpeg): gn_args += use_system_libjpeg=true
+ qtConfig(webengine-system-jpeg): gn_args += use_system_libjpeg=true
qtConfig(system-freetype): gn_args += use_system_freetype=true
qtConfig(webengine-system-harfbuzz): gn_args += use_system_harfbuzz=true
!qtConfig(webengine-system-glib): gn_args += use_glib=false
diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp
index 18d0ff1c9..fd1643a69 100644
--- a/src/core/content_browser_client_qt.cpp
+++ b/src/core/content_browser_client_qt.cpp
@@ -45,7 +45,7 @@
#include "base/threading/thread_restrictions.h"
#include "components/spellcheck/spellcheck_build_features.h"
#if BUILDFLAG(ENABLE_SPELLCHECK)
-#include "chrome/browser/spellchecker/spell_check_host_impl.h"
+#include "chrome/browser/spellchecker/spell_check_host_chrome_impl.h"
#if BUILDFLAG(USE_BROWSER_SPELLCHECKER)
#include "components/spellcheck/browser/spellcheck_message_filter_platform.h"
#endif
@@ -75,6 +75,7 @@
#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/resource/resource_bundle.h"
#include "ui/base/ui_base_switches.h"
#include "ui/display/screen.h"
#include "ui/gl/gl_context.h"
@@ -82,7 +83,7 @@
#include "ui/gl/gl_share_group.h"
#include "ui/gl/gpu_timing.h"
-#include "chrome/grit/qt_webengine_resources.h"
+#include "qtwebengine/grit/qt_webengine_resources.h"
#include "browser_context_adapter.h"
#include "browser_context_qt.h"
@@ -616,7 +617,7 @@ ServiceQt::ServiceQt()
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
#if BUILDFLAG(ENABLE_SPELLCHECK)
m_registry_with_source_info.AddInterface(
- base::Bind(&SpellCheckHostImpl::Create),
+ base::Bind(&SpellCheckHostChromeImpl::Create),
content::BrowserThread::GetTaskRunnerForThread(content::BrowserThread::UI));
#endif
}
diff --git a/src/core/content_client_qt.cpp b/src/core/content_client_qt.cpp
index a412345ea..c98853c58 100644
--- a/src/core/content_client_qt.cpp
+++ b/src/core/content_client_qt.cpp
@@ -94,6 +94,13 @@ const char kPpapiFlashVersion[] = "ppapi-flash-version";
const char kPpapiWidevinePath[] = "ppapi-widevine-path";
}
+const char kCdmSupportedCodecsParamName[] = "codecs";
+const char kCdmSupportedCodecVp8[] = "vp8";
+const char kCdmSupportedCodecVp9[] = "vp9.0";
+#if BUILDFLAG(USE_PROPRIETARY_CODECS)
+const char kCdmSupportedCodecAvc1[] = "avc1";
+#endif
+
static const char kWidevineCdmPluginExtension[] = "";
static const int32_t kWidevineCdmPluginPermissions = ppapi::PERMISSION_DEV
diff --git a/src/core/delegated_frame_node.cpp b/src/core/delegated_frame_node.cpp
index 51d69fd08..2ce1616af 100644
--- a/src/core/delegated_frame_node.cpp
+++ b/src/core/delegated_frame_node.cpp
@@ -131,7 +131,7 @@ public:
void setHasAlphaChannel(bool hasAlpha) { m_hasAlpha = hasAlpha; }
gpu::MailboxHolder &mailboxHolder() { return m_mailboxHolder; }
- void fetchTexture(gpu::gles2::MailboxManager *mailboxManager);
+ void fetchTexture(gpu::MailboxManager *mailboxManager);
void setTarget(GLenum target);
private:
@@ -618,9 +618,9 @@ void MailboxTexture::setTarget(GLenum target)
m_target = target;
}
-void MailboxTexture::fetchTexture(gpu::gles2::MailboxManager *mailboxManager)
+void MailboxTexture::fetchTexture(gpu::MailboxManager *mailboxManager)
{
- gpu::gles2::TextureBase *tex = ConsumeTexture(mailboxManager, m_target, m_mailboxHolder.mailbox);
+ gpu::TextureBase *tex = ConsumeTexture(mailboxManager, m_target, m_mailboxHolder.mailbox);
// The texture might already have been deleted (e.g. when navigating away from a page).
if (tex) {
@@ -1331,7 +1331,7 @@ void DelegatedFrameNode::fetchAndSyncMailboxes(QList<MailboxTexture *> &mailboxe
void DelegatedFrameNode::pullTextures(DelegatedFrameNode *frameNode, const QVector<MailboxTexture *> textures)
{
#ifndef QT_NO_OPENGL
- gpu::gles2::MailboxManager *mailboxManager = mailbox_manager();
+ gpu::MailboxManager *mailboxManager = mailbox_manager();
for (MailboxTexture *texture : textures) {
gpu::SyncToken &syncToken = texture->mailboxHolder().sync_token;
if (syncToken.HasData())
@@ -1350,7 +1350,7 @@ void DelegatedFrameNode::pullTextures(DelegatedFrameNode *frameNode, const QVect
void DelegatedFrameNode::pullTexture(DelegatedFrameNode *frameNode, MailboxTexture *texture)
{
#ifndef QT_NO_OPENGL
- gpu::gles2::MailboxManager *mailboxManager = mailbox_manager();
+ gpu::MailboxManager *mailboxManager = mailbox_manager();
gpu::SyncToken &syncToken = texture->mailboxHolder().sync_token;
if (syncToken.HasData())
mailboxManager->PullTextureUpdates(syncToken);
diff --git a/src/core/desktop_screen_qt.cpp b/src/core/desktop_screen_qt.cpp
index b63511c92..15a3856fc 100644
--- a/src/core/desktop_screen_qt.cpp
+++ b/src/core/desktop_screen_qt.cpp
@@ -72,7 +72,6 @@ int DesktopScreenQt::GetNumDisplays() const
std::vector<display::Display>& DesktopScreenQt::GetAllDisplays() const
{
- Q_UNREACHABLE();
static std::vector<display::Display> empty;
return empty;
}
diff --git a/src/core/gl_surface_qt.cpp b/src/core/gl_surface_qt.cpp
index 918001adb..31d5e030f 100644
--- a/src/core/gl_surface_qt.cpp
+++ b/src/core/gl_surface_qt.cpp
@@ -178,6 +178,10 @@ GLSurfaceQtGLX::~GLSurfaceQtGLX()
bool GLSurfaceQtGLX::s_initialized = false;
+void GLSurfaceGLX::ShutdownOneOff()
+{
+}
+
bool GLSurfaceGLX::IsCreateContextSupported()
{
return ExtensionsContain(g_extensions, "GLX_ARB_create_context");
@@ -512,6 +516,11 @@ bool GLSurfaceEGL::InitializeOneOff(EGLNativeDisplayType /*native_display*/)
return GLSurfaceQtEGL::InitializeOneOff();
}
+bool GLSurfaceEGL::IsAndroidNativeFenceSyncSupported()
+{
+ return false;
+}
+
GLSurfaceQt::GLSurfaceQt(const gfx::Size& size)
: m_size(size)
{
diff --git a/src/core/network_delegate_qt.cpp b/src/core/network_delegate_qt.cpp
index acebbcf0b..74db51d7d 100644
--- a/src/core/network_delegate_qt.cpp
+++ b/src/core/network_delegate_qt.cpp
@@ -42,7 +42,6 @@
#include "browser_context_adapter.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_view_host.h"
-#include "content/public/browser/resource_request_details.h"
#include "content/public/browser/resource_request_info.h"
#include "cookie_monster_delegate_qt.h"
#include "ui/base/page_transition_types.h"
diff --git a/src/core/print_view_manager_base_qt.cpp b/src/core/print_view_manager_base_qt.cpp
index abae38160..abc1edf74 100644
--- a/src/core/print_view_manager_base_qt.cpp
+++ b/src/core/print_view_manager_base_qt.cpp
@@ -47,6 +47,8 @@
#include "type_conversion.h"
#include "web_engine_context.h"
+#include "base/memory/ref_counted_memory.h"
+#include "base/memory/shared_memory.h"
#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
#include "base/single_thread_task_runner.h"
@@ -110,80 +112,64 @@ base::string16 PrintViewManagerBaseQt::RenderSourceName()
return toString16(QLatin1String(""));
}
-// IPC handlers
-void PrintViewManagerBaseQt::OnDidPrintPage(
- const PrintHostMsg_DidPrintPage_Params& params) {
- if (!OpportunisticallyCreatePrintJob(params.document_cookie))
- return;
+bool PrintViewManagerBaseQt::PrintDocument(printing::PrintedDocument *document,
+ const scoped_refptr<base::RefCountedBytes> &print_data,
+ const gfx::Size &page_size,
+ const gfx::Rect &content_area,
+ const gfx::Point &offsets)
+{
+ std::unique_ptr<printing::PdfMetafileSkia> metafile =
+ std::make_unique<printing::PdfMetafileSkia>(printing::SkiaDocumentType::PDF);
+ if (!metafile->InitFromData(print_data->front(), print_data->size())) {
+ NOTREACHED() << "Invalid metafile";
+ web_contents()->Stop();
+ return false;
+ }
- printing::PrintedDocument* document = m_printJob->document();
- if (!document || params.document_cookie != document->cookie()) {
- // Out of sync. It may happen since we are completely asynchronous. Old
- // spurious messages can be received if one of the processes is overloaded.
- return;
- }
+ // Update the rendered document. It will send notifications to the listener.
+ document->SetDocument(std::move(metafile), page_size, content_area);
+ ShouldQuitFromInnerMessageLoop();
+ return true;
+}
-#if defined(OS_MACOSX)
- const bool metafile_must_be_valid = true;
-#else
- const bool metafile_must_be_valid = m_isExpectingFirstPage;
- m_isExpectingFirstPage = false;
-#endif
+printing::PrintedDocument *PrintViewManagerBaseQt::GetDocument(int cookie)
+{
+ if (!OpportunisticallyCreatePrintJob(cookie))
+ return nullptr;
+
+ printing::PrintedDocument* document = m_printJob->document();
+ if (!document || cookie != document->cookie()) {
+ // Out of sync. It may happen since we are completely asynchronous. Old
+ // spurious messages can be received if one of the processes is overloaded.
+ return nullptr;
+ }
+ return document;
+}
+
+// IPC handlers
+void PrintViewManagerBaseQt::OnDidPrintDocument(const PrintHostMsg_DidPrintDocument_Params &params)
+{
+ printing::PrintedDocument *document = GetDocument(params.document_cookie);
+ if (!document)
+ return;
- // Only used when |metafile_must_be_valid| is true.
- std::unique_ptr<base::SharedMemory> shared_buf;
- if (metafile_must_be_valid) {
if (!base::SharedMemory::IsHandleValid(params.metafile_data_handle)) {
- NOTREACHED() << "invalid memory handle";
- web_contents()->Stop();
- return;
- }
- shared_buf.reset(new base::SharedMemory(params.metafile_data_handle, true));
- if (!shared_buf->Map(params.data_size)) {
- NOTREACHED() << "couldn't map";
- web_contents()->Stop();
- return;
- }
- } else {
- if (base::SharedMemory::IsHandleValid(params.metafile_data_handle)) {
- NOTREACHED() << "unexpected valid memory handle";
- web_contents()->Stop();
- base::SharedMemory::CloseHandle(params.metafile_data_handle);
- return;
+ NOTREACHED() << "invalid memory handle";
+ web_contents()->Stop();
+ return;
}
- }
- std::unique_ptr<printing::PdfMetafileSkia> metafile(new printing::PdfMetafileSkia(printing::SkiaDocumentType::PDF));
- if (metafile_must_be_valid) {
- if (!metafile->InitFromData(shared_buf->memory(), params.data_size)) {
- NOTREACHED() << "Invalid metafile header";
- web_contents()->Stop();
- return;
+ std::unique_ptr<base::SharedMemory> shared_buf =
+ std::make_unique<base::SharedMemory>(params.metafile_data_handle, true);
+ if (!shared_buf->Map(params.data_size)) {
+ NOTREACHED() << "couldn't map";
+ web_contents()->Stop();
+ return;
}
- }
-
-#if defined(OS_WIN) && !defined(TOOLKIT_QT)
- if (metafile_must_be_valid) {
- scoped_refptr<base::RefCountedBytes> bytes = new base::RefCountedBytes(
- reinterpret_cast<const unsigned char*>(shared_buf->memory()),
- params.data_size);
-
- document->DebugDumpData(bytes.get(), FILE_PATH_LITERAL(".pdf"));
- m_printJob->StartPdfToEmfConversion(
- bytes, params.page_size, params.content_area);
- }
-#else
- // Update the rendered document. It will send notifications to the listener.
- document->SetPage(params.page_number,
- std::move(metafile),
-#if defined(OS_WIN)
- 1.0f, // shrink factor, needed on windows.
-#endif // defined(OS_WIN)
- params.page_size,
- params.content_area);
-
- ShouldQuitFromInnerMessageLoop();
-#endif // defined (OS_WIN) && !defined(TOOLKIT_QT)
+ scoped_refptr<base::RefCountedBytes> bytes =
+ base::MakeRefCounted<base::RefCountedBytes>(
+ reinterpret_cast<const unsigned char*>(shared_buf->memory()), params.data_size);
+ PrintDocument(document, bytes, params.page_size, params.content_area, params.physical_offsets);
}
void PrintViewManagerBaseQt::OnShowInvalidPrinterSettingsError()
@@ -220,9 +206,9 @@ bool PrintViewManagerBaseQt::OnMessageReceived(const IPC::Message& message, cont
{
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(PrintViewManagerBaseQt, message)
- IPC_MESSAGE_HANDLER(PrintHostMsg_DidPrintPage, OnDidPrintPage)
- IPC_MESSAGE_HANDLER(PrintHostMsg_ShowInvalidPrinterSettingsError, OnShowInvalidPrinterSettingsError);
- IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_MESSAGE_HANDLER(PrintHostMsg_DidPrintDocument, OnDidPrintDocument)
+ IPC_MESSAGE_HANDLER(PrintHostMsg_ShowInvalidPrinterSettingsError, OnShowInvalidPrinterSettingsError);
+ IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled || PrintManager::OnMessageReceived(message, render_frame_host);
}
@@ -254,8 +240,9 @@ void PrintViewManagerBaseQt::OnNotifyPrintJobEvent(const printing::JobEventDetai
case printing::JobEventDetails::ALL_PAGES_REQUESTED:
break;
case printing::JobEventDetails::NEW_DOC:
- case printing::JobEventDetails::NEW_PAGE:
+#if defined(OS_WIN)
case printing::JobEventDetails::PAGE_DONE:
+#endif
case printing::JobEventDetails::DOC_DONE:
// Don't care about the actual printing process.
break;
diff --git a/src/core/print_view_manager_base_qt.h b/src/core/print_view_manager_base_qt.h
index c55e970e5..0d86fcf90 100644
--- a/src/core/print_view_manager_base_qt.h
+++ b/src/core/print_view_manager_base_qt.h
@@ -51,7 +51,11 @@
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
-struct PrintHostMsg_DidPrintPage_Params;
+struct PrintHostMsg_DidPrintDocument_Params;
+
+namespace base {
+class RefCountedBytes;
+}
namespace content {
class RenderFrameHost;
@@ -64,12 +68,13 @@ class MetafilePlayer;
class PrintJob;
class PrintJobWorkerOwner;
class PrintQueriesQueue;
+class PrintedDocument;
+class PrinterQuery;
}
namespace QtWebEngineCore {
-class PrintViewManagerBaseQt
- : public content::NotificationObserver
- , public printing::PrintManager
+class PrintViewManagerBaseQt : public content::NotificationObserver
+ , public printing::PrintManager
{
public:
~PrintViewManagerBaseQt() override;
@@ -92,7 +97,7 @@ protected:
content::RenderFrameHost* render_frame_host) override;
// IPC Message handlers.
- void OnDidPrintPage(const PrintHostMsg_DidPrintPage_Params& params);
+ void OnDidPrintDocument(const PrintHostMsg_DidPrintDocument_Params& params);
void OnShowInvalidPrinterSettingsError();
// Processes a NOTIFY_PRINT_JOB_EVENT notification.
@@ -118,9 +123,22 @@ protected:
// been requested to the renderer.
bool RenderAllMissingPagesNow();
+ // Checks that synchronization is correct and a print query exists for
+ // |cookie|. If so, returns the document associated with the cookie.
+ printing::PrintedDocument* GetDocument(int cookie);
+
+ // Starts printing a document with data given in |print_data|. |print_data|
+ // must successfully initialize a metafile. |document| is the printed
+ // document associated with the print job. Returns true if successful.
+ bool PrintDocument(printing::PrintedDocument *document,
+ const scoped_refptr<base::RefCountedBytes> &print_data,
+ const gfx::Size &page_size,
+ const gfx::Rect &content_area,
+ const gfx::Point &offsets);
+
// Quits the current message loop if these conditions hold true: a document is
// loaded and is complete and waiting_for_pages_to_be_rendered_ is true. This
- // function is called in DidPrintPage() or on ALL_PAGES_REQUESTED
+ // function is called in DidPrintDocument() or on ALL_PAGES_REQUESTED
// notification. The inner message loop is created was created by
// RenderAllMissingPagesNow().
void ShouldQuitFromInnerMessageLoop();
diff --git a/src/core/printing_message_filter_qt.cpp b/src/core/printing_message_filter_qt.cpp
index 02b8751f5..c0e3498ee 100644
--- a/src/core/printing_message_filter_qt.cpp
+++ b/src/core/printing_message_filter_qt.cpp
@@ -191,16 +191,8 @@ void PrintingMessageFilterQt::OnUpdatePrintSettings(
scoped_refptr<printing::PrinterQuery> printer_query;
printer_query = queue_->PopPrinterQuery(document_cookie);
if (!printer_query.get()) {
- int host_id = render_process_id_;
- int routing_id = reply_msg->routing_id();
- if (!new_settings->GetInteger(printing::kPreviewInitiatorHostId,
- &host_id) ||
- !new_settings->GetInteger(printing::kPreviewInitiatorRoutingId,
- &routing_id)) {
- host_id = content::ChildProcessHost::kInvalidUniqueID;
- routing_id = content::ChildProcessHost::kInvalidUniqueID;
- }
- printer_query = queue_->CreatePrinterQuery(host_id, routing_id);
+ printer_query = queue_->CreatePrinterQuery(
+ content::ChildProcessHost::kInvalidUniqueID, MSG_ROUTING_NONE);
}
printer_query->SetSettings(
std::move(new_settings),
diff --git a/src/core/qtwebengine_sources.gni b/src/core/qtwebengine_sources.gni
index c5c642ddd..e0eb3e23a 100644
--- a/src/core/qtwebengine_sources.gni
+++ b/src/core/qtwebengine_sources.gni
@@ -7,8 +7,8 @@ import("//printing/features/features.gni")
source_set("qtwebengine_spellcheck_sources") {
sources = [
- "//chrome/browser/spellchecker/spell_check_host_impl.cc",
- "//chrome/browser/spellchecker/spell_check_host_impl.h",
+ "//chrome/browser/spellchecker/spell_check_host_chrome_impl.cc",
+ "//chrome/browser/spellchecker/spell_check_host_chrome_impl.h",
"//chrome/browser/spellchecker/spellcheck_custom_dictionary.cc",
"//chrome/browser/spellchecker/spellcheck_custom_dictionary.h",
"//chrome/browser/spellchecker/spellcheck_factory.cc",
@@ -39,8 +39,9 @@ source_set("qtwebengine_sources") {
"//third_party/skia/include/core"
]
deps = [
- "//components/nacl/common:features",
- "//extensions/features:features",
+ "//chrome/common:features",
+ "//components/nacl/common:features",
+ "//extensions/features:features",
]
sources = [
"//chrome/common/custom_handlers/protocol_handler.cc",
diff --git a/src/core/quota_permission_context_qt.cpp b/src/core/quota_permission_context_qt.cpp
index bb59512c0..0fdcef3b3 100644
--- a/src/core/quota_permission_context_qt.cpp
+++ b/src/core/quota_permission_context_qt.cpp
@@ -55,7 +55,7 @@ namespace QtWebEngineCore {
void QuotaPermissionContextQt::RequestQuotaPermission(const StorageQuotaParams &params, int render_process_id, const PermissionCallback &callback)
{
- if (params.storage_type != storage::kStorageTypePersistent) {
+ if (params.storage_type != blink::mojom::StorageType::kPersistent) {
// For now we only support requesting quota with this interface
// for Persistent storage type.
callback.Run(QUOTA_PERMISSION_RESPONSE_DISALLOW);
diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp
index a9e2f2ccb..2d42dc11c 100644
--- a/src/core/render_widget_host_view_qt.cpp
+++ b/src/core/render_widget_host_view_qt.cpp
@@ -316,7 +316,7 @@ bool isAccessibilityEnabled() {
return accessibility_enabled;
}
-RenderWidgetHostViewQt::RenderWidgetHostViewQt(content::RenderWidgetHost* widget)
+RenderWidgetHostViewQt::RenderWidgetHostViewQt(content::RenderWidgetHost *widget)
: m_host(content::RenderWidgetHostImpl::From(widget))
, m_gestureProvider(QtGestureProviderConfig(), this)
, m_sendMotionActionDown(false)
@@ -408,7 +408,7 @@ void RenderWidgetHostViewQt::InitAsFullscreen(content::RenderWidgetHostView*)
{
}
-content::RenderWidgetHost* RenderWidgetHostViewQt::GetRenderWidgetHost() const
+content::RenderWidgetHostImpl* RenderWidgetHostViewQt::GetRenderWidgetHostImpl() const
{
return m_host;
}
@@ -750,6 +750,11 @@ void RenderWidgetHostViewQt::SubmitCompositorFrame(const viz::LocalSurfaceId &lo
m_chromiumCompositorData->frameDevicePixelRatio = frame.metadata.device_scale_factor;
m_chromiumCompositorData->frameData = std::move(frame);
+ // Force to process swap messages
+ uint32_t frame_token = frame.metadata.frame_token;
+ if (frame_token)
+ OnFrameTokenChangedForView(frame_token);
+
// Support experimental.viewport.devicePixelRatio, see GetScreenInfo implementation below.
float dpiScale = this->dpiScale();
if (dpiScale != 0 && dpiScale != 1)
@@ -1718,5 +1723,13 @@ ui::TextInputType RenderWidgetHostViewQt::getTextInputType() const
return ui::TEXT_INPUT_TYPE_NONE;
}
+void RenderWidgetHostViewQt::SetWantsAnimateOnlyBeginFrames()
+{
+}
+
+viz::SurfaceId RenderWidgetHostViewQt::GetCurrentSurfaceId() const
+{
+ return viz::SurfaceId();
+}
} // namespace QtWebEngineCore
diff --git a/src/core/render_widget_host_view_qt.h b/src/core/render_widget_host_view_qt.h
index 678c1a8ee..96d40eae2 100644
--- a/src/core/render_widget_host_view_qt.h
+++ b/src/core/render_widget_host_view_qt.h
@@ -125,7 +125,7 @@ public:
void InitAsChild(gfx::NativeView) override;
void InitAsPopup(content::RenderWidgetHostView*, const gfx::Rect&) override;
void InitAsFullscreen(content::RenderWidgetHostView*) override;
- content::RenderWidgetHost* GetRenderWidgetHost() const override;
+ content::RenderWidgetHostImpl* GetRenderWidgetHostImpl() const override;
void SetSize(const gfx::Size& size) override;
void SetBounds(const gfx::Rect&) override;
gfx::Vector2dF GetLastScrollOffset() const override;
@@ -160,6 +160,8 @@ public:
void ProcessAckedTouchEvent(const content::TouchEventWithLatencyInfo &touch, content::InputEventAckState ack_result) override;
void ClearCompositorFrame() override;
void SetNeedsBeginFrames(bool needs_begin_frames) override;
+ void SetWantsAnimateOnlyBeginFrames() override;
+ viz::SurfaceId GetCurrentSurfaceId() const override;
// Overridden from ui::GestureProviderClient.
void OnGestureEvent(const ui::GestureEventData& gesture) override;
@@ -205,7 +207,6 @@ public:
void StopSpeaking() override { QT_NOT_YET_IMPLEMENTED }
bool SupportsSpeech() const override { QT_NOT_YET_IMPLEMENTED; return false; }
void ShowDefinitionForSelection() override { QT_NOT_YET_IMPLEMENTED }
- ui::AcceleratedWidgetMac *GetAcceleratedWidgetMac() const override { QT_NOT_YET_IMPLEMENTED; return nullptr; }
#endif // defined(OS_MACOSX)
diff --git a/src/core/renderer/content_renderer_client_qt.cpp b/src/core/renderer/content_renderer_client_qt.cpp
index 63b99c7bc..2c3ea4cc3 100644
--- a/src/core/renderer/content_renderer_client_qt.cpp
+++ b/src/core/renderer/content_renderer_client_qt.cpp
@@ -184,18 +184,18 @@ bool ContentRendererClientQt::ShouldSuppressErrorPage(content::RenderFrame *fram
}
// 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)
+void ContentRendererClientQt::PrepareErrorPage(content::RenderFrame* renderFrame, const blink::WebURLRequest &failedRequest,
+ const blink::WebURLError &web_error,
+ std::string *errorHtml, base::string16 *errorDescription)
{
GetNavigationErrorStringsInternal(renderFrame, failedRequest,
error_page::Error::NetError(web_error.url(), web_error.reason(), web_error.has_copy_in_cache()),
errorHtml, errorDescription);
}
-void ContentRendererClientQt::GetNavigationErrorStringsForHttpStatusError(content::RenderFrame* renderFrame, const blink::WebURLRequest& failedRequest,
- const GURL& unreachable_url, int http_status,
- std::string* errorHtml, base::string16* errorDescription)
+void ContentRendererClientQt::PrepareErrorPageForHttpStatusError(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),
diff --git a/src/core/renderer/content_renderer_client_qt.h b/src/core/renderer/content_renderer_client_qt.h
index 11538b3f0..b91f57fc2 100644
--- a/src/core/renderer/content_renderer_client_qt.h
+++ b/src/core/renderer/content_renderer_client_qt.h
@@ -74,11 +74,11 @@ public:
void RenderFrameCreated(content::RenderFrame* render_frame) override;
bool ShouldSuppressErrorPage(content::RenderFrame *, const GURL &) override;
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;
+ void PrepareErrorPage(content::RenderFrame* renderFrame, const blink::WebURLRequest& failedRequest,
+ const blink::WebURLError& error, std::string* errorHtml, base::string16* errorDescription) override;
+ void PrepareErrorPageForHttpStatusError(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;
diff --git a/src/core/ssl_host_state_delegate_qt.cpp b/src/core/ssl_host_state_delegate_qt.cpp
index 9fa62cacb..d8f73abda 100644
--- a/src/core/ssl_host_state_delegate_qt.cpp
+++ b/src/core/ssl_host_state_delegate_qt.cpp
@@ -55,7 +55,10 @@ CertPolicy::~CertPolicy()
{
}
-bool CertPolicy::Check(const net::X509Certificate& cert, net::CertStatus error) const
+// For an allowance, we consider a given |cert| to be a match to a saved
+// allowed cert if the |error| is an exact match to or subset of the errors
+// in the saved CertStatus.
+bool CertPolicy::Check(const net::X509Certificate &cert, net::CertStatus error) const
{
net::SHA256HashValue fingerprint = cert.CalculateChainFingerprint256();
auto allowed_iter = m_allowed.find(fingerprint);
diff --git a/src/core/ssl_host_state_delegate_qt.h b/src/core/ssl_host_state_delegate_qt.h
index 859e98fe7..3ebabb601 100644
--- a/src/core/ssl_host_state_delegate_qt.h
+++ b/src/core/ssl_host_state_delegate_qt.h
@@ -54,7 +54,7 @@ public:
bool HasAllowException() const { return m_allowed.size() > 0; }
private:
- std::map<net::SHA256HashValue, net::CertStatus, net::SHA256HashValueLessThan> m_allowed;
+ std::map<net::SHA256HashValue, net::CertStatus> m_allowed;
};
class SSLHostStateDelegateQt : public content::SSLHostStateDelegate {
diff --git a/src/core/type_conversion.cpp b/src/core/type_conversion.cpp
index 685ee273e..2a9746660 100644
--- a/src/core/type_conversion.cpp
+++ b/src/core/type_conversion.cpp
@@ -74,6 +74,7 @@ QImage toQImage(const SkBitmap &bitmap)
break;
}
break;
+ case kRGB_888x_SkColorType:
case kRGBA_8888_SkColorType:
switch (bitmap.alphaType()) {
case kUnknown_SkAlphaType:
@@ -105,6 +106,21 @@ QImage toQImage(const SkBitmap &bitmap)
break;
}
break;
+ case kRGB_101010x_SkColorType:
+ case kRGBA_1010102_SkColorType:
+ switch (bitmap.alphaType()) {
+ case kUnknown_SkAlphaType:
+ break;
+ case kUnpremul_SkAlphaType:
+ // not supported - treat as opaque
+ case kOpaque_SkAlphaType:
+ image = toQImage(bitmap, QImage::Format_RGB30);
+ break;
+ case kPremul_SkAlphaType:
+ image = toQImage(bitmap, QImage::Format_A2RGB30_Premultiplied);
+ break;
+ }
+ break;
case kGray_8_SkColorType:
image = toQImage(bitmap, QImage::Format_Grayscale8);
break;
diff --git a/src/core/url_request_context_getter_qt.cpp b/src/core/url_request_context_getter_qt.cpp
index 7f78cbc20..3b041639e 100644
--- a/src/core/url_request_context_getter_qt.cpp
+++ b/src/core/url_request_context_getter_qt.cpp
@@ -202,9 +202,9 @@ void URLRequestContextGetterQt::cancelAllUrlRequests()
Q_ASSERT(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
Q_ASSERT(m_urlRequestContext);
- const std::set<const net::URLRequest*>& url_requests = m_urlRequestContext->url_requests();
- std::set<const net::URLRequest*>::const_iterator it = url_requests.begin();
- std::set<const net::URLRequest*>::const_iterator end = url_requests.end();
+ const std::set<const net::URLRequest*> *url_requests = m_urlRequestContext->url_requests();
+ std::set<const net::URLRequest*>::const_iterator it = url_requests->begin();
+ std::set<const net::URLRequest*>::const_iterator end = url_requests->end();
for ( ; it != end; ++it) {
net::URLRequest* request = const_cast<net::URLRequest*>(*it);
if (request)
@@ -339,7 +339,8 @@ void URLRequestContextGetterQt::generateCookieStore()
cookieStore = content::CreateCookieStore(
content::CookieStoreConfig(
base::FilePath(),
- content::CookieStoreConfig::EPHEMERAL_SESSION_COOKIES,
+ false,
+ false,
nullptr)
);
break;
@@ -347,7 +348,8 @@ void URLRequestContextGetterQt::generateCookieStore()
cookieStore = content::CreateCookieStore(
content::CookieStoreConfig(
toFilePath(m_cookiesPath),
- content::CookieStoreConfig::PERSISTANT_SESSION_COOKIES,
+ false,
+ true,
nullptr)
);
break;
@@ -355,7 +357,8 @@ void URLRequestContextGetterQt::generateCookieStore()
cookieStore = content::CreateCookieStore(
content::CookieStoreConfig(
toFilePath(m_cookiesPath),
- content::CookieStoreConfig::RESTORED_SESSION_COOKIES,
+ true,
+ true,
nullptr)
);
break;
diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp
index 770f66007..fc8fded7a 100644
--- a/src/core/web_contents_adapter.cpp
+++ b/src/core/web_contents_adapter.cpp
@@ -75,11 +75,10 @@
#include "content/public/browser/favicon_status.h"
#include "content/public/common/content_constants.h"
#include "content/public/common/content_switches.h"
-#include <content/public/common/drop_data.h>
+#include "content/public/common/drop_data.h"
#include "content/public/common/page_state.h"
#include "content/public/common/page_zoom.h"
#include "content/public/common/renderer_preferences.h"
-#include "content/public/common/resource_request_body.h"
#include "content/public/common/url_constants.h"
#include "content/public/common/web_preferences.h"
#include "content/public/common/webrtc_ip_handling_policy.h"
@@ -588,7 +587,7 @@ void WebContentsAdapter::load(const QWebEngineHttpRequest &request)
break;
}
- params.post_data = content::ResourceRequestBody::CreateFromBytes(
+ params.post_data = network::ResourceRequestBody::CreateFromBytes(
(const char*)request.postData().constData(),
request.postData().length());
diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp
index 316ee9b94..ed406977f 100644
--- a/src/core/web_contents_delegate_qt.cpp
+++ b/src/core/web_contents_delegate_qt.cpp
@@ -399,7 +399,7 @@ void WebContentsDelegateQt::WebContentsCreated(content::WebContents */*source_co
m_initialTargetUrl = toQt(target_url);
}
-content::ColorChooser *WebContentsDelegateQt::OpenColorChooser(content::WebContents *source, SkColor color, const std::vector<content::ColorSuggestion> &suggestion)
+content::ColorChooser *WebContentsDelegateQt::OpenColorChooser(content::WebContents *source, SkColor color, const std::vector<blink::mojom::ColorSuggestionPtr> &suggestion)
{
Q_UNUSED(suggestion);
ColorChooserQt *colorChooser = new ColorChooserQt(source, toQt(color));
diff --git a/src/core/web_contents_delegate_qt.h b/src/core/web_contents_delegate_qt.h
index e649ca727..3dcbf9cd8 100644
--- a/src/core/web_contents_delegate_qt.h
+++ b/src/core/web_contents_delegate_qt.h
@@ -108,7 +108,7 @@ public:
void CloseContents(content::WebContents *source) override;
void LoadProgressChanged(content::WebContents* source, double progress) override;
void HandleKeyboardEvent(content::WebContents *source, const content::NativeWebKeyboardEvent &event) override;
- content::ColorChooser *OpenColorChooser(content::WebContents *source, SkColor color, const std::vector<content::ColorSuggestion> &suggestion) override;
+ content::ColorChooser* OpenColorChooser(content::WebContents *source, SkColor color, const std::vector<blink::mojom::ColorSuggestionPtr> &suggestions) override;
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;
diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp
index b9820d4df..57248a27f 100644
--- a/src/core/web_engine_context.cpp
+++ b/src/core/web_engine_context.cpp
@@ -51,6 +51,7 @@
#if BUILDFLAG(ENABLE_BASIC_PRINTING)
#include "chrome/browser/printing/print_job_manager.h"
#endif // defined(ENABLE_BASIC_PRINTING)
+#include "components/viz/common/features.h"
#include "components/web_cache/browser/web_cache_manager.h"
#include "content/browser/devtools/devtools_http_handler.h"
#include "content/browser/gpu/gpu_main_thread_factory.h"
@@ -238,7 +239,7 @@ WebEngineContext::~WebEngineContext()
Q_ASSERT(!m_browserRunner);
}
-scoped_refptr<WebEngineContext> WebEngineContext::current()
+WebEngineContext *WebEngineContext::current()
{
if (s_destroyed)
return nullptr;
@@ -249,7 +250,7 @@ scoped_refptr<WebEngineContext> WebEngineContext::current()
// Add a false reference so there is no race between unreferencing sContext and a global QApplication.
sContext->AddRef();
}
- return sContext;
+ return sContext.get();
}
QSharedPointer<BrowserContextAdapter> WebEngineContext::defaultBrowserContext()
@@ -272,6 +273,17 @@ QObject *WebEngineContext::globalQObject()
const static char kChromiumFlagsEnv[] = "QTWEBENGINE_CHROMIUM_FLAGS";
const static char kDisableSandboxEnv[] = "QTWEBENGINE_DISABLE_SANDBOX";
+static void appendToFeatureSwitch(base::CommandLine *commandLine, const char *featureSwitch, const char *feature)
+{
+ if (!commandLine->HasSwitch(featureSwitch)) {
+ commandLine->AppendSwitchASCII(featureSwitch, feature);
+ } else {
+ std::string featureList = commandLine->GetSwitchValueASCII(featureSwitch);
+ featureList = featureList + "," + feature;
+ commandLine->AppendSwitchASCII(featureSwitch, featureList);
+ }
+}
+
WebEngineContext::WebEngineContext()
: m_mainDelegate(new ContentMainDelegateQt)
, m_contentRunner(content::ContentMainRunner::Create())
@@ -351,9 +363,6 @@ WebEngineContext::WebEngineContext()
// The Mojo local-storage is currently pretty broken and saves in $$PWD/Local\ Storage
parsedCommandLine->AppendSwitch(switches::kDisableMojoLocalStorage);
- // Shared workers are not safe until Chromium 64
- parsedCommandLine->AppendSwitch(switches::kDisableSharedWorkers);
-
#if defined(Q_OS_MACOS)
// Accelerated decoding currently does not work on macOS due to issues with OpenGL Rectangle
// texture support. See QTBUG-60002.
@@ -379,13 +388,17 @@ WebEngineContext::WebEngineContext()
// tst_QWebEnginePage::acceptNavigationRequest.
// This is deprecated behavior, and will be removed in a future Chromium version, as per
// upstream Chromium commit ba52f56207a4b9d70b34880fbff2352e71a06422.
- parsedCommandLine->AppendSwitchASCII(switches::kEnableFeatures,
- features::kAllowContentInitiatedDataUrlNavigations.name);
+ appendToFeatureSwitch(parsedCommandLine, switches::kEnableFeatures, features::kAllowContentInitiatedDataUrlNavigations.name);
+ // Surface synchronization breaks our current graphics integration (since 65)
+ appendToFeatureSwitch(parsedCommandLine, switches::kDisableFeatures, features::kEnableSurfaceSynchronization.name);
+ // Scroll latching expects phases on all wheel events when it really only makes sense for simulated ones.
+ appendToFeatureSwitch(parsedCommandLine, switches::kDisableFeatures, features::kTouchpadAndWheelScrollLatching.name);
+
// If the renderer renders the validation messages, we no longer get the callbacks we have in the API.
parsedCommandLine->AppendSwitchASCII(switches::kDisableBlinkFeatures, "ValidationBubbleInRenderer");
if (useEmbeddedSwitches) {
- parsedCommandLine->AppendSwitchASCII(switches::kEnableFeatures, features::kOverlayScrollbar.name);
+ appendToFeatureSwitch(parsedCommandLine, switches::kEnableFeatures, features::kOverlayScrollbar.name);
if (!parsedCommandLine->HasSwitch(switches::kDisablePinch))
parsedCommandLine->AppendSwitch(switches::kEnablePinch);
parsedCommandLine->AppendSwitch(switches::kEnableViewport);
diff --git a/src/core/web_engine_context.h b/src/core/web_engine_context.h
index 1b4be48b1..c1640bdf2 100644
--- a/src/core/web_engine_context.h
+++ b/src/core/web_engine_context.h
@@ -78,7 +78,7 @@ bool usingSoftwareDynamicGL();
class WebEngineContext : public base::RefCounted<WebEngineContext> {
public:
- static scoped_refptr<WebEngineContext> current();
+ static WebEngineContext *current();
QSharedPointer<BrowserContextAdapter> defaultBrowserContext();
QObject *globalQObject();
diff --git a/src/core/web_event_factory.cpp b/src/core/web_event_factory.cpp
index 44c04e3e6..1eeca8093 100644
--- a/src/core/web_event_factory.cpp
+++ b/src/core/web_event_factory.cpp
@@ -1313,6 +1313,21 @@ static void setBlinkWheelEventDelta(blink::WebMouseWheelEvent &webEvent)
webEvent.delta_y = webEvent.wheel_ticks_y * wheelScrollLines * cDefaultQtScrollStep;
}
+blink::WebMouseWheelEvent::Phase toBlinkPhase(Qt::ScrollPhase phase)
+{
+ switch (phase) {
+ case Qt::NoScrollPhase:
+ return blink::WebMouseWheelEvent::kPhaseNone;
+ case Qt::ScrollBegin:
+ return blink::WebMouseWheelEvent::kPhaseBegan;
+ case Qt::ScrollUpdate:
+ return blink::WebMouseWheelEvent::kPhaseChanged;
+ case Qt::ScrollEnd:
+ return blink::WebMouseWheelEvent::kPhaseEnded;
+ }
+ Q_UNREACHABLE();
+ return blink::WebMouseWheelEvent::kPhaseNone;
+}
blink::WebMouseWheelEvent WebEventFactory::toWebWheelEvent(QWheelEvent *ev, double dpiScale)
{
@@ -1325,6 +1340,8 @@ blink::WebMouseWheelEvent WebEventFactory::toWebWheelEvent(QWheelEvent *ev, doub
webEvent.wheel_ticks_x = static_cast<float>(ev->angleDelta().x()) / QWheelEvent::DefaultDeltasPerStep;
webEvent.wheel_ticks_y = static_cast<float>(ev->angleDelta().y()) / QWheelEvent::DefaultDeltasPerStep;
+ webEvent.phase = toBlinkPhase(ev->phase());
+ webEvent.has_precise_scrolling_deltas = true;
setBlinkWheelEventDelta(webEvent);
return webEvent;
@@ -1336,6 +1353,8 @@ bool WebEventFactory::coalesceWebWheelEvent(blink::WebMouseWheelEvent &webEvent,
return false;
if (modifiersForEvent(ev) != webEvent.GetModifiers())
return false;
+ if (toBlinkPhase(ev->phase()) != webEvent.phase)
+ return false;
webEvent.SetTimeStampSeconds(currentTimeForEvent(ev));
webEvent.SetPositionInWidget(ev->x() / dpiScale, ev->y() / dpiScale);