| Index: mojo/service_manager/service_manager_unittest.cc
|
| diff --git a/mojo/service_manager/service_manager_unittest.cc b/mojo/service_manager/service_manager_unittest.cc
|
| index 26273e788ae4057f8f9ac650003f48ab12c64361..4d467da793817848ce3599cf31bacecf44ce3cbe 100644
|
| --- a/mojo/service_manager/service_manager_unittest.cc
|
| +++ b/mojo/service_manager/service_manager_unittest.cc
|
| @@ -124,6 +124,24 @@ class ServiceManagerTest : public testing::Test, public ServiceLoader {
|
| DISALLOW_COPY_AND_ASSIGN(ServiceManagerTest);
|
| };
|
|
|
| +class TestServiceLoader : public ServiceLoader {
|
| + public:
|
| + TestServiceLoader() : num_loads_(0) {}
|
| + int num_loads() const { return num_loads_; }
|
| +
|
| + private:
|
| + virtual void LoadService(ServiceManager* manager,
|
| + const GURL& url,
|
| + ScopedShellHandle service_handle) OVERRIDE {
|
| + ++num_loads_;
|
| + }
|
| + virtual void OnServiceError(ServiceManager* manager, const GURL& url)
|
| + OVERRIDE {}
|
| +
|
| + int num_loads_;
|
| + DISALLOW_COPY_AND_ASSIGN(TestServiceLoader);
|
| +};
|
| +
|
| TEST_F(ServiceManagerTest, Basic) {
|
| test_client_->Test("test");
|
| loop_.Run();
|
| @@ -140,4 +158,37 @@ TEST_F(ServiceManagerTest, ClientError) {
|
| EXPECT_EQ(0, context_.num_impls);
|
| EXPECT_FALSE(HasFactoryForTestURL());
|
| }
|
| +
|
| +// Confirm that both urls and schemes can have their loaders explicitly set.
|
| +TEST_F(ServiceManagerTest, SetLoaders) {
|
| + ServiceManager sm;
|
| + TestServiceLoader default_loader;
|
| + TestServiceLoader url_loader;
|
| + TestServiceLoader scheme_loader;
|
| + sm.set_default_loader(&default_loader);
|
| + sm.SetLoaderForURL(&url_loader, GURL("test:test1"));
|
| + sm.SetLoaderForScheme(&scheme_loader, "test");
|
| +
|
| + // test::test1 should go to url_loader.
|
| + InterfacePipe<TestService, AnyInterface> pipe1;
|
| + sm.Connect(GURL("test:test1"), pipe1.handle_to_peer.Pass());
|
| + EXPECT_EQ(1, url_loader.num_loads());
|
| + EXPECT_EQ(0, scheme_loader.num_loads());
|
| + EXPECT_EQ(0, default_loader.num_loads());
|
| +
|
| + // test::test2 should go to scheme loader.
|
| + InterfacePipe<TestService, AnyInterface> pipe2;
|
| + sm.Connect(GURL("test:test2"), pipe2.handle_to_peer.Pass());
|
| + EXPECT_EQ(1, url_loader.num_loads());
|
| + EXPECT_EQ(1, scheme_loader.num_loads());
|
| + EXPECT_EQ(0, default_loader.num_loads());
|
| +
|
| + // http::test1 should go to default loader.
|
| + InterfacePipe<TestService, AnyInterface> pipe3;
|
| + sm.Connect(GURL("http:test1"), pipe3.handle_to_peer.Pass());
|
| + EXPECT_EQ(1, url_loader.num_loads());
|
| + EXPECT_EQ(1, scheme_loader.num_loads());
|
| + EXPECT_EQ(1, default_loader.num_loads());
|
| +}
|
| +
|
| } // namespace mojo
|
|
|