Commit 4645c02b authored by danakj's avatar danakj Committed by Commit Bot

Move SetHasTouchEventHandlers from WebLayerTreeView to WebWidgetClient (14/n)

We are removing the WebLayerTreeView interface as it is redundant with
WebWidgetClient now that we always composite web contents.

More importantly this helps us Close/Restart the WebWidget parts of
WebViewImpl by not requiring plumbing 2 pointers with slightly different
lifetimes (WebLayerTreeView is created inside the Init of the
WebWidgetClient). This will help avoid a bunch of complexity in
creating WebFrameWidgets and other WebWidgets.

The HaveScrollEventHandlers() method is only used in blink_unittests
and they can get at the TestWebWidgetClient, so remove it from the
public APIs entirely.

WebPagePopups don't have scroll event handlers, and even if they did
they don't need to tell the compositor. Add a comment and a
NOTREACHED() instead of code.

R=dcheng@chromium.org

Bug: 912193
Change-Id: I5aed86e0773953428aded533df4395c29f3bd451
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1713746
Commit-Queue: danakj <danakj@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#680063}
parent ae8b739c
...@@ -188,14 +188,6 @@ void LayerTreeView::SetNeedsBeginFrame() { ...@@ -188,14 +188,6 @@ void LayerTreeView::SetNeedsBeginFrame() {
layer_tree_host_->SetNeedsAnimate(); layer_tree_host_->SetNeedsAnimate();
} }
void LayerTreeView::SetHaveScrollEventHandlers(bool has_handlers) {
layer_tree_host_->SetHaveScrollEventHandlers(has_handlers);
}
bool LayerTreeView::HaveScrollEventHandlers() const {
return layer_tree_host_->have_scroll_event_handlers();
}
void LayerTreeView::SetLayerTreeFrameSink( void LayerTreeView::SetLayerTreeFrameSink(
std::unique_ptr<cc::LayerTreeFrameSink> layer_tree_frame_sink) { std::unique_ptr<cc::LayerTreeFrameSink> layer_tree_frame_sink) {
if (!layer_tree_frame_sink) { if (!layer_tree_frame_sink) {
......
...@@ -127,8 +127,6 @@ class CONTENT_EXPORT LayerTreeView ...@@ -127,8 +127,6 @@ class CONTENT_EXPORT LayerTreeView
// blink::WebLayerTreeView implementation. // blink::WebLayerTreeView implementation.
viz::FrameSinkId GetFrameSinkId() override; viz::FrameSinkId GetFrameSinkId() override;
void SetNonBlinkManagedRootLayer(scoped_refptr<cc::Layer> layer); void SetNonBlinkManagedRootLayer(scoped_refptr<cc::Layer> layer);
void SetHaveScrollEventHandlers(bool) override;
bool HaveScrollEventHandlers() const override;
int LayerTreeId() const override; int LayerTreeId() const override;
void UpdateBrowserControlsState(cc::BrowserControlsState constraints, void UpdateBrowserControlsState(cc::BrowserControlsState constraints,
......
...@@ -3303,6 +3303,11 @@ void RenderWidget::SetHasTouchEventHandlers(bool has_handlers) { ...@@ -3303,6 +3303,11 @@ void RenderWidget::SetHasTouchEventHandlers(bool has_handlers) {
Send(new WidgetHostMsg_HasTouchEventHandlers(routing_id_, has_handlers)); Send(new WidgetHostMsg_HasTouchEventHandlers(routing_id_, has_handlers));
} }
void RenderWidget::SetHaveScrollEventHandlers(bool have_handlers) {
layer_tree_view_->layer_tree_host()->SetHaveScrollEventHandlers(
have_handlers);
}
void RenderWidget::SetNeedsLowLatencyInput(bool needs_low_latency) { void RenderWidget::SetNeedsLowLatencyInput(bool needs_low_latency) {
if (input_event_queue_) if (input_event_queue_)
input_event_queue_->SetNeedsLowLatency(needs_low_latency); input_event_queue_->SetNeedsLowLatency(needs_low_latency);
......
...@@ -432,6 +432,7 @@ class CONTENT_EXPORT RenderWidget ...@@ -432,6 +432,7 @@ class CONTENT_EXPORT RenderWidget
void RequestUnbufferedInputEvents() override; void RequestUnbufferedInputEvents() override;
void SetHasPointerRawUpdateEventHandlers(bool has_handlers) override; void SetHasPointerRawUpdateEventHandlers(bool has_handlers) override;
void SetHasTouchEventHandlers(bool has_handlers) override; void SetHasTouchEventHandlers(bool has_handlers) override;
void SetHaveScrollEventHandlers(bool have_handlers) override;
void SetNeedsLowLatencyInput(bool) override; void SetNeedsLowLatencyInput(bool) override;
void SetNeedsUnbufferedInputForDebugger(bool) override; void SetNeedsUnbufferedInputForDebugger(bool) override;
void AnimateDoubleTapZoomInMainFrame(const blink::WebPoint& point, void AnimateDoubleTapZoomInMainFrame(const blink::WebPoint& point,
......
...@@ -68,15 +68,12 @@ class WebLayerTreeView { ...@@ -68,15 +68,12 @@ class WebLayerTreeView {
bool shrink_viewport) {} bool shrink_viewport) {}
// Input properties --------------------------------------------------- // Input properties ---------------------------------------------------
virtual void SetHaveScrollEventHandlers(bool) {}
// Returns the FrameSinkId of the widget associated with this layer tree view. // Returns the FrameSinkId of the widget associated with this layer tree view.
virtual viz::FrameSinkId GetFrameSinkId() { return viz::FrameSinkId(); } virtual viz::FrameSinkId GetFrameSinkId() { return viz::FrameSinkId(); }
// Debugging / dangerous --------------------------------------------- // Debugging / dangerous ---------------------------------------------
virtual bool HaveScrollEventHandlers() const { return false; }
virtual int LayerTreeId() const { return 0; } virtual int LayerTreeId() const { return 0; }
virtual void RequestBeginMainFrameNotExpected(bool new_state) {} virtual void RequestBeginMainFrameNotExpected(bool new_state) {}
......
...@@ -193,6 +193,9 @@ class WebWidgetClient { ...@@ -193,6 +193,9 @@ class WebWidgetClient {
// Called to update if touch events should be sent. // Called to update if touch events should be sent.
virtual void SetHasTouchEventHandlers(bool) {} virtual void SetHasTouchEventHandlers(bool) {}
// Called to update if scroll events should be sent.
virtual void SetHaveScrollEventHandlers(bool) {}
// Called to update whether low latency input mode is enabled or not. // Called to update whether low latency input mode is enabled or not.
virtual void SetNeedsLowLatencyInput(bool) {} virtual void SetNeedsLowLatencyInput(bool) {}
......
...@@ -175,9 +175,8 @@ class PagePopupChromeClient final : public EmptyChromeClient { ...@@ -175,9 +175,8 @@ class PagePopupChromeClient final : public EmptyChromeClient {
void SetHasScrollEventHandlers(LocalFrame* frame, void SetHasScrollEventHandlers(LocalFrame* frame,
bool has_event_handlers) override { bool has_event_handlers) override {
DCHECK(frame->IsMainFrame()); // WebPagePopup's compositor does not handle compositor thread input (set up
if (popup_->layer_tree_view_) // in RenderWidget) so there is no need to signal this.
popup_->layer_tree_view_->SetHaveScrollEventHandlers(has_event_handlers);
} }
void SetTouchAction(LocalFrame* frame, TouchAction touch_action) override { void SetTouchAction(LocalFrame* frame, TouchAction touch_action) override {
......
...@@ -672,6 +672,10 @@ void TestWebWidgetClient::InjectGestureScrollEvent( ...@@ -672,6 +672,10 @@ void TestWebWidgetClient::InjectGestureScrollEvent(
injected_scroll_gesture_data_.push_back(data); injected_scroll_gesture_data_.push_back(data);
} }
void TestWebWidgetClient::SetHaveScrollEventHandlers(bool have_handlers) {
have_scroll_event_handlers_ = have_handlers;
}
void TestWebWidgetClient::SetEventListenerProperties( void TestWebWidgetClient::SetEventListenerProperties(
cc::EventListenerClass event_class, cc::EventListenerClass event_class,
cc::EventListenerProperties properties) { cc::EventListenerProperties properties) {
......
...@@ -210,7 +210,7 @@ class TestWebWidgetClient : public WebWidgetClient { ...@@ -210,7 +210,7 @@ class TestWebWidgetClient : public WebWidgetClient {
explicit TestWebWidgetClient(content::LayerTreeViewDelegate* = nullptr); explicit TestWebWidgetClient(content::LayerTreeViewDelegate* = nullptr);
~TestWebWidgetClient() override = default; ~TestWebWidgetClient() override = default;
// WebWidgetClient: // WebWidgetClient implementation.
void ScheduleAnimation() override { animation_scheduled_ = true; } void ScheduleAnimation() override { animation_scheduled_ = true; }
void SetRootLayer(scoped_refptr<cc::Layer> layer) override; void SetRootLayer(scoped_refptr<cc::Layer> layer) override;
void RegisterViewportLayers(const cc::ViewportLayers& layOAers) override; void RegisterViewportLayers(const cc::ViewportLayers& layOAers) override;
...@@ -226,6 +226,7 @@ class TestWebWidgetClient : public WebWidgetClient { ...@@ -226,6 +226,7 @@ class TestWebWidgetClient : public WebWidgetClient {
ScrollGranularity granularity, ScrollGranularity granularity,
cc::ElementId scrollable_area_element_id, cc::ElementId scrollable_area_element_id,
WebInputEvent::Type injected_type) override; WebInputEvent::Type injected_type) override;
void SetHaveScrollEventHandlers(bool) override;
void SetEventListenerProperties( void SetEventListenerProperties(
cc::EventListenerClass event_class, cc::EventListenerClass event_class,
cc::EventListenerProperties properties) override; cc::EventListenerProperties properties) override;
...@@ -235,6 +236,7 @@ class TestWebWidgetClient : public WebWidgetClient { ...@@ -235,6 +236,7 @@ class TestWebWidgetClient : public WebWidgetClient {
override; override;
void StartDeferringCommits(base::TimeDelta timeout) override; void StartDeferringCommits(base::TimeDelta timeout) override;
void StopDeferringCommits(cc::PaintHoldingCommitTrigger) override; void StopDeferringCommits(cc::PaintHoldingCommitTrigger) override;
void DidMeaningfulLayout(WebMeaningfulLayout) override;
content::LayerTreeView* layer_tree_view() { return layer_tree_view_; } content::LayerTreeView* layer_tree_view() { return layer_tree_view_; }
cc::LayerTreeHost* layer_tree_host() { cc::LayerTreeHost* layer_tree_host() {
...@@ -248,7 +250,8 @@ class TestWebWidgetClient : public WebWidgetClient { ...@@ -248,7 +250,8 @@ class TestWebWidgetClient : public WebWidgetClient {
bool AnimationScheduled() { return animation_scheduled_; } bool AnimationScheduled() { return animation_scheduled_; }
void ClearAnimationScheduled() { animation_scheduled_ = false; } void ClearAnimationScheduled() { animation_scheduled_ = false; }
void DidMeaningfulLayout(WebMeaningfulLayout) override; // Returns the last value given to SetHaveScrollEventHandlers().
bool HaveScrollEventHandlers() const { return have_scroll_event_handlers_; }
int VisuallyNonEmptyLayoutCount() const { int VisuallyNonEmptyLayoutCount() const {
return visually_non_empty_layout_count_; return visually_non_empty_layout_count_;
...@@ -270,6 +273,7 @@ class TestWebWidgetClient : public WebWidgetClient { ...@@ -270,6 +273,7 @@ class TestWebWidgetClient : public WebWidgetClient {
LayerTreeViewFactory layer_tree_view_factory_; LayerTreeViewFactory layer_tree_view_factory_;
Vector<InjectedScrollGestureData> injected_scroll_gesture_data_; Vector<InjectedScrollGestureData> injected_scroll_gesture_data_;
bool animation_scheduled_ = false; bool animation_scheduled_ = false;
bool have_scroll_event_handlers_ = false;
int visually_non_empty_layout_count_ = 0; int visually_non_empty_layout_count_ = 0;
int finished_parsing_layout_count_ = 0; int finished_parsing_layout_count_ = 0;
int finished_loading_layout_count_ = 0; int finished_loading_layout_count_ = 0;
...@@ -365,6 +369,9 @@ class WebViewHelper { ...@@ -365,6 +369,9 @@ class WebViewHelper {
content::LayerTreeView* GetLayerTreeView() const { content::LayerTreeView* GetLayerTreeView() const {
return test_web_widget_client_->layer_tree_view(); return test_web_widget_client_->layer_tree_view();
} }
TestWebWidgetClient* GetWebWidgetClient() const {
return test_web_widget_client_;
}
WebLocalFrameImpl* LocalMainFrame() const; WebLocalFrameImpl* LocalMainFrame() const;
WebRemoteFrameImpl* RemoteMainFrame() const; WebRemoteFrameImpl* RemoteMainFrame() const;
......
...@@ -1059,17 +1059,16 @@ void ChromeClientImpl::StopDeferringCommits( ...@@ -1059,17 +1059,16 @@ void ChromeClientImpl::StopDeferringCommits(
void ChromeClientImpl::SetHasScrollEventHandlers(LocalFrame* frame, void ChromeClientImpl::SetHasScrollEventHandlers(LocalFrame* frame,
bool has_event_handlers) { bool has_event_handlers) {
// |frame| might be null if called via TreeScopeAdopter:: // |frame| might be null if called via
// moveNodeToNewDocument() and the new document has no frame attached. // TreeScopeAdopter::MoveNodeToNewDocument() and the new document has no frame
// Since a document without a frame cannot attach one later, it is safe to // attached. Since a document without a frame cannot attach one later, it is
// exit early. // safe to exit early.
if (!frame) if (!frame)
return; return;
WebFrameWidgetBase* widget = WebWidgetClient* client =
WebLocalFrameImpl::FromFrame(frame)->LocalRootFrameWidget(); WebLocalFrameImpl::FromFrame(frame)->LocalRootFrameWidget()->Client();
if (widget && widget->GetLayerTreeView()) client->SetHaveScrollEventHandlers(has_event_handlers);
widget->GetLayerTreeView()->SetHaveScrollEventHandlers(has_event_handlers);
} }
void ChromeClientImpl::SetNeedsLowLatencyInput(LocalFrame* frame, void ChromeClientImpl::SetNeedsLowLatencyInput(LocalFrame* frame,
......
...@@ -127,13 +127,8 @@ class ScrollingCoordinatorTest : public testing::Test, ...@@ -127,13 +127,8 @@ class ScrollingCoordinatorTest : public testing::Test,
WebViewImpl* GetWebView() const { return helper_.GetWebView(); } WebViewImpl* GetWebView() const { return helper_.GetWebView(); }
LocalFrame* GetFrame() const { return helper_.LocalMainFrame()->GetFrame(); } LocalFrame* GetFrame() const { return helper_.LocalMainFrame()->GetFrame(); }
frame_test_helpers::TestWebWidgetClient* GetWidgetClient() const {
WebLayerTreeView* GetWebLayerTreeView() const { return helper_.GetWebWidgetClient();
return GetWebView()->LayerTreeView();
}
WebWidgetClient* GetWidgetClient() const {
return GetWebView()->WidgetClient();
} }
void LoadAhem() { helper_.LoadAhem(); } void LoadAhem() { helper_.LoadAhem(); }
...@@ -572,7 +567,7 @@ TEST_P(ScrollingCoordinatorTest, scrollEventHandler) { ...@@ -572,7 +567,7 @@ TEST_P(ScrollingCoordinatorTest, scrollEventHandler) {
NavigateTo(base_url_ + "scroll-event-handler.html"); NavigateTo(base_url_ + "scroll-event-handler.html");
ForceFullCompositingUpdate(); ForceFullCompositingUpdate();
ASSERT_TRUE(GetWebLayerTreeView()->HaveScrollEventHandlers()); ASSERT_TRUE(GetWidgetClient()->HaveScrollEventHandlers());
} }
TEST_P(ScrollingCoordinatorTest, updateEventHandlersDuringTeardown) { TEST_P(ScrollingCoordinatorTest, updateEventHandlersDuringTeardown) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment