summaryrefslogtreecommitdiffstats
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/config/common.pri50
-rw-r--r--src/core/config/linux.pri47
-rw-r--r--src/core/config/mac_osx.pri8
-rw-r--r--src/core/config/windows.pri8
-rw-r--r--src/core/configure.json56
-rw-r--r--src/core/core.pro32
-rw-r--r--src/core/devtools_frontend_qt.cpp26
-rw-r--r--src/core/file_picker_controller.cpp2
-rw-r--r--src/core/gn_run.pro2
-rw-r--r--src/core/ozone/gl_surface_egl_qt.cpp7
-rw-r--r--src/core/qtwebengine_sources.gni1
-rw-r--r--src/core/renderer_host/user_resource_controller_host.cpp19
-rw-r--r--src/core/renderer_host/user_resource_controller_host.h2
-rw-r--r--src/core/user_script.cpp5
-rw-r--r--src/core/web_contents_delegate_qt.cpp5
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());
}
}