| Index: components/mus/public/cpp/tests/window_tree_client_impl_unittest.cc
|
| diff --git a/components/mus/public/cpp/tests/window_tree_client_impl_unittest.cc b/components/mus/public/cpp/tests/window_tree_client_impl_unittest.cc
|
| index e46f2cdfbc8130ddf2a341f443941d5870037533..51c88c925cc7ba3ded9defcb2dafe786b907215c 100644
|
| --- a/components/mus/public/cpp/tests/window_tree_client_impl_unittest.cc
|
| +++ b/components/mus/public/cpp/tests/window_tree_client_impl_unittest.cc
|
| @@ -18,6 +18,7 @@
|
| #include "components/mus/public/cpp/window_observer.h"
|
| #include "components/mus/public/cpp/window_property.h"
|
| #include "components/mus/public/cpp/window_tree_delegate.h"
|
| +#include "mojo/common/common_type_converters.h"
|
| #include "mojo/converters/geometry/geometry_type_converters.h"
|
| #include "mojo/converters/input_events/input_events_type_converters.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| @@ -508,7 +509,11 @@ TEST_F(WindowTreeClientImplTest, NewTopLevelWindow) {
|
| uint32_t change_id;
|
| ASSERT_TRUE(setup.window_tree()->GetAndClearChangeId(&change_id));
|
| EXPECT_EQ(setup.window_tree()->window_id(), root2->id());
|
| - setup.window_tree_client()->OnChangeCompleted(change_id, true);
|
| +
|
| + mojom::WindowDataPtr data = mojom::WindowData::New();
|
| + data->window_id = root2->id();
|
| + data->viewport_metrics = mojom::ViewportMetrics::New();
|
| + setup.window_tree_client()->OnTopLevelCreated(change_id, std::move(data));
|
|
|
| // Should not be able to add a top level as a child of another window.
|
| root1->AddChild(root2);
|
| @@ -521,4 +526,123 @@ TEST_F(WindowTreeClientImplTest, NewTopLevelWindow) {
|
| EXPECT_TRUE(setup.window_tree_connection()->GetRoots().count(root2) > 0u);
|
| }
|
|
|
| +TEST_F(WindowTreeClientImplTest, NewTopLevelWindowGetsPropertiesFromData) {
|
| + WindowTreeSetup setup;
|
| + Window* root1 = setup.GetFirstRoot();
|
| + ASSERT_TRUE(root1);
|
| + Window* root2 = setup.window_tree_connection()->NewTopLevelWindow(nullptr);
|
| + ASSERT_TRUE(root2);
|
| +
|
| + EXPECT_FALSE(root2->IsDrawn());
|
| + EXPECT_FALSE(root2->visible());
|
| +
|
| + // Ack the request to the windowtree to create the new window.
|
| + uint32_t change_id;
|
| + ASSERT_TRUE(setup.window_tree()->GetAndClearChangeId(&change_id));
|
| + EXPECT_EQ(setup.window_tree()->window_id(), root2->id());
|
| +
|
| + mojom::WindowDataPtr data = mojom::WindowData::New();
|
| + data->window_id = root2->id();
|
| + data->viewport_metrics = mojom::ViewportMetrics::New();
|
| + data->viewport_metrics->size_in_pixels = mojo::Size::From(gfx::Size(1, 2));
|
| + data->bounds = mojo::Rect::From(gfx::Rect(1, 2, 3, 4));
|
| + data->visible = true;
|
| + data->drawn = true;
|
| + setup.window_tree_client()->OnTopLevelCreated(change_id, std::move(data));
|
| +
|
| + // Make sure all the properties took.
|
| + EXPECT_TRUE(root2->IsDrawn());
|
| + EXPECT_TRUE(root2->visible());
|
| + EXPECT_EQ(gfx::Size(1, 2),
|
| + root2->viewport_metrics().size_in_pixels.To<gfx::Size>());
|
| + EXPECT_EQ(gfx::Rect(1, 2, 3, 4), root2->bounds());
|
| +}
|
| +
|
| +TEST_F(WindowTreeClientImplTest, NewTopLevelWindowGetsAllChangesInFlight) {
|
| + WindowTreeSetup setup;
|
| + Window* root1 = setup.GetFirstRoot();
|
| + ASSERT_TRUE(root1);
|
| + Window* root2 = setup.window_tree_connection()->NewTopLevelWindow(nullptr);
|
| + ASSERT_TRUE(root2);
|
| +
|
| + EXPECT_FALSE(root2->IsDrawn());
|
| + EXPECT_FALSE(root2->visible());
|
| +
|
| + // Get the id of the in flight change for creating the new window.
|
| + uint32_t new_window_in_flight_change_id;
|
| + ASSERT_TRUE(setup.window_tree()->GetAndClearChangeId(
|
| + &new_window_in_flight_change_id));
|
| + EXPECT_EQ(setup.window_tree()->window_id(), root2->id());
|
| +
|
| + // Make visibility go from false->true->false. Don't ack immediately.
|
| + root2->SetVisible(true);
|
| + uint32_t vis_in_flight_change_id1;
|
| + ASSERT_TRUE(
|
| + setup.window_tree()->GetAndClearChangeId(&vis_in_flight_change_id1));
|
| + EXPECT_NE(new_window_in_flight_change_id, vis_in_flight_change_id1);
|
| + root2->SetVisible(false);
|
| + uint32_t vis_in_flight_change_id2;
|
| + ASSERT_TRUE(
|
| + setup.window_tree()->GetAndClearChangeId(&vis_in_flight_change_id2));
|
| + EXPECT_NE(vis_in_flight_change_id1, vis_in_flight_change_id2);
|
| +
|
| + // Change bounds to 5, 6, 7, 8.
|
| + root2->SetBounds(gfx::Rect(5, 6, 7, 8));
|
| + uint32_t bounds_in_flight_change_id;
|
| + ASSERT_TRUE(
|
| + setup.window_tree()->GetAndClearChangeId(&bounds_in_flight_change_id));
|
| + EXPECT_NE(vis_in_flight_change_id2, bounds_in_flight_change_id);
|
| +
|
| + root2->SetSharedProperty<std::string>("xx", "client_xx");
|
| + uint32_t property_in_flight_change_id;
|
| + ASSERT_TRUE(
|
| + setup.window_tree()->GetAndClearChangeId(&property_in_flight_change_id));
|
| + EXPECT_NE(bounds_in_flight_change_id, property_in_flight_change_id);
|
| +
|
| + // Ack the new window top level window. Vis and bounds shouldn't change.
|
| + mojom::WindowDataPtr data = mojom::WindowData::New();
|
| + data->window_id = root2->id();
|
| + data->viewport_metrics = mojom::ViewportMetrics::New();
|
| + data->viewport_metrics->size_in_pixels = mojo::Size::From(gfx::Size(1, 2));
|
| + data->bounds = mojo::Rect::From(gfx::Rect(1, 2, 3, 4));
|
| + data->visible = true;
|
| + data->drawn = true;
|
| + data->properties["xx"] = mojo::Array<uint8_t>::From(std::string("server_xx"));
|
| + data->properties["yy"] = mojo::Array<uint8_t>::From(std::string("server_yy"));
|
| + setup.window_tree_client()->OnTopLevelCreated(new_window_in_flight_change_id,
|
| + std::move(data));
|
| +
|
| + // The only value that should take effect is the property for 'yy' as it was
|
| + // not in flight.
|
| + EXPECT_TRUE(WindowPrivate(root2).drawn());
|
| + EXPECT_FALSE(root2->visible());
|
| + EXPECT_EQ(gfx::Size(1, 2),
|
| + root2->viewport_metrics().size_in_pixels.To<gfx::Size>());
|
| + EXPECT_EQ(gfx::Rect(5, 6, 7, 8), root2->bounds());
|
| + EXPECT_EQ(2u, root2->shared_properties().size());
|
| + ASSERT_TRUE(root2->HasSharedProperty("yy"));
|
| + EXPECT_EQ("server_yy", root2->GetSharedProperty<std::string>("yy"));
|
| + ASSERT_TRUE(root2->HasSharedProperty("xx"));
|
| + EXPECT_EQ("client_xx", root2->GetSharedProperty<std::string>("xx"));
|
| +
|
| + // Tell the client the changes failed. This should cause the values to change
|
| + // to that of the server.
|
| + setup.window_tree_client()->OnChangeCompleted(vis_in_flight_change_id1,
|
| + false);
|
| + EXPECT_FALSE(root2->visible());
|
| + setup.window_tree_client()->OnChangeCompleted(vis_in_flight_change_id2,
|
| + false);
|
| + EXPECT_TRUE(root2->visible());
|
| + setup.window_tree_client()->OnChangeCompleted(bounds_in_flight_change_id,
|
| + false);
|
| + EXPECT_EQ(gfx::Rect(1, 2, 3, 4), root2->bounds());
|
| + setup.window_tree_client()->OnChangeCompleted(property_in_flight_change_id,
|
| + false);
|
| + EXPECT_EQ(2u, root2->shared_properties().size());
|
| + ASSERT_TRUE(root2->HasSharedProperty("yy"));
|
| + EXPECT_EQ("server_yy", root2->GetSharedProperty<std::string>("yy"));
|
| + ASSERT_TRUE(root2->HasSharedProperty("xx"));
|
| + EXPECT_EQ("server_xx", root2->GetSharedProperty<std::string>("xx"));
|
| +}
|
| +
|
| } // namespace mus
|
|
|