diff options
Diffstat (limited to 'src/core/render_widget_host_view_qt.h')
-rw-r--r-- | src/core/render_widget_host_view_qt.h | 162 |
1 files changed, 87 insertions, 75 deletions
diff --git a/src/core/render_widget_host_view_qt.h b/src/core/render_widget_host_view_qt.h index 2bc90a558..a55e04dd8 100644 --- a/src/core/render_widget_host_view_qt.h +++ b/src/core/render_widget_host_view_qt.h @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWebEngine module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #ifndef RENDER_WIDGET_HOST_VIEW_QT_H #define RENDER_WIDGET_HOST_VIEW_QT_H @@ -48,20 +12,16 @@ #include "components/viz/common/resources/transferable_resource.h" #include "components/viz/common/surfaces/parent_local_surface_id_allocator.h" #include "components/viz/host/host_frame_sink_client.h" -#include "content/browser/accessibility/browser_accessibility_manager.h" +#include "content/browser/accessibility/web_contents_accessibility.h" #include "content/browser/renderer_host/input/mouse_wheel_phase_handler.h" #include "content/browser/renderer_host/render_widget_host_view_base.h" #include "content/browser/renderer_host/text_input_manager.h" #include "ui/events/gesture_detection/filtered_gesture_provider.h" -QT_FORWARD_DECLARE_CLASS(QAccessibleInterface) - namespace content { class RenderFrameHost; class RenderWidgetHostImpl; -namespace mojom { -class FrameInputHandler; -} +class WebContents; } namespace ui { @@ -71,7 +31,9 @@ class TouchSelectionController; namespace QtWebEngineCore { class RenderWidgetHostViewQtDelegateClient; +class InputEventObserverQt; class TouchSelectionControllerClientQt; +class WebContentsAccessibilityQt; class WebContentsAdapterClient; class RenderWidgetHostViewQt @@ -79,6 +41,8 @@ class RenderWidgetHostViewQt , public ui::GestureProviderClient , public base::SupportsWeakPtr<RenderWidgetHostViewQt> , public content::TextInputManager::Observer + , public content::RenderFrameMetadataProvider::Observer + , public content::RenderWidgetHost::InputEventObserver { public: RenderWidgetHostViewQt(content::RenderWidgetHost* widget); @@ -90,21 +54,22 @@ public: void setAdapterClient(WebContentsAdapterClient *adapterClient); RenderWidgetHostViewQtDelegateClient *delegateClient() const { return m_delegateClient.get(); } + // Overridden from RenderWidgetHostView: void InitAsChild(gfx::NativeView) override; - void InitAsPopup(content::RenderWidgetHostView*, const gfx::Rect&) override; - void InitAsFullscreen(content::RenderWidgetHostView*) override; + void InitAsPopup(content::RenderWidgetHostView*, const gfx::Rect&, const gfx::Rect&) override; void SetSize(const gfx::Size& size) override; void SetBounds(const gfx::Rect&) override; gfx::NativeView GetNativeView() override; - gfx::NativeViewAccessible GetNativeViewAccessible() override; + gfx::NativeViewAccessible GetNativeViewAccessible() override { return nullptr; } void Focus() override; bool HasFocus() override; bool IsMouseLocked() override; + viz::FrameSinkId GetRootFrameSinkId() override; bool IsSurfaceAvailableForCopy() override; void CopyFromSurface(const gfx::Rect &src_rect, const gfx::Size &output_size, base::OnceCallback<void(const SkBitmap &)> callback) override; - void Show() override; + void ShowWithVisibility(content::PageVisibilityState page_visibility) override; void Hide() override; bool IsShowing() override; gfx::Rect GetViewBounds() override; @@ -112,27 +77,40 @@ public: blink::mojom::PointerLockResult LockMouse(bool) override; blink::mojom::PointerLockResult ChangeMouseLock(bool) override; void UnlockMouse() override; - void UpdateCursor(const content::WebCursor&) override; - void DisplayCursor(const content::WebCursor&) override; + void UpdateCursor(const ui::Cursor&) override; + void DisplayCursor(const ui::Cursor&) override; + content::CursorManager *GetCursorManager() override; void SetIsLoading(bool) override; void ImeCancelComposition() override; - void ImeCompositionRangeChanged(const gfx::Range&, const std::vector<gfx::Rect>&) override; + void ImeCompositionRangeChanged(const gfx::Range &, + const absl::optional<std::vector<gfx::Rect>> &, + const absl::optional<std::vector<gfx::Rect>> &) override; void RenderProcessGone() override; + bool TransformPointToCoordSpaceForView(const gfx::PointF &point, + content::RenderWidgetHostViewBase *target_view, + gfx::PointF *transformed_point) override; void Destroy() override; - void SetTooltipText(const base::string16 &tooltip_text) override; - void DisplayTooltipText(const base::string16& tooltip_text) override; - void WheelEventAck(const blink::WebMouseWheelEvent &event, content::InputEventAckState ack_result) override; - void GestureEventAck(const blink::WebGestureEvent &event, content::InputEventAckState ack_result) override; + void UpdateTooltipUnderCursor(const std::u16string &tooltip_text) override; + void UpdateTooltip(const std::u16string& tooltip_text) override; + void WheelEventAck(const blink::WebMouseWheelEvent &event, + blink::mojom::InputEventResultState ack_result) override; + void GestureEventAck(const blink::WebGestureEvent &event, + blink::mojom::InputEventResultState ack_result, + blink::mojom::ScrollResultDataPtr scroll_result_data) override; content::MouseWheelPhaseHandler *GetMouseWheelPhaseHandler() override; viz::ScopedSurfaceIdAllocator DidUpdateVisualProperties(const cc::RenderFrameMetadata &metadata) override; void OnDidUpdateVisualPropertiesComplete(const cc::RenderFrameMetadata &metadata); - void GetScreenInfo(content::ScreenInfo *results) override; + // Overridden from RenderWidgetHostViewBase: gfx::Rect GetBoundsInRootWindow() override; - void ProcessAckedTouchEvent(const content::TouchEventWithLatencyInfo &touch, content::InputEventAckState ack_result) override; + void ProcessAckedTouchEvent(const content::TouchEventWithLatencyInfo &touch, + blink::mojom::InputEventResultState ack_result) override; viz::SurfaceId GetCurrentSurfaceId() const override; const viz::FrameSinkId &GetFrameSinkId() const override; - const viz::LocalSurfaceIdAllocation &GetLocalSurfaceIdAllocation() const override; + const viz::LocalSurfaceId &GetLocalSurfaceId() const override; + void FocusedNodeChanged(bool is_editable_node, const gfx::Rect& node_bounds_in_screen) override; + base::flat_map<std::string, std::string> GetKeyboardLayoutMap() override; + void TakeFallbackContentFrom(content::RenderWidgetHostView *view) override; void EnsureSurfaceSynchronizedForWebTest() override; uint32_t GetCaptureSequenceNumber() const override; @@ -140,11 +118,25 @@ public: void DidStopFlinging() override; std::unique_ptr<content::SyntheticGestureTarget> CreateSyntheticGestureTarget() override; ui::Compositor *GetCompositor() override; -#if defined(OS_MACOSX) + absl::optional<content::DisplayFeature> GetDisplayFeature() override; + void SetDisplayFeatureForTesting(const content::DisplayFeature*) override; + content::WebContentsAccessibility *GetWebContentsAccessibility() override; +#if BUILDFLAG(IS_MAC) + void ShowSharePicker( + const std::string &title, + const std::string &text, + const std::string &url, + const std::vector<std::string> &file_paths, + blink::mojom::ShareService::ShareCallback callback) override { QT_NOT_YET_IMPLEMENTED } void SetActive(bool active) override { QT_NOT_YET_IMPLEMENTED } void SpeakSelection() override { QT_NOT_YET_IMPLEMENTED } void ShowDefinitionForSelection() override { QT_NOT_YET_IMPLEMENTED } -#endif // defined(OS_MACOSX) + void SetWindowFrameInScreen(const gfx::Rect&) override { QT_NOT_YET_IMPLEMENTED } +#endif // BUILDFLAG(IS_MAC) + void NotifyHostAndDelegateOnWasShown(blink::mojom::RecordContentToVisibleTimeRequestPtr) override { QT_NOT_YET_IMPLEMENTED } + void RequestSuccessfulPresentationTimeFromHostOrDelegate(blink::mojom::RecordContentToVisibleTimeRequestPtr) override {} + void CancelSuccessfulPresentationTimeRequestForHostAndDelegate() override {} + void InvalidateLocalSurfaceIdAndAllocationGroup() override {} // Overridden from ui::GestureProviderClient. void OnGestureEvent(const ui::GestureEventData& gesture) override; @@ -154,11 +146,19 @@ public: void OnSelectionBoundsChanged(content::TextInputManager *text_input_manager, RenderWidgetHostViewBase *updated_view) override; void OnTextSelectionChanged(content::TextInputManager *text_input_manager, RenderWidgetHostViewBase *updated_view) override; - // Overridden from content::BrowserAccessibilityDelegate - content::BrowserAccessibilityManager* CreateBrowserAccessibilityManager(content::BrowserAccessibilityDelegate* delegate, bool for_root_frame) override; - // Overridden from content::RenderFrameMetadataProvider::Observer - void OnRenderFrameMetadataChangedAfterActivation() override; + void OnRenderFrameMetadataChangedAfterActivation(base::TimeTicks activation_time) override; + void OnRenderFrameMetadataChangedBeforeActivation(const cc::RenderFrameMetadata &) override {} + void OnRenderFrameSubmission() override {} + void OnLocalSurfaceIdChanged(const cc::RenderFrameMetadata &) override {} + + // Overridden from content::RenderWidgetHost::InputEventObserver + void OnInputEvent(const blink::WebInputEvent &) override { } + void OnInputEventAck(blink::mojom::InputEventResultSource, + blink::mojom::InputEventResultState state, + const blink::WebInputEvent &event) override; + + static void registerInputEventObserver(content::WebContents *, content::RenderFrameHost *); // Called from RenderWidgetHostViewQtDelegateClient. Compositor::Id compositorId(); @@ -169,45 +169,49 @@ public: void processMotionEvent(const ui::MotionEvent &motionEvent); void resetInputManagerState() { m_imState = 0; } - // Called from WebContentsDelegateQt. - void OnDidFirstVisuallyNonEmptyPaint(); - // Called from WebContentsAdapter. gfx::SizeF lastContentsSize() const { return m_lastContentsSize; } - gfx::Vector2dF lastScrollOffset() const { return m_lastScrollOffset; } - - ui::TextInputType getTextInputType() const; - content::mojom::FrameInputHandler *getFrameInputHandler(); + gfx::PointF lastScrollOffset() const { return m_lastScrollOffset; } ui::TouchSelectionController *getTouchSelectionController() const { return m_touchSelectionController.get(); } TouchSelectionControllerClientQt *getTouchSelectionControllerClient() const { return m_touchSelectionControllerClient.get(); } + blink::mojom::FrameWidgetInputHandler *getFrameWidgetInputHandler(); + ui::TextInputType getTextInputType() const; void synchronizeVisualProperties( - const base::Optional<viz::LocalSurfaceIdAllocation> &childSurfaceId); + const absl::optional<viz::LocalSurfaceId> &childSurfaceId); + + void resetTouchSelectionController(); private: friend class DelegatedFrameHostClientQt; + friend class WebContentsAccessibilityQt; bool isPopup() const; - content::RenderFrameHost *getFocusedFrameHost(); + + bool updateCursorFromResource(ui::mojom::CursorType type); scoped_refptr<base::SingleThreadTaskRunner> m_taskRunner; + + std::unique_ptr<content::CursorManager> m_cursorManager; + ui::FilteredGestureProvider m_gestureProvider; + viz::FrameSinkId m_frameSinkId; std::unique_ptr<RenderWidgetHostViewQtDelegateClient> m_delegateClient; std::unique_ptr<RenderWidgetHostViewQtDelegate> m_delegate; + std::unique_ptr<WebContentsAccessibilityQt> m_webContentsAccessibility; QMetaObject::Connection m_adapterClientDestroyedConnection; WebContentsAdapterClient *m_adapterClient = nullptr; bool m_isMouseLocked = false; bool m_visible = false; bool m_deferredShow = false; - gfx::Vector2dF m_lastScrollOffset; + gfx::PointF m_lastScrollOffset; gfx::SizeF m_lastContentsSize; DelegatedFrameHostClientQt m_delegatedFrameHostClient { this }; // VIZ - content::ScreenInfo m_screenInfo; std::unique_ptr<content::DelegatedFrameHost> m_delegatedFrameHost; std::unique_ptr<ui::Layer> m_rootLayer; std::unique_ptr<ui::Compositor> m_uiCompositor; @@ -231,6 +235,14 @@ private: base::WeakPtrFactory<RenderWidgetHostViewQt> m_weakPtrFactory { this }; }; +class WebContentsAccessibilityQt : public content::WebContentsAccessibility +{ + RenderWidgetHostViewQt *m_rwhv; +public: + WebContentsAccessibilityQt(RenderWidgetHostViewQt *rwhv) : m_rwhv(rwhv) {} + QObject *accessibilityParentObject() const; +}; + } // namespace QtWebEngineCore #endif // RENDER_WIDGET_HOST_VIEW_QT_H |