summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configure.json6
-rw-r--r--mkspecs/features/configure.prf5
-rw-r--r--mkspecs/features/functions.prf19
m---------src/3rdparty0
-rw-r--r--src/buildtools/gn.pro7
-rw-r--r--src/core/browser_accessibility_qt.cpp4
-rw-r--r--src/core/browser_context_qt.cpp7
-rw-r--r--src/core/browser_context_qt.h6
-rw-r--r--src/core/clipboard_qt.cpp19
-rw-r--r--src/core/common/qt_messages.h6
-rw-r--r--src/core/config/common.pri7
-rw-r--r--src/core/config/linux.pri3
-rw-r--r--src/core/config/windows.pri15
-rw-r--r--src/core/content_browser_client_qt.cpp51
-rw-r--r--src/core/content_browser_client_qt.h21
-rw-r--r--src/core/core_module.pro12
-rw-r--r--src/core/delegated_frame_node.cpp17
-rw-r--r--src/core/desktop_screen_qt.cpp4
-rw-r--r--src/core/gl_surface_qt.cpp5
-rw-r--r--src/core/network_delegate_qt.cpp20
-rw-r--r--src/core/network_delegate_qt.h7
-rw-r--r--src/core/print_view_manager_qt.cpp5
-rw-r--r--src/core/qtwebengine_sources.gni4
-rw-r--r--src/core/render_widget_host_view_qt.cpp39
-rw-r--r--src/core/render_widget_host_view_qt.h2
-rw-r--r--src/core/renderer/content_renderer_client_qt.cpp19
-rw-r--r--src/core/renderer/render_frame_observer_qt.cpp4
-rw-r--r--src/core/renderer/render_frame_observer_qt.h2
-rw-r--r--src/core/renderer/render_view_observer_qt.cpp5
-rw-r--r--src/core/renderer/render_view_observer_qt.h2
-rw-r--r--src/core/renderer/user_resource_controller.cpp110
-rw-r--r--src/core/renderer/user_resource_controller.h6
-rw-r--r--src/core/renderer/web_channel_ipc_transport.cpp5
-rw-r--r--src/core/renderer/web_channel_ipc_transport.h2
-rw-r--r--src/core/renderer_host/user_resource_controller_host.cpp51
-rw-r--r--src/core/url_request_context_getter_qt.cpp6
-rw-r--r--src/core/web_contents_adapter.cpp2
-rw-r--r--src/core/web_contents_delegate_qt.cpp10
-rw-r--r--src/core/web_contents_delegate_qt.h7
-rw-r--r--src/core/web_engine_context.cpp15
-rw-r--r--src/core/web_engine_settings.cpp7
-rw-r--r--src/core/web_engine_settings.h2
-rw-r--r--tests/auto/quick/qmltests/data/confirmclose.html3
-rw-r--r--tests/auto/quick/qmltests/data/tst_javaScriptDialogs.qml22
-rw-r--r--tests/auto/quick/qmltests/tst_qmltests.cpp13
-rw-r--r--tests/auto/quick/qquickwebenginedefaultsurfaceformat/tst_qquickwebenginedefaultsurfaceformat.cpp2
-rw-r--r--tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp5
-rw-r--r--tests/auto/widgets/qwebengineaccessibility/tst_qwebengineaccessibility.cpp9
-rw-r--r--tests/auto/widgets/qwebenginedefaultsurfaceformat/tst_qwebenginedefaultsurfaceformat.cpp2
-rw-r--r--tests/auto/widgets/qwebenginepage/resources/basic_printing_page.html (renamed from tests/auto/widgets/qwebengineview/resources/basic_printing_page.html)0
-rw-r--r--tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp8
-rw-r--r--tests/auto/widgets/qwebenginepage/tst_qwebenginepage.qrc1
-rw-r--r--tests/auto/widgets/qwebenginescript/resources/test_iframe_inner.html8
-rw-r--r--tests/auto/widgets/qwebenginescript/resources/test_iframe_main.html9
-rw-r--r--tests/auto/widgets/qwebenginescript/resources/test_iframe_outer.html9
-rw-r--r--tests/auto/widgets/qwebenginescript/tst_qwebenginescript.cpp53
-rw-r--r--tests/auto/widgets/qwebenginescript/tst_qwebenginescript.qrc7
-rw-r--r--tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp4
-rw-r--r--tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp27
-rw-r--r--tests/auto/widgets/qwebengineview/tst_qwebengineview.qrc1
-rw-r--r--tests/auto/widgets/widgets.pro3
-rw-r--r--tools/scripts/version_resolver.py4
62 files changed, 567 insertions, 169 deletions
diff --git a/configure.json b/configure.json
index a176b845b..82c41a882 100644
--- a/configure.json
+++ b/configure.json
@@ -54,9 +54,9 @@
]
},
"webp": {
- "label": "libwebp and libwebpdemux",
+ "label": "libwebp, libwebpmux and libwebpdemux",
"sources": [
- { "type": "pkgConfig", "args": "libwebp libwebpdemux" }
+ { "type": "pkgConfig", "args": "libwebp libwebpmux libwebpdemux" }
]
},
"nss": {
@@ -192,7 +192,7 @@
"output": [ "privateFeature" ]
},
"system-webp": {
- "label": "libwebp and libwebpdemux",
+ "label": "libwebp, libwebpmux and libwebpdemux",
"autoDetect": "config.unix",
"condition": "libs.webp",
"output": [ "privateFeature" ]
diff --git a/mkspecs/features/configure.prf b/mkspecs/features/configure.prf
index 2264ba704..b270c71f4 100644
--- a/mkspecs/features/configure.prf
+++ b/mkspecs/features/configure.prf
@@ -81,7 +81,10 @@ defineTest(runConfigure) {
REQUIRED_PACKAGES = dbus-1 fontconfig
!contains(WEBENGINE_CONFIG, embedded_build): qtConfig(xcb): REQUIRED_PACKAGES += libdrm xcomposite xcursor xi xrandr xtst
qtConfig(pulseaudio): REQUIRED_PACKAGES += libpulse
- qtConfig(system-png): REQUIRED_PACKAGES += libpng
+ qtConfig(system-png) {
+ packagesExist("\'libpng >= 1.6.0\'"): WEBENGINE_CONFIG += use_system_libpng
+ else: log("System libpng is too old (min. version 1.6). Using Chromium's copy.$${EOL}")
+ }
qtConfig(system-harfbuzz) {
packagesExist("\'harfbuzz >= 1.2.0\'"): WEBENGINE_CONFIG += use_system_harfbuzz
else: log("System harfbuzz is too old (min. version 1.2). Using Chromium's copy.$${EOL}")
diff --git a/mkspecs/features/functions.prf b/mkspecs/features/functions.prf
index b78d2a112..ec3a05488 100644
--- a/mkspecs/features/functions.prf
+++ b/mkspecs/features/functions.prf
@@ -38,26 +38,31 @@ defineTest(isPlatformSupported) {
return(false)
}
} else:osx {
- lessThan(QMAKE_XCODE_VERSION, 5.1) {
- skipBuild("Using XCode version $$QMAKE_XCODE_VERSION, but at least version 5.1 is required to build Qt WebEngine.")
+ lessThan(QMAKE_XCODE_VERSION, 7.3) {
+ skipBuild("Using Xcode version $$QMAKE_XCODE_VERSION, but at least version 7.3 is required to build Qt WebEngine.")
return(false)
}
!clang|intel_icc {
skipBuild("Qt WebEngine on macOS requires Clang.")
return(false)
}
- # We require OS X 10.0 (darwin version 14.0.0) or newer
+ # We require macOS 10.11 (darwin version 15.0.0) or newer.
darwin_major_version = $$section(QMAKE_HOST.version, ., 0, 0)
- lessThan(darwin_major_version, 14) {
- skipBuild("Qt WebEngine requires OS X version 10.10 or newer.")
+ lessThan(darwin_major_version, 15) {
+ skipBuild("Building Qt WebEngine requires macOS version 10.11 or newer.")
return(false)
}
!isMinOSXSDKVersion(10, 10): {
- skipBuild("Qt WebEngine requires an OS X SDK version of 10.10 or newer. Current version is $${WEBENGINE_OSX_SDK_PRODUCT_VERSION}.")
+ skipBuild("Building Qt WebEngine requires a macOS SDK version of 10.11 or newer. Current version is $${WEBENGINE_OSX_SDK_PRODUCT_VERSION}.")
return(false)
}
} else {
- skipBuild("Unknown platform. Qt WebEngine only supports Linux, Windows, and OS X.")
+ skipBuild("Unknown platform. Qt WebEngine only supports Linux, Windows, and macOS.")
+ return(false)
+ }
+
+ cross_compile {
+ skipBuild("Temporarily disable failing b2qt builds until they are fixed in Coin.")
return(false)
}
diff --git a/src/3rdparty b/src/3rdparty
-Subproject 582c5493439ba9ac57c6c14c706f530741f5bfc
+Subproject 35c0fec5a9daf7d15dab962660e5dc75f5345f7
diff --git a/src/buildtools/gn.pro b/src/buildtools/gn.pro
index 829e7a31a..db4bbf82c 100644
--- a/src/buildtools/gn.pro
+++ b/src/buildtools/gn.pro
@@ -19,7 +19,14 @@ build_pass|!debug_and_release {
mkpath($$dirname(out))
src_3rd_party_dir = $$absolute_path("$${getChromiumSrcDir()}/../", "$$QTWEBENGINE_ROOT")
gn_bootstrap = $$system_path($$absolute_path(chromium/tools/gn/bootstrap/bootstrap.py, $$src_3rd_party_dir))
+
gn_args = $$system_quote($$gn_args)
+ win32:isDeveloperBuild() {
+ # GN is always built in release mode, which conflicts with incremental linking when
+ # doing a developer build of WebEngine.
+ gn_args = $$replace(gn_args, "use_incremental_linking=true ", "")
+ }
+
gn_configure = $$system_quote($$gn_bootstrap) --shadow --gn-gen-args=$$gn_args $$ninja_path
!system("cd $$system_quote($$system_path($$dirname(out))) && $$pythonPathForSystem() $$gn_configure") {
error("GN build error!")
diff --git a/src/core/browser_accessibility_qt.cpp b/src/core/browser_accessibility_qt.cpp
index ffc510bf2..b718ed3bf 100644
--- a/src/core/browser_accessibility_qt.cpp
+++ b/src/core/browser_accessibility_qt.cpp
@@ -261,7 +261,7 @@ QAccessible::Role BrowserAccessibilityQt::role() const
return QAccessible::NoRole; // FIXME
case ui::AX_ROLE_DISCLOSURE_TRIANGLE:
return QAccessible::NoRole; // FIXME
- case ui::AX_ROLE_DIV:
+ case ui::AX_ROLE_GENERIC_CONTAINER:
return QAccessible::Section;
case ui::AX_ROLE_DOCUMENT:
return QAccessible::Document;
@@ -454,7 +454,7 @@ QAccessible::State BrowserAccessibilityQt::state() const
int32_t s = GetState();
if (s & (1 << ui::AX_STATE_BUSY))
state.busy = true;
- if (s & (1 << ui::AX_STATE_CHECKED))
+ if (s & (1 << ui::AX_CHECKED_STATE_TRUE))
state.checked = true;
if (s & (1 << ui::AX_STATE_COLLAPSED))
state.collapsed = true;
diff --git a/src/core/browser_context_qt.cpp b/src/core/browser_context_qt.cpp
index 6fa91688b..16b7e5514 100644
--- a/src/core/browser_context_qt.cpp
+++ b/src/core/browser_context_qt.cpp
@@ -57,7 +57,7 @@
#include "base/base_paths.h"
#include "components/prefs/pref_member.h"
#include "components/prefs/pref_service.h"
-#include "components/prefs/testing_pref_store.h"
+#include "components/prefs/in_memory_pref_store.h"
#include "components/prefs/pref_service.h"
#include "components/prefs/pref_service_factory.h"
#include "components/prefs/pref_registry_simple.h"
@@ -72,9 +72,8 @@ namespace QtWebEngineCore {
BrowserContextQt::BrowserContextQt(BrowserContextAdapter *adapter)
: m_adapter(adapter),
- m_prefStore(new TestingPrefStore())
+ m_prefStore(new InMemoryPrefStore())
{
- m_prefStore->SetInitializationCompleted();
PrefServiceFactory factory;
factory.set_user_prefs(m_prefStore);
scoped_refptr<PrefRegistrySimple> registry(new PrefRegistrySimple());
@@ -206,7 +205,7 @@ net::URLRequestContextGetter *BrowserContextQt::CreateRequestContextForStoragePa
}
#if BUILDFLAG(ENABLE_SPELLCHECK)
-void BrowserContextQt::failedToLoadDictionary(const std::string &language)
+void BrowserContextQt::FailedToLoadDictionary(const std::string &language)
{
Q_ASSERT(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
qWarning() << "Could not load dictionary for:" << toQt(language) << endl
diff --git a/src/core/browser_context_qt.h b/src/core/browser_context_qt.h
index af250f506..681657d96 100644
--- a/src/core/browser_context_qt.h
+++ b/src/core/browser_context_qt.h
@@ -50,7 +50,7 @@
QT_BEGIN_NAMESPACE
class QStringList;
QT_END_NAMESPACE
-class TestingPrefStore;
+class InMemoryPrefStore;
class PrefService;
namespace QtWebEngineCore {
@@ -100,7 +100,7 @@ public:
BrowserContextAdapter *adapter() { return m_adapter; }
#if BUILDFLAG(ENABLE_SPELLCHECK)
- void failedToLoadDictionary(const std::string& language) override;
+ void FailedToLoadDictionary(const std::string& language) override;
void setSpellCheckLanguages(const QStringList &languages);
QStringList spellCheckLanguages() const;
void setSpellCheckEnabled(bool enabled);
@@ -115,7 +115,7 @@ private:
std::unique_ptr<PermissionManagerQt> permissionManager;
std::unique_ptr<SSLHostStateDelegateQt> sslHostStateDelegate;
BrowserContextAdapter *m_adapter;
- scoped_refptr<TestingPrefStore> m_prefStore;
+ scoped_refptr<InMemoryPrefStore> m_prefStore;
std::unique_ptr<PrefService> m_prefService;
friend class BrowserContextAdapter;
diff --git a/src/core/clipboard_qt.cpp b/src/core/clipboard_qt.cpp
index 9d2ff4c0e..997c7ba43 100644
--- a/src/core/clipboard_qt.cpp
+++ b/src/core/clipboard_qt.cpp
@@ -352,13 +352,20 @@ SkBitmap ClipboardQt::ReadImage(ui::ClipboardType type) const
image = image.convertToFormat(QImage::Format_ARGB32);
SkBitmap bitmap;
- bitmap.setInfo(SkImageInfo::MakeN32(image.width(), image.height(), kOpaque_SkAlphaType));
- bitmap.setPixels(const_cast<uchar*>(image.constBits()));
- // Return a deep copy of the pixel data.
- SkBitmap copy;
- bitmap.copyTo(&copy, kN32_SkColorType);
- return copy;
+ bitmap.allocN32Pixels(image.width(), image.height(), true);
+ const size_t bytesPerRowDst = bitmap.rowBytes();
+ const size_t bytesPerLineSrc = static_cast<size_t>(image.bytesPerLine());
+ const size_t dataBytes = std::min(bytesPerRowDst, bytesPerLineSrc);
+ uchar *dst = static_cast<uchar *>(bitmap.getPixels());
+ const uchar *src = image.constBits();
+ for (int y = 0; y < image.height(); ++y) {
+ memcpy(dst, src, dataBytes);
+ dst += bytesPerRowDst;
+ src += bytesPerLineSrc;
+ }
+
+ return bitmap;
}
void ClipboardQt::ReadCustomData(ui::ClipboardType clipboard_type, const base::string16& type, base::string16* result) const
diff --git a/src/core/common/qt_messages.h b/src/core/common/qt_messages.h
index d998db20e..00efa485e 100644
--- a/src/core/common/qt_messages.h
+++ b/src/core/common/qt_messages.h
@@ -43,11 +43,11 @@ IPC_MESSAGE_ROUTED1(WebChannelIPCTransport_Uninstall, uint /* worldId */)
IPC_MESSAGE_ROUTED2(WebChannelIPCTransport_Message, std::vector<char> /*binaryJSON*/, uint /* worldId */)
// User scripts messages
-IPC_MESSAGE_ROUTED1(RenderViewObserverHelper_AddScript,
+IPC_MESSAGE_ROUTED1(RenderFrameObserverHelper_AddScript,
UserScriptData /* script */)
-IPC_MESSAGE_ROUTED1(RenderViewObserverHelper_RemoveScript,
+IPC_MESSAGE_ROUTED1(RenderFrameObserverHelper_RemoveScript,
UserScriptData /* script */)
-IPC_MESSAGE_ROUTED0(RenderViewObserverHelper_ClearScripts)
+IPC_MESSAGE_ROUTED0(RenderFrameObserverHelper_ClearScripts)
IPC_MESSAGE_CONTROL1(UserResourceController_AddScript, UserScriptData /* scriptContents */)
IPC_MESSAGE_CONTROL1(UserResourceController_RemoveScript, UserScriptData /* scriptContents */)
diff --git a/src/core/config/common.pri b/src/core/config/common.pri
index 8c06b9b35..ce7364ff9 100644
--- a/src/core/config/common.pri
+++ b/src/core/config/common.pri
@@ -4,11 +4,10 @@ gn_args += \
use_qt=true \
is_component_build=false \
is_shared=true \
- enable_media_router=false \
enable_nacl=false \
enable_remoting=false \
enable_web_speech=false \
- use_experimental_allocator_shim=false \
+ use_allocator_shim=false \
use_allocator=\"none\" \
v8_use_external_startup_data=false \
treat_warnings_as_errors=false \
@@ -56,6 +55,10 @@ CONFIG(release, debug|release) {
}
}
+CONFIG(debug, debug|release) {
+ gn_args += use_debug_fission=false
+}
+
!webcore_debug: gn_args += remove_webcore_debug_symbols=true
!v8base_debug: gn_args += remove_v8base_debug_symbols=true
diff --git a/src/core/config/linux.pri b/src/core/config/linux.pri
index 28278e903..ee410bdde 100644
--- a/src/core/config/linux.pri
+++ b/src/core/config/linux.pri
@@ -122,8 +122,9 @@ host_build {
}
qtConfig(system-zlib): use?(system_minizip): gn_args += use_system_zlib=true use_system_minizip=true
- qtConfig(system-png): gn_args += use_system_libpng=true
+ use?(system_libpng): gn_args += use_system_libpng=true
qtConfig(system-jpeg): gn_args += use_system_libjpeg=true
+ qtConfig(system-freetype): gn_args += use_system_freetype=true
use?(system_harfbuzz): gn_args += use_system_harfbuzz=true
!use?(glib): gn_args += use_glib=false
qtConfig(pulseaudio) {
diff --git a/src/core/config/windows.pri b/src/core/config/windows.pri
index f5dd4a9d3..f74e0bb85 100644
--- a/src/core/config/windows.pri
+++ b/src/core/config/windows.pri
@@ -7,12 +7,25 @@ gn_args += \
enable_session_service=false \
ninja_use_custom_environment_files=false \
is_multi_dll_chrome=false \
- use_incremental_linking=false \
win_linker_timing=true
isDeveloperBuild() {
gn_args += \
is_win_fastlink=true
+
+ # Incremental linking doesn't work in release developer builds due to usage of /OPT:ICF
+ # by Chromium.
+ CONFIG(debug, debug|release) {
+ gn_args += \
+ use_incremental_linking=true
+ } else {
+ gn_args += \
+ use_incremental_linking=false
+ }
+} else {
+ gn_args += \
+ is_win_fastlink=false \
+ use_incremental_linking=false
}
defineTest(usingMSVC32BitCrossCompiler) {
diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp
index 5bce81f25..a087940ef 100644
--- a/src/core/content_browser_client_qt.cpp
+++ b/src/core/content_browser_client_qt.cpp
@@ -69,7 +69,8 @@
#include "device/geolocation/geolocation_provider.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "mojo/public/cpp/bindings/binding_set.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
+#include "services/service_manager/public/cpp/bind_source_info.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
#include "third_party/WebKit/public/platform/modules/sensitive_input_visibility/sensitive_input_visibility_service.mojom.h"
#include "ui/base/ui_base_switches.h"
#include "ui/display/screen.h"
@@ -489,6 +490,7 @@ void ContentBrowserClientQt::AllowCertificateError(content::WebContents *webCont
void ContentBrowserClientQt::SelectClientCertificate(content::WebContents * /*webContents*/,
net::SSLCertRequestInfo * /*certRequestInfo*/,
+ net::CertificateList /*client_certs*/,
std::unique_ptr<content::ClientCertificateDelegate> delegate)
{
delegate->ContinueWithCertificate(nullptr);
@@ -569,6 +571,7 @@ public:
return FromWebContents(web_contents);
}
static void BindSensitiveInputVisibilityService(content::RenderFrameHost* render_frame_host,
+ const service_manager::BindSourceInfo& source_info,
blink::mojom::SensitiveInputVisibilityServiceRequest request)
{
CreateForRenderFrameHost(render_frame_host);
@@ -595,12 +598,54 @@ private:
};
-void ContentBrowserClientQt::RegisterRenderFrameMojoInterfaces(service_manager::InterfaceRegistry* registry,
- content::RenderFrameHost* render_frame_host)
+void ContentBrowserClientQt::ExposeInterfacesToFrame(service_manager::BinderRegistry* registry,
+ content::RenderFrameHost* render_frame_host)
{
registry->AddInterface(base::Bind(&ServiceDriver::BindSensitiveInputVisibilityService, render_frame_host));
}
+bool ContentBrowserClientQt::CanCreateWindow(
+ content::RenderFrameHost* opener,
+ const GURL& opener_url,
+ const GURL& opener_top_level_frame_url,
+ const GURL& source_origin,
+ content::mojom::WindowContainerType container_type,
+ const GURL& target_url,
+ const content::Referrer& referrer,
+ const std::string& frame_name,
+ WindowOpenDisposition disposition,
+ const blink::mojom::WindowFeatures& features,
+ bool user_gesture,
+ bool opener_suppressed,
+ bool* no_javascript_access) {
+
+ Q_UNUSED(opener_url);
+ Q_UNUSED(opener_top_level_frame_url);
+ Q_UNUSED(source_origin);
+ Q_UNUSED(container_type);
+ Q_UNUSED(target_url);
+ Q_UNUSED(referrer);
+ Q_UNUSED(frame_name);
+ Q_UNUSED(disposition);
+ Q_UNUSED(features);
+ Q_UNUSED(opener_suppressed);
+
+ if (no_javascript_access)
+ *no_javascript_access = false;
+
+ content::WebContents* webContents = content::WebContents::FromRenderFrameHost(opener);
+
+ WebEngineSettings *settings = nullptr;
+ if (webContents) {
+ WebContentsDelegateQt* delegate =
+ static_cast<WebContentsDelegateQt*>(webContents->GetDelegate());
+ if (delegate)
+ settings = delegate->webEngineSettings();
+ }
+
+ return (settings && settings->getJavaScriptCanOpenWindowsAutomatically()) || user_gesture;
+}
+
} // namespace QtWebEngineCore
DEFINE_WEB_CONTENTS_USER_DATA_KEY(QtWebEngineCore::ServiceDriver);
diff --git a/src/core/content_browser_client_qt.h b/src/core/content_browser_client_qt.h
index 95c7d2894..eab8e42ab 100644
--- a/src/core/content_browser_client_qt.h
+++ b/src/core/content_browser_client_qt.h
@@ -66,6 +66,7 @@ class ResourceContext;
class WebContentsViewPort;
class WebContents;
struct MainFunctionParams;
+struct Referrer;
}
namespace gl {
@@ -73,7 +74,7 @@ class GLShareGroup;
}
namespace service_manager {
-class InterfaceRegistry;
+class BinderRegistry;
}
namespace QtWebEngineCore {
@@ -109,6 +110,7 @@ public:
const base::Callback<void(content::CertificateRequestResultType)>& callback) override;
void SelectClientCertificate(content::WebContents* web_contents,
net::SSLCertRequestInfo* cert_request_info,
+ net::CertificateList client_certs,
std::unique_ptr<content::ClientCertificateDelegate> delegate) override;
content::DevToolsManagerDelegate *GetDevToolsManagerDelegate() override;
@@ -117,7 +119,22 @@ public:
void AppendExtraCommandLineSwitches(base::CommandLine* command_line, int child_process_id) override;
void GetAdditionalWebUISchemes(std::vector<std::string>* additional_schemes) override;
- void RegisterRenderFrameMojoInterfaces(service_manager::InterfaceRegistry* registry, content::RenderFrameHost* render_frame_host) override;
+ void ExposeInterfacesToFrame(service_manager::BinderRegistry* registry, content::RenderFrameHost* render_frame_host) override;
+
+ bool CanCreateWindow(
+ content::RenderFrameHost* opener,
+ const GURL& opener_url,
+ const GURL& opener_top_level_frame_url,
+ const GURL& source_origin,
+ content::mojom::WindowContainerType container_type,
+ const GURL& target_url,
+ const content::Referrer& referrer,
+ const std::string& frame_name,
+ WindowOpenDisposition disposition,
+ const blink::mojom::WindowFeatures& features,
+ bool user_gesture,
+ bool opener_suppressed,
+ bool* no_javascript_access) override;
#if defined(Q_OS_LINUX)
void GetAdditionalMappedFilesForChildProcess(const base::CommandLine& command_line, int child_process_id, content::FileDescriptorInfo* mappings) override;
diff --git a/src/core/core_module.pro b/src/core/core_module.pro
index 3785ddc46..1a5b66867 100644
--- a/src/core/core_module.pro
+++ b/src/core/core_module.pro
@@ -47,7 +47,17 @@ CONFIG *= no_smart_library_merge
osx {
LIBS_PRIVATE += -Wl,-force_load,$${api_library_path}$${QMAKE_DIR_SEP}lib$${api_library_name}.a
} else:msvc {
- QMAKE_LFLAGS += /OPT:REF
+ !isDeveloperBuild() {
+ # Remove unused functions and data in debug non-developer builds, because the binaries will
+ # be smaller in the shipped packages.
+ QMAKE_LFLAGS += /OPT:REF
+ } else:CONFIG(debug, debug|release) {
+ # Make sure to override qtbase's QMAKE_LFLAGS_DEBUG option in debug developer builds,
+ # because qmake chooses and overrides the option when it gets appended to QMAKE_LFLAGS in
+ # qtbase\mkspecs\features\default_post.prf, regardless of what Chromium passes back from GN.
+ QMAKE_LFLAGS_DEBUG -= /DEBUG
+ QMAKE_LFLAGS_DEBUG += /DEBUG:FASTLINK
+ }
QMAKE_LFLAGS += /WHOLEARCHIVE:$${api_library_path}$${QMAKE_DIR_SEP}$${api_library_name}.lib
} else {
LIBS_PRIVATE += -Wl,-whole-archive -l$$api_library_name -Wl,-no-whole-archive
diff --git a/src/core/delegated_frame_node.cpp b/src/core/delegated_frame_node.cpp
index 0384d1ce4..dba25d679 100644
--- a/src/core/delegated_frame_node.cpp
+++ b/src/core/delegated_frame_node.cpp
@@ -69,7 +69,7 @@
#include "cc/quads/yuv_video_draw_quad.h"
#include "cc/resources/returned_resource.h"
#include "cc/resources/transferable_resource.h"
-#include "components/display_compositor/host_shared_bitmap_manager.h"
+#include "components/viz/display_compositor/host_shared_bitmap_manager.h"
#include "gpu/command_buffer/service/mailbox_manager.h"
#include "ui/gl/gl_context.h"
#include "ui/gl/gl_fence.h"
@@ -236,8 +236,11 @@ public:
QSGNode *) override
{
QSGTextureNode *textureNode = static_cast<QSGTextureNode*>(*m_nodeIterator++);
- if (textureNode->texture() != texture)
+ if (textureNode->texture() != texture) {
textureNode->setTexture(texture);
+ // @TODO: This is a workaround for funky rendering, figure out why this is needed.
+ textureNode->markDirty(QSGTextureNode::DirtyGeometry);
+ }
if (textureNode->textureCoordinatesTransform() != texCoordTransForm)
textureNode->setTextureCoordinatesTransform(texCoordTransForm);
if (textureNode->rect() != rect)
@@ -251,15 +254,17 @@ public:
QSGTexture::Filtering filtering, QSGNode *) override
{
QSGTextureNode *textureNode = static_cast<QSGTextureNode*>(*m_nodeIterator++);
-
+ if (textureNode->texture() != texture) {
+ textureNode->setTexture(texture);
+ // @TODO: This is a workaround for funky rendering, figure out why this is needed.
+ textureNode->markDirty(QSGTextureNode::DirtyGeometry);
+ }
if (textureNode->rect() != rect)
textureNode->setRect(rect);
if (textureNode->sourceRect() != sourceRect)
textureNode->setSourceRect(sourceRect);
if (textureNode->filtering() != filtering)
textureNode->setFiltering(filtering);
- if (textureNode->texture() != texture)
- textureNode->setTexture(texture);
}
void setupSolidColorNode(const QRect &rect, const QColor &color, QSGNode *) override
{
@@ -652,7 +657,7 @@ QSharedPointer<QSGTexture> ResourceHolder::initTexture(bool quadNeedsBlending, R
if (!texture) {
if (m_resource.is_software) {
Q_ASSERT(apiDelegate);
- std::unique_ptr<cc::SharedBitmap> sharedBitmap = display_compositor::HostSharedBitmapManager::current()->GetSharedBitmapFromId(m_resource.size, m_resource.mailbox_holder.mailbox);
+ std::unique_ptr<cc::SharedBitmap> sharedBitmap = viz::HostSharedBitmapManager::current()->GetSharedBitmapFromId(m_resource.size, m_resource.mailbox_holder.mailbox);
// QSG interprets QImage::hasAlphaChannel meaning that a node should enable blending
// to draw it but Chromium keeps this information in the quads.
// The input format is currently always Format_ARGB32_Premultiplied, so assume that all
diff --git a/src/core/desktop_screen_qt.cpp b/src/core/desktop_screen_qt.cpp
index 380a876e4..b63511c92 100644
--- a/src/core/desktop_screen_qt.cpp
+++ b/src/core/desktop_screen_qt.cpp
@@ -81,7 +81,7 @@ display::Display DesktopScreenQt::GetDisplayNearestWindow(gfx::NativeWindow wind
{
// RenderViewHostImpl::OnStartDragging uses this to determine
// the scale factor for the view.
- return display::Display();
+ return display::Display(0);
}
display::Display DesktopScreenQt::GetDisplayNearestPoint(const gfx::Point& point) const
@@ -98,7 +98,7 @@ display::Display DesktopScreenQt::GetDisplayMatching(const gfx::Rect& match_rect
display::Display DesktopScreenQt::GetPrimaryDisplay() const
{
- return display::Display();
+ return display::Display(0);
}
void DesktopScreenQt::AddObserver(display::DisplayObserver* observer)
diff --git a/src/core/gl_surface_qt.cpp b/src/core/gl_surface_qt.cpp
index e54e959c3..69609f4d4 100644
--- a/src/core/gl_surface_qt.cpp
+++ b/src/core/gl_surface_qt.cpp
@@ -437,6 +437,11 @@ bool GLSurfaceEGL::IsCreateContextWebGLCompatabilitySupported()
return false;
}
+bool GLSurfaceEGL::IsEGLContextPrioritySupported()
+{
+ return false;
+}
+
void GLSurfaceEGL::ShutdownOneOff()
{
}
diff --git a/src/core/network_delegate_qt.cpp b/src/core/network_delegate_qt.cpp
index 5878095e6..6507ac1cc 100644
--- a/src/core/network_delegate_qt.cpp
+++ b/src/core/network_delegate_qt.cpp
@@ -316,4 +316,24 @@ bool NetworkDelegateQt::OnCancelURLRequestWithPolicyViolatingReferrerHeader(cons
return false;
}
+bool NetworkDelegateQt::OnCanQueueReportingReport(const url::Origin& origin) const
+{
+ return false;
+}
+
+bool NetworkDelegateQt::OnCanSendReportingReport(const url::Origin& origin) const
+{
+ return false;
+}
+
+bool NetworkDelegateQt::OnCanSetReportingClient(const url::Origin& origin, const GURL& endpoint) const
+{
+ return false;
+}
+
+bool NetworkDelegateQt::OnCanUseReportingClient(const url::Origin& origin, const GURL& endpoint) const
+{
+ return false;
+}
+
} // namespace QtWebEngineCore
diff --git a/src/core/network_delegate_qt.h b/src/core/network_delegate_qt.h
index da5b36d19..590b3b20c 100644
--- a/src/core/network_delegate_qt.h
+++ b/src/core/network_delegate_qt.h
@@ -93,6 +93,13 @@ public:
virtual bool OnCanEnablePrivacyMode(const GURL&, const GURL&) const override;
virtual bool OnAreExperimentalCookieFeaturesEnabled() const override;
virtual bool OnCancelURLRequestWithPolicyViolatingReferrerHeader(const net::URLRequest&, const GURL&, const GURL&) const override;
+
+ virtual bool OnCanQueueReportingReport(const url::Origin& origin) const override;
+ virtual bool OnCanSendReportingReport(const url::Origin& origin) const override;
+ virtual bool OnCanSetReportingClient(const url::Origin& origin,
+ const GURL& endpoint) const override;
+ virtual bool OnCanUseReportingClient(const url::Origin& origin,
+ const GURL& endpoint) const override;
};
} // namespace QtWebEngineCore
diff --git a/src/core/print_view_manager_qt.cpp b/src/core/print_view_manager_qt.cpp
index 6493bb7d5..b35f5df4d 100644
--- a/src/core/print_view_manager_qt.cpp
+++ b/src/core/print_view_manager_qt.cpp
@@ -57,6 +57,7 @@
#include "content/public/common/web_preferences.h"
#include "printing/pdf_metafile_skia.h"
#include "printing/print_job_constants.h"
+#include "printing/units.h"
DEFINE_WEB_CONTENTS_USER_DATA_KEY(QtWebEngineCore::PrintViewManagerQt);
@@ -129,6 +130,10 @@ static base::DictionaryValue *createPrintSettings()
printSettings->SetBoolean(printing::kSettingGenerateDraftData, false);
printSettings->SetBoolean(printing::kSettingPreviewModifiable, false);
+
+ printSettings->SetInteger(printing::kSettingDpiHorizontal, printing::kPointsPerInch);
+ printSettings->SetInteger(printing::kSettingDpiVertical, printing::kPointsPerInch);
+
printSettings->SetInteger(printing::kSettingDuplexMode, printing::SIMPLEX);
printSettings->SetInteger(printing::kSettingCopies, 1);
printSettings->SetBoolean(printing::kSettingCollate, false);
diff --git a/src/core/qtwebengine_sources.gni b/src/core/qtwebengine_sources.gni
index d766bde38..d7fe4d70d 100644
--- a/src/core/qtwebengine_sources.gni
+++ b/src/core/qtwebengine_sources.gni
@@ -47,8 +47,8 @@ source_set("qtwebengine_sources") {
"//chrome/browser/media/webrtc/desktop_streams_registry.h",
"//chrome/common/chrome_switches.cc",
"//chrome/common/chrome_switches.h",
- "//components/prefs/testing_pref_store.cc",
- "//components/prefs/testing_pref_store.h",
+ "//components/prefs/in_memory_pref_store.cc",
+ "//components/prefs/in_memory_pref_store.h",
"//extensions/common/constants.cc",
"//extensions/common/constants.h",
"//extensions/common/url_pattern.cc",
diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp
index bf96b1d9b..f36de68c7 100644
--- a/src/core/render_widget_host_view_qt.cpp
+++ b/src/core/render_widget_host_view_qt.cpp
@@ -73,6 +73,7 @@
#include "ui/gfx/geometry/size_conversions.h"
#if defined(USE_AURA)
+#include "ui/base/cursor/cursor.h"
#include "ui/base/cursor/cursors_aura.h"
#endif
@@ -218,7 +219,8 @@ public:
}
int GetFlags() const override { return flags; }
float GetPressure(size_t pointer_index) const override { return touchPoints.at(pointer_index).pressure(); }
- float GetTilt(size_t pointer_index) const override { return 0; }
+ float GetTiltX(size_t pointer_index) const override { return 0; }
+ float GetTiltY(size_t pointer_index) const override { return 0; }
base::TimeTicks GetEventTime() const override { return eventTime; }
size_t GetHistorySize() const override { return 0; }
@@ -267,6 +269,7 @@ RenderWidgetHostViewQt::RenderWidgetHostViewQt(content::RenderWidgetHost* widget
, m_initPending(false)
, m_beginFrameSource(nullptr)
, m_needsBeginFrames(false)
+ , m_needsFlushInput(false)
, m_addedFrameObserver(false)
, m_backgroundColor(SK_ColorWHITE)
, m_imState(0)
@@ -487,7 +490,7 @@ void RenderWidgetHostViewQt::UpdateCursor(const content::WebCursor &webCursor)
webCursor.GetCursorInfo(&cursorInfo);
Qt::CursorShape shape = Qt::ArrowCursor;
#if defined(USE_AURA)
- int auraType = -1;
+ ui::CursorType auraType = ui::CursorType::kNull;
#endif
switch (cursorInfo.type) {
case blink::WebCursorInfo::kTypePointer:
@@ -551,25 +554,25 @@ void RenderWidgetHostViewQt::UpdateCursor(const content::WebCursor &webCursor)
break;
#if defined(USE_AURA)
case blink::WebCursorInfo::kTypeVerticalText:
- auraType = ui::kCursorVerticalText;
+ auraType = ui::CursorType::kVerticalText;
break;
case blink::WebCursorInfo::kTypeCell:
- auraType = ui::kCursorCell;
+ auraType = ui::CursorType::kCell;
break;
case blink::WebCursorInfo::kTypeContextMenu:
- auraType = ui::kCursorContextMenu;
+ auraType = ui::CursorType::kContextMenu;
break;
case blink::WebCursorInfo::kTypeAlias:
- auraType = ui::kCursorAlias;
+ auraType = ui::CursorType::kAlias;
break;
case blink::WebCursorInfo::kTypeCopy:
- auraType = ui::kCursorCopy;
+ auraType = ui::CursorType::kCopy;
break;
case blink::WebCursorInfo::kTypeZoomIn:
- auraType = ui::kCursorZoomIn;
+ auraType = ui::CursorType::kZoomIn;
break;
case blink::WebCursorInfo::kTypeZoomOut:
- auraType = ui::kCursorZoomOut;
+ auraType = ui::CursorType::kZoomOut;
break;
#else
case blink::WebCursorInfo::kTypeVerticalText:
@@ -604,7 +607,7 @@ void RenderWidgetHostViewQt::UpdateCursor(const content::WebCursor &webCursor)
break;
}
#if defined(USE_AURA)
- if (auraType > 0) {
+ if (auraType != ui::CursorType::kNull) {
SkBitmap bitmap;
gfx::Point hotspot;
if (ui::GetCursorBitmap(auraType, &bitmap, &hotspot)) {
@@ -1479,24 +1482,34 @@ void RenderWidgetHostViewQt::SetNeedsBeginFrames(bool needs_begin_frames)
updateNeedsBeginFramesInternal();
}
+void RenderWidgetHostViewQt::OnSetNeedsFlushInput()
+{
+ m_needsFlushInput = true;
+ updateNeedsBeginFramesInternal();
+}
+
void RenderWidgetHostViewQt::updateNeedsBeginFramesInternal()
{
if (!m_beginFrameSource)
return;
- if (m_addedFrameObserver == m_needsBeginFrames)
+ // Based on upstream Chromium commit 7f7c8cc8b97dd0d5c9159d9e60c62efbc35e6b53.
+ bool needsFrame = m_needsBeginFrames || m_needsFlushInput;
+ if (m_addedFrameObserver == needsFrame)
return;
- if (m_needsBeginFrames)
+ m_addedFrameObserver = needsFrame;
+ if (needsFrame)
m_beginFrameSource->AddObserver(this);
else
m_beginFrameSource->RemoveObserver(this);
- m_addedFrameObserver = m_needsBeginFrames;
}
bool RenderWidgetHostViewQt::OnBeginFrameDerivedImpl(const cc::BeginFrameArgs& args)
{
+ m_needsFlushInput = false;
m_beginFrameSource->OnUpdateVSyncParameters(args.frame_time, args.interval);
+ updateNeedsBeginFramesInternal();
m_host->Send(new ViewMsg_BeginFrame(m_host->GetRoutingID(), args));
return true;
}
diff --git a/src/core/render_widget_host_view_qt.h b/src/core/render_widget_host_view_qt.h
index 7fc29adb1..63efad87e 100644
--- a/src/core/render_widget_host_view_qt.h
+++ b/src/core/render_widget_host_view_qt.h
@@ -158,6 +158,7 @@ public:
void ProcessAckedTouchEvent(const content::TouchEventWithLatencyInfo &touch, content::InputEventAckState ack_result) override;
void ClearCompositorFrame() override;
void SetNeedsBeginFrames(bool needs_begin_frames) override;
+ void OnSetNeedsFlushInput() override;
// Overridden from ui::GestureProviderClient.
void OnGestureEvent(const ui::GestureEventData& gesture) override;
@@ -255,6 +256,7 @@ private:
std::unique_ptr<cc::SyntheticBeginFrameSource> m_beginFrameSource;
bool m_needsBeginFrames;
+ bool m_needsFlushInput;
bool m_addedFrameObserver;
gfx::Vector2dF m_lastScrollOffset;
diff --git a/src/core/renderer/content_renderer_client_qt.cpp b/src/core/renderer/content_renderer_client_qt.cpp
index a3b0fece8..ab8e27939 100644
--- a/src/core/renderer/content_renderer_client_qt.cpp
+++ b/src/core/renderer/content_renderer_client_qt.cpp
@@ -57,6 +57,9 @@
#include "components/visitedlink/renderer/visitedlink_slave.h"
#include "components/web_cache/renderer/web_cache_impl.h"
#include "content/public/renderer/render_frame.h"
+#include "content/public/child/child_thread.h"
+#include "content/public/common/service_manager_connection.h"
+#include "content/public/common/simple_connection_filter.h"
#include "content/public/renderer/render_thread.h"
#include "content/public/renderer/render_view.h"
#include "net/base/net_errors.h"
@@ -75,7 +78,7 @@
#include "renderer/render_view_observer_qt.h"
#include "renderer/user_resource_controller.h"
#include "renderer/web_channel_ipc_transport.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
#include "components/grit/components_resources.h"
@@ -98,8 +101,16 @@ void ContentRendererClientQt::RenderThreadStarted()
content::RenderThread *renderThread = content::RenderThread::Get();
m_visitedLinkSlave.reset(new visitedlink::VisitedLinkSlave);
m_webCacheImpl.reset(new web_cache::WebCacheImpl());
- renderThread->GetInterfaceRegistry()->AddInterface(
- m_visitedLinkSlave->GetBindCallback());
+
+ auto registry = base::MakeUnique<service_manager::BinderRegistry>();
+ registry->AddInterface(m_visitedLinkSlave->GetBindCallback(),
+ base::ThreadTaskRunnerHandle::Get());
+ content::ChildThread::Get()
+ ->GetServiceManagerConnection()
+ ->AddConnectionFilter(base::MakeUnique<content::SimpleConnectionFilter>(
+ std::move(registry)));
+
+
renderThread->AddObserver(UserResourceController::instance());
#if BUILDFLAG(ENABLE_SPELLCHECK)
@@ -119,6 +130,8 @@ void ContentRendererClientQt::RenderViewCreated(content::RenderView* render_view
void ContentRendererClientQt::RenderFrameCreated(content::RenderFrame* render_frame)
{
new QtWebEngineCore::RenderFrameObserverQt(render_frame);
+ UserResourceController::instance()->renderFrameCreated(render_frame);
+
#if BUILDFLAG(ENABLE_SPELLCHECK)
new SpellCheckProvider(render_frame, m_spellCheck.data());
#endif
diff --git a/src/core/renderer/render_frame_observer_qt.cpp b/src/core/renderer/render_frame_observer_qt.cpp
index 111323b8a..7e6d11644 100644
--- a/src/core/renderer/render_frame_observer_qt.cpp
+++ b/src/core/renderer/render_frame_observer_qt.cpp
@@ -64,6 +64,10 @@ RenderFrameObserverQt::~RenderFrameObserverQt()
{
}
+void RenderFrameObserverQt::OnDestruct() {
+ delete this;
+}
+
#if BUILDFLAG(ENABLE_PLUGINS)
void RenderFrameObserverQt::DidCreatePepperPlugin(content::RendererPpapiHost* host)
{
diff --git a/src/core/renderer/render_frame_observer_qt.h b/src/core/renderer/render_frame_observer_qt.h
index 7abd17e96..ac098a961 100644
--- a/src/core/renderer/render_frame_observer_qt.h
+++ b/src/core/renderer/render_frame_observer_qt.h
@@ -63,7 +63,7 @@ public:
#if BUILDFLAG(ENABLE_PLUGINS)
void DidCreatePepperPlugin(content::RendererPpapiHost* host) override;
#endif
- void OnDestruct() override { }
+ void OnDestruct() override;
void FrameDetached() override;
bool isFrameDetached() const;
diff --git a/src/core/renderer/render_view_observer_qt.cpp b/src/core/renderer/render_view_observer_qt.cpp
index 676210688..4893a5188 100644
--- a/src/core/renderer/render_view_observer_qt.cpp
+++ b/src/core/renderer/render_view_observer_qt.cpp
@@ -83,6 +83,11 @@ void RenderViewObserverQt::onSetBackgroundColor(quint32 color)
render_view()->GetWebFrameWidget()->SetBaseBackgroundColor(color);
}
+void RenderViewObserverQt::OnDestruct()
+{
+ delete this;
+}
+
bool RenderViewObserverQt::OnMessageReceived(const IPC::Message& message)
{
bool handled = true;
diff --git a/src/core/renderer/render_view_observer_qt.h b/src/core/renderer/render_view_observer_qt.h
index 60b11c428..abb472f02 100644
--- a/src/core/renderer/render_view_observer_qt.h
+++ b/src/core/renderer/render_view_observer_qt.h
@@ -57,7 +57,7 @@ private:
void onFetchDocumentInnerText(quint64 requestId);
void onSetBackgroundColor(quint32 color);
- void OnDestruct() override { }
+ void OnDestruct() override;
bool OnMessageReceived(const IPC::Message& message) override;
void Navigate(const GURL& url) override;
diff --git a/src/core/renderer/user_resource_controller.cpp b/src/core/renderer/user_resource_controller.cpp
index d2e70a226..d479c559b 100644
--- a/src/core/renderer/user_resource_controller.cpp
+++ b/src/core/renderer/user_resource_controller.cpp
@@ -43,6 +43,7 @@
#include "base/strings/pattern.h"
#include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_view.h"
+#include "content/public/renderer/render_frame_observer.h"
#include "content/public/renderer/render_view_observer.h"
#include "extensions/common/url_pattern.h"
#include "third_party/WebKit/public/web/WebDocument.h"
@@ -97,16 +98,16 @@ static bool scriptMatchesURL(const UserScriptData &scriptData, const GURL &url)
return true;
}
-class UserResourceController::RenderViewObserverHelper : public content::RenderViewObserver
+class UserResourceController::RenderFrameObserverHelper : public content::RenderFrameObserver
{
public:
- RenderViewObserverHelper(content::RenderView *);
+ RenderFrameObserverHelper(content::RenderFrame* render_frame);
private:
- // RenderViewObserver implementation.
- void DidFinishDocumentLoad(blink::WebLocalFrame* frame) override;
- void DidFinishLoad(blink::WebLocalFrame* frame) override;
- void DidStartProvisionalLoad(blink::WebLocalFrame* frame) override;
- void FrameDetached(blink::WebFrame* frame) override;
+ // RenderFrameObserver implementation.
+ void DidFinishDocumentLoad() override;
+ void DidFinishLoad() override;
+ void DidStartProvisionalLoad(blink::WebDataSource* data_source) override;
+ void FrameDetached() override;
void OnDestruct() override;
bool OnMessageReceived(const IPC::Message& message) override;
@@ -115,10 +116,23 @@ private:
void onScriptsCleared();
void runScripts(UserScriptData::InjectionPoint, blink::WebLocalFrame *);
+
+ // Set of frames which are pending to get an AfterLoad invocation of runScripts, if they
+ // haven't gotten it already.
QSet<blink::WebLocalFrame *> m_pendingFrames;
};
-void UserResourceController::RenderViewObserverHelper::runScripts(UserScriptData::InjectionPoint p, blink::WebLocalFrame *frame)
+// Used only for script cleanup on RenderView destruction.
+class UserResourceController::RenderViewObserverHelper : public content::RenderViewObserver
+{
+public:
+ RenderViewObserverHelper(content::RenderView* render_view);
+private:
+ // RenderViewObserver implementation.
+ void OnDestruct() override;
+};
+
+void UserResourceController::RenderFrameObserverHelper::runScripts(UserScriptData::InjectionPoint p, blink::WebLocalFrame *frame)
{
if (p == UserScriptData::AfterLoad && !m_pendingFrames.remove(frame))
return;
@@ -128,10 +142,11 @@ void UserResourceController::RenderViewObserverHelper::runScripts(UserScriptData
void UserResourceController::runScripts(UserScriptData::InjectionPoint p, blink::WebLocalFrame *frame)
{
- content::RenderView *renderView = content::RenderView::FromWebView(frame->View());
- const bool isMainFrame = (frame == renderView->GetWebView()->MainFrame());
+ content::RenderFrame *renderFrame = content::RenderFrame::FromWebFrame(frame);
+ content::RenderView *renderView = renderFrame->GetRenderView();
+ const bool isMainFrame = renderFrame->IsMainFrame();
- QList<uint64_t> scriptsToRun = m_viewUserScriptMap.value(globalScriptsIndex).toList();
+ QList<uint64_t> scriptsToRun = m_viewUserScriptMap.value(0).toList();
scriptsToRun.append(m_viewUserScriptMap.value(renderView).toList());
Q_FOREACH (uint64_t id, scriptsToRun) {
@@ -159,67 +174,89 @@ void UserResourceController::RunScriptsAtDocumentEnd(content::RenderFrame *rende
runScripts(UserScriptData::DocumentLoadFinished, render_frame->GetWebFrame());
}
-UserResourceController::RenderViewObserverHelper::RenderViewObserverHelper(content::RenderView *renderView)
- : content::RenderViewObserver(renderView)
+UserResourceController::RenderFrameObserverHelper::RenderFrameObserverHelper(content::RenderFrame *render_frame)
+ : content::RenderFrameObserver(render_frame)
{
}
-void UserResourceController::RenderViewObserverHelper::DidFinishDocumentLoad(blink::WebLocalFrame *frame)
+UserResourceController::RenderViewObserverHelper::RenderViewObserverHelper(content::RenderView *render_view)
+ : content::RenderViewObserver(render_view)
{
+}
+
+void UserResourceController::RenderFrameObserverHelper::DidFinishDocumentLoad()
+{
+ blink::WebLocalFrame *frame = render_frame()->GetWebFrame();
m_pendingFrames.insert(frame);
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(FROM_HERE, base::Bind(&UserResourceController::RenderViewObserverHelper::runScripts,
+ base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(FROM_HERE, base::Bind(&UserResourceController::RenderFrameObserverHelper::runScripts,
base::Unretained(this), UserScriptData::AfterLoad, frame),
base::TimeDelta::FromMilliseconds(afterLoadTimeout));
}
-void UserResourceController::RenderViewObserverHelper::DidFinishLoad(blink::WebLocalFrame *frame)
+void UserResourceController::RenderFrameObserverHelper::DidFinishLoad()
{
+ blink::WebLocalFrame *frame = render_frame()->GetWebFrame();
+
// DidFinishDocumentLoad always comes before this, so frame has already been marked as pending.
- base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, base::Bind(&UserResourceController::RenderViewObserverHelper::runScripts,
+ base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, base::Bind(&UserResourceController::RenderFrameObserverHelper::runScripts,
base::Unretained(this), UserScriptData::AfterLoad, frame));
}
-void UserResourceController::RenderViewObserverHelper::DidStartProvisionalLoad(blink::WebLocalFrame *frame)
+void UserResourceController::RenderFrameObserverHelper::DidStartProvisionalLoad(blink::WebDataSource *data_source)
{
+ Q_UNUSED(data_source);
+ blink::WebLocalFrame *frame = render_frame()->GetWebFrame();
m_pendingFrames.remove(frame);
}
-void UserResourceController::RenderViewObserverHelper::FrameDetached(blink::WebFrame *frame)
+void UserResourceController::RenderFrameObserverHelper::FrameDetached()
{
- if (frame->IsWebLocalFrame())
- m_pendingFrames.remove(frame->ToWebLocalFrame());
+ blink::WebLocalFrame *frame = render_frame()->GetWebFrame();
+ m_pendingFrames.remove(frame);
+}
+
+void UserResourceController::RenderFrameObserverHelper::OnDestruct()
+{
+ // FIXME: Without this the instance will leak, but we can't delete it because the posted tasks
+ // could be executed after the instance is deleted.
+ //delete this;
}
void UserResourceController::RenderViewObserverHelper::OnDestruct()
{
+ // Remove all scripts associated with the render view.
UserResourceController::instance()->renderViewDestroyed(render_view());
+ delete this;
}
-bool UserResourceController::RenderViewObserverHelper::OnMessageReceived(const IPC::Message &message)
+bool UserResourceController::RenderFrameObserverHelper::OnMessageReceived(const IPC::Message &message)
{
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(UserResourceController::RenderViewObserverHelper, message)
- IPC_MESSAGE_HANDLER(RenderViewObserverHelper_AddScript, onUserScriptAdded)
- IPC_MESSAGE_HANDLER(RenderViewObserverHelper_RemoveScript, onUserScriptRemoved)
- IPC_MESSAGE_HANDLER(RenderViewObserverHelper_ClearScripts, onScriptsCleared)
+ IPC_BEGIN_MESSAGE_MAP(UserResourceController::RenderFrameObserverHelper, message)
+ IPC_MESSAGE_HANDLER(RenderFrameObserverHelper_AddScript, onUserScriptAdded)
+ IPC_MESSAGE_HANDLER(RenderFrameObserverHelper_RemoveScript, onUserScriptRemoved)
+ IPC_MESSAGE_HANDLER(RenderFrameObserverHelper_ClearScripts, onScriptsCleared)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
}
-void UserResourceController::RenderViewObserverHelper::onUserScriptAdded(const UserScriptData &script)
+void UserResourceController::RenderFrameObserverHelper::onUserScriptAdded(const UserScriptData &script)
{
- UserResourceController::instance()->addScriptForView(script, render_view());
+ content::RenderView *view = render_frame()->GetRenderView();
+ UserResourceController::instance()->addScriptForView(script, view);
}
-void UserResourceController::RenderViewObserverHelper::onUserScriptRemoved(const UserScriptData &script)
+void UserResourceController::RenderFrameObserverHelper::onUserScriptRemoved(const UserScriptData &script)
{
- UserResourceController::instance()->removeScriptForView(script, render_view());
+ content::RenderView *view = render_frame()->GetRenderView();
+ UserResourceController::instance()->removeScriptForView(script, view);
}
-void UserResourceController::RenderViewObserverHelper::onScriptsCleared()
+void UserResourceController::RenderFrameObserverHelper::onScriptsCleared()
{
- UserResourceController::instance()->clearScriptsForView(render_view());
+ content::RenderView *view = render_frame()->GetRenderView();
+ UserResourceController::instance()->clearScriptsForView(view);
}
UserResourceController *UserResourceController::instance()
@@ -248,9 +285,16 @@ UserResourceController::UserResourceController()
#endif // !defined(QT_NO_DEBUG) || defined(QT_FORCE_ASSERTS)
}
+void UserResourceController::renderFrameCreated(content::RenderFrame *renderFrame)
+{
+ // FIXME: Actually make this to be true.
+ // Will destroy itself when the RenderView is destroyed.
+ new RenderFrameObserverHelper(renderFrame);
+}
+
void UserResourceController::renderViewCreated(content::RenderView *renderView)
{
- // Will destroy itself with their RenderView.
+ // Will destroy itself when the RenderView is destroyed.
new RenderViewObserverHelper(renderView);
}
diff --git a/src/core/renderer/user_resource_controller.h b/src/core/renderer/user_resource_controller.h
index 5d412fe40..50af24243 100644
--- a/src/core/renderer/user_resource_controller.h
+++ b/src/core/renderer/user_resource_controller.h
@@ -61,8 +61,9 @@ class UserResourceController : public content::RenderThreadObserver {
public:
static UserResourceController *instance();
UserResourceController();
+ void renderFrameCreated(content::RenderFrame *);
void renderViewCreated(content::RenderView *);
- void renderViewDestroyed(content::RenderView *);
+ void renderViewDestroyed(content::RenderView *renderView);
void addScriptForView(const UserScriptData &, content::RenderView *);
void removeScriptForView(const UserScriptData &, content::RenderView *);
void clearScriptsForView(content::RenderView *);
@@ -73,6 +74,7 @@ public:
private:
Q_DISABLE_COPY(UserResourceController)
+ class RenderFrameObserverHelper;
class RenderViewObserverHelper;
// RenderProcessObserver implementation.
@@ -89,7 +91,7 @@ private:
ViewUserScriptMap m_viewUserScriptMap;
QHash<uint64_t, UserScriptData> m_scripts;
- friend class RenderViewObserverHelper;
+ friend class RenderFrameObserverHelper;
};
#endif // USER_RESOURCE_CONTROLLER_H
diff --git a/src/core/renderer/web_channel_ipc_transport.cpp b/src/core/renderer/web_channel_ipc_transport.cpp
index c685cd465..cec8344b6 100644
--- a/src/core/renderer/web_channel_ipc_transport.cpp
+++ b/src/core/renderer/web_channel_ipc_transport.cpp
@@ -254,4 +254,9 @@ bool WebChannelIPCTransport::OnMessageReceived(const IPC::Message &message)
return handled;
}
+void WebChannelIPCTransport::OnDestruct()
+{
+ delete this;
+}
+
} // namespace
diff --git a/src/core/renderer/web_channel_ipc_transport.h b/src/core/renderer/web_channel_ipc_transport.h
index a2c7d5b4e..04041c6c7 100644
--- a/src/core/renderer/web_channel_ipc_transport.h
+++ b/src/core/renderer/web_channel_ipc_transport.h
@@ -71,7 +71,7 @@ private:
// content::RenderViewObserver overrides:
bool OnMessageReceived(const IPC::Message &message) override;
- void OnDestruct() override { }
+ void OnDestruct() override;
bool m_installed;
uint m_installedWorldId;
diff --git a/src/core/renderer_host/user_resource_controller_host.cpp b/src/core/renderer_host/user_resource_controller_host.cpp
index 0a6decaf9..f90aebda6 100644
--- a/src/core/renderer_host/user_resource_controller_host.cpp
+++ b/src/core/renderer_host/user_resource_controller_host.cpp
@@ -47,6 +47,7 @@
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_process_host_observer.h"
#include "content/public/browser/render_view_host.h"
+#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_contents_observer.h"
@@ -57,8 +58,9 @@ public:
WebContentsObserverHelper(UserResourceControllerHost *, content::WebContents *);
// WebContentsObserver overrides:
- void RenderViewCreated(content::RenderViewHost *renderViewHost) override;
- void RenderViewHostChanged(content::RenderViewHost *oldHost, content::RenderViewHost *newHost) override;
+ void RenderFrameCreated(content::RenderFrameHost *renderFrameHost) override;
+ void RenderFrameHostChanged(content::RenderFrameHost *oldHost,
+ content::RenderFrameHost *newHost) override;
void WebContentsDestroyed() override;
private:
@@ -71,22 +73,26 @@ UserResourceControllerHost::WebContentsObserverHelper::WebContentsObserverHelper
{
}
-void UserResourceControllerHost::WebContentsObserverHelper::RenderViewCreated(content::RenderViewHost *renderViewHost)
+void UserResourceControllerHost::WebContentsObserverHelper::RenderFrameCreated(
+ content::RenderFrameHost *renderFrameHost)
{
content::WebContents *contents = web_contents();
Q_FOREACH (const UserScript &script, m_controllerHost->m_perContentsScripts.value(contents))
- renderViewHost->Send(new RenderViewObserverHelper_AddScript(renderViewHost->GetRoutingID(), script.data()));
+ renderFrameHost->Send(new RenderFrameObserverHelper_AddScript(
+ renderFrameHost->GetRoutingID(), script.data()));
}
-void UserResourceControllerHost::WebContentsObserverHelper::RenderViewHostChanged(content::RenderViewHost *oldHost,
- content::RenderViewHost *newHost)
+void UserResourceControllerHost::WebContentsObserverHelper::RenderFrameHostChanged(
+ content::RenderFrameHost *oldHost,
+ content::RenderFrameHost *newHost)
{
if (oldHost)
- oldHost->Send(new RenderViewObserverHelper_ClearScripts(oldHost->GetRoutingID()));
+ oldHost->Send(new RenderFrameObserverHelper_ClearScripts(oldHost->GetRoutingID()));
content::WebContents *contents = web_contents();
Q_FOREACH (const UserScript &script, m_controllerHost->m_perContentsScripts.value(contents))
- newHost->Send(new RenderViewObserverHelper_AddScript(newHost->GetRoutingID(), script.data()));
+ newHost->Send(new RenderFrameObserverHelper_AddScript(newHost->GetRoutingID(),
+ script.data()));
}
void UserResourceControllerHost::WebContentsObserverHelper::WebContentsDestroyed()
@@ -119,7 +125,8 @@ void UserResourceControllerHost::addUserScript(const UserScript &script, WebCont
if (script.isNull())
return;
// Global scripts should be dispatched to all our render processes.
- if (!adapter) {
+ const bool isProfileWideScript = !adapter;
+ if (isProfileWideScript) {
if (!m_profileWideScripts.contains(script)) {
m_profileWideScripts.append(script);
Q_FOREACH (content::RenderProcessHost *renderer, m_observedProcesses)
@@ -140,7 +147,9 @@ void UserResourceControllerHost::addUserScript(const UserScript &script, WebCont
m_perContentsScripts.insert(contents, currentScripts);
}
}
- contents->Send(new RenderViewObserverHelper_AddScript(contents->GetRenderViewHost()->GetRoutingID(), script.data()));
+ contents->Send(new RenderFrameObserverHelper_AddScript(contents->GetRenderViewHost()->
+ GetMainFrame()->GetRoutingID(),
+ script.data()));
}
}
@@ -149,7 +158,8 @@ bool UserResourceControllerHost::containsUserScript(const UserScript &script, We
if (script.isNull())
return false;
// Global scripts should be dispatched to all our render processes.
- if (!adapter)
+ const bool isProfileWideScript = !adapter;
+ if (isProfileWideScript)
return m_profileWideScripts.contains(script);
return m_perContentsScripts.value(adapter->webContents()).contains(script);
}
@@ -158,7 +168,8 @@ bool UserResourceControllerHost::removeUserScript(const UserScript &script, WebC
{
if (script.isNull())
return false;
- if (!adapter) {
+ const bool isProfileWideScript = !adapter;
+ if (isProfileWideScript) {
QList<UserScript>::iterator it
= std::find(m_profileWideScripts.begin(), m_profileWideScripts.end(), script);
if (it == m_profileWideScripts.end())
@@ -174,7 +185,9 @@ bool UserResourceControllerHost::removeUserScript(const UserScript &script, WebC
QList<UserScript>::iterator it = std::find(list.begin(), list.end(), script);
if (it == list.end())
return false;
- contents->Send(new RenderViewObserverHelper_RemoveScript(contents->GetRenderViewHost()->GetRoutingID(), (*it).data()));
+ contents->Send(new RenderFrameObserverHelper_RemoveScript(contents->
+ GetMainFrame()->GetRoutingID(),
+ (*it).data()));
list.erase(it);
}
return true;
@@ -182,27 +195,31 @@ bool UserResourceControllerHost::removeUserScript(const UserScript &script, WebC
void UserResourceControllerHost::clearAllScripts(WebContentsAdapter *adapter)
{
- if (!adapter) {
+ const bool isProfileWideScript = !adapter;
+ if (isProfileWideScript) {
m_profileWideScripts.clear();
Q_FOREACH (content::RenderProcessHost *renderer, m_observedProcesses)
renderer->Send(new UserResourceController_ClearScripts);
} else {
content::WebContents *contents = adapter->webContents();
m_perContentsScripts.remove(contents);
- contents->Send(new RenderViewObserverHelper_ClearScripts(contents->GetRenderViewHost()->GetRoutingID()));
+ contents->Send(new RenderFrameObserverHelper_ClearScripts(contents->
+ GetMainFrame()->GetRoutingID()));
}
}
const QList<UserScript> UserResourceControllerHost::registeredScripts(WebContentsAdapter *adapter) const
{
- if (!adapter)
+ const bool isProfileWideScript = !adapter;
+ if (isProfileWideScript)
return m_profileWideScripts;
return m_perContentsScripts.value(adapter->webContents());
}
void UserResourceControllerHost::reserve(WebContentsAdapter *adapter, int count)
{
- if (!adapter)
+ const bool isProfileWideScript = !adapter;
+ if (isProfileWideScript)
m_profileWideScripts.reserve(count);
else
m_perContentsScripts[adapter->webContents()].reserve(count);
diff --git a/src/core/url_request_context_getter_qt.cpp b/src/core/url_request_context_getter_qt.cpp
index fe1758655..8a6717e91 100644
--- a/src/core/url_request_context_getter_qt.cpp
+++ b/src/core/url_request_context_getter_qt.cpp
@@ -189,9 +189,9 @@ void URLRequestContextGetterQt::cancelAllUrlRequests()
Q_ASSERT(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
Q_ASSERT(m_urlRequestContext);
- std::set<const net::URLRequest*>* url_requests = m_urlRequestContext->url_requests();
- std::set<const net::URLRequest*>::const_iterator it = url_requests->begin();
- std::set<const net::URLRequest*>::const_iterator end = url_requests->end();
+ const std::set<const net::URLRequest*>& url_requests = m_urlRequestContext->url_requests();
+ std::set<const net::URLRequest*>::const_iterator it = url_requests.begin();
+ std::set<const net::URLRequest*>::const_iterator end = url_requests.end();
for ( ; it != end; ++it) {
net::URLRequest* request = const_cast<net::URLRequest*>(*it);
if (request)
diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp
index e4e902bc5..6181c0b72 100644
--- a/src/core/web_contents_adapter.cpp
+++ b/src/core/web_contents_adapter.cpp
@@ -169,7 +169,7 @@ static QVariant fromJSValue(const base::Value *result)
}
case base::Value::Type::BINARY:
{
- QByteArray data(result->GetBuffer(), result->GetSize());
+ QByteArray data(result->GetBlob().data(), result->GetBlob().size());
ret.setValue(data);
break;
}
diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp
index 341fd38f0..ad0e7ad6d 100644
--- a/src/core/web_contents_delegate_qt.cpp
+++ b/src/core/web_contents_delegate_qt.cpp
@@ -337,7 +337,7 @@ void WebContentsDelegateQt::DidUpdateFaviconURL(const std::vector<content::Favic
m_faviconManager->update(faviconCandidates);
}
-void WebContentsDelegateQt::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)
+void WebContentsDelegateQt::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, const base::Optional<content::WebContents::CreateParams>& create_params)
{
this->m_initialTargetUrl = toQt(target_url);
}
@@ -536,6 +536,10 @@ void WebContentsDelegateQt::BeforeUnloadFired(content::WebContents *tab, bool pr
m_viewClient->windowCloseRejected();
}
+void WebContentsDelegateQt::BeforeUnloadFired(const base::TimeTicks &proceed_time) {
+ Q_UNUSED(proceed_time);
+}
+
bool WebContentsDelegateQt::CheckMediaAccessPermission(content::WebContents *web_contents, const GURL& security_origin, content::MediaStreamType type)
{
switch (type) {
@@ -555,4 +559,8 @@ FaviconManager *WebContentsDelegateQt::faviconManager()
return m_faviconManager.data();
}
+WebEngineSettings *WebContentsDelegateQt::webEngineSettings() const {
+ return m_viewClient->webEngineSettings();
+}
+
} // namespace QtWebEngineCore
diff --git a/src/core/web_contents_delegate_qt.h b/src/core/web_contents_delegate_qt.h
index 20c70ef21..2e37c498a 100644
--- a/src/core/web_contents_delegate_qt.h
+++ b/src/core/web_contents_delegate_qt.h
@@ -68,6 +68,7 @@ namespace content {
namespace QtWebEngineCore {
class WebContentsAdapterClient;
+class WebEngineSettings;
class SavePageInfo
{
@@ -104,7 +105,7 @@ public:
void LoadProgressChanged(content::WebContents* source, double progress) override;
void HandleKeyboardEvent(content::WebContents *source, const content::NativeWebKeyboardEvent &event) override;
content::ColorChooser *OpenColorChooser(content::WebContents *source, SkColor color, const std::vector<content::ColorSuggestion> &suggestion) override;
- 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;
+ 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, const base::Optional<content::WebContents::CreateParams>& create_params) override;
content::JavaScriptDialogManager *GetJavaScriptDialogManager(content::WebContents *source) override;
void EnterFullscreenModeForTab(content::WebContents* web_contents, const GURL& origin) override;
void ExitFullscreenModeForTab(content::WebContents*) override;
@@ -131,12 +132,12 @@ public:
void DidFailLoad(content::RenderFrameHost *render_frame_host, const GURL &validated_url,
int error_code, const base::string16 &error_description, bool was_ignored_by_handler) override;
void DidFinishLoad(content::RenderFrameHost *render_frame_host, const GURL &validated_url) override;
+ void BeforeUnloadFired(const base::TimeTicks& proceed_time) override;
void DidUpdateFaviconURL(const std::vector<content::FaviconURL> &candidates) override;
void WasShown() override;
void DidFirstVisuallyNonEmptyPaint() override;
void ActivateContents(content::WebContents* contents) override;
-
void didFailLoad(const QUrl &url, int errorCode, const QString &errorDescription);
void overrideWebPreferences(content::WebContents *, content::WebPreferences*);
void allowCertificateError(const QSharedPointer<CertificateErrorController> &) ;
@@ -147,6 +148,8 @@ public:
void setSavePageInfo(const SavePageInfo &spi) { m_savePageInfo = spi; }
const SavePageInfo &savePageInfo() { return m_savePageInfo; }
+ WebEngineSettings *webEngineSettings() const;
+
private:
QWeakPointer<WebContentsAdapter> createWindow(content::WebContents *new_contents, WindowOpenDisposition disposition, const gfx::Rect& initial_pos, bool user_gesture);
void EmitLoadStarted(const QUrl &url, bool isErrorPage = false);
diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp
index d88fd8035..4df4dbfae 100644
--- a/src/core/web_engine_context.cpp
+++ b/src/core/web_engine_context.cpp
@@ -61,6 +61,7 @@
#include "content/public/browser/browser_main_runner.h"
#include "content/public/browser/plugin_service.h"
#include "content/public/browser/render_frame_host.h"
+#include "content/public/common/content_features.h"
#include "content/public/common/content_paths.h"
#include "content/public/common/content_switches.h"
#include "content/public/common/main_function_params.h"
@@ -196,7 +197,8 @@ void WebEngineContext::destroy()
m_devtoolsServer->stop();
delete m_globalQObject;
m_globalQObject = 0;
- base::MessagePump::Delegate *delegate = m_runLoop->loop_;
+ base::MessagePump::Delegate *delegate =
+ static_cast<base::MessageLoop *>(m_runLoop->delegate_);
// Flush the UI message loop before quitting.
while (delegate->DoWork()) { }
GLContextHelper::destroy();
@@ -345,6 +347,13 @@ WebEngineContext::WebEngineContext()
parsedCommandLine->AppendSwitch(switches::kDisableES3GLContext);
#endif
+ // Needed to allow navigations within pages that were set using setHtml(). One example is
+ // 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);
+
if (useEmbeddedSwitches) {
parsedCommandLine->AppendSwitchASCII(switches::kEnableFeatures, features::kOverlayScrollbar.name);
if (!parsedCommandLine->HasSwitch(switches::kDisablePinch))
@@ -408,8 +417,7 @@ WebEngineContext::WebEngineContext()
QSurfaceFormat globalSharedFormat = qt_gl_global_share_context()->format();
if (globalSharedFormat.profile() == QSurfaceFormat::CoreProfile) {
#ifdef Q_OS_MACOS
- // @TODO_FIXME_ADAPT_QT
- // glType = gl::kGLImplementationCoreProfileName;
+ glType = gl::kGLImplementationCoreProfileName;
#else
qWarning("An OpenGL Core Profile was requested, but it is not supported "
"on the current platform. Falling back to a non-Core profile. "
@@ -439,7 +447,6 @@ WebEngineContext::WebEngineContext()
mojo::edk::Init();
content::ContentMainParams contentMainParams(m_mainDelegate.get());
- contentMainParams.setup_signal_handlers = false;
#if defined(OS_WIN)
sandbox::SandboxInterfaceInfo sandbox_info = {0};
content::InitializeSandboxInfo(&sandbox_info);
diff --git a/src/core/web_engine_settings.cpp b/src/core/web_engine_settings.cpp
index 63c2aa519..4c944892a 100644
--- a/src/core/web_engine_settings.cpp
+++ b/src/core/web_engine_settings.cpp
@@ -106,7 +106,6 @@ static inline bool isTouchEventsAPIEnabled() {
return touchEventsAPIEnabled;
}
-
WebEngineSettings::WebEngineSettings(WebEngineSettings *_parentSettings)
: m_adapter(0)
, m_batchTimer(new BatchTimer(this))
@@ -317,7 +316,6 @@ void WebEngineSettings::applySettingsToWebPreferences(content::WebPreferences *p
// Attributes mapping.
prefs->loads_images_automatically = testAttribute(AutoLoadImages);
prefs->javascript_enabled = testAttribute(JavascriptEnabled);
- prefs->javascript_can_open_windows_automatically = testAttribute(JavascriptCanOpenWindows);
prefs->javascript_can_access_clipboard = testAttribute(JavascriptCanAccessClipboard);
prefs->tabs_to_links = testAttribute(LinksIncludedInFocusChain);
prefs->local_storage_enabled = testAttribute(LocalStorageEnabled);
@@ -361,6 +359,11 @@ void WebEngineSettings::scheduleApplyRecursively()
}
}
+bool WebEngineSettings::getJavaScriptCanOpenWindowsAutomatically()
+{
+ return testAttribute(JavascriptCanOpenWindows);
+}
+
void WebEngineSettings::setParentSettings(WebEngineSettings *_parentSettings)
{
if (parentSettings)
diff --git a/src/core/web_engine_settings.h b/src/core/web_engine_settings.h
index 1304d2ae9..639d314f3 100644
--- a/src/core/web_engine_settings.h
+++ b/src/core/web_engine_settings.h
@@ -134,6 +134,8 @@ public:
void scheduleApplyRecursively();
+ bool getJavaScriptCanOpenWindowsAutomatically();
+
private:
void doApply();
void applySettingsToWebPreferences(content::WebPreferences *);
diff --git a/tests/auto/quick/qmltests/data/confirmclose.html b/tests/auto/quick/qmltests/data/confirmclose.html
index ba11da7a4..c2acbb67f 100644
--- a/tests/auto/quick/qmltests/data/confirmclose.html
+++ b/tests/auto/quick/qmltests/data/confirmclose.html
@@ -1,5 +1,6 @@
<html>
-<body onbeforeunload="return 'You are about to miss out on some awesome content.';">
+<body onbeforeunload="return 'You are about to miss out on some awesome content.';"
+ onmousedown="window.mousePressReceived = true;">
Be greeted, precious viewer!
</body>
</html>
diff --git a/tests/auto/quick/qmltests/data/tst_javaScriptDialogs.qml b/tests/auto/quick/qmltests/data/tst_javaScriptDialogs.qml
index 73673f511..44836d67c 100644
--- a/tests/auto/quick/qmltests/data/tst_javaScriptDialogs.qml
+++ b/tests/auto/quick/qmltests/data/tst_javaScriptDialogs.qml
@@ -34,6 +34,7 @@ import "../mock-delegates/TestParams" 1.0
TestWebEngineView {
id: webEngineView
+ anchors.fill: parent
testSupport: WebEngineTestSupport {
property bool windowCloseRejectedSignalEmitted: false
@@ -52,6 +53,7 @@ TestWebEngineView {
TestCase {
id: test
name: "WebEngineViewJavaScriptDialogs"
+ when: windowShown
function init() {
JSDialogParams.dialogMessage = "";
@@ -82,11 +84,29 @@ TestWebEngineView {
}
+ function simulateUserGesture() {
+ // A user gesture after page load is required since Chromium 60 to allow showing
+ // an onbeforeunload dialog.
+ // See https://www.chromestatus.com/feature/5082396709879808
+ mouseClick(webEngineView, 10, 10, Qt.LeftButton)
+
+ var mousePressReceived;
+ runJavaScript("window.mousePressReceived", function(result) {
+ mousePressReceived = result;
+ });
+
+ tryVerify(function() {
+ return mousePressReceived != undefined
+ }, 5000);
+ }
+
function test_confirmClose() {
webEngineView.url = Qt.resolvedUrl("confirmclose.html");
verify(webEngineView.waitForLoadSucceeded());
webEngineView.windowCloseRequestedSignalEmitted = false;
JSDialogParams.shouldAcceptDialog = true;
+
+ simulateUserGesture()
webEngineView.triggerWebAction(WebEngineView.RequestClose);
verify(webEngineView.waitForWindowCloseRequested());
}
@@ -96,6 +116,8 @@ TestWebEngineView {
verify(webEngineView.waitForLoadSucceeded());
webEngineView.testSupport.windowCloseRejectedSignalEmitted = false;
JSDialogParams.shouldAcceptDialog = false;
+
+ simulateUserGesture()
webEngineView.triggerWebAction(WebEngineView.RequestClose);
verify(webEngineView.testSupport.waitForWindowCloseRejected());
}
diff --git a/tests/auto/quick/qmltests/tst_qmltests.cpp b/tests/auto/quick/qmltests/tst_qmltests.cpp
index 5dc909709..2aa24b76c 100644
--- a/tests/auto/quick/qmltests/tst_qmltests.cpp
+++ b/tests/auto/quick/qmltests/tst_qmltests.cpp
@@ -114,8 +114,17 @@ int main(int argc, char **argv)
// Force to use English language for testing due to error message checks
QLocale::setDefault(QLocale("en"));
- if (!QCoreApplication::instance())
- app.reset(new Application(argc, argv));
+ static QByteArrayList params = {QByteArrayLiteral("--use-fake-device-for-media-stream")};
+ QVector<const char *> w_argv(argc); \
+ for (int i = 0; i < argc; ++i) \
+ w_argv[i] = argv[i]; \
+ for (int i = 0; i < params.size(); ++i) \
+ w_argv.append(params[i].data()); \
+ int w_argc = w_argv.size(); \
+
+ if (!QCoreApplication::instance()) {
+ app.reset(new Application(w_argc, const_cast<char **>(w_argv.data())));
+ }
QtWebEngine::initialize();
QQuickWebEngineProfile::defaultProfile()->setOffTheRecord(true);
diff --git a/tests/auto/quick/qquickwebenginedefaultsurfaceformat/tst_qquickwebenginedefaultsurfaceformat.cpp b/tests/auto/quick/qquickwebenginedefaultsurfaceformat/tst_qquickwebenginedefaultsurfaceformat.cpp
index 2afaf03a3..0139d266f 100644
--- a/tests/auto/quick/qquickwebenginedefaultsurfaceformat/tst_qquickwebenginedefaultsurfaceformat.cpp
+++ b/tests/auto/quick/qquickwebenginedefaultsurfaceformat/tst_qquickwebenginedefaultsurfaceformat.cpp
@@ -110,7 +110,7 @@ QUrl tst_QQuickWebEngineDefaultSurfaceFormat::urlFromTestPath(const char *localF
void tst_QQuickWebEngineDefaultSurfaceFormat::customDefaultSurfaceFormat()
{
-#if !defined(Q_OS_MACOSX)
+#if !defined(Q_OS_MACOS)
QSKIP("OpenGL Core Profile is currently only supported on macOS.");
#endif
// Setting a new default QSurfaceFormat with a core OpenGL profile, before
diff --git a/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp b/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp
index 8aea72cca..7af2263be 100644
--- a/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp
+++ b/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp
@@ -261,7 +261,6 @@ void tst_QQuickWebEngineView::loadProgress()
void tst_QQuickWebEngineView::show()
{
- QSKIP("Skip to due 58-based issues. Restore once 60-based is in.");
// This should not crash.
m_window->show();
QTest::qWait(200);
@@ -270,7 +269,6 @@ void tst_QQuickWebEngineView::show()
void tst_QQuickWebEngineView::showWebEngineView()
{
- QSKIP("Skip to due 58-based issues. Restore once 60-based is in.");
webEngineView()->setUrl(urlFromTestPath("html/direct-image-compositing.html"));
QVERIFY(waitForLoadSucceeded(webEngineView()));
m_window->show();
@@ -283,7 +281,6 @@ void tst_QQuickWebEngineView::showWebEngineView()
void tst_QQuickWebEngineView::removeFromCanvas()
{
- QSKIP("Skip to due 58-based issues. Restore once 60-based is in.");
showWebEngineView();
// This should not crash.
@@ -298,7 +295,6 @@ void tst_QQuickWebEngineView::removeFromCanvas()
void tst_QQuickWebEngineView::multipleWebEngineViewWindows()
{
- QSKIP("Skip to due 58-based issues. Restore once 60-based is in.");
showWebEngineView();
// This should not crash.
@@ -321,7 +317,6 @@ void tst_QQuickWebEngineView::multipleWebEngineViewWindows()
void tst_QQuickWebEngineView::multipleWebEngineViews()
{
- QSKIP("Skip to due 58-based issues. Restore once 60-based is in.");
showWebEngineView();
// This should not crash.
diff --git a/tests/auto/widgets/qwebengineaccessibility/tst_qwebengineaccessibility.cpp b/tests/auto/widgets/qwebengineaccessibility/tst_qwebengineaccessibility.cpp
index 6eb29db8d..bed2745e3 100644
--- a/tests/auto/widgets/qwebengineaccessibility/tst_qwebengineaccessibility.cpp
+++ b/tests/auto/widgets/qwebengineaccessibility/tst_qwebengineaccessibility.cpp
@@ -68,7 +68,6 @@ void tst_QWebEngineAccessibility::cleanup()
void tst_QWebEngineAccessibility::noPage()
{
- QSKIP("Skip to due 58-based issues. Restore once 60-based is in.");
QWebEngineView webView;
webView.show();
@@ -85,7 +84,6 @@ void tst_QWebEngineAccessibility::noPage()
void tst_QWebEngineAccessibility::hierarchy()
{
- QSKIP("Skip to due 58-based issues. Restore once 60-based is in.");
QWebEngineView webView;
webView.setHtml("<html><body>" \
"Hello world" \
@@ -146,7 +144,6 @@ void tst_QWebEngineAccessibility::hierarchy()
void tst_QWebEngineAccessibility::text()
{
- QSKIP("Skip to due 58-based issues. Restore once 60-based is in.");
QWebEngineView webView;
webView.setHtml("<html><body>" \
"<input type='text' value='Good morning!'></input>" \
@@ -216,7 +213,6 @@ void tst_QWebEngineAccessibility::text()
void tst_QWebEngineAccessibility::value()
{
- QSKIP("Skip to due 58-based issues. Restore once 60-based is in.");
QWebEngineView webView;
webView.setHtml("<html><body>" \
"<div role='slider' aria-valuenow='4' aria-valuemin='1' aria-valuemax='10'></div>" \
@@ -294,7 +290,7 @@ void tst_QWebEngineAccessibility::roles_data()
QTest::newRow("AX_ROLE_DIALOG") << QString("<div role='dialog'></div>") << true << QAccessible::Dialog;
//QTest::newRow("AX_ROLE_DIRECTORY") << QString("<div role='directory'></div>") << true << QAccessible::NoRole; // FIXME: Aria role 'directory' should work
QTest::newRow("AX_ROLE_DISCLOSURE_TRIANGLE") << QString("<details><summary>a</summary></details>") << false << QAccessible::NoRole;
- QTest::newRow("AX_ROLE_DIV") << QString("<div>a</div>") << true << QAccessible::Section;
+ QTest::newRow("AX_ROLE_GENERIC_CONTAINER") << QString("<div>a</div>") << true << QAccessible::Section;
QTest::newRow("AX_ROLE_DOCUMENT") << QString("<div role='document'>a</div>") << true << QAccessible::Document;
QTest::newRow("AX_ROLE_EMBEDDED_OBJECT") << QString("<object width='10' height='10'></object>") << false << QAccessible::Grouping;
QTest::newRow("AX_ROLE_FEED") << QString("<div role='feed'>a</div>") << true << QAccessible::Section;
@@ -305,7 +301,7 @@ void tst_QWebEngineAccessibility::roles_data()
QTest::newRow("AX_ROLE_GRID") << QString("<div role='grid'></div>") << true << QAccessible::Table;
QTest::newRow("AX_ROLE_GROUP") << QString("<fieldset></fieldset>") << true << QAccessible::Grouping;
QTest::newRow("AX_ROLE_HEADING") << QString("<h1>a</h1>") << true << QAccessible::Heading;
- QTest::newRow("AX_ROLE_IFRAME") << QString("<iframe>a</iframe>") << true << QAccessible::Grouping;
+ QTest::newRow("AX_ROLE_IFRAME") << QString("<iframe>a</iframe>") << true << QAccessible::Section;
QTest::newRow("AX_ROLE_IFRAME_PRESENTATIONAL") << QString("<iframe role='presentation'>a</iframe>") << false << QAccessible::NoRole;
//QTest::newRow("AX_ROLE_IGNORED") << QString("<tag>a</tag>") << true << QAccessible::NoRole; // FIXME: The HTML element should not be exposed as an element (see AXNodeObject.cpp)
QTest::newRow("AX_ROLE_IMAGE") << QString("<img>") << false << QAccessible::Graphic;
@@ -390,7 +386,6 @@ void tst_QWebEngineAccessibility::roles_data()
void tst_QWebEngineAccessibility::roles()
{
- QSKIP("Skip to due 58-based issues. Restore once 60-based is in.");
QFETCH(QString, html);
QFETCH(bool, isSection);
QFETCH(QAccessible::Role, role);
diff --git a/tests/auto/widgets/qwebenginedefaultsurfaceformat/tst_qwebenginedefaultsurfaceformat.cpp b/tests/auto/widgets/qwebenginedefaultsurfaceformat/tst_qwebenginedefaultsurfaceformat.cpp
index 1e8cc74e2..da47c5f0f 100644
--- a/tests/auto/widgets/qwebenginedefaultsurfaceformat/tst_qwebenginedefaultsurfaceformat.cpp
+++ b/tests/auto/widgets/qwebenginedefaultsurfaceformat/tst_qwebenginedefaultsurfaceformat.cpp
@@ -51,7 +51,7 @@ private Q_SLOTS:
void tst_QWebEngineDefaultSurfaceFormat::customDefaultSurfaceFormat()
{
-#if !defined(Q_OS_MACOSX)
+#if !defined(Q_OS_MACOS)
QSKIP("OpenGL Core Profile is currently only supported on macOS.");
#endif
// Setting a new default QSurfaceFormat with a core OpenGL profile before
diff --git a/tests/auto/widgets/qwebengineview/resources/basic_printing_page.html b/tests/auto/widgets/qwebenginepage/resources/basic_printing_page.html
index 0c6ff379f..0c6ff379f 100644
--- a/tests/auto/widgets/qwebengineview/resources/basic_printing_page.html
+++ b/tests/auto/widgets/qwebenginepage/resources/basic_printing_page.html
diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
index 5f3a7e728..09d4f0f51 100644
--- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
+++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
@@ -309,6 +309,10 @@ void tst_QWebEnginePage::acceptNavigationRequest()
NavigationRequestOverride* newPage = new NavigationRequestOverride(&view, false);
view.setPage(newPage);
+ // acceptNavigationRequest and QWebEngineUrlRequestInterceptor::interceptRequest are not called
+ // for data: urls, which means the test is broken, aka setting
+ // newPage->m_acceptNavigationRequest to false does nothing to stop the page from loading.
+ // See QTBUG-50922 comments.
view.setHtml(QString("<html><body><form name='tstform' action='data:text/html,foo'method='get'>"
"<input type='text'><input type='submit'></form></body></html>"), QUrl());
QTRY_COMPARE(loadSpy.count(), 1);
@@ -4368,5 +4372,7 @@ void tst_QWebEnginePage::viewSourceURL()
QVERIFY(!page.action(QWebEnginePage::ViewSource)->isEnabled());
}
-QTEST_MAIN(tst_QWebEnginePage)
+static QByteArrayList params = {QByteArrayLiteral("--use-fake-device-for-media-stream")};
+W_QTEST_MAIN(tst_QWebEnginePage, params)
+
#include "tst_qwebenginepage.moc"
diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.qrc b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.qrc
index 91adeb694..4fddd7a3f 100644
--- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.qrc
+++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.qrc
@@ -1,5 +1,6 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
+ <file>resources/basic_printing_page.html</file>
<file>resources/content.html</file>
<file>resources/index.html</file>
<file>resources/frame_a.html</file>
diff --git a/tests/auto/widgets/qwebenginescript/resources/test_iframe_inner.html b/tests/auto/widgets/qwebenginescript/resources/test_iframe_inner.html
new file mode 100644
index 000000000..3539c9620
--- /dev/null
+++ b/tests/auto/widgets/qwebenginescript/resources/test_iframe_inner.html
@@ -0,0 +1,8 @@
+<html>
+<head>
+<title></title>
+</head>
+<body>
+<div>Inner text</div>
+</body>
+</html>
diff --git a/tests/auto/widgets/qwebenginescript/resources/test_iframe_main.html b/tests/auto/widgets/qwebenginescript/resources/test_iframe_main.html
new file mode 100644
index 000000000..47b991c2c
--- /dev/null
+++ b/tests/auto/widgets/qwebenginescript/resources/test_iframe_main.html
@@ -0,0 +1,9 @@
+<html>
+<head>
+<title></title>
+</head>
+<body>
+<div>Main text</div>
+<iframe id="outer" src="qrc:/resources/test_iframe_outer.html"></iframe>
+</body>
+</html>
diff --git a/tests/auto/widgets/qwebenginescript/resources/test_iframe_outer.html b/tests/auto/widgets/qwebenginescript/resources/test_iframe_outer.html
new file mode 100644
index 000000000..8854809f8
--- /dev/null
+++ b/tests/auto/widgets/qwebenginescript/resources/test_iframe_outer.html
@@ -0,0 +1,9 @@
+<html>
+<head>
+<title></title>
+</head>
+<body>
+<div>Outer text</div>
+<iframe id="inner" src="qrc:/resources/test_iframe_inner.html"></iframe>
+</body>
+</html>
diff --git a/tests/auto/widgets/qwebenginescript/tst_qwebenginescript.cpp b/tests/auto/widgets/qwebenginescript/tst_qwebenginescript.cpp
index c10ae2886..1a8110bb6 100644
--- a/tests/auto/widgets/qwebenginescript/tst_qwebenginescript.cpp
+++ b/tests/auto/widgets/qwebenginescript/tst_qwebenginescript.cpp
@@ -38,6 +38,7 @@ private Q_SLOTS:
void webChannel_data();
void webChannel();
void noTransportWithoutWebChannel();
+ void scriptsInNestedIframes();
};
void tst_QWebEngineScript::domEditing()
@@ -246,6 +247,58 @@ void tst_QWebEngineScript::noTransportWithoutWebChannel()
QCOMPARE(evaluateJavaScriptSync(&page, "qt.webChannelTransport"), QVariant(QVariant::Invalid));
}
+void tst_QWebEngineScript::scriptsInNestedIframes()
+{
+ QWebEnginePage page;
+ QWebEngineView view;
+ view.setPage(&page);
+ QWebEngineScript s;
+ s.setInjectionPoint(QWebEngineScript::DocumentReady);
+ s.setWorldId(QWebEngineScript::ApplicationWorld);
+
+ // Prepend a "Modified prefix" to every frame's div content.
+ s.setSourceCode("var elements = document.getElementsByTagName(\"div\");\
+ var i;\
+ for (i = 0; i < elements.length; i++) {\
+ var content = elements[i].innerHTML;\
+ elements[i].innerHTML = \"Modified \" + content;\
+ }\
+ ");
+
+ // Make sure the script runs on all frames.
+ s.setRunsOnSubFrames(true);
+ page.scripts().insert(s);
+
+ QSignalSpy spyFinished(&page, &QWebEnginePage::loadFinished);
+ page.load(QUrl("qrc:/resources/test_iframe_main.html"));
+ view.show();
+ QVERIFY(spyFinished.wait());
+
+ // Check that main frame has modified content.
+ QCOMPARE(
+ evaluateJavaScriptSyncInWorld(&page, "document.getElementsByTagName(\"div\")[0].innerHTML",
+ QWebEngineScript::ApplicationWorld),
+ QVariant::fromValue(QStringLiteral("Modified Main text")));
+
+ // Check that outer frame has modified content.
+ QCOMPARE(
+ evaluateJavaScriptSyncInWorld(&page,
+ "var i = document.getElementById(\"outer\").contentDocument;\
+ i.getElementsByTagName(\"div\")[0].innerHTML",
+ QWebEngineScript::ApplicationWorld),
+ QVariant::fromValue(QStringLiteral("Modified Outer text")));
+
+
+ // Check that inner frame has modified content.
+ QCOMPARE(
+ evaluateJavaScriptSyncInWorld(&page,
+ "var i = document.getElementById(\"outer\").contentDocument;\
+ var i2 = i.getElementById(\"inner\").contentDocument;\
+ i2.getElementsByTagName(\"div\")[0].innerHTML",
+ QWebEngineScript::ApplicationWorld),
+ QVariant::fromValue(QStringLiteral("Modified Inner text")));
+}
+
QTEST_MAIN(tst_QWebEngineScript)
#include "tst_qwebenginescript.moc"
diff --git a/tests/auto/widgets/qwebenginescript/tst_qwebenginescript.qrc b/tests/auto/widgets/qwebenginescript/tst_qwebenginescript.qrc
new file mode 100644
index 000000000..8b7a11cf2
--- /dev/null
+++ b/tests/auto/widgets/qwebenginescript/tst_qwebenginescript.qrc
@@ -0,0 +1,7 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file>resources/test_iframe_main.html</file>
+ <file>resources/test_iframe_outer.html</file>
+ <file>resources/test_iframe_inner.html</file>
+</qresource>
+</RCC>
diff --git a/tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp b/tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp
index d8c18e509..5cbcf4ec0 100644
--- a/tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp
+++ b/tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp
@@ -33,6 +33,8 @@ private Q_SLOTS:
void tst_QWebEngineSettings::resetAttributes()
{
+ // QT_TODO_FIXME_ADAPT
+ QSKIP("The application deadlocks and hangs without exiting.");
QWebEngineProfile profile;
QWebEngineSettings *settings = profile.settings();
@@ -74,6 +76,8 @@ void tst_QWebEngineSettings::defaultFontFamily_data()
void tst_QWebEngineSettings::defaultFontFamily()
{
+ // QT_TODO_FIXME_ADAPT
+ QSKIP("The application deadlocks and hangs without exiting.");
QWebEngineProfile profile;
QWebEngineSettings *settings = profile.settings();
diff --git a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
index 8f9efdbc2..f1bb181d1 100644
--- a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
+++ b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
@@ -293,12 +293,12 @@ class WebViewCrashTest : public QObject {
Q_OBJECT
QWebEngineView* m_view;
public:
- bool m_executed;
+ bool m_invokedStop;
WebViewCrashTest(QWebEngineView* view)
: m_view(view)
- , m_executed(false)
+ , m_invokedStop(false)
{
view->connect(view, SIGNAL(loadProgress(int)), this, SLOT(loading(int)));
}
@@ -306,10 +306,11 @@ public:
private Q_SLOTS:
void loading(int progress)
{
- if (progress > 1 && progress < 100) {
- QVERIFY(!m_executed);
+ qDebug() << "progress: " << progress;
+ if (progress > 0 && progress < 100) {
+ QVERIFY(!m_invokedStop);
m_view->stop();
- m_executed = true;
+ m_invokedStop = true;
}
}
};
@@ -324,7 +325,10 @@ void tst_QWebEngineView::crashTests()
WebViewCrashTest tester(&view);
QUrl url("qrc:///resources/index.html");
view.load(url);
- QTRY_VERIFY(tester.m_executed); // If fail it means that the test wasn't executed.
+
+ // If the verification fails, it means that either stopping doesn't work, or the hardware is
+ // too slow to load the page and thus to slow to issue the first loadProgress > 0 signal.
+ QTRY_VERIFY_WITH_TIMEOUT(tester.m_invokedStop, 10000);
}
void tst_QWebEngineView::microFocusCoordinates()
@@ -1609,7 +1613,7 @@ void tst_QWebEngineView::inputMethods()
view.setHtml("<html><body>"
" <input type='text' id='input1' style='font-family: serif' value='' maxlength='20' size='50'/>"
"</body></html>");
- QVERIFY(loadFinishedSpy.wait());
+ QTRY_COMPARE(loadFinishedSpy.size(), 1);
QPoint textInputCenter = elementCenter(view.page(), "input1");
QTest::mouseClick(view.focusProxy(), Qt::LeftButton, 0, textInputCenter);
@@ -1655,8 +1659,7 @@ void tst_QWebEngineView::inputMethods()
QInputMethodEvent eventSelection1("", inputAttributes);
QApplication::sendEvent(view.focusProxy(), &eventSelection1);
- QVERIFY(selectionChangedSpy.wait());
- QCOMPARE(selectionChangedSpy.count(), 1);
+ QTRY_COMPARE(selectionChangedSpy.size(), 1);
QCOMPARE(view.focusProxy()->inputMethodQuery(Qt::ImAnchorPosition).toInt(), 3);
QCOMPARE(view.focusProxy()->inputMethodQuery(Qt::ImCursorPosition).toInt(), 5);
@@ -1667,8 +1670,7 @@ void tst_QWebEngineView::inputMethods()
inputAttributes << QInputMethodEvent::Attribute(QInputMethodEvent::Selection, 6, -5, QVariant());
QInputMethodEvent eventSelection2("", inputAttributes);
QApplication::sendEvent(view.focusProxy(), &eventSelection2);
- QVERIFY(selectionChangedSpy.wait());
- QCOMPARE(selectionChangedSpy.count(), 2);
+ QTRY_COMPARE(selectionChangedSpy.size(), 2);
QCOMPARE(view.focusProxy()->inputMethodQuery(Qt::ImAnchorPosition).toInt(), 1);
QCOMPARE(view.focusProxy()->inputMethodQuery(Qt::ImCursorPosition).toInt(), 6);
@@ -1681,8 +1683,7 @@ void tst_QWebEngineView::inputMethods()
attributes.append(newSelection);
QInputMethodEvent eventComposition("composition", attributes);
QApplication::sendEvent(view.focusProxy(), &eventComposition);
- QVERIFY(selectionChangedSpy.wait());
- QCOMPARE(selectionChangedSpy.count(), 3);
+ QTRY_COMPARE(selectionChangedSpy.size(), 3);
QCOMPARE(view.focusProxy()->inputMethodQuery(Qt::ImCurrentSelection).toString(), QString(""));
// An ongoing composition should not change the surrounding text before it is committed.
diff --git a/tests/auto/widgets/qwebengineview/tst_qwebengineview.qrc b/tests/auto/widgets/qwebengineview/tst_qwebengineview.qrc
index 4809bbebf..53b11bca8 100644
--- a/tests/auto/widgets/qwebengineview/tst_qwebengineview.qrc
+++ b/tests/auto/widgets/qwebengineview/tst_qwebengineview.qrc
@@ -4,7 +4,6 @@
<file>resources/frame_a.html</file>
<file>resources/input_types.html</file>
<file>resources/scrolltest_page.html</file>
- <file>resources/basic_printing_page.html</file>
<file>resources/keyboardEvents.html</file>
</qresource>
</RCC>
diff --git a/tests/auto/widgets/widgets.pro b/tests/auto/widgets/widgets.pro
index d260b7c4f..90352310e 100644
--- a/tests/auto/widgets/widgets.pro
+++ b/tests/auto/widgets/widgets.pro
@@ -6,8 +6,7 @@ SUBDIRS += \
qwebenginefaviconmanager \
qwebenginepage \
qwebenginehistory \
- # Skipped to due issue in 58-based. Restore once 60-based is in.
- #qwebenginehistoryinterface \
+ qwebenginehistoryinterface \
qwebengineinspector \
qwebengineprofile \
qwebenginescript \
diff --git a/tools/scripts/version_resolver.py b/tools/scripts/version_resolver.py
index bcc964f3b..96faa5524 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 = '59.0.3071.134'
-chromium_branch = '3071'
+chromium_version = '60.0.3112.78'
+chromium_branch = '3112'
ninja_version = 'v1.7.2'
json_url = 'http://omahaproxy.appspot.com/all.json'