From 6b35497375c07c49cca7317a4452acc6adc7a1cd Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Thu, 1 Feb 2018 12:19:37 +0100 Subject: Basic adaptations for 65-based MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I121b14d6a44e80f5eea4b159c58f7010d472926e Reviewed-by: Michael Brüning --- configure.json | 32 ++++- src/3rdparty | 2 +- src/core/browser_context_qt.cpp | 7 +- src/core/browsing_data_remover_delegate_qt.cpp | 5 +- src/core/browsing_data_remover_delegate_qt.h | 4 +- src/core/chromium_gpu_helper.cpp | 8 +- src/core/chromium_gpu_helper.h | 10 +- src/core/chromium_overrides.cpp | 8 ++ src/core/config/common.pri | 8 +- src/core/config/linux.pri | 7 +- src/core/content_browser_client_qt.cpp | 7 +- src/core/content_client_qt.cpp | 7 ++ src/core/delegated_frame_node.cpp | 10 +- src/core/desktop_screen_qt.cpp | 1 - src/core/gl_surface_qt.cpp | 9 ++ src/core/network_delegate_qt.cpp | 1 - src/core/print_view_manager_base_qt.cpp | 129 +++++++++------------ src/core/print_view_manager_base_qt.h | 30 ++++- src/core/printing_message_filter_qt.cpp | 12 +- src/core/qtwebengine_sources.gni | 9 +- src/core/quota_permission_context_qt.cpp | 2 +- src/core/render_widget_host_view_qt.cpp | 17 ++- src/core/render_widget_host_view_qt.h | 5 +- src/core/renderer/content_renderer_client_qt.cpp | 12 +- src/core/renderer/content_renderer_client_qt.h | 10 +- src/core/ssl_host_state_delegate_qt.cpp | 5 +- src/core/ssl_host_state_delegate_qt.h | 2 +- src/core/type_conversion.cpp | 16 +++ src/core/url_request_context_getter_qt.cpp | 15 ++- src/core/web_contents_adapter.cpp | 5 +- src/core/web_contents_delegate_qt.cpp | 2 +- src/core/web_contents_delegate_qt.h | 2 +- src/core/web_engine_context.cpp | 29 +++-- src/core/web_engine_context.h | 2 +- src/core/web_event_factory.cpp | 19 +++ tests/auto/quick/qmltests/data/tst_viewSource.qml | 8 +- .../tst_qwebenginedownloads.cpp | 4 +- .../tst_qwebenginespellcheck.cpp | 2 +- tools/scripts/git_submodule.py | 26 ++++- tools/scripts/take_snapshot.py | 8 +- tools/scripts/version_resolver.py | 4 +- 41 files changed, 319 insertions(+), 182 deletions(-) diff --git a/configure.json b/configure.json index 1adc5992b..ce12b05b6 100644 --- a/configure.json +++ b/configure.json @@ -175,6 +175,28 @@ { "type": "pkgConfig", "args": "libpng >= 1.6.0" } ] }, + "webengine-jpeglib": { + "label": "compatible jpeglib", + "type": "compile", + "test": { + "head": [ + "#include ", + "#include ", + "extern \"C\" {", + " #include ", + "}" + ], + "main": [ + "JDIMENSION dummy;", + "jpeg_crop_scanline(nullptr, &dummy, &dummy);", + "jpeg_skip_scanlines(nullptr, dummy);" + ] + }, + "sources": [ + { "type": "pkgConfig", "args": "libjpeg" }, + "-ljpeg" + ] + }, "webengine-lcms2": { "label": "lcms2", "sources": [ @@ -184,7 +206,7 @@ }, "tests" : { - "alsa": { + "webengine-alsa": { "label": "alsa", "test": "alsa", "type": "compile" @@ -357,6 +379,11 @@ "condition": "config.unix && features.system-png && libs.webengine-png", "output": [ "privateFeature" ] }, + "webengine-system-jpeg" : { + "label": "JPEG", + "condition": "config.unix && features.system-jpeg && libs.webengine-jpeglib", + "output": [ "privateFeature" ] + }, "webengine-python2": { "label": "python2", "condition": "tests.webengine-python2", @@ -398,7 +425,7 @@ }, "webengine-alsa": { "label": "Use ALSA", - "condition": "config.unix && tests.alsa", + "condition": "config.unix && tests.webengine-alsa", "output": [ "privateFeature" ] }, "webengine-v8-snapshot": { @@ -658,6 +685,7 @@ "webengine-system-libxml2", "webengine-system-lcms2", "webengine-system-png", + "webengine-system-jpeg", "webengine-system-harfbuzz" ] }, diff --git a/src/3rdparty b/src/3rdparty index 899b407b1..ed743fb51 160000 --- a/src/3rdparty +++ b/src/3rdparty @@ -1 +1 @@ -Subproject commit 899b407b1128d0dbba360022a5ced872fabeec3f +Subproject commit ed743fb51c6123c8b85ac6515c438b3f96001fef 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()); + registry->RegisterListPref(spellcheck::prefs::kSpellCheckForcedDictionaries, base::MakeUnique()); 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(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 &mailboxe void DelegatedFrameNode::pullTextures(DelegatedFrameNode *frameNode, const QVector 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& DesktopScreenQt::GetAllDisplays() const { - Q_UNREACHABLE(); static std::vector 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 &print_data, + const gfx::Size &page_size, + const gfx::Rect &content_area, + const gfx::Point &offsets) +{ + std::unique_ptr metafile = + std::make_unique(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 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 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 shared_buf = + std::make_unique(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 bytes = new base::RefCountedBytes( - reinterpret_cast(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 bytes = + base::MakeRefCounted( + reinterpret_cast(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 &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 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 m_allowed; + std::map 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& url_requests = m_urlRequestContext->url_requests(); - std::set::const_iterator it = url_requests.begin(); - std::set::const_iterator end = url_requests.end(); + const std::set *url_requests = m_urlRequestContext->url_requests(); + std::set::const_iterator it = url_requests->begin(); + std::set::const_iterator end = url_requests->end(); for ( ; it != end; ++it) { net::URLRequest* request = const_cast(*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 +#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 &suggestion) +content::ColorChooser *WebContentsDelegateQt::OpenColorChooser(content::WebContents *source, SkColor color, const std::vector &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 &suggestion) override; + content::ColorChooser* OpenColorChooser(content::WebContents *source, SkColor color, const std::vector &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::current() +WebEngineContext *WebEngineContext::current() { if (s_destroyed) return nullptr; @@ -249,7 +250,7 @@ scoped_refptr 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 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 { public: - static scoped_refptr current(); + static WebEngineContext *current(); QSharedPointer 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(ev->angleDelta().x()) / QWheelEvent::DefaultDeltasPerStep; webEvent.wheel_ticks_y = static_cast(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); diff --git a/tests/auto/quick/qmltests/data/tst_viewSource.qml b/tests/auto/quick/qmltests/data/tst_viewSource.qml index d0bc0529d..b21d72eb2 100644 --- a/tests/auto/quick/qmltests/data/tst_viewSource.qml +++ b/tests/auto/quick/qmltests/data/tst_viewSource.qml @@ -63,8 +63,10 @@ TestWebEngineView { name: "WebEngineViewSource" function init() { + webEngineView.loadStatus = null; webEngineView.url = Qt.resolvedUrl("test1.html"); - verify(webEngineView.waitForLoadSucceeded(20000)); + tryCompare(webEngineView, "loadStatus", WebEngineView.LoadSucceededStatus); + webEngineView.loadStatus = null; newViewRequestedSpy.clear(); titleChangedSpy.clear(); @@ -113,9 +115,9 @@ TestWebEngineView { webEngineView.url = row.userInputUrl; if (row.loadSucceed) { - verify(webEngineView.waitForLoadSucceeded(15000)); + tryCompare(webEngineView, "loadStatus", WebEngineView.LoadSucceededStatus); } else { - verify(webEngineView.waitForLoadFailed(15000)); + tryCompare(webEngineView, "loadStatus", WebEngineView.LoadFailedStatus, 15000); } tryVerify(function() { return titleChangedSpy.count == 1; }); diff --git a/tests/auto/widgets/qwebenginedownloads/tst_qwebenginedownloads.cpp b/tests/auto/widgets/qwebenginedownloads/tst_qwebenginedownloads.cpp index e6db114b1..e8ac9676f 100644 --- a/tests/auto/widgets/qwebenginedownloads/tst_qwebenginedownloads.cpp +++ b/tests/auto/widgets/qwebenginedownloads/tst_qwebenginedownloads.cpp @@ -190,7 +190,7 @@ void tst_QWebEngineDownloads::downloadLink_data() /* fileMimeTypeDeclared */ << QByteArrayLiteral("text/plain") /* fileMimeTypeDetected */ << QByteArrayLiteral("text/plain") /* fileDisposition */ << QByteArrayLiteral("") - /* fileHasReferer */ << false // crbug.com/455987 + /* fileHasReferer */ << true /* fileAction */ << FileIsDownloaded /* downloadType */ << QWebEngineDownloadItem::DownloadAttribute; @@ -216,7 +216,7 @@ void tst_QWebEngineDownloads::downloadLink_data() /* fileMimeTypeDeclared */ << QByteArrayLiteral("text/plain") /* fileMimeTypeDetected */ << QByteArrayLiteral("text/plain") /* fileDisposition */ << QByteArrayLiteral("attachment") - /* fileHasReferer */ << false // crbug.com/455987 + /* fileHasReferer */ << true /* fileAction */ << FileIsDownloaded /* downloadType */ << QWebEngineDownloadItem::Attachment; diff --git a/tests/auto/widgets/qwebenginespellcheck/tst_qwebenginespellcheck.cpp b/tests/auto/widgets/qwebenginespellcheck/tst_qwebenginespellcheck.cpp index 4f14f29f9..0dec6d72f 100644 --- a/tests/auto/widgets/qwebenginespellcheck/tst_qwebenginespellcheck.cpp +++ b/tests/auto/widgets/qwebenginespellcheck/tst_qwebenginespellcheck.cpp @@ -200,7 +200,7 @@ void tst_QWebEngineSpellcheck::spellcheck_data() QTest::addColumn("languages"); QTest::addColumn("suggestions"); QTest::newRow("en-US") << QStringList({"en-US"}) << QStringList({"low", "love"}); - QTest::newRow("en-US,de-DE") << QStringList({"en-US", "de-DE"}) << QStringList({"low", "löwe", "love"}); + QTest::newRow("en-US,de-DE") << QStringList({"en-US", "de-DE"}) << QStringList({"löwe", "low", "love"}); } QTEST_MAIN(tst_QWebEngineSpellcheck) diff --git a/tools/scripts/git_submodule.py b/tools/scripts/git_submodule.py index c2f5d9c31..bf931563c 100644 --- a/tools/scripts/git_submodule.py +++ b/tools/scripts/git_submodule.py @@ -46,20 +46,36 @@ def subprocessCheckOutput(args): class DEPSParser: def __init__(self): self.global_scope = { - 'Var': self.Lookup, + 'Var': lambda var_name: '{%s}' % var_name, 'deps_os': {}, } self.local_scope = {} self.topmost_supermodule_path_prefix = '' - def Lookup(self, var_name): - return self.local_scope["vars"][var_name] + def get_vars(self): + """Returns a dictionary of effective variable values + (DEPS file contents with applied custom_vars overrides).""" + result = {} + # Variables defined in DEPS file override built-in ones. + result.update(self.local_scope["vars"]) + #result.update(self.custom_vars or {}) + return result def createSubmodulesFromScope(self, scope, os): submodules = [] for dep in scope: + url = '' if (type(scope[dep]) == str): - repo_rev = scope[dep].split('@') + url = scope[dep] + elif (type(scope[dep]) == dict): + url = scope[dep]['url'] + + if ('condition' in scope[dep]) and (not 'checkout_linux' in scope[dep]['condition']): + url = '' + + if url: + url = url.format(**self.get_vars()) + repo_rev = url.split('@') repo = repo_rev[0] rev = repo_rev[1] subdir = dep @@ -84,7 +100,7 @@ class DEPSParser: elif len(rev) == 0: submodule.ref = 'master' else: - sys.exit("Invalid shasum: " + str(scope[dep])) + sys.exit("Invalid shasum: " + str(url)) submodules.append(submodule) return submodules diff --git a/tools/scripts/take_snapshot.py b/tools/scripts/take_snapshot.py index 0b279f5d3..50191621a 100755 --- a/tools/scripts/take_snapshot.py +++ b/tools/scripts/take_snapshot.py @@ -102,8 +102,8 @@ def isInChromiumBlacklist(file_path): not 'common/content_restriction.h' in file_path and not 'common/custom_handlers/' in file_path and not 'common/spellcheck_' in file_path and - not 'common/url_constants' in file_path and - not 'common/webui_url_constants' in file_path and + not 'common/url_constants.' in file_path and + not 'common/webui_url_constants.' in file_path and not '/extensions/api/' in file_path and not '/extensions/browser/api/' in file_path and not '/extensions/permissions/' in file_path and @@ -165,7 +165,7 @@ def isInChromiumBlacklist(file_path): or file_path.startswith('third_party/ashmem') or file_path.startswith('third_party/binutils') or file_path.startswith('third_party/bison') - or file_path.startswith('third_party/breakpad') + or file_path.startswith('third_party/breakpad/src/processor/testdata/') or file_path.startswith('third_party/boringssl/crypto_test_data.cc') or file_path.startswith('third_party/boringssl/src/fuzz') or (file_path.startswith('third_party/cacheinvalidation') and @@ -226,11 +226,11 @@ def isInChromiumBlacklist(file_path): or file_path.startswith('third_party/talloc') or file_path.startswith('third_party/trace-viewer') or file_path.startswith('third_party/undoview') + or file_path.startswith('third_party/wayland/src') or file_path.startswith('third_party/webgl') or file_path.startswith('third_party/webrtc/resources/') or file_path.startswith('tools/android') or file_path.startswith('tools/luci_go') - or file_path.startswith('tools/metrics') or file_path.startswith('tools/memory_inspector') or file_path.startswith('tools/perf') or file_path.startswith('tools/swarming_client') diff --git a/tools/scripts/version_resolver.py b/tools/scripts/version_resolver.py index 6e2ab7cda..d93b24038 100644 --- a/tools/scripts/version_resolver.py +++ b/tools/scripts/version_resolver.py @@ -38,8 +38,8 @@ import json import urllib2 import git_submodule as GitSubmodule -chromium_version = '64.0.3282.139' -chromium_branch = '3282' +chromium_version = '65.0.3325.151' +chromium_branch = '3325' ninja_version = 'v1.8.2' json_url = 'http://omahaproxy.appspot.com/all.json' -- cgit v1.2.3