| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/command_line.h" | 6 #include "base/command_line.h" |
| 7 #include "base/memory/scoped_vector.h" | 7 #include "base/memory/scoped_vector.h" |
| 8 #include "mojo/application_manager/application_manager.h" | 8 #include "mojo/application_manager/application_manager.h" |
| 9 #include "mojo/public/cpp/application/application_delegate.h" | 9 #include "mojo/public/cpp/application/application_delegate.h" |
| 10 #include "mojo/public/cpp/application/application_impl.h" | 10 #include "mojo/public/cpp/application/application_impl.h" |
| 11 #include "mojo/public/cpp/application/service_provider_impl.h" | 11 #include "mojo/public/cpp/application/service_provider_impl.h" |
| 12 #include "mojo/public/interfaces/application/service_provider.mojom.h" | 12 #include "mojo/public/interfaces/application/service_provider.mojom.h" |
| 13 #include "mojo/services/public/cpp/view_manager/types.h" | 13 #include "mojo/services/public/cpp/view_manager/types.h" |
| 14 #include "mojo/services/public/cpp/view_manager/view.h" | 14 #include "mojo/services/public/cpp/view_manager/view.h" |
| 15 #include "mojo/services/public/cpp/view_manager/view_manager.h" | 15 #include "mojo/services/public/cpp/view_manager/view_manager.h" |
| 16 #include "mojo/services/public/cpp/view_manager/view_manager_client_factory.h" | 16 #include "mojo/services/public/cpp/view_manager/view_manager_client_factory.h" |
| 17 #include "mojo/services/public/cpp/view_manager/view_manager_delegate.h" | 17 #include "mojo/services/public/cpp/view_manager/view_manager_delegate.h" |
| 18 #include "mojo/services/public/interfaces/view_manager/view_manager.mojom.h" | 18 #include "mojo/services/public/interfaces/view_manager/view_manager.mojom.h" |
| 19 #include "mojo/services/public/interfaces/window_manager/window_manager.mojom.h" | 19 #include "mojo/services/public/interfaces/window_manager/window_manager.mojom.h" |
| 20 #include "shell/shell_test_helper.h" | 20 #include "shell/shell_test_helper.h" |
| 21 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
| 22 | 22 |
| 23 namespace mojo { | 23 using mojo::ApplicationImpl; |
| 24 using mojo::Id; |
| 25 using mojo::View; |
| 26 |
| 27 namespace window_manager { |
| 24 namespace { | 28 namespace { |
| 25 | 29 |
| 26 const char kTestServiceURL[] = "mojo:test_url"; | 30 const char kTestServiceURL[] = "mojo:test_url"; |
| 27 | 31 |
| 28 void EmptyResultCallback(bool result) {} | 32 void EmptyResultCallback(bool result) {} |
| 29 | 33 |
| 30 class TestWindowManagerClient : public WindowManagerClient { | 34 class TestWindowManagerClient : public mojo::WindowManagerClient { |
| 31 public: | 35 public: |
| 32 typedef base::Callback<void(Id, Id)> | 36 typedef base::Callback<void(Id, Id)> |
| 33 TwoNodeCallback; | 37 TwoNodeCallback; |
| 34 | 38 |
| 35 explicit TestWindowManagerClient(base::RunLoop* run_loop) | 39 explicit TestWindowManagerClient(base::RunLoop* run_loop) |
| 36 : run_loop_(run_loop) {} | 40 : run_loop_(run_loop) {} |
| 37 ~TestWindowManagerClient() override {} | 41 ~TestWindowManagerClient() override {} |
| 38 | 42 |
| 39 void set_focus_changed_callback(const TwoNodeCallback& callback) { | 43 void set_focus_changed_callback(const TwoNodeCallback& callback) { |
| 40 focus_changed_callback_ = callback; | 44 focus_changed_callback_ = callback; |
| 41 } | 45 } |
| 42 void set_active_window_changed_callback(const TwoNodeCallback& callback) { | 46 void set_active_window_changed_callback(const TwoNodeCallback& callback) { |
| 43 active_window_changed_callback_ = callback; | 47 active_window_changed_callback_ = callback; |
| 44 } | 48 } |
| 45 | 49 |
| 46 private: | 50 private: |
| 47 // Overridden from WindowManagerClient: | 51 // Overridden from mojo::WindowManagerClient: |
| 48 void OnCaptureChanged(Id old_capture_node_id, | 52 void OnCaptureChanged(Id old_capture_node_id, |
| 49 Id new_capture_node_id) override {} | 53 Id new_capture_node_id) override {} |
| 50 void OnFocusChanged(Id old_focused_node_id, Id new_focused_node_id) override { | 54 void OnFocusChanged(Id old_focused_node_id, Id new_focused_node_id) override { |
| 51 if (!focus_changed_callback_.is_null()) | 55 if (!focus_changed_callback_.is_null()) |
| 52 focus_changed_callback_.Run(old_focused_node_id, new_focused_node_id); | 56 focus_changed_callback_.Run(old_focused_node_id, new_focused_node_id); |
| 53 } | 57 } |
| 54 void OnActiveWindowChanged(Id old_active_window, | 58 void OnActiveWindowChanged(Id old_active_window, |
| 55 Id new_active_window) override { | 59 Id new_active_window) override { |
| 56 if (!active_window_changed_callback_.is_null()) | 60 if (!active_window_changed_callback_.is_null()) |
| 57 active_window_changed_callback_.Run(old_active_window, new_active_window); | 61 active_window_changed_callback_.Run(old_active_window, new_active_window); |
| 58 } | 62 } |
| 59 | 63 |
| 60 base::RunLoop* run_loop_; | 64 base::RunLoop* run_loop_; |
| 61 TwoNodeCallback focus_changed_callback_; | 65 TwoNodeCallback focus_changed_callback_; |
| 62 TwoNodeCallback active_window_changed_callback_; | 66 TwoNodeCallback active_window_changed_callback_; |
| 63 | 67 |
| 64 DISALLOW_COPY_AND_ASSIGN(TestWindowManagerClient); | 68 DISALLOW_COPY_AND_ASSIGN(TestWindowManagerClient); |
| 65 }; | 69 }; |
| 66 | 70 |
| 67 class TestApplicationLoader : public ApplicationLoader, | 71 class TestApplicationLoader : public mojo::ApplicationLoader, |
| 68 public ApplicationDelegate, | 72 public mojo::ApplicationDelegate, |
| 69 public ViewManagerDelegate { | 73 public mojo::ViewManagerDelegate { |
| 70 public: | 74 public: |
| 71 typedef base::Callback<void(View*)> RootAddedCallback; | 75 typedef base::Callback<void(View*)> RootAddedCallback; |
| 72 | 76 |
| 73 explicit TestApplicationLoader(const RootAddedCallback& root_added_callback) | 77 explicit TestApplicationLoader(const RootAddedCallback& root_added_callback) |
| 74 : root_added_callback_(root_added_callback) {} | 78 : root_added_callback_(root_added_callback) {} |
| 75 ~TestApplicationLoader() override {} | 79 ~TestApplicationLoader() override {} |
| 76 | 80 |
| 77 private: | 81 private: |
| 78 // Overridden from ApplicationLoader: | 82 // Overridden from mojo::ApplicationLoader: |
| 79 void Load(ApplicationManager* application_manager, | 83 void Load(mojo::ApplicationManager* application_manager, |
| 80 const GURL& url, | 84 const GURL& url, |
| 81 ScopedMessagePipeHandle shell_handle, | 85 mojo::ScopedMessagePipeHandle shell_handle, |
| 82 LoadCallback callback) override { | 86 LoadCallback callback) override { |
| 83 ASSERT_TRUE(shell_handle.is_valid()); | 87 ASSERT_TRUE(shell_handle.is_valid()); |
| 84 scoped_ptr<ApplicationImpl> app( | 88 scoped_ptr<ApplicationImpl> app( |
| 85 new ApplicationImpl(this, shell_handle.Pass())); | 89 new ApplicationImpl(this, shell_handle.Pass())); |
| 86 apps_.push_back(app.release()); | 90 apps_.push_back(app.release()); |
| 87 } | 91 } |
| 88 void OnApplicationError(ApplicationManager* application_manager, | 92 void OnApplicationError(mojo::ApplicationManager* application_manager, |
| 89 const GURL& url) override {} | 93 const GURL& url) override {} |
| 90 | 94 |
| 91 // Overridden from ApplicationDelegate: | 95 // Overridden from mojo::ApplicationDelegate: |
| 92 void Initialize(ApplicationImpl* app) override { | 96 void Initialize(ApplicationImpl* app) override { |
| 93 view_manager_client_factory_.reset( | 97 view_manager_client_factory_.reset( |
| 94 new ViewManagerClientFactory(app->shell(), this)); | 98 new mojo::ViewManagerClientFactory(app->shell(), this)); |
| 95 } | 99 } |
| 96 | 100 |
| 97 bool ConfigureIncomingConnection(ApplicationConnection* connection) override { | 101 bool ConfigureIncomingConnection( |
| 102 mojo::ApplicationConnection* connection) override { |
| 98 connection->AddService(view_manager_client_factory_.get()); | 103 connection->AddService(view_manager_client_factory_.get()); |
| 99 return true; | 104 return true; |
| 100 } | 105 } |
| 101 | 106 |
| 102 // Overridden from ViewManagerDelegate: | 107 // Overridden from mojo::ViewManagerDelegate: |
| 103 void OnEmbed(ViewManager* view_manager, | 108 void OnEmbed(mojo::ViewManager* view_manager, |
| 104 View* root, | 109 View* root, |
| 105 ServiceProviderImpl* exported_services, | 110 mojo::ServiceProviderImpl* exported_services, |
| 106 scoped_ptr<ServiceProvider> imported_services) override { | 111 scoped_ptr<mojo::ServiceProvider> imported_services) override { |
| 107 root_added_callback_.Run(root); | 112 root_added_callback_.Run(root); |
| 108 } | 113 } |
| 109 void OnViewManagerDisconnected(ViewManager* view_manager) override {} | 114 void OnViewManagerDisconnected(mojo::ViewManager* view_manager) override {} |
| 110 | 115 |
| 111 RootAddedCallback root_added_callback_; | 116 RootAddedCallback root_added_callback_; |
| 112 | 117 |
| 113 ScopedVector<ApplicationImpl> apps_; | 118 ScopedVector<ApplicationImpl> apps_; |
| 114 scoped_ptr<ViewManagerClientFactory> view_manager_client_factory_; | 119 scoped_ptr<mojo::ViewManagerClientFactory> view_manager_client_factory_; |
| 115 | 120 |
| 116 DISALLOW_COPY_AND_ASSIGN(TestApplicationLoader); | 121 DISALLOW_COPY_AND_ASSIGN(TestApplicationLoader); |
| 117 }; | 122 }; |
| 118 | 123 |
| 119 } // namespace | 124 } // namespace |
| 120 | 125 |
| 121 class WindowManagerApiTest : public testing::Test { | 126 class WindowManagerApiTest : public testing::Test { |
| 122 public: | 127 public: |
| 123 WindowManagerApiTest() {} | 128 WindowManagerApiTest() {} |
| 124 ~WindowManagerApiTest() override {} | 129 ~WindowManagerApiTest() override {} |
| (...skipping 29 matching lines...) Expand all Loading... |
| 154 run_loop.Run(); | 159 run_loop.Run(); |
| 155 return old_and_new; | 160 return old_and_new; |
| 156 } | 161 } |
| 157 | 162 |
| 158 Id OpenWindow() { | 163 Id OpenWindow() { |
| 159 return OpenWindowWithURL(kTestServiceURL); | 164 return OpenWindowWithURL(kTestServiceURL); |
| 160 } | 165 } |
| 161 | 166 |
| 162 Id OpenWindowWithURL(const std::string& url) { | 167 Id OpenWindowWithURL(const std::string& url) { |
| 163 base::RunLoop run_loop; | 168 base::RunLoop run_loop; |
| 164 ServiceProviderPtr sp; | 169 mojo::ServiceProviderPtr sp; |
| 165 BindToProxy(new ServiceProviderImpl, &sp); | 170 BindToProxy(new mojo::ServiceProviderImpl, &sp); |
| 166 window_manager_->Embed( | 171 window_manager_->Embed( |
| 167 url, MakeRequest<ServiceProvider>(sp.PassMessagePipe())); | 172 url, mojo::MakeRequest<mojo::ServiceProvider>(sp.PassMessagePipe())); |
| 168 run_loop.Run(); | 173 run_loop.Run(); |
| 169 return WaitForEmbed(); | 174 return WaitForEmbed(); |
| 170 } | 175 } |
| 171 | 176 |
| 172 TestWindowManagerClient* window_manager_client() { | 177 TestWindowManagerClient* window_manager_client() { |
| 173 return window_manager_client_.get(); | 178 return window_manager_client_.get(); |
| 174 } | 179 } |
| 175 | 180 |
| 176 WindowManagerPtr window_manager_; | 181 mojo::WindowManagerPtr window_manager_; |
| 177 | 182 |
| 178 private: | 183 private: |
| 179 // Overridden from testing::Test: | 184 // Overridden from testing::Test: |
| 180 void SetUp() override { | 185 void SetUp() override { |
| 181 test_helper_.reset(new shell::ShellTestHelper); | 186 test_helper_.reset(new mojo::shell::ShellTestHelper); |
| 182 test_helper_->Init(); | 187 test_helper_->Init(); |
| 183 test_helper_->AddCustomMapping(GURL("mojo:window_manager"), | 188 test_helper_->AddCustomMapping(GURL("mojo:window_manager"), |
| 184 GURL("mojo:core_window_manager")); | 189 GURL("mojo:core_window_manager")); |
| 185 test_helper_->SetLoaderForURL( | 190 test_helper_->SetLoaderForURL( |
| 186 scoped_ptr<ApplicationLoader>(new TestApplicationLoader(base::Bind( | 191 scoped_ptr<mojo::ApplicationLoader>( |
| 187 &WindowManagerApiTest::OnRootAdded, base::Unretained(this)))), | 192 new TestApplicationLoader(base::Bind( |
| 193 &WindowManagerApiTest::OnRootAdded, base::Unretained(this)))), |
| 188 GURL(kTestServiceURL)); | 194 GURL(kTestServiceURL)); |
| 189 ConnectToWindowManager2(); | 195 ConnectToWindowManager2(); |
| 190 } | 196 } |
| 191 void TearDown() override {} | 197 void TearDown() override {} |
| 192 | 198 |
| 193 void ConnectToWindowManager2() { | 199 void ConnectToWindowManager2() { |
| 194 test_helper_->application_manager()->ConnectToService( | 200 test_helper_->application_manager()->ConnectToService( |
| 195 GURL("mojo:window_manager"), &window_manager_); | 201 GURL("mojo:window_manager"), &window_manager_); |
| 196 base::RunLoop connect_loop; | 202 base::RunLoop connect_loop; |
| 197 window_manager_client_.reset(new TestWindowManagerClient(&connect_loop)); | 203 window_manager_client_.reset(new TestWindowManagerClient(&connect_loop)); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 void OnActiveWindowChanged(TwoIds* old_and_new, | 235 void OnActiveWindowChanged(TwoIds* old_and_new, |
| 230 base::RunLoop* run_loop, | 236 base::RunLoop* run_loop, |
| 231 Id old_focused_node_id, | 237 Id old_focused_node_id, |
| 232 Id new_focused_node_id) { | 238 Id new_focused_node_id) { |
| 233 DCHECK(old_and_new); | 239 DCHECK(old_and_new); |
| 234 old_and_new->first = old_focused_node_id; | 240 old_and_new->first = old_focused_node_id; |
| 235 old_and_new->second = new_focused_node_id; | 241 old_and_new->second = new_focused_node_id; |
| 236 run_loop->Quit(); | 242 run_loop->Quit(); |
| 237 } | 243 } |
| 238 | 244 |
| 239 scoped_ptr<shell::ShellTestHelper> test_helper_; | 245 scoped_ptr<mojo::shell::ShellTestHelper> test_helper_; |
| 240 scoped_ptr<TestWindowManagerClient> window_manager_client_; | 246 scoped_ptr<TestWindowManagerClient> window_manager_client_; |
| 241 TestApplicationLoader::RootAddedCallback root_added_callback_; | 247 TestApplicationLoader::RootAddedCallback root_added_callback_; |
| 242 | 248 |
| 243 DISALLOW_COPY_AND_ASSIGN(WindowManagerApiTest); | 249 DISALLOW_COPY_AND_ASSIGN(WindowManagerApiTest); |
| 244 }; | 250 }; |
| 245 | 251 |
| 246 // TODO(sky): resolve this. Temporarily disabled as ApplicationManager ends up | 252 // TODO(sky): resolve this. Temporarily disabled as ApplicationManager ends up |
| 247 // loading windowmanager twice because of the mapping of window_manager to | 253 // loading windowmanager twice because of the mapping of window_manager to |
| 248 // core_window_manager. | 254 // core_window_manager. |
| 249 TEST_F(WindowManagerApiTest, DISABLED_FocusAndActivateWindow) { | 255 TEST_F(WindowManagerApiTest, DISABLED_FocusAndActivateWindow) { |
| 250 Id first_window = OpenWindow(); | 256 Id first_window = OpenWindow(); |
| 251 window_manager_->FocusWindow(first_window, base::Bind(&EmptyResultCallback)); | 257 window_manager_->FocusWindow(first_window, base::Bind(&EmptyResultCallback)); |
| 252 TwoIds ids = WaitForFocusChange(); | 258 TwoIds ids = WaitForFocusChange(); |
| 253 EXPECT_TRUE(ids.first == 0); | 259 EXPECT_TRUE(ids.first == 0); |
| 254 EXPECT_EQ(ids.second, first_window); | 260 EXPECT_EQ(ids.second, first_window); |
| 255 | 261 |
| 256 Id second_window = OpenWindow(); | 262 Id second_window = OpenWindow(); |
| 257 window_manager_->ActivateWindow(second_window, | 263 window_manager_->ActivateWindow(second_window, |
| 258 base::Bind(&EmptyResultCallback)); | 264 base::Bind(&EmptyResultCallback)); |
| 259 ids = WaitForActiveWindowChange(); | 265 ids = WaitForActiveWindowChange(); |
| 260 EXPECT_EQ(ids.first, first_window); | 266 EXPECT_EQ(ids.first, first_window); |
| 261 EXPECT_EQ(ids.second, second_window); | 267 EXPECT_EQ(ids.second, second_window); |
| 262 } | 268 } |
| 263 | 269 |
| 264 } // namespace mojo | 270 } // namespace window_manager |
| OLD | NEW |