| 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 |