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 |