Commit 5040590a authored by Mitsuru Oshima's avatar Mitsuru Oshima Committed by Commit Bot

Don't allow TYPE_CONTROL winow in default container

* Don't use root window as transient parent in test.
* Don't create WindowState before adding to parent intest.
Instead set the window show type to specify the maximized state.

These are preparations to limit WindowState to specific containers.

Bug: 912191
Test: no functional change. all tests should pass.
Change-Id: Ic4587153395552eb140f06d440c5df7afb5b689a
Reviewed-on: https://chromium-review.googlesource.com/c/1387839
Commit-Queue: Mitsuru Oshima <oshima@chromium.org>
Reviewed-by: default avatarEvan Stade <estade@chromium.org>
Cr-Commit-Position: refs/heads/master@{#619701}
parent 2a6a8835
......@@ -110,10 +110,12 @@ TEST_F(ShelfWindowWatcherTest, OpenAndCloseMash) {
EXPECT_EQ(2, model_->item_count());
// Windows with type WINDOW_TYPE_NORMAL get shelf items, others do not.
// WINDOW_TYPE_CONTROL is not toplevel and should not be added to the
// container.
aura::client::WindowType no_item_types[] = {
aura::client::WINDOW_TYPE_UNKNOWN, aura::client::WINDOW_TYPE_NORMAL,
aura::client::WINDOW_TYPE_POPUP, aura::client::WINDOW_TYPE_CONTROL,
aura::client::WINDOW_TYPE_MENU, aura::client::WINDOW_TYPE_TOOLTIP};
aura::client::WINDOW_TYPE_POPUP, aura::client::WINDOW_TYPE_MENU,
aura::client::WINDOW_TYPE_TOOLTIP};
for (aura::client::WindowType type : no_item_types) {
std::unique_ptr<aura::Window> window =
window_factory::NewWindow(nullptr, type);
......
......@@ -217,10 +217,8 @@ TEST_F(TabletModeWindowManagerTest, PreCreateWindows) {
std::unique_ptr<aura::Window> w4(
CreateWindow(aura::client::WINDOW_TYPE_POPUP, rect));
std::unique_ptr<aura::Window> w5(
CreateWindow(aura::client::WINDOW_TYPE_CONTROL, rect));
std::unique_ptr<aura::Window> w6(
CreateWindow(aura::client::WINDOW_TYPE_MENU, rect));
std::unique_ptr<aura::Window> w7(
std::unique_ptr<aura::Window> w6(
CreateWindow(aura::client::WINDOW_TYPE_TOOLTIP, rect));
EXPECT_FALSE(wm::GetWindowState(w1.get())->IsMaximized());
EXPECT_FALSE(wm::GetWindowState(w2.get())->IsMaximized());
......@@ -244,11 +242,9 @@ TEST_F(TabletModeWindowManagerTest, PreCreateWindows) {
EXPECT_FALSE(wm::GetWindowState(w4.get())->IsMaximized());
EXPECT_FALSE(wm::GetWindowState(w5.get())->IsMaximized());
EXPECT_FALSE(wm::GetWindowState(w6.get())->IsMaximized());
EXPECT_FALSE(wm::GetWindowState(w7.get())->IsMaximized());
EXPECT_EQ(rect.ToString(), w4->bounds().ToString());
EXPECT_EQ(rect.ToString(), w5->bounds().ToString());
EXPECT_EQ(rect.ToString(), w6->bounds().ToString());
EXPECT_EQ(rect.ToString(), w7->bounds().ToString());
// Destroy the manager again and check that the windows return to their
// previous state.
......@@ -262,7 +258,6 @@ TEST_F(TabletModeWindowManagerTest, PreCreateWindows) {
EXPECT_EQ(rect.ToString(), w4->bounds().ToString());
EXPECT_EQ(rect.ToString(), w5->bounds().ToString());
EXPECT_EQ(rect.ToString(), w6->bounds().ToString());
EXPECT_EQ(rect.ToString(), w7->bounds().ToString());
}
// The same test as the above but while a system modal dialog is shown.
......@@ -282,10 +277,8 @@ TEST_F(TabletModeWindowManagerTest, GoingToMaximizedWithModalDialogPresent) {
std::unique_ptr<aura::Window> w4(
CreateWindow(aura::client::WINDOW_TYPE_POPUP, rect));
std::unique_ptr<aura::Window> w5(
CreateWindow(aura::client::WINDOW_TYPE_CONTROL, rect));
std::unique_ptr<aura::Window> w6(
CreateWindow(aura::client::WINDOW_TYPE_MENU, rect));
std::unique_ptr<aura::Window> w7(
std::unique_ptr<aura::Window> w6(
CreateWindow(aura::client::WINDOW_TYPE_TOOLTIP, rect));
EXPECT_FALSE(wm::GetWindowState(w1.get())->IsMaximized());
EXPECT_FALSE(wm::GetWindowState(w2.get())->IsMaximized());
......@@ -313,11 +306,9 @@ TEST_F(TabletModeWindowManagerTest, GoingToMaximizedWithModalDialogPresent) {
EXPECT_FALSE(wm::GetWindowState(w4.get())->IsMaximized());
EXPECT_FALSE(wm::GetWindowState(w5.get())->IsMaximized());
EXPECT_FALSE(wm::GetWindowState(w6.get())->IsMaximized());
EXPECT_FALSE(wm::GetWindowState(w7.get())->IsMaximized());
EXPECT_EQ(rect.ToString(), w4->bounds().ToString());
EXPECT_EQ(rect.ToString(), w5->bounds().ToString());
EXPECT_EQ(rect.ToString(), w6->bounds().ToString());
EXPECT_EQ(rect.ToString(), w7->bounds().ToString());
// Destroy the manager again and check that the windows return to their
// previous state.
......@@ -331,7 +322,6 @@ TEST_F(TabletModeWindowManagerTest, GoingToMaximizedWithModalDialogPresent) {
EXPECT_EQ(rect.ToString(), w4->bounds().ToString());
EXPECT_EQ(rect.ToString(), w5->bounds().ToString());
EXPECT_EQ(rect.ToString(), w6->bounds().ToString());
EXPECT_EQ(rect.ToString(), w7->bounds().ToString());
}
// Test that non-maximizable windows get properly handled when going into
......@@ -414,10 +404,8 @@ TEST_F(TabletModeWindowManagerTest, CreateWindows) {
std::unique_ptr<aura::Window> w4(
CreateWindow(aura::client::WINDOW_TYPE_POPUP, rect));
std::unique_ptr<aura::Window> w5(
CreateWindow(aura::client::WINDOW_TYPE_CONTROL, rect));
std::unique_ptr<aura::Window> w6(
CreateWindow(aura::client::WINDOW_TYPE_MENU, rect));
std::unique_ptr<aura::Window> w7(
std::unique_ptr<aura::Window> w6(
CreateWindow(aura::client::WINDOW_TYPE_TOOLTIP, rect));
EXPECT_TRUE(wm::GetWindowState(w1.get())->IsMaximized());
EXPECT_TRUE(wm::GetWindowState(w2.get())->IsMaximized());
......@@ -438,11 +426,9 @@ TEST_F(TabletModeWindowManagerTest, CreateWindows) {
EXPECT_FALSE(wm::GetWindowState(w4.get())->IsMaximized());
EXPECT_FALSE(wm::GetWindowState(w5.get())->IsMaximized());
EXPECT_FALSE(wm::GetWindowState(w6.get())->IsMaximized());
EXPECT_FALSE(wm::GetWindowState(w7.get())->IsMaximized());
EXPECT_EQ(rect.ToString(), w4->bounds().ToString());
EXPECT_EQ(rect.ToString(), w5->bounds().ToString());
EXPECT_EQ(rect.ToString(), w6->bounds().ToString());
EXPECT_EQ(rect.ToString(), w7->bounds().ToString());
// After the tablet mode was disabled all windows fall back into the mode
// they were created for.
......@@ -456,7 +442,6 @@ TEST_F(TabletModeWindowManagerTest, CreateWindows) {
EXPECT_EQ(rect.ToString(), w4->bounds().ToString());
EXPECT_EQ(rect.ToString(), w5->bounds().ToString());
EXPECT_EQ(rect.ToString(), w6->bounds().ToString());
EXPECT_EQ(rect.ToString(), w7->bounds().ToString());
}
// Test that a window which got created while the tablet mode window manager
......
......@@ -136,6 +136,7 @@ void WorkspaceLayoutManager::SetBackdropDelegate(
void WorkspaceLayoutManager::OnWindowResized() {}
void WorkspaceLayoutManager::OnWindowAddedToLayout(aura::Window* child) {
DCHECK_NE(aura::client::WINDOW_TYPE_CONTROL, child->type());
wm::WindowState* window_state = wm::GetWindowState(child);
wm::WMEvent event(wm::WM_EVENT_ADDED_TO_WORKSPACE);
window_state->OnWMEvent(&event);
......
......@@ -445,7 +445,7 @@ TEST_F(WorkspaceLayoutManagerTest, MaximizeWithEmptySize) {
std::unique_ptr<aura::Window> window =
window_factory::NewWindow(nullptr, aura::client::WINDOW_TYPE_NORMAL);
window->Init(ui::LAYER_TEXTURED);
wm::GetWindowState(window.get())->Maximize();
window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MAXIMIZED);
aura::Window* default_container =
Shell::GetPrimaryRootWindowController()->GetContainer(
kShellWindowId_DefaultContainer);
......
......@@ -643,24 +643,27 @@ TEST_F(WorkspaceControllerTest, DontCrashOnChangeAndActivate) {
// Verifies a window with a transient parent not managed by workspace works.
TEST_F(WorkspaceControllerTest, TransientParent) {
std::unique_ptr<Window> w1(CreateTestWindow());
w1->SetBounds(gfx::Rect(0, 0, 100, 100));
w1->Show();
// Normal window with no transient parent.
std::unique_ptr<Window> w2(CreateTestWindow());
std::unique_ptr<Window> w3(CreateTestWindow());
w3->SetBounds(gfx::Rect(10, 11, 250, 251));
w3->Show();
wm::ActivateWindow(w3.get());
// Window with a transient parent.
std::unique_ptr<Window> w2(CreateTestWindowUnparented());
::wm::AddTransientChild(w1.get(), w2.get());
w2->SetBounds(gfx::Rect(10, 11, 250, 251));
ParentWindowInPrimaryRootWindow(w2.get());
w2->Show();
wm::ActivateWindow(w2.get());
// Window with a transient parent. We set the transient parent to the root,
// which would never happen but is enough to exercise the bug.
std::unique_ptr<Window> w1(CreateTestWindowUnparented());
::wm::AddTransientChild(Shell::Get()->GetPrimaryRootWindow(), w1.get());
w1->SetBounds(gfx::Rect(10, 11, 250, 251));
ParentWindowInPrimaryRootWindow(w1.get());
w1->Show();
wm::ActivateWindow(w1.get());
// The window with the transient parent should get added to the same parent as
// the normal window.
EXPECT_EQ(w2->parent(), w1->parent());
EXPECT_EQ(w3->parent(), w2->parent());
}
// Test the placement of newly created windows.
......
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