Index: content/renderer/mus/compositor_mus_connection.cc |
diff --git a/content/renderer/mus/compositor_mus_connection.cc b/content/renderer/mus/compositor_mus_connection.cc |
deleted file mode 100644 |
index 20386e8ca61233c4f3c65eb487fca6b557beccb1..0000000000000000000000000000000000000000 |
--- a/content/renderer/mus/compositor_mus_connection.cc |
+++ /dev/null |
@@ -1,237 +0,0 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "content/renderer/mus/compositor_mus_connection.h" |
- |
-#include "base/memory/ptr_util.h" |
-#include "base/single_thread_task_runner.h" |
-#include "content/renderer/input/input_handler_manager.h" |
-#include "content/renderer/mus/render_widget_mus_connection.h" |
-#include "ui/events/blink/blink_event_util.h" |
-#include "ui/events/blink/web_input_event.h" |
-#include "ui/events/blink/web_input_event_traits.h" |
-#include "ui/events/latency_info.h" |
-#include "ui/events/mojo/event.mojom.h" |
- |
-using ui::mojom::EventResult; |
- |
-namespace { |
- |
-void DoNothingWithEventResult(EventResult result) {} |
- |
-gfx::Point GetScreenLocationFromEvent(const ui::LocatedEvent& event) { |
- return event.root_location(); |
-} |
- |
-} // namespace |
- |
-namespace content { |
- |
-CompositorMusConnection::CompositorMusConnection( |
- int routing_id, |
- const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, |
- const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner, |
- mojo::InterfaceRequest<ui::mojom::WindowTreeClient> request, |
- InputHandlerManager* input_handler_manager) |
- : routing_id_(routing_id), |
- root_(nullptr), |
- main_task_runner_(main_task_runner), |
- compositor_task_runner_(compositor_task_runner), |
- input_handler_manager_(input_handler_manager) { |
- DCHECK(main_task_runner_->BelongsToCurrentThread()); |
- compositor_task_runner_->PostTask( |
- FROM_HERE, base::Bind(&CompositorMusConnection:: |
- CreateWindowTreeClientOnCompositorThread, |
- this, base::Passed(std::move(request)))); |
-} |
- |
-void CompositorMusConnection::AttachCompositorFrameSinkOnMainThread( |
- std::unique_ptr<ui::WindowCompositorFrameSinkBinding> |
- compositor_frame_sink_binding) { |
- DCHECK(main_task_runner_->BelongsToCurrentThread()); |
- compositor_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind( |
- &CompositorMusConnection::AttachCompositorFrameSinkOnCompositorThread, |
- this, base::Passed(std::move(compositor_frame_sink_binding)))); |
-} |
- |
-CompositorMusConnection::~CompositorMusConnection() { |
- base::AutoLock auto_lock(window_tree_client_lock_); |
- // Destruction must happen on the compositor task runner. |
- DCHECK(!window_tree_client_); |
-} |
- |
-void CompositorMusConnection::AttachCompositorFrameSinkOnCompositorThread( |
- std::unique_ptr<ui::WindowCompositorFrameSinkBinding> |
- compositor_frame_sink_binding) { |
- DCHECK(compositor_task_runner_->BelongsToCurrentThread()); |
- window_compositor_frame_sink_binding_ = |
- std::move(compositor_frame_sink_binding); |
- if (root_) { |
- root_->AttachCompositorFrameSink( |
- std::move(window_compositor_frame_sink_binding_)); |
- } |
-} |
- |
-void CompositorMusConnection::CreateWindowTreeClientOnCompositorThread( |
- mojo::InterfaceRequest<ui::mojom::WindowTreeClient> request) { |
- DCHECK(compositor_task_runner_->BelongsToCurrentThread()); |
- DCHECK(!window_tree_client_); |
- std::unique_ptr<ui::WindowTreeClient> window_tree_client = |
- base::MakeUnique<ui::WindowTreeClient>(this, nullptr, std::move(request)); |
- base::AutoLock auto_lock(window_tree_client_lock_); |
- window_tree_client_ = std::move(window_tree_client); |
-} |
- |
-void CompositorMusConnection::OnConnectionLostOnMainThread() { |
- DCHECK(main_task_runner_->BelongsToCurrentThread()); |
- RenderWidgetMusConnection* connection = |
- RenderWidgetMusConnection::Get(routing_id_); |
- if (!connection) |
- return; |
- connection->OnConnectionLost(); |
-} |
- |
-void CompositorMusConnection::OnWindowInputEventOnMainThread( |
- blink::WebScopedInputEvent web_event, |
- const base::Callback<void(EventResult)>& ack) { |
- DCHECK(main_task_runner_->BelongsToCurrentThread()); |
- RenderWidgetMusConnection* connection = |
- RenderWidgetMusConnection::Get(routing_id_); |
- if (!connection) { |
- ack.Run(EventResult::UNHANDLED); |
- return; |
- } |
- connection->OnWindowInputEvent(std::move(web_event), ack); |
-} |
- |
-void CompositorMusConnection::OnWindowInputEventAckOnMainThread( |
- const base::Callback<void(EventResult)>& ack, |
- EventResult result) { |
- DCHECK(main_task_runner_->BelongsToCurrentThread()); |
- compositor_task_runner_->PostTask(FROM_HERE, base::Bind(ack, result)); |
-} |
- |
-std::unique_ptr<blink::WebInputEvent> CompositorMusConnection::Convert( |
- const ui::Event& event) { |
- if (event.IsMousePointerEvent()) { |
- const ui::MouseEvent mouse_event(*event.AsPointerEvent()); |
- blink::WebMouseEvent blink_event = ui::MakeWebMouseEvent( |
- mouse_event, base::Bind(&GetScreenLocationFromEvent)); |
- return base::MakeUnique<blink::WebMouseEvent>(blink_event); |
- } else if (event.IsTouchPointerEvent()) { |
- ui::TouchEvent touch_event(*event.AsPointerEvent()); |
- pointer_state_.OnTouch(touch_event); |
- blink::WebTouchEvent blink_event = ui::CreateWebTouchEventFromMotionEvent( |
- pointer_state_, touch_event.may_cause_scrolling()); |
- pointer_state_.CleanupRemovedTouchPoints(touch_event); |
- return base::MakeUnique<blink::WebTouchEvent>(blink_event); |
- } else if (event.IsMouseWheelEvent()) { |
- blink::WebMouseWheelEvent blink_event = ui::MakeWebMouseWheelEvent( |
- *event.AsMouseWheelEvent(), base::Bind(&GetScreenLocationFromEvent)); |
- return base::MakeUnique<blink::WebMouseWheelEvent>(blink_event); |
- } else if (event.IsKeyEvent()) { |
- blink::WebKeyboardEvent blink_event = |
- ui::MakeWebKeyboardEvent(*event.AsKeyEvent()); |
- return base::MakeUnique<blink::WebKeyboardEvent>(blink_event); |
- } |
- return nullptr; |
-} |
- |
-void CompositorMusConnection::DeleteWindowTreeClient() { |
- DCHECK(compositor_task_runner_->BelongsToCurrentThread()); |
- std::unique_ptr<ui::WindowTreeClient> window_tree_client; |
- { |
- base::AutoLock auto_lock(window_tree_client_lock_); |
- window_tree_client = std::move(window_tree_client_); |
- } |
- main_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&CompositorMusConnection::OnConnectionLostOnMainThread, this)); |
-} |
- |
-void CompositorMusConnection::OnEmbed(ui::Window* root) { |
- DCHECK(compositor_task_runner_->BelongsToCurrentThread()); |
- root_ = root; |
- root_->set_input_event_handler(this); |
- if (window_compositor_frame_sink_binding_) { |
- root->AttachCompositorFrameSink( |
- std::move(window_compositor_frame_sink_binding_)); |
- } |
-} |
- |
-void CompositorMusConnection::OnEmbedRootDestroyed(ui::Window* window) { |
- DeleteWindowTreeClient(); |
-} |
- |
-void CompositorMusConnection::OnLostConnection(ui::WindowTreeClient* client) { |
- DeleteWindowTreeClient(); |
-} |
- |
-void CompositorMusConnection::OnPointerEventObserved( |
- const ui::PointerEvent& event, |
- ui::Window* target) { |
- // Compositor does not use StartPointerWatcher(). |
-} |
- |
-void CompositorMusConnection::OnWindowInputEvent( |
- ui::Window* window, |
- const ui::Event& event, |
- std::unique_ptr<base::Callback<void(EventResult)>>* ack_callback) { |
- DCHECK(compositor_task_runner_->BelongsToCurrentThread()); |
- |
- // Take ownership of the callback, indicating that we will handle it. |
- std::unique_ptr<base::Callback<void(EventResult)>> callback = |
- std::move(*ack_callback); |
- blink::WebScopedInputEvent web_event(Convert(event).release()); |
- // TODO(sad): We probably need to plumb LatencyInfo through Mus. |
- ui::LatencyInfo info; |
- input_handler_manager_->HandleInputEvent( |
- routing_id_, std::move(web_event), info, |
- base::Bind( |
- &CompositorMusConnection::DidHandleWindowInputEventAndOverscroll, |
- this, base::Passed(std::move(callback)))); |
-} |
- |
-void CompositorMusConnection::DidHandleWindowInputEventAndOverscroll( |
- std::unique_ptr<base::Callback<void(EventResult)>> ack_callback, |
- InputEventAckState ack_state, |
- blink::WebScopedInputEvent web_event, |
- const ui::LatencyInfo& latency_info, |
- std::unique_ptr<ui::DidOverscrollParams> overscroll_params) { |
- // TODO(jonross): We probably need to ack the event based on the consumed |
- // state. |
- if (ack_state != INPUT_EVENT_ACK_STATE_NOT_CONSUMED) { |
- // We took the ownership of the callback, so we need to send the ack, and |
- // mark the event as not consumed to preserve existing behavior. |
- ack_callback->Run(EventResult::UNHANDLED); |
- return; |
- } |
- base::Callback<void(EventResult)> ack = |
- base::Bind(&::DoNothingWithEventResult); |
- const bool send_ack = |
- ui::WebInputEventTraits::ShouldBlockEventStream(*web_event); |
- if (send_ack) { |
- // Ultimately, this ACK needs to go back to the Mus client lib which is not |
- // thread-safe and lives on the compositor thread. For ACKs that are passed |
- // to the main thread we pass them back to the compositor thread via |
- // OnWindowInputEventAckOnMainThread. |
- ack = |
- base::Bind(&CompositorMusConnection::OnWindowInputEventAckOnMainThread, |
- this, *ack_callback); |
- } else { |
- // We took the ownership of the callback, so we need to send the ack, and |
- // mark the event as not consumed to preserve existing behavior. |
- ack_callback->Run(EventResult::UNHANDLED); |
- } |
- ack_callback.reset(); |
- |
- main_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&CompositorMusConnection::OnWindowInputEventOnMainThread, this, |
- base::Passed(std::move(web_event)), ack)); |
-} |
- |
-} // namespace content |