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

Unified Diff: mash/wm/window_manager_unittest.cc

Issue 1907153002: mash/wm: Fix detecting container windows. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 8 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
« no previous file with comments | « mash/wm/window_manager.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mash/wm/window_manager_unittest.cc
diff --git a/mash/wm/window_manager_unittest.cc b/mash/wm/window_manager_unittest.cc
index f3272f2606bfa3a85113cea283dda9591653aec7..24720dcd051f46c6faeaeadfdaffbae01db88f32 100644
--- a/mash/wm/window_manager_unittest.cc
+++ b/mash/wm/window_manager_unittest.cc
@@ -9,10 +9,12 @@
#include "base/bind.h"
#include "base/macros.h"
+#include "base/run_loop.h"
#include "components/mus/public/cpp/window.h"
#include "components/mus/public/cpp/window_tree_connection.h"
#include "components/mus/public/cpp/window_tree_delegate.h"
#include "components/mus/public/interfaces/window_tree.mojom.h"
+#include "mash/wm/public/interfaces/user_window_controller.mojom.h"
#include "services/shell/public/cpp/shell_test.h"
namespace mash {
@@ -44,6 +46,69 @@ void OnEmbed(bool success) {
ASSERT_TRUE(success);
}
+class TestUserWindowObserver : public mojom::UserWindowObserver {
+ public:
+ explicit TestUserWindowObserver(shell::Connector* connector)
+ : binding_(this), window_count_(0u), expected_window_count_(0u) {
+ connector->ConnectToInterface("mojo:desktop_wm", &user_window_controller_);
+ user_window_controller_->AddUserWindowObserver(
+ binding_.CreateInterfacePtrAndBind());
+ }
+
+ ~TestUserWindowObserver() override {}
+
+ bool WaitUntilWindowCountReaches(size_t expected) {
+ DCHECK(quit_callback_.is_null());
+ if (window_count_ != expected) {
+ base::RunLoop loop;
+ quit_callback_ = loop.QuitClosure();
+ expected_window_count_ = expected;
+ loop.Run();
+ quit_callback_ = base::Closure();
+ }
+ return window_count_ == expected;
+ }
+
+ private:
+ void QuitIfNecessary() {
+ if (window_count_ == expected_window_count_ && !quit_callback_.is_null())
+ quit_callback_.Run();
+ }
+
+ // mojom::UserWindowObserver:
+ void OnUserWindowObserverAdded(
+ mojo::Array<mojom::UserWindowPtr> user_windows) override {
+ window_count_ = user_windows.size();
+ QuitIfNecessary();
+ }
+
+ void OnUserWindowAdded(mojom::UserWindowPtr user_window) override {
+ ++window_count_;
+ QuitIfNecessary();
+ }
+
+ void OnUserWindowRemoved(uint32_t window_id) override {
+ ASSERT_TRUE(window_count_);
+ --window_count_;
+ QuitIfNecessary();
+ }
+
+ void OnUserWindowTitleChanged(uint32_t window_id,
+ const mojo::String& window_title) override {}
+ void OnUserWindowFocusChanged(uint32_t window_id, bool has_focus) override {}
+ void OnUserWindowAppIconChanged(uint32_t window_id,
+ mojo::Array<uint8_t> app_icon) override {}
+
+ mojom::UserWindowControllerPtr user_window_controller_;
+ mojo::Binding<mojom::UserWindowObserver> binding_;
+
+ size_t window_count_;
+ size_t expected_window_count_;
+ base::Closure quit_callback_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestUserWindowObserver);
+};
+
TEST_F(WindowManagerTest, OpenWindow) {
WindowTreeDelegateImpl window_tree_delegate;
@@ -72,5 +137,23 @@ TEST_F(WindowManagerTest, OpenWindow) {
ASSERT_TRUE(!child_connection->GetRoots().empty());
}
+TEST_F(WindowManagerTest, OpenWindowAndClose) {
+ // Bring up the the desktop_wm.
+ connector()->Connect("mojo:desktop_wm");
+
+ TestUserWindowObserver observer(connector());
+
+ // Connect to mus and create a new top level window.
+ WindowTreeDelegateImpl window_tree_delegate;
+ std::unique_ptr<mus::WindowTreeConnection> connection(
+ mus::WindowTreeConnection::Create(&window_tree_delegate, connector()));
+ mus::Window* top_level_window = connection->NewTopLevelWindow(nullptr);
+ ASSERT_TRUE(top_level_window);
+
+ observer.WaitUntilWindowCountReaches(1u);
+ connection.reset();
+ observer.WaitUntilWindowCountReaches(0u);
+}
+
} // namespace wm
} // namespace mash
« no previous file with comments | « mash/wm/window_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698