summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlexandru Croitor <alexandru.croitor@qt.io>2017-07-19 14:12:54 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2017-09-11 17:25:32 +0000
commit7282fb4fb4861320539f2b7288f63e1d4f48749d (patch)
tree3fb62ed4d45875be975410b08c776888803748ec /src
parent82499104972d24027044acaff1136ea7d758efe2 (diff)
Adaptations for Chromium 60
Change-Id: I536258e22c2ec143f2fd3f1cbda229e0611b6af4 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Diffstat (limited to 'src')
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
39 files changed, 394 insertions, 122 deletions
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 *);