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/memory/scoped_vector.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
11 #include "mojo/application/public/cpp/application_connection.h" | 11 #include "mojo/application/public/cpp/application_connection.h" |
12 #include "mojo/application/public/cpp/application_delegate.h" | 12 #include "mojo/application/public/cpp/application_delegate.h" |
13 #include "mojo/application/public/cpp/application_impl.h" | 13 #include "mojo/application/public/cpp/application_impl.h" |
14 #include "mojo/application/public/cpp/interface_factory.h" | 14 #include "mojo/application/public/cpp/interface_factory.h" |
15 #include "mojo/application/public/interfaces/content_handler.mojom.h" | 15 #include "mojo/application/public/interfaces/content_handler.mojom.h" |
16 #include "mojo/application/public/interfaces/service_provider.mojom.h" | 16 #include "mojo/application/public/interfaces/service_provider.mojom.h" |
17 #include "mojo/public/cpp/bindings/strong_binding.h" | 17 #include "mojo/public/cpp/bindings/strong_binding.h" |
18 #include "mojo/shell/application_fetcher.h" | |
19 #include "mojo/shell/application_loader.h" | 18 #include "mojo/shell/application_loader.h" |
20 #include "mojo/shell/application_manager.h" | 19 #include "mojo/shell/application_manager.h" |
21 #include "mojo/shell/fetcher.h" | 20 #include "mojo/shell/fetcher.h" |
22 #include "mojo/shell/test.mojom.h" | 21 #include "mojo/shell/test.mojom.h" |
| 22 #include "mojo/shell/test_package_manager.h" |
23 #include "testing/gtest/include/gtest/gtest.h" | 23 #include "testing/gtest/include/gtest/gtest.h" |
24 | 24 |
25 namespace mojo { | 25 namespace mojo { |
26 namespace shell { | 26 namespace shell { |
27 namespace { | 27 namespace { |
28 | 28 |
29 const char kTestURLString[] = "test:testService"; | 29 const char kTestURLString[] = "test:testService"; |
30 const char kTestAURLString[] = "test:TestA"; | 30 const char kTestAURLString[] = "test:TestA"; |
31 const char kTestBURLString[] = "test:TestB"; | 31 const char kTestBURLString[] = "test:TestB"; |
32 | 32 |
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
449 InterfaceRequest<TestC> request) override { | 449 InterfaceRequest<TestC> request) override { |
450 new TestCImpl(connection, context_, request.Pass()); | 450 new TestCImpl(connection, context_, request.Pass()); |
451 } | 451 } |
452 | 452 |
453 TesterContext* context_; | 453 TesterContext* context_; |
454 scoped_ptr<ApplicationImpl> app_; | 454 scoped_ptr<ApplicationImpl> app_; |
455 std::string requestor_url_; | 455 std::string requestor_url_; |
456 ScopedVector<TestAImpl> a_bindings_; | 456 ScopedVector<TestAImpl> a_bindings_; |
457 }; | 457 }; |
458 | 458 |
459 class TestApplicationFetcher : public ApplicationFetcher { | 459 class AMTestPackageManager : public TestPackageManager { |
460 public: | 460 public: |
461 TestApplicationFetcher() | 461 AMTestPackageManager() |
462 : create_test_fetcher_(false), | 462 : create_test_fetcher_(false), |
463 fetcher_url_("xxx"), | 463 fetcher_url_("xxx"), |
464 mime_type_(kTestMimeType) {} | 464 mime_type_(kTestMimeType) {} |
465 ~TestApplicationFetcher() override {} | 465 ~AMTestPackageManager() override {} |
466 | 466 |
467 void set_create_test_fetcher(bool create_test_fetcher) { | 467 void set_create_test_fetcher(bool create_test_fetcher) { |
468 create_test_fetcher_ = create_test_fetcher; | 468 create_test_fetcher_ = create_test_fetcher; |
469 } | 469 } |
470 | 470 |
471 void set_fetcher_url(const GURL& url) { fetcher_url_ = url; } | 471 void set_fetcher_url(const GURL& url) { fetcher_url_ = url; } |
472 | 472 |
473 void set_mime_type(const std::string& mime_type) { mime_type_ = mime_type; } | 473 void set_mime_type(const std::string& mime_type) { mime_type_ = mime_type; } |
474 | 474 |
475 // ApplicationManager::Delegate | 475 // TestPackageManager: |
476 void SetApplicationManager(ApplicationManager* manager) override {} | |
477 GURL ResolveURL(const GURL& url) override { | 476 GURL ResolveURL(const GURL& url) override { |
478 GURL resolved_url = url; | 477 GURL resolved_url = url; |
479 // The shell automatically map mojo URLs. | 478 // The shell automatically map mojo URLs. |
480 if (resolved_url.scheme() == "mojo") { | 479 if (resolved_url.scheme() == "mojo") { |
481 url::Replacements<char> replacements; | 480 url::Replacements<char> replacements; |
482 replacements.SetScheme("file", url::Component(0, 4)); | 481 replacements.SetScheme("file", url::Component(0, 4)); |
483 resolved_url = resolved_url.ReplaceComponents(replacements); | 482 resolved_url = resolved_url.ReplaceComponents(replacements); |
484 } | 483 } |
485 return resolved_url; | 484 return resolved_url; |
486 } | 485 } |
487 void FetchRequest(URLRequestPtr request, | 486 void FetchRequest(URLRequestPtr request, |
488 const Fetcher::FetchCallback& loader_callback) override { | 487 const Fetcher::FetchCallback& loader_callback) override { |
489 if (create_test_fetcher_) | 488 if (create_test_fetcher_) |
490 new TestMimeTypeFetcher(loader_callback, fetcher_url_, mime_type_); | 489 new TestMimeTypeFetcher(loader_callback, fetcher_url_, mime_type_); |
491 } | 490 } |
492 | 491 |
493 private: | 492 private: |
494 bool create_test_fetcher_; | 493 bool create_test_fetcher_; |
495 GURL fetcher_url_; | 494 GURL fetcher_url_; |
496 std::string mime_type_; | 495 std::string mime_type_; |
497 | 496 |
498 DISALLOW_COPY_AND_ASSIGN(TestApplicationFetcher); | 497 DISALLOW_COPY_AND_ASSIGN(AMTestPackageManager); |
499 }; | 498 }; |
500 | 499 |
501 class ApplicationManagerTest : public testing::Test { | 500 class ApplicationManagerTest : public testing::Test { |
502 public: | 501 public: |
503 ApplicationManagerTest() : tester_context_(&loop_) {} | 502 ApplicationManagerTest() : tester_context_(&loop_) {} |
504 | 503 |
505 ~ApplicationManagerTest() override {} | 504 ~ApplicationManagerTest() override {} |
506 | 505 |
507 void SetUp() override { | 506 void SetUp() override { |
508 application_manager_.reset(new ApplicationManager( | 507 application_manager_.reset(new ApplicationManager( |
509 make_scoped_ptr(new TestApplicationFetcher))); | 508 make_scoped_ptr(new AMTestPackageManager))); |
510 test_loader_ = new TestApplicationLoader; | 509 test_loader_ = new TestApplicationLoader; |
511 test_loader_->set_context(&context_); | 510 test_loader_->set_context(&context_); |
512 application_manager_->set_default_loader( | 511 application_manager_->set_default_loader( |
513 scoped_ptr<ApplicationLoader>(test_loader_)); | 512 scoped_ptr<ApplicationLoader>(test_loader_)); |
514 | 513 |
515 TestServicePtr service_proxy; | 514 TestServicePtr service_proxy; |
516 application_manager_->ConnectToService(GURL(kTestURLString), | 515 application_manager_->ConnectToService(GURL(kTestURLString), |
517 &service_proxy); | 516 &service_proxy); |
518 test_client_.reset(new TestClient(service_proxy.Pass())); | 517 test_client_.reset(new TestClient(service_proxy.Pass())); |
519 } | 518 } |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
556 loop_.Run(); | 555 loop_.Run(); |
557 EXPECT_EQ(1, context_.num_impls); | 556 EXPECT_EQ(1, context_.num_impls); |
558 test_client_.reset(); | 557 test_client_.reset(); |
559 loop_.Run(); | 558 loop_.Run(); |
560 EXPECT_EQ(0, context_.num_impls); | 559 EXPECT_EQ(0, context_.num_impls); |
561 EXPECT_TRUE(HasRunningInstanceForURL(GURL(kTestURLString))); | 560 EXPECT_TRUE(HasRunningInstanceForURL(GURL(kTestURLString))); |
562 } | 561 } |
563 | 562 |
564 TEST_F(ApplicationManagerTest, Deletes) { | 563 TEST_F(ApplicationManagerTest, Deletes) { |
565 { | 564 { |
566 ApplicationManager am(make_scoped_ptr(new TestApplicationFetcher)); | 565 ApplicationManager am(make_scoped_ptr(new AMTestPackageManager)); |
567 TestApplicationLoader* default_loader = new TestApplicationLoader; | 566 TestApplicationLoader* default_loader = new TestApplicationLoader; |
568 default_loader->set_context(&context_); | 567 default_loader->set_context(&context_); |
569 TestApplicationLoader* url_loader1 = new TestApplicationLoader; | 568 TestApplicationLoader* url_loader1 = new TestApplicationLoader; |
570 TestApplicationLoader* url_loader2 = new TestApplicationLoader; | 569 TestApplicationLoader* url_loader2 = new TestApplicationLoader; |
571 url_loader1->set_context(&context_); | 570 url_loader1->set_context(&context_); |
572 url_loader2->set_context(&context_); | 571 url_loader2->set_context(&context_); |
573 am.set_default_loader(scoped_ptr<ApplicationLoader>(default_loader)); | 572 am.set_default_loader(scoped_ptr<ApplicationLoader>(default_loader)); |
574 am.SetLoaderForURL(scoped_ptr<ApplicationLoader>(url_loader1), | 573 am.SetLoaderForURL(scoped_ptr<ApplicationLoader>(url_loader1), |
575 GURL("test:test1")); | 574 GURL("test:test1")); |
576 am.SetLoaderForURL(scoped_ptr<ApplicationLoader>(url_loader2), | 575 am.SetLoaderForURL(scoped_ptr<ApplicationLoader>(url_loader2), |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
702 application_manager_->ConnectToApplication(params.Pass()); | 701 application_manager_->ConnectToApplication(params.Pass()); |
703 loop_.Run(); | 702 loop_.Run(); |
704 EXPECT_TRUE(called); | 703 EXPECT_TRUE(called); |
705 } | 704 } |
706 | 705 |
707 TEST(ApplicationManagerTest2, ContentHandlerConnectionGetsRequestorURL) { | 706 TEST(ApplicationManagerTest2, ContentHandlerConnectionGetsRequestorURL) { |
708 const GURL content_handler_url("http://test.content.handler"); | 707 const GURL content_handler_url("http://test.content.handler"); |
709 const GURL requestor_url("http://requestor.url"); | 708 const GURL requestor_url("http://requestor.url"); |
710 TestContext test_context; | 709 TestContext test_context; |
711 base::MessageLoop loop; | 710 base::MessageLoop loop; |
712 scoped_ptr<TestApplicationFetcher> test_application_fetcher( | 711 scoped_ptr<AMTestPackageManager> test_package_manager( |
713 new TestApplicationFetcher); | 712 new AMTestPackageManager); |
714 test_application_fetcher->set_create_test_fetcher(true); | 713 test_package_manager->set_create_test_fetcher(true); |
715 ApplicationManager application_manager(test_application_fetcher.Pass()); | 714 test_package_manager->RegisterContentHandler(kTestMimeType, |
| 715 content_handler_url); |
| 716 ApplicationManager application_manager(test_package_manager.Pass()); |
716 application_manager.set_default_loader(nullptr); | 717 application_manager.set_default_loader(nullptr); |
717 application_manager.RegisterContentHandler(kTestMimeType, | |
718 content_handler_url); | |
719 | 718 |
720 TestApplicationLoader* loader = new TestApplicationLoader; | 719 TestApplicationLoader* loader = new TestApplicationLoader; |
721 loader->set_context(&test_context); | 720 loader->set_context(&test_context); |
722 application_manager.SetLoaderForURL(scoped_ptr<ApplicationLoader>(loader), | 721 application_manager.SetLoaderForURL(scoped_ptr<ApplicationLoader>(loader), |
723 content_handler_url); | 722 content_handler_url); |
724 | 723 |
725 bool called = false; | 724 bool called = false; |
726 scoped_ptr<ConnectToApplicationParams> params(new ConnectToApplicationParams); | 725 scoped_ptr<ConnectToApplicationParams> params(new ConnectToApplicationParams); |
727 params->set_originator_identity(Identity(requestor_url)); | 726 params->set_originator_identity(Identity(requestor_url)); |
728 params->set_originator_filter(GetPermissiveCapabilityFilter()); | 727 params->set_originator_filter(GetPermissiveCapabilityFilter()); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
768 GURL("http://www.another_domain.org/abc"), &test_service); | 767 GURL("http://www.another_domain.org/abc"), &test_service); |
769 EXPECT_EQ(4, test_loader_->num_loads()); | 768 EXPECT_EQ(4, test_loader_->num_loads()); |
770 } | 769 } |
771 | 770 |
772 TEST(ApplicationManagerTest2, | 771 TEST(ApplicationManagerTest2, |
773 MultipleConnectionsToContentHandlerGetSameContentHandlerId) { | 772 MultipleConnectionsToContentHandlerGetSameContentHandlerId) { |
774 base::MessageLoop loop; | 773 base::MessageLoop loop; |
775 const GURL content_handler_url("http://test.content.handler"); | 774 const GURL content_handler_url("http://test.content.handler"); |
776 const GURL requestor_url("http://requestor.url"); | 775 const GURL requestor_url("http://requestor.url"); |
777 TestContext test_context; | 776 TestContext test_context; |
778 scoped_ptr<TestApplicationFetcher> test_application_fetcher( | 777 scoped_ptr<AMTestPackageManager> test_package_manager( |
779 new TestApplicationFetcher); | 778 new AMTestPackageManager); |
780 test_application_fetcher->set_fetcher_url(GURL("test:test")); | 779 test_package_manager->set_fetcher_url(GURL("test:test")); |
781 test_application_fetcher->set_create_test_fetcher(true); | 780 test_package_manager->set_create_test_fetcher(true); |
782 ApplicationManager application_manager(test_application_fetcher.Pass()); | 781 test_package_manager->RegisterContentHandler(kTestMimeType, |
| 782 content_handler_url); |
| 783 ApplicationManager application_manager(test_package_manager.Pass()); |
783 application_manager.set_default_loader(nullptr); | 784 application_manager.set_default_loader(nullptr); |
784 application_manager.RegisterContentHandler(kTestMimeType, | |
785 content_handler_url); | |
786 | 785 |
787 TestApplicationLoader* content_handler_loader = new TestApplicationLoader; | 786 TestApplicationLoader* content_handler_loader = new TestApplicationLoader; |
788 content_handler_loader->set_create_content_handler(true); | 787 content_handler_loader->set_create_content_handler(true); |
789 content_handler_loader->set_context(&test_context); | 788 content_handler_loader->set_context(&test_context); |
790 application_manager.SetLoaderForURL( | 789 application_manager.SetLoaderForURL( |
791 scoped_ptr<ApplicationLoader>(content_handler_loader), | 790 scoped_ptr<ApplicationLoader>(content_handler_loader), |
792 content_handler_url); | 791 content_handler_url); |
793 | 792 |
794 uint32_t content_handler_id; | 793 uint32_t content_handler_id; |
795 { | 794 { |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
827 EXPECT_NE(Shell::kInvalidContentHandlerID, content_handler_id2); | 826 EXPECT_NE(Shell::kInvalidContentHandlerID, content_handler_id2); |
828 } | 827 } |
829 EXPECT_EQ(content_handler_id, content_handler_id2); | 828 EXPECT_EQ(content_handler_id, content_handler_id2); |
830 } | 829 } |
831 | 830 |
832 TEST(ApplicationManagerTest2, DifferedContentHandlersGetDifferentIDs) { | 831 TEST(ApplicationManagerTest2, DifferedContentHandlersGetDifferentIDs) { |
833 base::MessageLoop loop; | 832 base::MessageLoop loop; |
834 const GURL content_handler_url("http://test.content.handler"); | 833 const GURL content_handler_url("http://test.content.handler"); |
835 const GURL requestor_url("http://requestor.url"); | 834 const GURL requestor_url("http://requestor.url"); |
836 TestContext test_context; | 835 TestContext test_context; |
837 TestApplicationFetcher* test_application_fetcher = new TestApplicationFetcher; | 836 AMTestPackageManager* test_package_manager = new AMTestPackageManager; |
838 test_application_fetcher->set_fetcher_url(GURL("test:test")); | 837 test_package_manager->set_fetcher_url(GURL("test:test")); |
839 test_application_fetcher->set_create_test_fetcher(true); | 838 test_package_manager->set_create_test_fetcher(true); |
840 ApplicationManager application_manager( | 839 test_package_manager->RegisterContentHandler(kTestMimeType, |
841 make_scoped_ptr(test_application_fetcher)); | 840 content_handler_url); |
| 841 ApplicationManager application_manager(make_scoped_ptr(test_package_manager)); |
842 application_manager.set_default_loader(nullptr); | 842 application_manager.set_default_loader(nullptr); |
843 application_manager.RegisterContentHandler(kTestMimeType, | |
844 content_handler_url); | |
845 | 843 |
846 TestApplicationLoader* content_handler_loader = new TestApplicationLoader; | 844 TestApplicationLoader* content_handler_loader = new TestApplicationLoader; |
847 content_handler_loader->set_create_content_handler(true); | 845 content_handler_loader->set_create_content_handler(true); |
848 content_handler_loader->set_context(&test_context); | 846 content_handler_loader->set_context(&test_context); |
849 application_manager.SetLoaderForURL( | 847 application_manager.SetLoaderForURL( |
850 scoped_ptr<ApplicationLoader>(content_handler_loader), | 848 scoped_ptr<ApplicationLoader>(content_handler_loader), |
851 content_handler_url); | 849 content_handler_url); |
852 | 850 |
853 uint32_t content_handler_id; | 851 uint32_t content_handler_id; |
854 { | 852 { |
855 base::RunLoop run_loop; | 853 base::RunLoop run_loop; |
856 scoped_ptr<ConnectToApplicationParams> params( | 854 scoped_ptr<ConnectToApplicationParams> params( |
857 new ConnectToApplicationParams); | 855 new ConnectToApplicationParams); |
858 params->set_originator_identity(Identity(requestor_url)); | 856 params->set_originator_identity(Identity(requestor_url)); |
859 params->set_originator_filter(GetPermissiveCapabilityFilter()); | 857 params->set_originator_filter(GetPermissiveCapabilityFilter()); |
860 params->SetURLInfo(GURL("test:test")); | 858 params->SetURLInfo(GURL("test:test")); |
861 params->set_filter(GetPermissiveCapabilityFilter()); | 859 params->set_filter(GetPermissiveCapabilityFilter()); |
862 params->set_connect_callback([&content_handler_id, &run_loop](uint32_t t) { | 860 params->set_connect_callback([&content_handler_id, &run_loop](uint32_t t) { |
863 content_handler_id = t; | 861 content_handler_id = t; |
864 run_loop.Quit(); | 862 run_loop.Quit(); |
865 }); | 863 }); |
866 application_manager.ConnectToApplication(params.Pass()); | 864 application_manager.ConnectToApplication(params.Pass()); |
867 run_loop.Run(); | 865 run_loop.Run(); |
868 EXPECT_NE(Shell::kInvalidContentHandlerID, content_handler_id); | 866 EXPECT_NE(Shell::kInvalidContentHandlerID, content_handler_id); |
869 } | 867 } |
870 | 868 |
871 const std::string mime_type2("test/mime-type2"); | 869 const std::string mime_type2("test/mime-type2"); |
872 const GURL content_handler_url2("http://test.content2.handler"); | 870 const GURL content_handler_url2("http://test.content2.handler"); |
873 test_application_fetcher->set_fetcher_url(GURL("test2:test2")); | 871 test_package_manager->set_fetcher_url(GURL("test2:test2")); |
874 test_application_fetcher->set_mime_type(mime_type2); | 872 test_package_manager->set_mime_type(mime_type2); |
875 application_manager.RegisterContentHandler(mime_type2, content_handler_url2); | 873 test_package_manager->RegisterContentHandler(mime_type2, |
| 874 content_handler_url2); |
876 | 875 |
877 TestApplicationLoader* content_handler_loader2 = new TestApplicationLoader; | 876 TestApplicationLoader* content_handler_loader2 = new TestApplicationLoader; |
878 content_handler_loader->set_create_content_handler(true); | 877 content_handler_loader->set_create_content_handler(true); |
879 content_handler_loader->set_context(&test_context); | 878 content_handler_loader->set_context(&test_context); |
880 application_manager.SetLoaderForURL( | 879 application_manager.SetLoaderForURL( |
881 scoped_ptr<ApplicationLoader>(content_handler_loader2), | 880 scoped_ptr<ApplicationLoader>(content_handler_loader2), |
882 content_handler_url2); | 881 content_handler_url2); |
883 | 882 |
884 uint32_t content_handler_id2; | 883 uint32_t content_handler_id2; |
885 { | 884 { |
(...skipping 27 matching lines...) Expand all Loading... |
913 params->set_filter(GetPermissiveCapabilityFilter()); | 912 params->set_filter(GetPermissiveCapabilityFilter()); |
914 params->set_connect_callback( | 913 params->set_connect_callback( |
915 [&content_handler_id](uint32_t t) { content_handler_id = t; }); | 914 [&content_handler_id](uint32_t t) { content_handler_id = t; }); |
916 application_manager_->ConnectToApplication(params.Pass()); | 915 application_manager_->ConnectToApplication(params.Pass()); |
917 EXPECT_EQ(0u, content_handler_id); | 916 EXPECT_EQ(0u, content_handler_id); |
918 } | 917 } |
919 | 918 |
920 } // namespace | 919 } // namespace |
921 } // namespace shell | 920 } // namespace shell |
922 } // namespace mojo | 921 } // namespace mojo |
OLD | NEW |