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/at_exit.h" | 5 #include "base/at_exit.h" |
6 #include "base/bind.h" | 6 #include "base/bind.h" |
7 #include "base/macros.h" | 7 #include "base/macros.h" |
| 8 #include "base/memory/scoped_vector.h" |
8 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
9 #include "mojo/application_manager/application_loader.h" | 10 #include "mojo/application_manager/application_loader.h" |
10 #include "mojo/application_manager/application_manager.h" | 11 #include "mojo/application_manager/application_manager.h" |
11 #include "mojo/application_manager/background_shell_application_loader.h" | |
12 #include "mojo/application_manager/test.mojom.h" | 12 #include "mojo/application_manager/test.mojom.h" |
13 #include "mojo/public/cpp/application/application_connection.h" | 13 #include "mojo/public/cpp/application/application_connection.h" |
14 #include "mojo/public/cpp/application/application_delegate.h" | 14 #include "mojo/public/cpp/application/application_delegate.h" |
15 #include "mojo/public/cpp/application/application_impl.h" | 15 #include "mojo/public/cpp/application/application_impl.h" |
16 #include "mojo/public/cpp/application/interface_factory.h" | 16 #include "mojo/public/cpp/application/interface_factory.h" |
17 #include "mojo/public/interfaces/application/service_provider.mojom.h" | 17 #include "mojo/public/interfaces/application/service_provider.mojom.h" |
18 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
19 | 19 |
20 namespace mojo { | 20 namespace mojo { |
21 namespace { | 21 namespace { |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 service_.set_client(this); | 77 service_.set_client(this); |
78 } | 78 } |
79 | 79 |
80 ~TestClientImpl() override { service_.reset(); } | 80 ~TestClientImpl() override { service_.reset(); } |
81 | 81 |
82 void AckTest() override { | 82 void AckTest() override { |
83 if (quit_after_ack_) | 83 if (quit_after_ack_) |
84 base::MessageLoop::current()->Quit(); | 84 base::MessageLoop::current()->Quit(); |
85 } | 85 } |
86 | 86 |
87 void Test(std::string test_string) { | 87 void Test(const std::string& test_string) { |
88 quit_after_ack_ = true; | 88 quit_after_ack_ = true; |
89 service_->Test(test_string); | 89 service_->Test(test_string); |
90 } | 90 } |
91 | 91 |
92 private: | 92 private: |
93 TestServicePtr service_; | 93 TestServicePtr service_; |
94 bool quit_after_ack_; | 94 bool quit_after_ack_; |
95 DISALLOW_COPY_AND_ASSIGN(TestClientImpl); | 95 DISALLOW_COPY_AND_ASSIGN(TestClientImpl); |
96 }; | 96 }; |
97 | 97 |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 int num_a_deletes_; | 231 int num_a_deletes_; |
232 int num_b_deletes_; | 232 int num_b_deletes_; |
233 int num_c_deletes_; | 233 int num_c_deletes_; |
234 bool tester_called_quit_; | 234 bool tester_called_quit_; |
235 bool a_called_quit_; | 235 bool a_called_quit_; |
236 | 236 |
237 base::MessageLoop* loop_; | 237 base::MessageLoop* loop_; |
238 }; | 238 }; |
239 | 239 |
240 // Used to test that the requestor url will be correctly passed. | 240 // Used to test that the requestor url will be correctly passed. |
241 class TestAImpl : public InterfaceImpl<TestA> { | 241 class TestAImpl : public TestA { |
242 public: | 242 public: |
243 TestAImpl(ApplicationConnection* connection, TesterContext* test_context) | 243 TestAImpl(ApplicationConnection* connection, |
244 : test_context_(test_context) { | 244 TesterContext* test_context, |
| 245 InterfaceRequest<TestA> request) |
| 246 : test_context_(test_context), |
| 247 binding_(this, request.Pass()) { |
245 connection->ConnectToApplication(kTestBURLString)->ConnectToService(&b_); | 248 connection->ConnectToApplication(kTestBURLString)->ConnectToService(&b_); |
246 } | 249 } |
247 ~TestAImpl() override { | 250 ~TestAImpl() override { |
248 test_context_->IncrementNumADeletes(); | 251 test_context_->IncrementNumADeletes(); |
249 if (base::MessageLoop::current()->is_running()) | 252 if (base::MessageLoop::current()->is_running()) |
250 Quit(); | 253 Quit(); |
251 } | 254 } |
252 | 255 |
253 private: | 256 private: |
254 void CallB() override { | 257 void CallB() override { |
255 b_->B(base::Bind(&TestAImpl::Quit, base::Unretained(this))); | 258 b_->B(base::Bind(&TestAImpl::Quit, base::Unretained(this))); |
256 } | 259 } |
257 | 260 |
258 void CallCFromB() override { | 261 void CallCFromB() override { |
259 b_->CallC(base::Bind(&TestAImpl::Quit, base::Unretained(this))); | 262 b_->CallC(base::Bind(&TestAImpl::Quit, base::Unretained(this))); |
260 } | 263 } |
261 | 264 |
262 void Quit() { | 265 void Quit() { |
263 base::MessageLoop::current()->Quit(); | 266 base::MessageLoop::current()->Quit(); |
264 test_context_->set_a_called_quit(); | 267 test_context_->set_a_called_quit(); |
265 test_context_->QuitSoon(); | 268 test_context_->QuitSoon(); |
266 } | 269 } |
267 | 270 |
268 TesterContext* test_context_; | 271 TesterContext* test_context_; |
269 TestBPtr b_; | 272 TestBPtr b_; |
| 273 Binding<TestA> binding_; |
270 }; | 274 }; |
271 | 275 |
272 class TestBImpl : public InterfaceImpl<TestB> { | 276 class TestBImpl : public InterfaceImpl<TestB> { |
273 public: | 277 public: |
274 TestBImpl(ApplicationConnection* connection, TesterContext* test_context) | 278 TestBImpl(ApplicationConnection* connection, TesterContext* test_context) |
275 : test_context_(test_context) { | 279 : test_context_(test_context) { |
276 connection->ConnectToService(&c_); | 280 connection->ConnectToService(&c_); |
277 } | 281 } |
278 | 282 |
279 ~TestBImpl() override { | 283 ~TestBImpl() override { |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
352 | 356 |
353 bool ConfigureOutgoingConnection(ApplicationConnection* connection) override { | 357 bool ConfigureOutgoingConnection(ApplicationConnection* connection) override { |
354 // If we're connecting to B, then add C. | 358 // If we're connecting to B, then add C. |
355 if (connection->GetRemoteApplicationURL() == kTestBURLString) | 359 if (connection->GetRemoteApplicationURL() == kTestBURLString) |
356 connection->AddService<TestC>(this); | 360 connection->AddService<TestC>(this); |
357 return true; | 361 return true; |
358 } | 362 } |
359 | 363 |
360 void Create(ApplicationConnection* connection, | 364 void Create(ApplicationConnection* connection, |
361 InterfaceRequest<TestA> request) override { | 365 InterfaceRequest<TestA> request) override { |
362 BindToRequest(new TestAImpl(connection, context_), &request); | 366 a_bindings_.push_back(new TestAImpl(connection, context_, request.Pass())); |
363 } | 367 } |
364 | 368 |
365 void Create(ApplicationConnection* connection, | 369 void Create(ApplicationConnection* connection, |
366 InterfaceRequest<TestB> request) override { | 370 InterfaceRequest<TestB> request) override { |
367 BindToRequest(new TestBImpl(connection, context_), &request); | 371 BindToRequest(new TestBImpl(connection, context_), &request); |
368 } | 372 } |
369 | 373 |
370 void Create(ApplicationConnection* connection, | 374 void Create(ApplicationConnection* connection, |
371 InterfaceRequest<TestC> request) override { | 375 InterfaceRequest<TestC> request) override { |
372 BindToRequest(new TestCImpl(connection, context_), &request); | 376 BindToRequest(new TestCImpl(connection, context_), &request); |
373 } | 377 } |
374 | 378 |
375 TesterContext* context_; | 379 TesterContext* context_; |
376 scoped_ptr<ApplicationImpl> app_; | 380 scoped_ptr<ApplicationImpl> app_; |
377 std::string requestor_url_; | 381 std::string requestor_url_; |
| 382 ScopedVector<TestAImpl> a_bindings_; |
378 }; | 383 }; |
379 | 384 |
380 class TestServiceInterceptor : public ApplicationManager::Interceptor { | 385 class TestServiceInterceptor : public ApplicationManager::Interceptor { |
381 public: | 386 public: |
382 TestServiceInterceptor() : call_count_(0) {} | 387 TestServiceInterceptor() : call_count_(0) {} |
383 | 388 |
384 ServiceProviderPtr OnConnectToClient( | 389 ServiceProviderPtr OnConnectToClient( |
385 const GURL& url, | 390 const GURL& url, |
386 ServiceProviderPtr service_provider) override { | 391 ServiceProviderPtr service_provider) override { |
387 ++call_count_; | 392 ++call_count_; |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
443 application_manager_->ConnectToService(GURL(kTestURLString), | 448 application_manager_->ConnectToService(GURL(kTestURLString), |
444 &service_proxy); | 449 &service_proxy); |
445 test_client_.reset(new TestClientImpl(service_proxy.Pass())); | 450 test_client_.reset(new TestClientImpl(service_proxy.Pass())); |
446 } | 451 } |
447 | 452 |
448 void TearDown() override { | 453 void TearDown() override { |
449 test_client_.reset(NULL); | 454 test_client_.reset(NULL); |
450 application_manager_.reset(NULL); | 455 application_manager_.reset(NULL); |
451 } | 456 } |
452 | 457 |
453 scoped_ptr<BackgroundShellApplicationLoader> MakeLoader( | |
454 const std::string& requestor_url) { | |
455 scoped_ptr<ApplicationLoader> real_loader( | |
456 new Tester(&tester_context_, requestor_url)); | |
457 scoped_ptr<BackgroundShellApplicationLoader> loader( | |
458 new BackgroundShellApplicationLoader(real_loader.Pass(), | |
459 std::string(), | |
460 base::MessageLoop::TYPE_DEFAULT)); | |
461 return loader.Pass(); | |
462 } | |
463 | |
464 void AddLoaderForURL(const GURL& url, const std::string& requestor_url) { | 458 void AddLoaderForURL(const GURL& url, const std::string& requestor_url) { |
465 application_manager_->SetLoaderForURL(MakeLoader(requestor_url), url); | 459 application_manager_->SetLoaderForURL( |
| 460 make_scoped_ptr(new Tester(&tester_context_, requestor_url)), url); |
466 } | 461 } |
467 | 462 |
468 bool HasFactoryForTestURL() { | 463 bool HasFactoryForTestURL() { |
469 ApplicationManager::TestAPI manager_test_api(application_manager_.get()); | 464 ApplicationManager::TestAPI manager_test_api(application_manager_.get()); |
470 return manager_test_api.HasFactoryForURL(GURL(kTestURLString)); | 465 return manager_test_api.HasFactoryForURL(GURL(kTestURLString)); |
471 } | 466 } |
472 | 467 |
473 protected: | 468 protected: |
474 base::ShadowingAtExitManager at_exit_; | 469 base::ShadowingAtExitManager at_exit_; |
475 TestDelegate test_delegate_; | 470 TestDelegate test_delegate_; |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
711 TestServicePtr test_service2; | 706 TestServicePtr test_service2; |
712 application_manager_->ConnectToService(GURL("foo:foo2"), &test_service2); | 707 application_manager_->ConnectToService(GURL("foo:foo2"), &test_service2); |
713 EXPECT_EQ(2, test_loader_->num_loads()); | 708 EXPECT_EQ(2, test_loader_->num_loads()); |
714 | 709 |
715 TestServicePtr test_service3; | 710 TestServicePtr test_service3; |
716 application_manager_->ConnectToService(GURL("bar:bar"), &test_service2); | 711 application_manager_->ConnectToService(GURL("bar:bar"), &test_service2); |
717 EXPECT_EQ(3, test_loader_->num_loads()); | 712 EXPECT_EQ(3, test_loader_->num_loads()); |
718 } | 713 } |
719 | 714 |
720 } // namespace mojo | 715 } // namespace mojo |
OLD | NEW |