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) { ...@@ -110,10 +110,12 @@ TEST_F(ShelfWindowWatcherTest, OpenAndCloseMash) {
EXPECT_EQ(2, model_->item_count()); EXPECT_EQ(2, model_->item_count());
// Windows with type WINDOW_TYPE_NORMAL get shelf items, others do not. // 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::WindowType no_item_types[] = {
aura::client::WINDOW_TYPE_UNKNOWN, aura::client::WINDOW_TYPE_NORMAL, aura::client::WINDOW_TYPE_UNKNOWN, aura::client::WINDOW_TYPE_NORMAL,
aura::client::WINDOW_TYPE_POPUP, aura::client::WINDOW_TYPE_CONTROL, aura::client::WINDOW_TYPE_POPUP, aura::client::WINDOW_TYPE_MENU,
aura::client::WINDOW_TYPE_MENU, aura::client::WINDOW_TYPE_TOOLTIP}; aura::client::WINDOW_TYPE_TOOLTIP};
for (aura::client::WindowType type : no_item_types) { for (aura::client::WindowType type : no_item_types) {
std::unique_ptr<aura::Window> window = std::unique_ptr<aura::Window> window =
window_factory::NewWindow(nullptr, type); window_factory::NewWindow(nullptr, type);
......
...@@ -217,10 +217,8 @@ TEST_F(TabletModeWindowManagerTest, PreCreateWindows) { ...@@ -217,10 +217,8 @@ TEST_F(TabletModeWindowManagerTest, PreCreateWindows) {
std::unique_ptr<aura::Window> w4( std::unique_ptr<aura::Window> w4(
CreateWindow(aura::client::WINDOW_TYPE_POPUP, rect)); CreateWindow(aura::client::WINDOW_TYPE_POPUP, rect));
std::unique_ptr<aura::Window> w5( 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)); 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)); CreateWindow(aura::client::WINDOW_TYPE_TOOLTIP, rect));
EXPECT_FALSE(wm::GetWindowState(w1.get())->IsMaximized()); EXPECT_FALSE(wm::GetWindowState(w1.get())->IsMaximized());
EXPECT_FALSE(wm::GetWindowState(w2.get())->IsMaximized()); EXPECT_FALSE(wm::GetWindowState(w2.get())->IsMaximized());
...@@ -244,11 +242,9 @@ TEST_F(TabletModeWindowManagerTest, PreCreateWindows) { ...@@ -244,11 +242,9 @@ TEST_F(TabletModeWindowManagerTest, PreCreateWindows) {
EXPECT_FALSE(wm::GetWindowState(w4.get())->IsMaximized()); EXPECT_FALSE(wm::GetWindowState(w4.get())->IsMaximized());
EXPECT_FALSE(wm::GetWindowState(w5.get())->IsMaximized()); EXPECT_FALSE(wm::GetWindowState(w5.get())->IsMaximized());
EXPECT_FALSE(wm::GetWindowState(w6.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(), w4->bounds().ToString());
EXPECT_EQ(rect.ToString(), w5->bounds().ToString()); EXPECT_EQ(rect.ToString(), w5->bounds().ToString());
EXPECT_EQ(rect.ToString(), w6->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 // Destroy the manager again and check that the windows return to their
// previous state. // previous state.
...@@ -262,7 +258,6 @@ TEST_F(TabletModeWindowManagerTest, PreCreateWindows) { ...@@ -262,7 +258,6 @@ TEST_F(TabletModeWindowManagerTest, PreCreateWindows) {
EXPECT_EQ(rect.ToString(), w4->bounds().ToString()); EXPECT_EQ(rect.ToString(), w4->bounds().ToString());
EXPECT_EQ(rect.ToString(), w5->bounds().ToString()); EXPECT_EQ(rect.ToString(), w5->bounds().ToString());
EXPECT_EQ(rect.ToString(), w6->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. // The same test as the above but while a system modal dialog is shown.
...@@ -282,10 +277,8 @@ TEST_F(TabletModeWindowManagerTest, GoingToMaximizedWithModalDialogPresent) { ...@@ -282,10 +277,8 @@ TEST_F(TabletModeWindowManagerTest, GoingToMaximizedWithModalDialogPresent) {
std::unique_ptr<aura::Window> w4( std::unique_ptr<aura::Window> w4(
CreateWindow(aura::client::WINDOW_TYPE_POPUP, rect)); CreateWindow(aura::client::WINDOW_TYPE_POPUP, rect));
std::unique_ptr<aura::Window> w5( 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)); 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)); CreateWindow(aura::client::WINDOW_TYPE_TOOLTIP, rect));
EXPECT_FALSE(wm::GetWindowState(w1.get())->IsMaximized()); EXPECT_FALSE(wm::GetWindowState(w1.get())->IsMaximized());
EXPECT_FALSE(wm::GetWindowState(w2.get())->IsMaximized()); EXPECT_FALSE(wm::GetWindowState(w2.get())->IsMaximized());
...@@ -313,11 +306,9 @@ TEST_F(TabletModeWindowManagerTest, GoingToMaximizedWithModalDialogPresent) { ...@@ -313,11 +306,9 @@ TEST_F(TabletModeWindowManagerTest, GoingToMaximizedWithModalDialogPresent) {
EXPECT_FALSE(wm::GetWindowState(w4.get())->IsMaximized()); EXPECT_FALSE(wm::GetWindowState(w4.get())->IsMaximized());
EXPECT_FALSE(wm::GetWindowState(w5.get())->IsMaximized()); EXPECT_FALSE(wm::GetWindowState(w5.get())->IsMaximized());
EXPECT_FALSE(wm::GetWindowState(w6.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(), w4->bounds().ToString());
EXPECT_EQ(rect.ToString(), w5->bounds().ToString()); EXPECT_EQ(rect.ToString(), w5->bounds().ToString());
EXPECT_EQ(rect.ToString(), w6->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 // Destroy the manager again and check that the windows return to their
// previous state. // previous state.
...@@ -331,7 +322,6 @@ TEST_F(TabletModeWindowManagerTest, GoingToMaximizedWithModalDialogPresent) { ...@@ -331,7 +322,6 @@ TEST_F(TabletModeWindowManagerTest, GoingToMaximizedWithModalDialogPresent) {
EXPECT_EQ(rect.ToString(), w4->bounds().ToString()); EXPECT_EQ(rect.ToString(), w4->bounds().ToString());
EXPECT_EQ(rect.ToString(), w5->bounds().ToString()); EXPECT_EQ(rect.ToString(), w5->bounds().ToString());
EXPECT_EQ(rect.ToString(), w6->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 // Test that non-maximizable windows get properly handled when going into
...@@ -414,10 +404,8 @@ TEST_F(TabletModeWindowManagerTest, CreateWindows) { ...@@ -414,10 +404,8 @@ TEST_F(TabletModeWindowManagerTest, CreateWindows) {
std::unique_ptr<aura::Window> w4( std::unique_ptr<aura::Window> w4(
CreateWindow(aura::client::WINDOW_TYPE_POPUP, rect)); CreateWindow(aura::client::WINDOW_TYPE_POPUP, rect));
std::unique_ptr<aura::Window> w5( 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)); 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)); CreateWindow(aura::client::WINDOW_TYPE_TOOLTIP, rect));
EXPECT_TRUE(wm::GetWindowState(w1.get())->IsMaximized()); EXPECT_TRUE(wm::GetWindowState(w1.get())->IsMaximized());
EXPECT_TRUE(wm::GetWindowState(w2.get())->IsMaximized()); EXPECT_TRUE(wm::GetWindowState(w2.get())->IsMaximized());
...@@ -438,11 +426,9 @@ TEST_F(TabletModeWindowManagerTest, CreateWindows) { ...@@ -438,11 +426,9 @@ TEST_F(TabletModeWindowManagerTest, CreateWindows) {
EXPECT_FALSE(wm::GetWindowState(w4.get())->IsMaximized()); EXPECT_FALSE(wm::GetWindowState(w4.get())->IsMaximized());
EXPECT_FALSE(wm::GetWindowState(w5.get())->IsMaximized()); EXPECT_FALSE(wm::GetWindowState(w5.get())->IsMaximized());
EXPECT_FALSE(wm::GetWindowState(w6.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(), w4->bounds().ToString());
EXPECT_EQ(rect.ToString(), w5->bounds().ToString()); EXPECT_EQ(rect.ToString(), w5->bounds().ToString());
EXPECT_EQ(rect.ToString(), w6->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 // After the tablet mode was disabled all windows fall back into the mode
// they were created for. // they were created for.
...@@ -456,7 +442,6 @@ TEST_F(TabletModeWindowManagerTest, CreateWindows) { ...@@ -456,7 +442,6 @@ TEST_F(TabletModeWindowManagerTest, CreateWindows) {
EXPECT_EQ(rect.ToString(), w4->bounds().ToString()); EXPECT_EQ(rect.ToString(), w4->bounds().ToString());
EXPECT_EQ(rect.ToString(), w5->bounds().ToString()); EXPECT_EQ(rect.ToString(), w5->bounds().ToString());
EXPECT_EQ(rect.ToString(), w6->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 // Test that a window which got created while the tablet mode window manager
......
...@@ -136,6 +136,7 @@ void WorkspaceLayoutManager::SetBackdropDelegate( ...@@ -136,6 +136,7 @@ void WorkspaceLayoutManager::SetBackdropDelegate(
void WorkspaceLayoutManager::OnWindowResized() {} void WorkspaceLayoutManager::OnWindowResized() {}
void WorkspaceLayoutManager::OnWindowAddedToLayout(aura::Window* child) { void WorkspaceLayoutManager::OnWindowAddedToLayout(aura::Window* child) {
DCHECK_NE(aura::client::WINDOW_TYPE_CONTROL, child->type());
wm::WindowState* window_state = wm::GetWindowState(child); wm::WindowState* window_state = wm::GetWindowState(child);
wm::WMEvent event(wm::WM_EVENT_ADDED_TO_WORKSPACE); wm::WMEvent event(wm::WM_EVENT_ADDED_TO_WORKSPACE);
window_state->OnWMEvent(&event); window_state->OnWMEvent(&event);
......
...@@ -445,7 +445,7 @@ TEST_F(WorkspaceLayoutManagerTest, MaximizeWithEmptySize) { ...@@ -445,7 +445,7 @@ TEST_F(WorkspaceLayoutManagerTest, MaximizeWithEmptySize) {
std::unique_ptr<aura::Window> window = std::unique_ptr<aura::Window> window =
window_factory::NewWindow(nullptr, aura::client::WINDOW_TYPE_NORMAL); window_factory::NewWindow(nullptr, aura::client::WINDOW_TYPE_NORMAL);
window->Init(ui::LAYER_TEXTURED); window->Init(ui::LAYER_TEXTURED);
wm::GetWindowState(window.get())->Maximize(); window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MAXIMIZED);
aura::Window* default_container = aura::Window* default_container =
Shell::GetPrimaryRootWindowController()->GetContainer( Shell::GetPrimaryRootWindowController()->GetContainer(
kShellWindowId_DefaultContainer); kShellWindowId_DefaultContainer);
......
...@@ -643,24 +643,27 @@ TEST_F(WorkspaceControllerTest, DontCrashOnChangeAndActivate) { ...@@ -643,24 +643,27 @@ TEST_F(WorkspaceControllerTest, DontCrashOnChangeAndActivate) {
// Verifies a window with a transient parent not managed by workspace works. // Verifies a window with a transient parent not managed by workspace works.
TEST_F(WorkspaceControllerTest, TransientParent) { 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. // 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)); w2->SetBounds(gfx::Rect(10, 11, 250, 251));
ParentWindowInPrimaryRootWindow(w2.get());
w2->Show(); w2->Show();
wm::ActivateWindow(w2.get()); 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 window with the transient parent should get added to the same parent as
// the normal window. // the normal window.
EXPECT_EQ(w2->parent(), w1->parent()); EXPECT_EQ(w3->parent(), w2->parent());
} }
// Test the placement of newly created windows. // 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