summaryrefslogtreecommitdiffstats
path: root/src/core
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2018-11-16 14:57:44 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2018-11-16 14:57:44 +0100
commitef177a48f2c6c41549ef9d11a985ab2661942638 (patch)
treed6bc5aa8cbde95d9e9857ead4b509e8b04b524b9 /src/core
parent396ca081d7b0d9dab7de14ebaec7943c3f857a24 (diff)
parente5bc5a6dbdd915e0b19cfc43e7af17e43c1a7878 (diff)
Merge branch '5.12' into dev
Conflicts: src/core/compositor/compositor.cpp src/core/compositor/compositor.h Change-Id: I8a4d73d728d93d95e499849f8778cc88dda2105e
Diffstat (limited to 'src/core')
-rw-r--r--src/core/compositor/compositor.cpp11
-rw-r--r--src/core/compositor/compositor.h4
-rw-r--r--src/core/config/common.pri3
-rw-r--r--src/core/config/linux.pri1
-rw-r--r--src/core/ozone/gl_ozone_glx_qt.cpp18
-rw-r--r--src/core/render_widget_host_view_qt.cpp28
-rw-r--r--src/core/render_widget_host_view_qt.h4
-rw-r--r--src/core/render_widget_host_view_qt_delegate.h1
-rw-r--r--src/core/renderer/content_renderer_client_qt.cpp7
-rw-r--r--src/core/type_conversion.cpp38
-rw-r--r--src/core/type_conversion.h2
-rw-r--r--src/core/web_engine_context.cpp2
12 files changed, 91 insertions, 28 deletions
diff --git a/src/core/compositor/compositor.cpp b/src/core/compositor/compositor.cpp
index 2d955b917..77a973748 100644
--- a/src/core/compositor/compositor.cpp
+++ b/src/core/compositor/compositor.cpp
@@ -41,15 +41,17 @@
#include "compositor_resource_tracker.h"
#include "delegated_frame_node.h"
+#include "render_widget_host_view_qt.h"
-#include <components/viz/common/resources/returned_resource.h>
-#include <content/public/browser/browser_thread.h>
-#include <services/viz/public/interfaces/compositing/compositor_frame_sink.mojom.h>
+#include "components/viz/common/resources/returned_resource.h"
+#include "content/public/browser/browser_thread.h"
+#include "services/viz/public/interfaces/compositing/compositor_frame_sink.mojom.h"
namespace QtWebEngineCore {
-Compositor::Compositor()
+Compositor::Compositor(RenderWidgetHostViewQt *hostView)
: m_resourceTracker(new CompositorResourceTracker)
+ , m_view(hostView)
{
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
@@ -169,6 +171,7 @@ bool Compositor::OnBeginFrameDerivedImpl(const viz::BeginFrameArgs &args)
{
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ m_view->OnBeginFrame(args.frame_time);
m_beginFrameSource->OnUpdateVSyncParameters(args.frame_time, args.interval);
if (m_frameSinkClient)
m_frameSinkClient->OnBeginFrame(args);
diff --git a/src/core/compositor/compositor.h b/src/core/compositor/compositor.h
index d34255d26..b025f901d 100644
--- a/src/core/compositor/compositor.h
+++ b/src/core/compositor/compositor.h
@@ -64,6 +64,7 @@ class CompositorFrameSinkClient;
namespace QtWebEngineCore {
class CompositorResourceTracker;
+class RenderWidgetHostViewQt;
class RenderWidgetHostViewQtDelegate;
// Receives viz::CompositorFrames from child compositors and provides QSGNodes
@@ -87,7 +88,7 @@ class RenderWidgetHostViewQtDelegate;
class Compositor final : private viz::BeginFrameObserverBase
{
public:
- explicit Compositor();
+ explicit Compositor(RenderWidgetHostViewQt *hostView);
~Compositor() override;
void setFrameSinkClient(viz::mojom::CompositorFrameSinkClient *frameSinkClient);
@@ -109,6 +110,7 @@ private:
viz::CompositorFrame m_pendingFrame;
base::OnceClosure m_submitCallback;
std::unique_ptr<CompositorResourceTracker> m_resourceTracker;
+ RenderWidgetHostViewQt *m_view;
std::unique_ptr<viz::SyntheticBeginFrameSource> m_beginFrameSource;
viz::mojom::CompositorFrameSinkClient *m_frameSinkClient = nullptr;
bool m_updatePaintNodeShouldCommit = false;
diff --git a/src/core/config/common.pri b/src/core/config/common.pri
index 6b79a1f99..ddb4ca4bf 100644
--- a/src/core/config/common.pri
+++ b/src/core/config/common.pri
@@ -23,7 +23,8 @@ gn_args += \
!win32: gn_args += \
use_jumbo_build=true \
- jumbo_file_merge_limit=8
+ jumbo_file_merge_limit=8 \
+ jumbo_build_excluded="[\"browser\"]"
qtConfig(webengine-printing-and-pdf) {
gn_args += enable_basic_printing=true enable_print_preview=true
diff --git a/src/core/config/linux.pri b/src/core/config/linux.pri
index eb8bb7bb0..ed7745b89 100644
--- a/src/core/config/linux.pri
+++ b/src/core/config/linux.pri
@@ -147,7 +147,6 @@ host_build {
gn_args += use_system_libpng=true
qtConfig(webengine-printing-and-pdf): gn_args += pdfium_use_system_libpng=true
}
- qtConfig(webengine-system-png): gn_args += use_system_libpng=true
qtConfig(webengine-system-jpeg): gn_args += use_system_libjpeg=true
qtConfig(webengine-system-freetype): gn_args += use_system_freetype=true
qtConfig(webengine-system-harfbuzz): gn_args += use_system_harfbuzz=true
diff --git a/src/core/ozone/gl_ozone_glx_qt.cpp b/src/core/ozone/gl_ozone_glx_qt.cpp
index 2e7a28a0e..e3a4f4708 100644
--- a/src/core/ozone/gl_ozone_glx_qt.cpp
+++ b/src/core/ozone/gl_ozone_glx_qt.cpp
@@ -44,18 +44,12 @@
#include <QGuiApplication>
#include "gl_ozone_glx_qt.h"
#include "gl_surface_glx_qt.h"
+#include "gl_context_qt.h"
#include "ui/gl/gl_context_glx.h"
#include "ui/gl/gl_gl_api_implementation.h"
#include "ui/gl/gl_glx_api_implementation.h"
#include <dlfcn.h>
-#ifndef QT_NO_OPENGL
-#include <QOpenGLContext>
-QT_BEGIN_NAMESPACE
-Q_GUI_EXPORT QOpenGLContext *qt_gl_global_share_context();
-QT_END_NAMESPACE
-#endif
-
namespace ui {
bool GLOzoneGLXQt::InitializeGLOneOffPlatform() {
@@ -79,16 +73,12 @@ bool GLOzoneGLXQt::InitializeStaticGLBindings(
reinterpret_cast<gl::GLGetProcAddressProc>(
base::GetFunctionPointerFromNativeLibrary(library,
"glXGetProcAddress"));
-
-#ifndef QT_NO_OPENGL
if (!get_proc_address) {
// glx handle not loaded, fallback to qpa
- if (QOpenGLContext *context = qt_gl_global_share_context()) {
- get_proc_address = reinterpret_cast<gl::GLGetProcAddressProc>(
- context->getProcAddress("glXGetProcAddress"));
- }
+ QFunctionPointer address = GLContextHelper::getGlXGetProcAddress();
+ get_proc_address = reinterpret_cast<gl::GLGetProcAddressProc>(address);
}
-#endif
+
if (!get_proc_address) {
LOG(ERROR) << "glxGetProcAddress not found.";
base::UnloadNativeLibrary(library);
diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp
index bac9dd6cf..31a145b44 100644
--- a/src/core/render_widget_host_view_qt.cpp
+++ b/src/core/render_widget_host_view_qt.cpp
@@ -53,6 +53,7 @@
#include "content/browser/frame_host/render_frame_host_impl.h"
#include "content/browser/frame_host/frame_tree.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
+#include "content/common/content_switches_internal.h"
#include "content/common/cursors/webcursor.h"
#include "content/common/input_messages.h"
#include "third_party/skia/include/core/SkColor.h"
@@ -260,7 +261,7 @@ RenderWidgetHostViewQt::RenderWidgetHostViewQt(content::RenderWidgetHost *widget
, m_gestureProvider(QtGestureProviderConfig(), this)
, m_sendMotionActionDown(false)
, m_touchMotionStarted(false)
- , m_compositor(new Compositor)
+ , m_compositor(new Compositor(this))
, m_loadVisuallyCommittedState(NotCommitted)
, m_adapterClient(0)
, m_imeInProgress(false)
@@ -402,7 +403,18 @@ bool RenderWidgetHostViewQt::HasFocus() const
bool RenderWidgetHostViewQt::IsSurfaceAvailableForCopy() const
{
- return false;
+ return true;
+}
+
+void RenderWidgetHostViewQt::CopyFromSurface(const gfx::Rect &src_rect,
+ const gfx::Size &output_size,
+ base::OnceCallback<void(const SkBitmap &)> callback)
+{
+ QImage image;
+ if (m_delegate->copySurface(toQt(src_rect), toQt(output_size), image))
+ std::move(callback).Run(toSkBitmap(image));
+ else
+ std::move(callback).Run(SkBitmap());
}
void RenderWidgetHostViewQt::Show()
@@ -870,6 +882,13 @@ void RenderWidgetHostViewQt::selectionChanged()
void RenderWidgetHostViewQt::OnGestureEvent(const ui::GestureEventData& gesture)
{
+ if ((gesture.type() == ui::ET_GESTURE_PINCH_BEGIN
+ || gesture.type() == ui::ET_GESTURE_PINCH_UPDATE
+ || gesture.type() == ui::ET_GESTURE_PINCH_END)
+ && !content::IsPinchToZoomEnabled()) {
+ return;
+ }
+
host()->ForwardGestureEvent(ui::CreateWebGestureEventFromGestureEventData(gesture));
}
@@ -1627,6 +1646,11 @@ void RenderWidgetHostViewQt::SetNeedsBeginFrames(bool needs_begin_frames)
m_compositor->setNeedsBeginFrames(needs_begin_frames);
}
+void RenderWidgetHostViewQt::OnBeginFrame(base::TimeTicks frame_time)
+{
+ host()->ProgressFlingIfNeeded(frame_time);
+}
+
content::RenderFrameHost *RenderWidgetHostViewQt::getFocusedFrameHost()
{
content::RenderViewHostImpl *viewHost = content::RenderViewHostImpl::From(host());
diff --git a/src/core/render_widget_host_view_qt.h b/src/core/render_widget_host_view_qt.h
index 6a1134ac0..6dd4d57e5 100644
--- a/src/core/render_widget_host_view_qt.h
+++ b/src/core/render_widget_host_view_qt.h
@@ -112,6 +112,7 @@ public:
RenderWidgetHostViewQtDelegate *delegate() { return m_delegate.get(); }
void setDelegate(RenderWidgetHostViewQtDelegate *delegate);
void setAdapterClient(WebContentsAdapterClient *adapterClient);
+ void OnBeginFrame(base::TimeTicks frame_time);
void InitAsChild(gfx::NativeView) override;
void InitAsPopup(content::RenderWidgetHostView*, const gfx::Rect&) override;
@@ -124,6 +125,9 @@ public:
void Focus() override;
bool HasFocus() const override;
bool IsSurfaceAvailableForCopy() const override;
+ void CopyFromSurface(const gfx::Rect &src_rect,
+ const gfx::Size &output_size,
+ base::OnceCallback<void(const SkBitmap &)> callback) override;
void Show() override;
void Hide() override;
bool IsShowing() override;
diff --git a/src/core/render_widget_host_view_qt_delegate.h b/src/core/render_widget_host_view_qt_delegate.h
index 991c26ea8..5ce595502 100644
--- a/src/core/render_widget_host_view_qt_delegate.h
+++ b/src/core/render_widget_host_view_qt_delegate.h
@@ -114,6 +114,7 @@ public:
virtual void inputMethodStateChanged(bool editorVisible, bool passwordInput) = 0;
virtual void setInputMethodHints(Qt::InputMethodHints hints) = 0;
virtual void setClearColor(const QColor &color) = 0;
+ virtual bool copySurface(const QRect &, const QSize &, QImage &) = 0;
};
} // namespace QtWebEngineCore
diff --git a/src/core/renderer/content_renderer_client_qt.cpp b/src/core/renderer/content_renderer_client_qt.cpp
index 3eda3993a..403448b91 100644
--- a/src/core/renderer/content_renderer_client_qt.cpp
+++ b/src/core/renderer/content_renderer_client_qt.cpp
@@ -213,8 +213,9 @@ void ContentRendererClientQt::PrepareErrorPageForHttpStatusError(content::Render
errorHtml, errorDescription);
}
-void ContentRendererClientQt::GetNavigationErrorStringsInternal(content::RenderFrame */*renderFrame*/, const blink::WebURLRequest &failedRequest, const error_page::Error &error, std::string *errorHtml, base::string16 *errorDescription)
+void ContentRendererClientQt::GetNavigationErrorStringsInternal(content::RenderFrame *renderFrame, const blink::WebURLRequest &failedRequest, const error_page::Error &error, std::string *errorHtml, base::string16 *errorDescription)
{
+ Q_UNUSED(renderFrame)
const bool isPost = QByteArray::fromStdString(failedRequest.HttpMethod().Utf8()) == QByteArrayLiteral("POST");
if (errorHtml) {
@@ -424,8 +425,6 @@ static void AddWidevine(std::vector<std::unique_ptr<media::KeySystemProperties>>
return;
}
- media::SupportedCodecs supported_codecs = media::EME_CODEC_NONE;
-
// Codecs and encryption schemes.
auto codecs =
GetSupportedCodecs(capability->video_codecs, /*is_secure=*/false);
@@ -452,8 +451,6 @@ static void AddWidevine(std::vector<std::unique_ptr<media::KeySystemProperties>>
return;
}
- bool cdm_supports_persistent_license =
- base::ContainsValue(capability->session_types, media::CdmSessionType::kPersistentLicense);
auto persistent_license_support = media::EmeSessionTypeSupport::NOT_SUPPORTED;
auto persistent_usage_record_support = media::EmeSessionTypeSupport::NOT_SUPPORTED;
diff --git a/src/core/type_conversion.cpp b/src/core/type_conversion.cpp
index 4aff2cff6..d35426ac3 100644
--- a/src/core/type_conversion.cpp
+++ b/src/core/type_conversion.cpp
@@ -137,6 +137,44 @@ QImage toQImage(const gfx::ImageSkiaRep &imageSkiaRep)
return image;
}
+SkBitmap toSkBitmap(const QImage &image)
+{
+ SkBitmap bitmap;
+ SkImageInfo imageInfo;
+
+ switch (image.format()) {
+ case QImage::Format_RGB32:
+ imageInfo = SkImageInfo::Make(image.width(), image.height(), kBGRA_8888_SkColorType, kOpaque_SkAlphaType);
+ break;
+ case QImage::Format_ARGB32:
+ imageInfo = SkImageInfo::Make(image.width(), image.height(), kBGRA_8888_SkColorType, kUnpremul_SkAlphaType);
+ break;
+ case QImage::Format_ARGB32_Premultiplied:
+ imageInfo = SkImageInfo::Make(image.width(), image.height(), kBGRA_8888_SkColorType, kPremul_SkAlphaType);
+ break;
+ case QImage::Format_RGBX8888:
+ imageInfo = SkImageInfo::Make(image.width(), image.height(), kRGBA_8888_SkColorType, kOpaque_SkAlphaType);
+ break;
+ case QImage::Format_RGBA8888:
+ imageInfo = SkImageInfo::Make(image.width(), image.height(), kRGBA_8888_SkColorType, kUnpremul_SkAlphaType);
+ break;
+ case QImage::Format_RGBA8888_Premultiplied:
+ imageInfo = SkImageInfo::Make(image.width(), image.height(), kRGBA_8888_SkColorType, kPremul_SkAlphaType);
+ break;
+ default:
+ return toSkBitmap(image.convertToFormat(QImage::Format_ARGB32_Premultiplied));
+ }
+
+ bitmap.installPixels(imageInfo, (void *)image.bits(), image.bytesPerLine());
+
+ // Ensure we copy the pixels
+ SkBitmap bitmapCopy;
+ bitmapCopy.allocPixels(imageInfo);
+ bitmapCopy.writePixels(bitmap.pixmap());
+
+ return bitmapCopy;
+}
+
QIcon toQIcon(const std::vector<SkBitmap> &bitmaps)
{
if (!bitmaps.size())
diff --git a/src/core/type_conversion.h b/src/core/type_conversion.h
index b9e210c22..afc3c3336 100644
--- a/src/core/type_conversion.h
+++ b/src/core/type_conversion.h
@@ -194,6 +194,8 @@ inline QImage toQImage(const SkBitmap &bitmap, QImage::Format format)
QImage toQImage(const SkBitmap &bitmap);
QImage toQImage(const gfx::ImageSkiaRep &imageSkiaRep);
+SkBitmap toSkBitmap(const QImage &image);
+
QIcon toQIcon(const std::vector<SkBitmap> &bitmaps);
inline QMatrix4x4 toQt(const SkMatrix44 &m)
diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp
index 096568570..f9d9631fd 100644
--- a/src/core/web_engine_context.cpp
+++ b/src/core/web_engine_context.cpp
@@ -449,6 +449,8 @@ WebEngineContext::WebEngineContext()
appendToFeatureSwitch(parsedCommandLine, switches::kDisableFeatures, features::kEnableSurfaceSynchronization.name);
// The video-capture service is not functioning at this moment (since 69)
appendToFeatureSwitch(parsedCommandLine, switches::kDisableFeatures, features::kMojoVideoCapture.name);
+ // We do not yet support the internal video capture API.
+ appendToFeatureSwitch(parsedCommandLine, switches::kDisableFeatures, features::kUseVideoCaptureApiForDevToolsSnapshots.name);
if (useEmbeddedSwitches) {
// embedded switches are based on the switches for Android, see content/browser/android/content_startup_flags.cc