diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-06-29 09:27:09 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-06-29 09:27:09 +0200 |
commit | bdeb49e55617ce42fd7d93075badec5f147bedf8 (patch) | |
tree | db1089078d3b15495d041c2ab3dddc9f81d30d44 /src/core | |
parent | 4bdccc8abcd7ab3a80c0d84fd005452d5ffceb6b (diff) | |
parent | 1a26c0ace958c3604c8a751134429dd38168a1a1 (diff) |
Merge remote-tracking branch 'origin/5.15' into dev
Conflicts:
src/src.pro
Change-Id: I03c260ba676296f93d8137e79b46f3978f5f41ef
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/config/common.pri | 50 | ||||
-rw-r--r-- | src/core/config/linux.pri | 47 | ||||
-rw-r--r-- | src/core/config/mac_osx.pri | 8 | ||||
-rw-r--r-- | src/core/config/windows.pri | 8 | ||||
-rw-r--r-- | src/core/configure.json | 56 | ||||
-rw-r--r-- | src/core/core.pro | 32 | ||||
-rw-r--r-- | src/core/devtools_frontend_qt.cpp | 26 | ||||
-rw-r--r-- | src/core/file_picker_controller.cpp | 2 | ||||
-rw-r--r-- | src/core/gn_run.pro | 2 | ||||
-rw-r--r-- | src/core/ozone/gl_surface_egl_qt.cpp | 7 | ||||
-rw-r--r-- | src/core/qtwebengine_sources.gni | 1 | ||||
-rw-r--r-- | src/core/renderer_host/user_resource_controller_host.cpp | 19 | ||||
-rw-r--r-- | src/core/renderer_host/user_resource_controller_host.h | 2 | ||||
-rw-r--r-- | src/core/user_script.cpp | 5 | ||||
-rw-r--r-- | src/core/web_contents_delegate_qt.cpp | 5 |
15 files changed, 190 insertions, 80 deletions
diff --git a/src/core/config/common.pri b/src/core/config/common.pri new file mode 100644 index 000000000..c1658ce82 --- /dev/null +++ b/src/core/config/common.pri @@ -0,0 +1,50 @@ + +qtConfig(webengine-printing-and-pdf) { + gn_args += enable_basic_printing=true enable_print_preview=true + gn_args += enable_pdf=true +} else { + gn_args += enable_basic_printing=false enable_print_preview=false + gn_args += enable_pdf=false +} + +qtConfig(webengine-pepper-plugins) { + gn_args += enable_plugins=true +} else { + gn_args += enable_plugins=false +} + +qtConfig(webengine-spellchecker) { + gn_args += enable_spellcheck=true +} else { + gn_args += enable_spellcheck=false +} + +qtConfig(webengine-webrtc) { + gn_args += enable_webrtc=true +} else { + gn_args += enable_webrtc=false audio_processing_in_audio_service_supported=false +} + +qtConfig(webengine-proprietary-codecs) { + gn_args += proprietary_codecs=true ffmpeg_branding=\"Chrome\" +} else { + gn_args += proprietary_codecs=false +} + +qtConfig(webengine-extensions) { + gn_args += enable_extensions=true +} else { + gn_args += enable_extensions=false +} + +qtConfig(webengine-kerberos) { + gn_args += use_kerberos=true +} else { + gn_args += use_kerberos=false +} + +qtConfig(webengine-nodejs) { + gn_args += have_nodejs=true +} else { + gn_args += have_nodejs=false +} diff --git a/src/core/config/linux.pri b/src/core/config/linux.pri new file mode 100644 index 000000000..e98524002 --- /dev/null +++ b/src/core/config/linux.pri @@ -0,0 +1,47 @@ +include(common.pri) + +qtConfig(webengine-embedded-build) { + gn_args += is_desktop_linux=false +} + +!host_build{ + + + + qtConfig(webengine-pulseaudio) { + gn_args += use_pulseaudio=true + } else { + gn_args += use_pulseaudio=false + } + + qtConfig(webengine-alsa) { + gn_args += use_alsa=true + } else { + gn_args += use_alsa=false + } + + !packagesExist(libpci): gn_args += use_libpci=false + + qtConfig(webengine-ozone-x11) { + gn_args += ozone_platform_x11=true + gn_args += use_xkbcommon=true + packagesExist(xscrnsaver): gn_args += use_xscrnsaver=true + qtConfig(webengine-webrtc): gn_args += rtc_use_x11=true + } + + qtConfig(webengine-system-libevent): gn_args += use_system_libevent=true + qtConfig(webengine-system-libwebp): gn_args += use_system_libwebp=true + qtConfig(webengine-system-libxml2): gn_args += use_system_libxml=true use_system_libxslt=true + qtConfig(webengine-system-opus): gn_args += use_system_opus=true + qtConfig(webengine-system-snappy): gn_args += use_system_snappy=true + qtConfig(webengine-system-libvpx): gn_args += use_system_libvpx=true + qtConfig(webengine-system-icu): gn_args += use_system_icu=true icu_use_data_file=false + qtConfig(webengine-system-ffmpeg): gn_args += use_system_ffmpeg=true + qtConfig(webengine-system-re2): gn_args += use_system_re2=true + qtConfig(webengine-system-lcms2): gn_args += use_system_lcms2=true + + # FIXME: + #qtConfig(webengine-system-protobuf): gn_args += use_system_protobuf=true + #qtConfig(webengine-system-jsoncpp): gn_args += use_system_jsoncpp=true + #qtConfig(webengine-system-libsrtp: gn_args += use_system_libsrtp=true +} diff --git a/src/core/config/mac_osx.pri b/src/core/config/mac_osx.pri new file mode 100644 index 000000000..9543daf90 --- /dev/null +++ b/src/core/config/mac_osx.pri @@ -0,0 +1,8 @@ +include(common.pri) + +qtConfig(build-qtwebengine-core):qtConfig(webengine-spellchecker) { + qtConfig(webengine-native-spellchecker): gn_args += use_browser_spellchecker=true + else: gn_args += use_browser_spellchecker=false +} else { + gn_args += use_browser_spellchecker=false +} diff --git a/src/core/config/windows.pri b/src/core/config/windows.pri new file mode 100644 index 000000000..9543daf90 --- /dev/null +++ b/src/core/config/windows.pri @@ -0,0 +1,8 @@ +include(common.pri) + +qtConfig(build-qtwebengine-core):qtConfig(webengine-spellchecker) { + qtConfig(webengine-native-spellchecker): gn_args += use_browser_spellchecker=true + else: gn_args += use_browser_spellchecker=false +} else { + gn_args += use_browser_spellchecker=false +} diff --git a/src/core/configure.json b/src/core/configure.json index 55e68ab04..1a2162723 100644 --- a/src/core/configure.json +++ b/src/core/configure.json @@ -85,18 +85,14 @@ "label": "embedded build", "type": "detectEmbedded" }, - "webengine-sanitizer": { - "label" : "sanitizer support", - "type": "isSanitizerSupported" - }, - "webengine-arm-thumb" : { - "label": "thumb instruction set", - "type": "hasThumbFlag" - }, "webengine-noexecstack" : { "label": "linker supports -z noexecstack", "type": "linkerSupportsFlag", "flag": "-z,noexecstack" + }, + "webengine-nodejs": { + "label": "node.js", + "type": "detectNodeJS" } }, "features": { @@ -187,34 +183,17 @@ "autoDetect": "!features.webengine-embedded-build", "output": [ "privateFeature" ] }, - "webengine-ozone-x11" : { + "webengine-ozone" : { "label": "Support qpa-xcb", - "condition": "config.unix - && features.webengine-system-x11 - && features.webengine-system-libdrm - && features.webengine-system-xcomposite - && features.webengine-system-xcursor - && features.webengine-system-xi - && features.webengine-system-xtst", + "condition": "features.webengine-ozone-x11", "output": [ "privateFeature" ] }, - "webengine-sanitizer" : { - "label": "Sanitizer", - "autoDetect": "config.sanitizer && tests.webengine-sanitizer", - "condition": "config.sanitizer", - "output": [ "privateFeature" ] - }, "webengine-poppler-cpp": { "label": "poppler-cpp", "autoDetect": "config.unix", "condition": "libs.webengine-poppler-cpp", "output": [ "privateFeature" ] }, - "webengine-arm-thumb": { - "label": "Thumb instruction set", - "condition": "config.linux && features.webengine-embedded-build && arch.arm && tests.webengine-arm-thumb", - "output": [ "privateFeature" ] - }, "webengine-full-debug-info": { "label": "Full debug information", "purpose": "Enables debug information for Blink and V8.", @@ -229,17 +208,17 @@ "label": "linker supports -z noexecstack", "condition": "config.unix && tests.webengine-noexecstack", "output": [ "privateFeature" ] + }, + "webengine-nodejs": { + "label": "Node.js", + "condition": "tests.webengine-nodejs", + "output": [ "privateFeature" ] } }, "report": [ { "type": "warning", - "condition": "config.sanitizer && !tests.webengine-sanitizer && !features.webengine-sanitizer", - "message": "Qt WebEngine cannot be built with the chosen sanitizer configuration. Check config.log for details or use -feature-webengine-sanitizer to force the build." - }, - { - "type": "warning", "condition": "config.unix && !features.webengine-host-pkg-config", "message": "host pkg-config not found" }, @@ -252,6 +231,11 @@ "type": "warning", "condition": "config.unix && config.cross_compile && !features.webengine-v8-snapshot-support", "message": "V8 snapshot cannot be built. Most likely, the 32-bit host compiler does not work. Please make sure you have 32-bit devel environment installed." + }, + { + "type": "warning", + "condition": "!features.webengine-nodejs", + "message": "Building without node.js will disable some features of QtWebEngine DevTools." } ], @@ -272,9 +256,10 @@ "webengine-webchannel", "webengine-kerberos", "webengine-extensions", + "webengine-nodejs", { "type": "feature", - "args": "webengine-ozone-x11", + "args": "webengine-ozone", "condition": "config.unix" }, { @@ -293,11 +278,6 @@ "condition": "config.unix" }, { - "type": "feature", - "args": "webengine-sanitizer", - "condition": "config.sanitizer" - }, - { "message": "macOS version", "type": "macosToolchainVersion", "args": "macosVersion", diff --git a/src/core/core.pro b/src/core/core.pro index 9709e62c3..f2d3fd307 100644 --- a/src/core/core.pro +++ b/src/core/core.pro @@ -1,3 +1,5 @@ +include($$QTWEBENGINE_OUT_ROOT/src/buildtools/qtbuildtools-config.pri) +QT_FOR_CONFIG += buildtools-private TEMPLATE = subdirs # core_headers is a dummy module to syncqt the headers so we can @@ -9,8 +11,6 @@ core_api.file = api/core_api.pro core_module.file = core_module.pro core_module.depends = core_api -# core_generator.pro is a dummy .pro file that is used by qmake -# to generate our main .gyp/BUILD.gn file core_generator.file = core_generator.pro core_generator.depends = core_headers @@ -26,11 +26,23 @@ core_api.depends = gn_run core_project.file = core_project.pro core_project.depends = gn_run -SUBDIRS += \ - core_headers \ - core_generator \ - gn_run \ - core_api \ - core_module - -false: SUBDIRS += core_project +!qtConfig(webengine-core-support):qtConfig(build-qtwebengine-core):!build_pass { + !qtwebengine_makeCheckWebEngineCoreError() { + errorbuild.commands = @echo $$shell_quote("QtWebEngineCore module will not be built. $${skipBuildReason}") + } else { + errorbuild.commands = @echo $$shell_quote("QtWebEngineCore module will not be built for unknown reason, please open a bug report at https://bugreports.qt.io") + } + errorbuild.CONFIG = phony + QMAKE_EXTRA_TARGETS += errorbuild + first.depends += errorbuild + QMAKE_EXTRA_TARGETS += first +} else { + SUBDIRS += \ + core_headers \ + core_generator \ + gn_run \ + core_api \ + core_module + + false: SUBDIRS += core_project +} diff --git a/src/core/devtools_frontend_qt.cpp b/src/core/devtools_frontend_qt.cpp index 8d325eca6..52d7dc669 100644 --- a/src/core/devtools_frontend_qt.cpp +++ b/src/core/devtools_frontend_qt.cpp @@ -65,14 +65,17 @@ #include "content/public/browser/browser_context.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" +#include "content/public/browser/file_url_loader.h" #include "content/public/browser/navigation_controller.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_view_host.h" +#include "content/public/browser/shared_cors_origin_access_list.h" #include "content/public/browser/storage_partition.h" #include "content/public/browser/web_contents.h" #include "content/public/common/content_client.h" #include "content/public/common/url_constants.h" +#include "content/public/common/url_utils.h" #include "ipc/ipc_channel.h" #include "net/http/http_response_headers.h" #include "net/traffic_annotation/network_traffic_annotation.h" @@ -425,15 +428,28 @@ void DevToolsFrontendQt::HandleMessageFromDevToolsFrontend(const std::string &me resource_request->site_for_cookies = gurl; resource_request->headers.AddHeadersFromString(headers); - auto *partition = content::BrowserContext::GetStoragePartitionForSite( - web_contents()->GetBrowserContext(), gurl); - auto factory = partition->GetURLLoaderFactoryForBrowserProcess(); - + std::unique_ptr<network::mojom::URLLoaderFactory> file_url_loader_factory; + scoped_refptr<network::SharedURLLoaderFactory> network_url_loader_factory; + network::mojom::URLLoaderFactory *url_loader_factory; + if (gurl.SchemeIsFile()) { + file_url_loader_factory = content::CreateFileURLLoaderFactory(base::FilePath(), nullptr); + url_loader_factory = file_url_loader_factory.get(); + } else if (content::HasWebUIScheme(gurl)) { + base::DictionaryValue response; + response.SetInteger("statusCode", 403); + SendMessageAck(request_id, &response); + return; + } else { + auto *partition = content::BrowserContext::GetStoragePartitionForSite( + web_contents()->GetBrowserContext(), gurl); + network_url_loader_factory = partition->GetURLLoaderFactoryForBrowserProcess(); + url_loader_factory = network_url_loader_factory.get(); + } auto simple_url_loader = network::SimpleURLLoader::Create( std::move(resource_request), traffic_annotation); auto resource_loader = std::make_unique<NetworkResourceLoader>( stream_id, request_id, this, std::move(simple_url_loader), - factory.get()); + url_loader_factory); m_loaders.insert(std::move(resource_loader)); return; } else if (method == "getPreferences") { diff --git a/src/core/file_picker_controller.cpp b/src/core/file_picker_controller.cpp index 01a6d0746..65e2c6f00 100644 --- a/src/core/file_picker_controller.cpp +++ b/src/core/file_picker_controller.cpp @@ -120,7 +120,7 @@ void FilePickerController::accepted(const QStringList &files) } // Build absolute path from file URI componenets. - for (int j = 1; j < pathComponents.size(); j++) + for (size_t j = 1; j < pathComponents.size(); j++) absolutePath += toQt(pathComponents[j]) + (j != pathComponents.size()-1 ? "/" : ""); if (toFilePath(absolutePath).IsAbsolute()) { diff --git a/src/core/gn_run.pro b/src/core/gn_run.pro index f72efc8d5..4688ea59d 100644 --- a/src/core/gn_run.pro +++ b/src/core/gn_run.pro @@ -25,7 +25,7 @@ build_pass|!debug_and_release { runninja.target = run_ninja - gn_args = $$gnArgs() + gn_args = $$gnWebEngineArgs() gn_args += "qtwebengine_target=\"$$system_path($$OUT_PWD/$$getConfigDir()):QtWebEngineCore\"" diff --git a/src/core/ozone/gl_surface_egl_qt.cpp b/src/core/ozone/gl_surface_egl_qt.cpp index a6988bbf3..ac0e79b67 100644 --- a/src/core/ozone/gl_surface_egl_qt.cpp +++ b/src/core/ozone/gl_surface_egl_qt.cpp @@ -72,6 +72,9 @@ bool GLSurfaceEGLQt::InitializeOneOff() if (s_initialized) return true; + // Must be called before initializing the display. + g_driver_egl.InitializeClientExtensionBindings(); + g_display = GLContextHelper::getEGLDisplay(); if (!g_display) { LOG(ERROR) << "GLContextHelper::getEGLDisplay() failed."; @@ -107,6 +110,10 @@ bool GLSurfaceEGLQt::InitializeOneOff() context->ReleaseCurrent(surface.get()); } } + + // Must be called after initializing the display. + g_driver_egl.InitializeExtensionBindings(); + s_initialized = true; return true; } diff --git a/src/core/qtwebengine_sources.gni b/src/core/qtwebengine_sources.gni index 9c65fa690..3a39455c3 100644 --- a/src/core/qtwebengine_sources.gni +++ b/src/core/qtwebengine_sources.gni @@ -47,6 +47,7 @@ source_set("qtwebengine_sources") { deps = [ "//build:branding_buildflags", + "//chrome/browser/resources/quota_internals:quota_internals_resources", "//chrome/common:buildflags", "//components/nacl/common:buildflags", "//components/plugins/renderer/", diff --git a/src/core/renderer_host/user_resource_controller_host.cpp b/src/core/renderer_host/user_resource_controller_host.cpp index 96625c13f..6b9bb63fe 100644 --- a/src/core/renderer_host/user_resource_controller_host.cpp +++ b/src/core/renderer_host/user_resource_controller_host.cpp @@ -148,17 +148,6 @@ void UserResourceControllerHost::addUserScript(const UserScript &script, WebCont } } -bool UserResourceControllerHost::containsUserScript(const UserScript &script, WebContentsAdapter *adapter) -{ - if (script.isNull()) - return false; - // Global scripts should be dispatched to all our render processes. - const bool isProfileWideScript = !adapter; - if (isProfileWideScript) - return m_profileWideScripts.contains(script); - return m_perContentsScripts.value(adapter->webContents()).contains(script); -} - bool UserResourceControllerHost::removeUserScript(const UserScript &script, WebContentsAdapter *adapter) { if (script.isNull()) @@ -201,14 +190,6 @@ void UserResourceControllerHost::clearAllScripts(WebContentsAdapter *adapter) } } -const QList<UserScript> UserResourceControllerHost::registeredScripts(WebContentsAdapter *adapter) const -{ - const bool isProfileWideScript = !adapter; - if (isProfileWideScript) - return m_profileWideScripts; - return m_perContentsScripts.value(adapter->webContents()); -} - void UserResourceControllerHost::reserve(WebContentsAdapter *adapter, int count) { const bool isProfileWideScript = !adapter; diff --git a/src/core/renderer_host/user_resource_controller_host.h b/src/core/renderer_host/user_resource_controller_host.h index 9d828feb6..7b89cb893 100644 --- a/src/core/renderer_host/user_resource_controller_host.h +++ b/src/core/renderer_host/user_resource_controller_host.h @@ -74,11 +74,9 @@ public: ~UserResourceControllerHost(); void addUserScript(const UserScript &script, WebContentsAdapter *adapter); - bool containsUserScript(const UserScript &script, WebContentsAdapter *adapter); bool removeUserScript(const UserScript &script, WebContentsAdapter *adapter); void clearAllScripts(WebContentsAdapter *adapter); void reserve(WebContentsAdapter *adapter, int count); - const QList<UserScript> registeredScripts(WebContentsAdapter *adapter) const; void renderProcessStartedWithHost(content::RenderProcessHost *renderer); diff --git a/src/core/user_script.cpp b/src/core/user_script.cpp index bdd6524ca..7ccb6e10a 100644 --- a/src/core/user_script.cpp +++ b/src/core/user_script.cpp @@ -194,6 +194,11 @@ UserScriptData &UserScript::data() const void UserScript::parseMetadataHeader() { + // Clear previous values + scriptData->globs.clear(); + scriptData->excludeGlobs.clear(); + scriptData->urlPatterns.clear(); + // Logic taken from Chromium (extensions/browser/user_script_loader.cc) // http://wiki.greasespot.net/Metadata_block const std::string &script_text = scriptData->source; diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp index 53dfcb8a2..77dd4593f 100644 --- a/src/core/web_contents_delegate_qt.cpp +++ b/src/core/web_contents_delegate_qt.cpp @@ -205,12 +205,9 @@ void WebContentsDelegateQt::NavigationStateChanged(content::WebContents* source, } } - // NavigationStateChanged gets called with INVALIDATE_TYPE_TAB by AudioStateProvider::Notify, - // whenever an audio sound gets played or stopped, this is the only way to actually figure out - // if there was a recently played audio sound. // Make sure to only emit the signal when loading isn't in progress, because it causes multiple // false signals to be emitted. - if ((changed_flags & content::INVALIDATE_TYPE_TAB) && !(changed_flags & content::INVALIDATE_TYPE_LOAD)) { + if ((changed_flags & content::INVALIDATE_TYPE_AUDIO) && !(changed_flags & content::INVALIDATE_TYPE_LOAD)) { m_viewClient->recentlyAudibleChanged(source->IsCurrentlyAudible()); } } |