| 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 f485600541283c60a77092b43a426b4572f74135..d3b8af76be165dde3b666def8fde45f95529e5c3 100644 | 
| --- a/mojo/service_manager/service_manager_unittest.cc | 
| +++ b/mojo/service_manager/service_manager_unittest.cc | 
| @@ -44,8 +44,7 @@ class QuitMessageLoopErrorHandler : public ErrorHandler { | 
|  | 
| class TestServiceImpl : public InterfaceImpl<TestService> { | 
| public: | 
| -  explicit TestServiceImpl(ApplicationConnection* connection, | 
| -                           TestContext* context) : context_(context) { | 
| +  explicit TestServiceImpl(TestContext* context) : context_(context) { | 
| ++context_->num_impls; | 
| } | 
|  | 
| @@ -98,7 +97,8 @@ class TestClientImpl : public TestClient { | 
| }; | 
|  | 
| class TestServiceLoader : public ServiceLoader, | 
| -                          public ApplicationDelegate { | 
| +                          public ApplicationDelegate, | 
| +                          public InterfaceFactory<TestService> { | 
| public: | 
| TestServiceLoader() | 
| : context_(NULL), | 
| @@ -129,10 +129,15 @@ class TestServiceLoader : public ServiceLoader, | 
|  | 
| virtual bool ConfigureIncomingConnection( | 
| ApplicationConnection* connection) OVERRIDE { | 
| -    connection->AddService<TestServiceImpl>(context_); | 
| +    connection->AddServiceFactory(this); | 
| return true; | 
| } | 
|  | 
| +  virtual void Create(ApplicationConnection* connection, | 
| +                      InterfaceRequest<TestService> request) OVERRIDE { | 
| +    mojo::BindToRequest(new TestServiceImpl(context_), &request); | 
| +  } | 
| + | 
| scoped_ptr<ApplicationImpl> test_app_; | 
| TestContext* context_; | 
| int num_loads_; | 
| @@ -160,8 +165,7 @@ struct TesterContext { | 
| // Used to test that the requestor url will be correctly passed. | 
| class TestAImpl : public InterfaceImpl<TestA> { | 
| public: | 
| -  explicit TestAImpl(ApplicationConnection* connection, | 
| -                     TesterContext* test_context) | 
| +  TestAImpl(ApplicationConnection* connection, TesterContext* test_context) | 
| : test_context_(test_context) { | 
| connection->ConnectToApplication(kTestBURLString)->ConnectToService(&b_); | 
| } | 
| @@ -187,8 +191,7 @@ class TestAImpl : public InterfaceImpl<TestA> { | 
|  | 
| class TestBImpl : public InterfaceImpl<TestB> { | 
| public: | 
| -  explicit TestBImpl(ApplicationConnection* connection, | 
| -                     TesterContext* test_context) | 
| +  TestBImpl(ApplicationConnection* connection, TesterContext* test_context) | 
| : test_context_(test_context) { | 
| connection->ConnectToService(&c_); | 
| } | 
| @@ -217,10 +220,8 @@ class TestBImpl : public InterfaceImpl<TestB> { | 
|  | 
| class TestCImpl : public InterfaceImpl<TestC> { | 
| public: | 
| -  explicit TestCImpl(ApplicationConnection* connection, | 
| -                     TesterContext* test_context) | 
| -      : test_context_(test_context) { | 
| -  } | 
| +  TestCImpl(ApplicationConnection* connection, TesterContext* test_context) | 
| +      : test_context_(test_context) {} | 
|  | 
| virtual ~TestCImpl() { test_context_->num_c_deletes++; } | 
|  | 
| @@ -232,7 +233,11 @@ class TestCImpl : public InterfaceImpl<TestC> { | 
| TesterContext* test_context_; | 
| }; | 
|  | 
| -class Tester : public ApplicationDelegate, public ServiceLoader { | 
| +class Tester : public ApplicationDelegate, | 
| +               public ServiceLoader, | 
| +               public InterfaceFactory<TestA>, | 
| +               public InterfaceFactory<TestB>, | 
| +               public InterfaceFactory<TestC> { | 
| public: | 
| Tester(TesterContext* context, const std::string& requestor_url) | 
| : context_(context), | 
| @@ -260,9 +265,9 @@ class Tester : public ApplicationDelegate, public ServiceLoader { | 
| } | 
| // If we're coming from A, then add B, otherwise A. | 
| if (connection->GetRemoteApplicationURL() == kTestAURLString) | 
| -      connection->AddService<TestBImpl>(context_); | 
| +      connection->AddServiceFactory<TestB>(this); | 
| else | 
| -      connection->AddService<TestAImpl>(context_); | 
| +      connection->AddServiceFactory<TestA>(this); | 
| return true; | 
| } | 
|  | 
| @@ -270,10 +275,25 @@ class Tester : public ApplicationDelegate, public ServiceLoader { | 
| ApplicationConnection* connection) OVERRIDE { | 
| // If we're connecting to B, then add C. | 
| if (connection->GetRemoteApplicationURL() == kTestBURLString) | 
| -      connection->AddService<TestCImpl>(context_); | 
| +      connection->AddServiceFactory<TestC>(this); | 
| return true; | 
| } | 
|  | 
| +  virtual void Create(ApplicationConnection* connection, | 
| +                      InterfaceRequest<TestA> request) OVERRIDE { | 
| +    mojo::BindToRequest(new TestAImpl(connection, context_), &request); | 
| +  } | 
| + | 
| +  virtual void Create(ApplicationConnection* connection, | 
| +                      InterfaceRequest<TestB> request) OVERRIDE { | 
| +    mojo::BindToRequest(new TestBImpl(connection, context_), &request); | 
| +  } | 
| + | 
| +  virtual void Create(ApplicationConnection* connection, | 
| +                      InterfaceRequest<TestC> request) OVERRIDE { | 
| +    mojo::BindToRequest(new TestCImpl(connection, context_), &request); | 
| +  } | 
| + | 
| TesterContext* context_; | 
| scoped_ptr<ApplicationImpl> app_; | 
| std::string requestor_url_; | 
|  |