| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <stdint.h> | 5 #include <stdint.h> |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 mus::mojom::WindowTreePtr tree, | 125 mus::mojom::WindowTreePtr tree, |
| 126 Id focused_window_id, | 126 Id focused_window_id, |
| 127 uint32_t access_policy) override { | 127 uint32_t access_policy) override { |
| 128 // TODO(sky): add test coverage of |focused_window_id|. | 128 // TODO(sky): add test coverage of |focused_window_id|. |
| 129 tracker_.OnEmbed(connection_id, std::move(root)); | 129 tracker_.OnEmbed(connection_id, std::move(root)); |
| 130 } | 130 } |
| 131 void OnEmbeddedAppDisconnected(uint32_t window) override { | 131 void OnEmbeddedAppDisconnected(uint32_t window) override { |
| 132 tracker_.OnEmbeddedAppDisconnected(window); | 132 tracker_.OnEmbeddedAppDisconnected(window); |
| 133 } | 133 } |
| 134 void OnUnembed(Id window_id) override { tracker_.OnUnembed(window_id); } | 134 void OnUnembed(Id window_id) override { tracker_.OnUnembed(window_id); } |
| 135 void OnLostCapture(Id window_id) override {} |
| 135 void OnTopLevelCreated(uint32_t change_id, | 136 void OnTopLevelCreated(uint32_t change_id, |
| 136 mojom::WindowDataPtr data) override { | 137 mojom::WindowDataPtr data) override { |
| 137 tracker_.OnTopLevelCreated(change_id, std::move(data)); | 138 tracker_.OnTopLevelCreated(change_id, std::move(data)); |
| 138 } | 139 } |
| 139 void OnWindowBoundsChanged(uint32_t window, | 140 void OnWindowBoundsChanged(uint32_t window, |
| 140 mojo::RectPtr old_bounds, | 141 mojo::RectPtr old_bounds, |
| 141 mojo::RectPtr new_bounds) override { | 142 mojo::RectPtr new_bounds) override { |
| 142 tracker_.OnWindowBoundsChanged(window, std::move(old_bounds), | 143 tracker_.OnWindowBoundsChanged(window, std::move(old_bounds), |
| 143 std::move(new_bounds)); | 144 std::move(new_bounds)); |
| 144 } | 145 } |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 315 // root-window is created). | 316 // root-window is created). |
| 316 mojom::ViewportMetrics metrics; | 317 mojom::ViewportMetrics metrics; |
| 317 metrics.size_in_pixels = mojo::Size::From(gfx::Size(400, 300)); | 318 metrics.size_in_pixels = mojo::Size::From(gfx::Size(400, 300)); |
| 318 metrics.device_pixel_ratio = 1.f; | 319 metrics.device_pixel_ratio = 1.f; |
| 319 delegate->OnViewportMetricsChanged(mojom::ViewportMetrics(), metrics); | 320 delegate->OnViewportMetricsChanged(mojom::ViewportMetrics(), metrics); |
| 320 } | 321 } |
| 321 void SchedulePaint(const ServerWindow* window, | 322 void SchedulePaint(const ServerWindow* window, |
| 322 const gfx::Rect& bounds) override {} | 323 const gfx::Rect& bounds) override {} |
| 323 void SetViewportSize(const gfx::Size& size) override {} | 324 void SetViewportSize(const gfx::Size& size) override {} |
| 324 void SetTitle(const base::string16& title) override {} | 325 void SetTitle(const base::string16& title) override {} |
| 326 void SetCapture() override {} |
| 327 void ReleaseCapture() override {} |
| 325 void SetCursorById(int32_t cursor) override { *cursor_id_storage_ = cursor; } | 328 void SetCursorById(int32_t cursor) override { *cursor_id_storage_ = cursor; } |
| 326 mojom::Rotation GetRotation() override { return mojom::Rotation::VALUE_0; } | 329 mojom::Rotation GetRotation() override { return mojom::Rotation::VALUE_0; } |
| 327 const mojom::ViewportMetrics& GetViewportMetrics() override { | 330 const mojom::ViewportMetrics& GetViewportMetrics() override { |
| 328 return display_metrices_; | 331 return display_metrices_; |
| 329 } | 332 } |
| 330 void UpdateTextInputState(const ui::TextInputState& state) override {} | 333 void UpdateTextInputState(const ui::TextInputState& state) override {} |
| 331 void SetImeVisibility(bool visible) override {} | 334 void SetImeVisibility(bool visible) override {} |
| 332 bool IsFramePending() const override { return false; } | 335 bool IsFramePending() const override { return false; } |
| 333 | 336 |
| 334 private: | 337 private: |
| (...skipping 554 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 889 WindowIdFromTransportId(embed_window_id2_in_child.id)) + | 892 WindowIdFromTransportId(embed_window_id2_in_child.id)) + |
| 890 " visible=true", | 893 " visible=true", |
| 891 SingleChangeToDescription(*embed_connection->tracker()->changes())); | 894 SingleChangeToDescription(*embed_connection->tracker()->changes())); |
| 892 | 895 |
| 893 // Set the visibility from the child using the client assigned id. | 896 // Set the visibility from the child using the client assigned id. |
| 894 ASSERT_TRUE(window_tree_connection->SetWindowVisibility( | 897 ASSERT_TRUE(window_tree_connection->SetWindowVisibility( |
| 895 embed_window_id2_in_child, false)); | 898 embed_window_id2_in_child, false)); |
| 896 EXPECT_FALSE(embed_window->visible()); | 899 EXPECT_FALSE(embed_window->visible()); |
| 897 } | 900 } |
| 898 | 901 |
| 902 // Tests that setting capture only works while an input event is being |
| 903 // processed, and the only the capture window can release capture. |
| 904 TEST_F(WindowTreeTest, ExplicitSetCapture) { |
| 905 TestWindowTreeClient* embed_connection = nullptr; |
| 906 WindowTreeImpl* window_tree_connection = nullptr; |
| 907 ServerWindow* window = nullptr; |
| 908 EXPECT_NO_FATAL_FAILURE( |
| 909 SetupEventTargeting(&embed_connection, &window_tree_connection, &window)); |
| 910 const ServerWindow* root_window = *window_tree_connection->roots().begin(); |
| 911 window_tree_connection->AddWindow( |
| 912 FirstRootId(window_tree_connection), |
| 913 ClientWindowIdForWindow(window_tree_connection, window)); |
| 914 window->SetBounds(gfx::Rect(0, 0, 100, 100)); |
| 915 ASSERT_TRUE(window_tree_connection->GetHost(window)); |
| 916 |
| 917 // Setting capture should fail when there are no active events |
| 918 mojom::WindowTree* mojom_window_tree = |
| 919 static_cast<mojom::WindowTree*>(window_tree_connection); |
| 920 uint32_t change_id = 42; |
| 921 mojom_window_tree->SetCapture(change_id, WindowIdToTransportId(window->id())); |
| 922 WindowTreeHostImpl* host = window_tree_connection->GetHost(window); |
| 923 EXPECT_NE(window, host->GetCaptureWindow()); |
| 924 |
| 925 // Setting capture after the event is acknowledged should fail |
| 926 DispatchEventAndAckImmediately(CreatePointerDownEvent(10, 10)); |
| 927 mojom_window_tree->SetCapture(++change_id, |
| 928 WindowIdToTransportId(window->id())); |
| 929 EXPECT_NE(window, host->GetCaptureWindow()); |
| 930 |
| 931 // Settings while the event is being process should pass |
| 932 DispatchEventWithoutAck(CreatePointerDownEvent(10, 10)); |
| 933 mojom_window_tree->SetCapture(++change_id, |
| 934 WindowIdToTransportId(window->id())); |
| 935 EXPECT_EQ(window, host->GetCaptureWindow()); |
| 936 AckPreviousEvent(); |
| 937 |
| 938 // Only the capture window should be able to release capture |
| 939 mojom_window_tree->ReleaseCapture(++change_id, |
| 940 WindowIdToTransportId(root_window->id())); |
| 941 EXPECT_EQ(window, host->GetCaptureWindow()); |
| 942 mojom_window_tree->ReleaseCapture(++change_id, |
| 943 WindowIdToTransportId(window->id())); |
| 944 EXPECT_EQ(nullptr, host->GetCaptureWindow()); |
| 945 } |
| 946 |
| 899 } // namespace ws | 947 } // namespace ws |
| 900 } // namespace mus | 948 } // namespace mus |
| OLD | NEW |