Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1334)

Unified Diff: athena/wm/window_list_provider_impl_unittest.cc

Issue 633623002: Handle transient children as a part of transient parent (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: athena/wm/window_list_provider_impl_unittest.cc
diff --git a/athena/wm/window_list_provider_impl_unittest.cc b/athena/wm/window_list_provider_impl_unittest.cc
index 3419b2ed22c8d82d0da945560663073ffdac04ed..1ad9e38a964534a62b8c9f2e0d778eed58494b8b 100644
--- a/athena/wm/window_list_provider_impl_unittest.cc
+++ b/athena/wm/window_list_provider_impl_unittest.cc
@@ -6,10 +6,14 @@
#include <algorithm>
+#include "athena/screen/public/screen_manager.h"
#include "athena/test/base/athena_test_base.h"
#include "athena/wm/public/window_list_provider_observer.h"
+#include "athena/wm/public/window_manager.h"
+#include "ui/aura/client/window_tree_client.h"
#include "ui/aura/test/test_window_delegate.h"
#include "ui/aura/window.h"
+#include "ui/wm/core/window_util.h"
namespace athena {
@@ -21,11 +25,26 @@ bool AreWindowListsEqual(const aura::Window::Windows& one,
std::equal(one.begin(), one.end(), two.begin());
}
-scoped_ptr<aura::Window> CreateWindow(aura::WindowDelegate* delegate,
+scoped_ptr<aura::Window> CreateWindow(aura::Window* parent,
+ aura::WindowDelegate* delegate,
ui::wm::WindowType window_type) {
scoped_ptr<aura::Window> window(new aura::Window(delegate));
window->SetType(window_type);
window->Init(aura::WINDOW_LAYER_SOLID_COLOR);
+ if (parent)
+ parent->AddChild(window.get());
+ return window.Pass();
+}
+
+scoped_ptr<aura::Window> CreateTransientWindow(aura::Window* transient_parent,
+ aura::WindowDelegate* delegate,
+ ui::wm::WindowType window_type) {
+ scoped_ptr<aura::Window> window(new aura::Window(delegate));
+ window->SetType(window_type);
+ window->Init(aura::WINDOW_LAYER_SOLID_COLOR);
+ wm::AddTransientChild(transient_parent, window.get());
+ aura::client::ParentWindowWithContext(
+ window.get(), ScreenManager::Get()->GetContext(), gfx::Rect());
return window.Pass();
}
@@ -94,24 +113,27 @@ typedef test::AthenaTestBase WindowListProviderImplTest;
TEST_F(WindowListProviderImplTest, StackingOrder) {
aura::test::TestWindowDelegate delegate;
scoped_ptr<aura::Window> container(new aura::Window(&delegate));
+ scoped_ptr<WindowListProvider> list_provider(
+ new WindowListProviderImpl(container.get()));
+
scoped_ptr<aura::Window> first =
- CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
+ CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL);
scoped_ptr<aura::Window> second =
- CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
+ CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL);
scoped_ptr<aura::Window> third =
- CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
- container->AddChild(first.get());
- container->AddChild(second.get());
- container->AddChild(third.get());
+ CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL);
+
+ EXPECT_EQ(3u, container->children().size());
+ EXPECT_EQ(container->children().size(),
+ list_provider->GetWindowList().size());
- scoped_ptr<WindowListProvider> list_provider(
- new WindowListProviderImpl(container.get()));
EXPECT_TRUE(AreWindowListsEqual(container->children(),
list_provider->GetWindowList()));
container->StackChildAtTop(first.get());
EXPECT_TRUE(AreWindowListsEqual(container->children(),
list_provider->GetWindowList()));
+ EXPECT_EQ(3u, container->children().size());
EXPECT_EQ(first.get(), container->children().back());
}
@@ -119,21 +141,17 @@ TEST_F(WindowListProviderImplTest, StackingOrder) {
TEST_F(WindowListProviderImplTest, ListContainsOnlyNormalWindows) {
aura::test::TestWindowDelegate delegate;
scoped_ptr<aura::Window> container(new aura::Window(&delegate));
+ scoped_ptr<WindowListProvider> list_provider(
+ new WindowListProviderImpl(container.get()));
+
scoped_ptr<aura::Window> first =
- CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
+ CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL);
scoped_ptr<aura::Window> second =
- CreateWindow(&delegate, ui::wm::WINDOW_TYPE_POPUP);
+ CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_POPUP);
scoped_ptr<aura::Window> third =
- CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
+ CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL);
scoped_ptr<aura::Window> fourth =
- CreateWindow(&delegate, ui::wm::WINDOW_TYPE_MENU);
- container->AddChild(first.get());
- container->AddChild(second.get());
- container->AddChild(third.get());
- container->AddChild(fourth.get());
-
- scoped_ptr<WindowListProvider> list_provider(
- new WindowListProviderImpl(container.get()));
+ CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_MENU);
const aura::Window::Windows& list = list_provider->GetWindowList();
EXPECT_EQ(list.end(), std::find(list.begin(), list.end(), second.get()));
@@ -146,16 +164,15 @@ TEST_F(WindowListProviderImplTest, ListContainsOnlyNormalWindows) {
TEST_F(WindowListProviderImplTest, SimpleChecks) {
aura::test::TestWindowDelegate delegate;
scoped_ptr<aura::Window> container(new aura::Window(&delegate));
+ scoped_ptr<WindowListProviderImpl> list_provider(
+ new WindowListProviderImpl(container.get()));
scoped_ptr<aura::Window> normal_window =
- CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
+ CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_NORMAL);
scoped_ptr<aura::Window> popup_window =
- CreateWindow(&delegate, ui::wm::WINDOW_TYPE_POPUP);
+ CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_POPUP);
scoped_ptr<aura::Window> menu_window =
- CreateWindow(&delegate, ui::wm::WINDOW_TYPE_MENU);
-
- scoped_ptr<WindowListProvider> list_provider(
- new WindowListProviderImpl(container.get()));
+ CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_MENU);
// Check which windows are valid and which are not.
EXPECT_TRUE(list_provider->IsValidWindow(normal_window.get()));
@@ -176,19 +193,18 @@ TEST_F(WindowListProviderImplTest, SimpleChecks) {
TEST_F(WindowListProviderImplTest, TestWindowOrderingFunctions) {
aura::test::TestWindowDelegate delegate;
scoped_ptr<aura::Window> container(new aura::Window(&delegate));
-
- scoped_ptr<aura::Window> window1 =
- CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
- scoped_ptr<aura::Window> window2 =
- CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
- scoped_ptr<aura::Window> window3 =
- CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
-
scoped_ptr<WindowListProvider> list_provider(
new WindowListProviderImpl(container.get()));
scoped_ptr<WindowListObserver> observer(
new WindowListObserver(list_provider.get()));
+ scoped_ptr<aura::Window> window1 =
+ CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_NORMAL);
+ scoped_ptr<aura::Window> window2 =
+ CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_NORMAL);
+ scoped_ptr<aura::Window> window3 =
+ CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_NORMAL);
+
EXPECT_FALSE(list_provider->IsWindowInList(window1.get()));
EXPECT_FALSE(list_provider->IsWindowInList(window2.get()));
EXPECT_FALSE(list_provider->IsWindowInList(window3.get()));
@@ -244,26 +260,20 @@ TEST_F(WindowListProviderImplTest, TestWindowOrderingFunctions) {
TEST_F(WindowListProviderImplTest, TestWindowRemovalNotification) {
aura::test::TestWindowDelegate delegate;
scoped_ptr<aura::Window> container(new aura::Window(&delegate));
+ scoped_ptr<WindowListProvider> list_provider(
+ new WindowListProviderImpl(container.get()));
+ scoped_ptr<WindowListObserver> observer(
+ new WindowListObserver(list_provider.get()));
scoped_ptr<aura::Window> window1 =
- CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
+ CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL);
scoped_ptr<aura::Window> window2 =
- CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
+ CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL);
scoped_ptr<aura::Window> window3 =
- CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
+ CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL);
scoped_ptr<aura::Window> window4 =
- CreateWindow(&delegate, ui::wm::WINDOW_TYPE_POPUP);
+ CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_POPUP);
- scoped_ptr<WindowListProvider> list_provider(
- new WindowListProviderImpl(container.get()));
- scoped_ptr<WindowListObserver> observer(
- new WindowListObserver(list_provider.get()));
-
- // Add the windows.
- container->AddChild(window1.get());
- container->AddChild(window2.get());
- container->AddChild(window3.get());
- container->AddChild(window4.get());
// The popup-window (window4) should not be included in the window-list.
ASSERT_EQ(3U, list_provider->GetWindowList().size());
EXPECT_EQ(0, observer->window_removal_calls());
@@ -287,4 +297,63 @@ TEST_F(WindowListProviderImplTest, TestWindowRemovalNotification) {
EXPECT_EQ(3, observer->window_removal_calls());
}
+// That transient windows are handled property.
Mr4D (OOO till 08-26) 2014/10/08 15:32:29 Test that .. ?
oshima 2014/10/08 19:05:30 Done.
+TEST_F(WindowListProviderImplTest, TransientWindows) {
+ aura::test::TestWindowDelegate delegate;
+ delegate.set_can_focus(true);
+
+ WindowListProvider* list_provider =
+ WindowManager::Get()->GetWindowListProvider();
+
+ scoped_ptr<WindowListObserver> observer(
+ new WindowListObserver(list_provider));
+ scoped_ptr<aura::Window> w1 = CreateTestWindow(&delegate, gfx::Rect());
+ w1->Show();
+ scoped_ptr<aura::Window> w2 = CreateTestWindow(&delegate, gfx::Rect());
+ w2->Show();
+ scoped_ptr<aura::Window> t1 =
+ CreateTransientWindow(w1.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL);
+ t1->Show();
+
+ EXPECT_EQ(2u, list_provider->GetWindowList().size());
+
+ // Activation should honor transient relations.
+ wm::ActivateWindow(w2.get());
+ EXPECT_EQ(w1.get(), list_provider->GetWindowList()[0]);
+ EXPECT_EQ(w2.get(), list_provider->GetWindowList()[1]);
+
+ EXPECT_EQ(w1.get(), w1->parent()->children()[0]);
+ EXPECT_EQ(t1.get(), w1->parent()->children()[1]);
+ EXPECT_EQ(w2.get(), w1->parent()->children()[2]);
+
+ wm::ActivateWindow(w1.get());
+ EXPECT_EQ(w2.get(), w1->parent()->children()[0]);
+ EXPECT_EQ(w1.get(), w1->parent()->children()[1]);
+ EXPECT_EQ(t1.get(), w1->parent()->children()[2]);
+
+ // Manual operations should honor transient relations too.
+ // TODO(oshima): moving the active window back should activate the top window.
+ list_provider->StackWindowBehindTo(w1.get(), w2.get());
+ EXPECT_EQ(w1.get(), w1->parent()->children()[0]);
+ EXPECT_EQ(t1.get(), w1->parent()->children()[1]);
+ EXPECT_EQ(w2.get(), w1->parent()->children()[2]);
+
+ list_provider->StackWindowFrontOf(w1.get(), w2.get());
+ EXPECT_EQ(w2.get(), w1->parent()->children()[0]);
+ EXPECT_EQ(w1.get(), w1->parent()->children()[1]);
+ EXPECT_EQ(t1.get(), w1->parent()->children()[2]);
+
+ // Transient windows should follow the transient parent's
+ // visibility.
+ EXPECT_TRUE(t1->IsVisible());
+ w1->Hide();
+ EXPECT_FALSE(t1->IsVisible());
+ w1->Show();
+ EXPECT_TRUE(t1->IsVisible());
+
+ // Resetting transient window won't notify the observer.
+ t1.reset();
+ EXPECT_EQ(0, observer->window_removal_calls());
+}
+
} // namespace athena

Powered by Google App Engine
This is Rietveld 408576698