diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-02-01 12:19:37 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-03-15 16:52:24 +0000 |
commit | 6b35497375c07c49cca7317a4452acc6adc7a1cd (patch) | |
tree | 5531da6c89bb3da6495e8c83a0b86bff638f3baa /src/core | |
parent | 91e13af7e1056a7bad83eb34ebf63fdd45e24bea (diff) |
Basic adaptations for 65-based
Change-Id: I121b14d6a44e80f5eea4b159c58f7010d472926e
Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'src/core')
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 ¶ms) +{ + 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 ¶ms, 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); |