| 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/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
| 8 #include "mojo/public/cpp/application/application_connection.h" | 8 #include "mojo/public/cpp/application/application_connection.h" |
| 9 #include "mojo/public/cpp/application/application_delegate.h" | 9 #include "mojo/public/cpp/application/application_delegate.h" |
| 10 #include "mojo/public/cpp/application/application_impl.h" | 10 #include "mojo/public/cpp/application/application_impl.h" |
| 11 #include "mojo/public/cpp/application/interface_factory.h" |
| 11 #include "mojo/public/interfaces/service_provider/service_provider.mojom.h" | 12 #include "mojo/public/interfaces/service_provider/service_provider.mojom.h" |
| 12 #include "mojo/service_manager/service_loader.h" | 13 #include "mojo/service_manager/service_loader.h" |
| 13 #include "mojo/service_manager/service_manager.h" | 14 #include "mojo/service_manager/service_manager.h" |
| 14 #include "mojo/service_manager/test.mojom.h" | 15 #include "mojo/service_manager/test.mojom.h" |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 16 | 17 |
| 17 namespace mojo { | 18 namespace mojo { |
| 18 namespace { | 19 namespace { |
| 19 | 20 |
| 20 const char kTestURLString[] = "test:testService"; | 21 const char kTestURLString[] = "test:testService"; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 37 virtual void OnConnectionError() OVERRIDE { | 38 virtual void OnConnectionError() OVERRIDE { |
| 38 base::MessageLoop::current()->QuitWhenIdle(); | 39 base::MessageLoop::current()->QuitWhenIdle(); |
| 39 } | 40 } |
| 40 | 41 |
| 41 private: | 42 private: |
| 42 DISALLOW_COPY_AND_ASSIGN(QuitMessageLoopErrorHandler); | 43 DISALLOW_COPY_AND_ASSIGN(QuitMessageLoopErrorHandler); |
| 43 }; | 44 }; |
| 44 | 45 |
| 45 class TestServiceImpl : public InterfaceImpl<TestService> { | 46 class TestServiceImpl : public InterfaceImpl<TestService> { |
| 46 public: | 47 public: |
| 47 explicit TestServiceImpl(ApplicationConnection* connection, | 48 explicit TestServiceImpl(TestContext* context) : context_(context) { |
| 48 TestContext* context) : context_(context) { | |
| 49 ++context_->num_impls; | 49 ++context_->num_impls; |
| 50 } | 50 } |
| 51 | 51 |
| 52 virtual ~TestServiceImpl() { | 52 virtual ~TestServiceImpl() { |
| 53 --context_->num_impls; | 53 --context_->num_impls; |
| 54 } | 54 } |
| 55 | 55 |
| 56 virtual void OnConnectionError() OVERRIDE { | 56 virtual void OnConnectionError() OVERRIDE { |
| 57 if (!base::MessageLoop::current()->is_running()) | 57 if (!base::MessageLoop::current()->is_running()) |
| 58 return; | 58 return; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 service_->Test(test_string); | 91 service_->Test(test_string); |
| 92 } | 92 } |
| 93 | 93 |
| 94 private: | 94 private: |
| 95 TestServicePtr service_; | 95 TestServicePtr service_; |
| 96 bool quit_after_ack_; | 96 bool quit_after_ack_; |
| 97 DISALLOW_COPY_AND_ASSIGN(TestClientImpl); | 97 DISALLOW_COPY_AND_ASSIGN(TestClientImpl); |
| 98 }; | 98 }; |
| 99 | 99 |
| 100 class TestServiceLoader : public ServiceLoader, | 100 class TestServiceLoader : public ServiceLoader, |
| 101 public ApplicationDelegate { | 101 public ApplicationDelegate, |
| 102 public InterfaceFactory<TestService> { |
| 102 public: | 103 public: |
| 103 TestServiceLoader() | 104 TestServiceLoader() |
| 104 : context_(NULL), | 105 : context_(NULL), |
| 105 num_loads_(0) { | 106 num_loads_(0) { |
| 106 } | 107 } |
| 107 | 108 |
| 108 virtual ~TestServiceLoader() { | 109 virtual ~TestServiceLoader() { |
| 109 if (context_) | 110 if (context_) |
| 110 ++context_->num_loader_deletes; | 111 ++context_->num_loader_deletes; |
| 111 test_app_.reset(NULL); | 112 test_app_.reset(NULL); |
| 112 } | 113 } |
| 113 | 114 |
| 114 void set_context(TestContext* context) { context_ = context; } | 115 void set_context(TestContext* context) { context_ = context; } |
| 115 int num_loads() const { return num_loads_; } | 116 int num_loads() const { return num_loads_; } |
| 116 | 117 |
| 117 private: | 118 private: |
| 119 // ServiceLoader implementation. |
| 118 virtual void LoadService( | 120 virtual void LoadService( |
| 119 ServiceManager* manager, | 121 ServiceManager* manager, |
| 120 const GURL& url, | 122 const GURL& url, |
| 121 ScopedMessagePipeHandle service_provider_handle) OVERRIDE { | 123 ScopedMessagePipeHandle service_provider_handle) OVERRIDE { |
| 122 ++num_loads_; | 124 ++num_loads_; |
| 123 test_app_.reset(new ApplicationImpl(this, service_provider_handle.Pass())); | 125 test_app_.reset(new ApplicationImpl(this, service_provider_handle.Pass())); |
| 124 } | 126 } |
| 125 | 127 |
| 126 virtual void OnServiceError(ServiceManager* manager, | 128 virtual void OnServiceError(ServiceManager* manager, |
| 127 const GURL& url) OVERRIDE { | 129 const GURL& url) OVERRIDE { |
| 128 } | 130 } |
| 129 | 131 |
| 132 // ApplicationDelegate implementation. |
| 130 virtual bool ConfigureIncomingConnection( | 133 virtual bool ConfigureIncomingConnection( |
| 131 ApplicationConnection* connection) OVERRIDE { | 134 ApplicationConnection* connection) OVERRIDE { |
| 132 connection->AddService<TestServiceImpl>(context_); | 135 connection->AddService(this); |
| 133 return true; | 136 return true; |
| 134 } | 137 } |
| 135 | 138 |
| 139 // InterfaceFactory implementation. |
| 140 virtual void Create(ApplicationConnection* connection, |
| 141 InterfaceRequest<TestService> request) OVERRIDE { |
| 142 BindToRequest(new TestServiceImpl(context_), &request); |
| 143 } |
| 144 |
| 136 scoped_ptr<ApplicationImpl> test_app_; | 145 scoped_ptr<ApplicationImpl> test_app_; |
| 137 TestContext* context_; | 146 TestContext* context_; |
| 138 int num_loads_; | 147 int num_loads_; |
| 139 DISALLOW_COPY_AND_ASSIGN(TestServiceLoader); | 148 DISALLOW_COPY_AND_ASSIGN(TestServiceLoader); |
| 140 }; | 149 }; |
| 141 | 150 |
| 142 struct TesterContext { | 151 struct TesterContext { |
| 143 TesterContext() | 152 TesterContext() |
| 144 : num_b_calls(0), | 153 : num_b_calls(0), |
| 145 num_c_calls(0), | 154 num_c_calls(0), |
| 146 num_a_deletes(0), | 155 num_a_deletes(0), |
| 147 num_b_deletes(0), | 156 num_b_deletes(0), |
| 148 num_c_deletes(0), | 157 num_c_deletes(0), |
| 149 tester_called_quit(false), | 158 tester_called_quit(false), |
| 150 a_called_quit(false) {} | 159 a_called_quit(false) {} |
| 151 int num_b_calls; | 160 int num_b_calls; |
| 152 int num_c_calls; | 161 int num_c_calls; |
| 153 int num_a_deletes; | 162 int num_a_deletes; |
| 154 int num_b_deletes; | 163 int num_b_deletes; |
| 155 int num_c_deletes; | 164 int num_c_deletes; |
| 156 bool tester_called_quit; | 165 bool tester_called_quit; |
| 157 bool a_called_quit; | 166 bool a_called_quit; |
| 158 }; | 167 }; |
| 159 | 168 |
| 160 // Used to test that the requestor url will be correctly passed. | 169 // Used to test that the requestor url will be correctly passed. |
| 161 class TestAImpl : public InterfaceImpl<TestA> { | 170 class TestAImpl : public InterfaceImpl<TestA> { |
| 162 public: | 171 public: |
| 163 explicit TestAImpl(ApplicationConnection* connection, | 172 TestAImpl(ApplicationConnection* connection, TesterContext* test_context) |
| 164 TesterContext* test_context) | |
| 165 : test_context_(test_context) { | 173 : test_context_(test_context) { |
| 166 connection->ConnectToApplication(kTestBURLString)->ConnectToService(&b_); | 174 connection->ConnectToApplication(kTestBURLString)->ConnectToService(&b_); |
| 167 } | 175 } |
| 168 virtual ~TestAImpl() { test_context_->num_a_deletes++; } | 176 virtual ~TestAImpl() { test_context_->num_a_deletes++; } |
| 169 | 177 |
| 170 private: | 178 private: |
| 171 virtual void CallB() OVERRIDE { | 179 virtual void CallB() OVERRIDE { |
| 172 b_->B(base::Bind(&TestAImpl::Quit, base::Unretained(this))); | 180 b_->B(base::Bind(&TestAImpl::Quit, base::Unretained(this))); |
| 173 } | 181 } |
| 174 | 182 |
| 175 virtual void CallCFromB() OVERRIDE { | 183 virtual void CallCFromB() OVERRIDE { |
| 176 b_->CallC(base::Bind(&TestAImpl::Quit, base::Unretained(this))); | 184 b_->CallC(base::Bind(&TestAImpl::Quit, base::Unretained(this))); |
| 177 } | 185 } |
| 178 | 186 |
| 179 void Quit() { | 187 void Quit() { |
| 180 test_context_->a_called_quit = true; | 188 test_context_->a_called_quit = true; |
| 181 base::MessageLoop::current()->Quit(); | 189 base::MessageLoop::current()->Quit(); |
| 182 } | 190 } |
| 183 | 191 |
| 184 TesterContext* test_context_; | 192 TesterContext* test_context_; |
| 185 TestBPtr b_; | 193 TestBPtr b_; |
| 186 }; | 194 }; |
| 187 | 195 |
| 188 class TestBImpl : public InterfaceImpl<TestB> { | 196 class TestBImpl : public InterfaceImpl<TestB> { |
| 189 public: | 197 public: |
| 190 explicit TestBImpl(ApplicationConnection* connection, | 198 TestBImpl(ApplicationConnection* connection, TesterContext* test_context) |
| 191 TesterContext* test_context) | |
| 192 : test_context_(test_context) { | 199 : test_context_(test_context) { |
| 193 connection->ConnectToService(&c_); | 200 connection->ConnectToService(&c_); |
| 194 } | 201 } |
| 195 | 202 |
| 196 virtual ~TestBImpl() { | 203 virtual ~TestBImpl() { |
| 197 test_context_->num_b_deletes++; | 204 test_context_->num_b_deletes++; |
| 198 if (!base::MessageLoop::current()->is_running()) | 205 if (!base::MessageLoop::current()->is_running()) |
| 199 return; | 206 return; |
| 200 base::MessageLoop::current()->Quit(); | 207 base::MessageLoop::current()->Quit(); |
| 201 } | 208 } |
| 202 | 209 |
| 203 private: | 210 private: |
| 204 virtual void B(const mojo::Callback<void()>& callback) OVERRIDE { | 211 virtual void B(const mojo::Callback<void()>& callback) OVERRIDE { |
| 205 ++test_context_->num_b_calls; | 212 ++test_context_->num_b_calls; |
| 206 callback.Run(); | 213 callback.Run(); |
| 207 } | 214 } |
| 208 | 215 |
| 209 virtual void CallC(const mojo::Callback<void()>& callback) OVERRIDE { | 216 virtual void CallC(const mojo::Callback<void()>& callback) OVERRIDE { |
| 210 ++test_context_->num_b_calls; | 217 ++test_context_->num_b_calls; |
| 211 c_->C(callback); | 218 c_->C(callback); |
| 212 } | 219 } |
| 213 | 220 |
| 214 TesterContext* test_context_; | 221 TesterContext* test_context_; |
| 215 TestCPtr c_; | 222 TestCPtr c_; |
| 216 }; | 223 }; |
| 217 | 224 |
| 218 class TestCImpl : public InterfaceImpl<TestC> { | 225 class TestCImpl : public InterfaceImpl<TestC> { |
| 219 public: | 226 public: |
| 220 explicit TestCImpl(ApplicationConnection* connection, | 227 TestCImpl(ApplicationConnection* connection, TesterContext* test_context) |
| 221 TesterContext* test_context) | 228 : test_context_(test_context) {} |
| 222 : test_context_(test_context) { | |
| 223 } | |
| 224 | 229 |
| 225 virtual ~TestCImpl() { test_context_->num_c_deletes++; } | 230 virtual ~TestCImpl() { test_context_->num_c_deletes++; } |
| 226 | 231 |
| 227 private: | 232 private: |
| 228 virtual void C(const mojo::Callback<void()>& callback) OVERRIDE { | 233 virtual void C(const mojo::Callback<void()>& callback) OVERRIDE { |
| 229 ++test_context_->num_c_calls; | 234 ++test_context_->num_c_calls; |
| 230 callback.Run(); | 235 callback.Run(); |
| 231 } | 236 } |
| 232 TesterContext* test_context_; | 237 TesterContext* test_context_; |
| 233 }; | 238 }; |
| 234 | 239 |
| 235 class Tester : public ApplicationDelegate, public ServiceLoader { | 240 class Tester : public ApplicationDelegate, |
| 241 public ServiceLoader, |
| 242 public InterfaceFactory<TestA>, |
| 243 public InterfaceFactory<TestB>, |
| 244 public InterfaceFactory<TestC> { |
| 236 public: | 245 public: |
| 237 Tester(TesterContext* context, const std::string& requestor_url) | 246 Tester(TesterContext* context, const std::string& requestor_url) |
| 238 : context_(context), | 247 : context_(context), |
| 239 requestor_url_(requestor_url) {} | 248 requestor_url_(requestor_url) {} |
| 240 virtual ~Tester() {} | 249 virtual ~Tester() {} |
| 241 | 250 |
| 242 private: | 251 private: |
| 243 virtual void LoadService( | 252 virtual void LoadService( |
| 244 ServiceManager* manager, | 253 ServiceManager* manager, |
| 245 const GURL& url, | 254 const GURL& url, |
| 246 ScopedMessagePipeHandle shell_handle) OVERRIDE { | 255 ScopedMessagePipeHandle shell_handle) OVERRIDE { |
| 247 app_.reset(new ApplicationImpl(this, shell_handle.Pass())); | 256 app_.reset(new ApplicationImpl(this, shell_handle.Pass())); |
| 248 } | 257 } |
| 249 | 258 |
| 250 virtual void OnServiceError(ServiceManager* manager, | 259 virtual void OnServiceError(ServiceManager* manager, |
| 251 const GURL& url) OVERRIDE {} | 260 const GURL& url) OVERRIDE {} |
| 252 | 261 |
| 253 virtual bool ConfigureIncomingConnection( | 262 virtual bool ConfigureIncomingConnection( |
| 254 ApplicationConnection* connection) OVERRIDE { | 263 ApplicationConnection* connection) OVERRIDE { |
| 255 if (!requestor_url_.empty() && | 264 if (!requestor_url_.empty() && |
| 256 requestor_url_ != connection->GetRemoteApplicationURL()) { | 265 requestor_url_ != connection->GetRemoteApplicationURL()) { |
| 257 context_->tester_called_quit = true; | 266 context_->tester_called_quit = true; |
| 258 base::MessageLoop::current()->Quit(); | 267 base::MessageLoop::current()->Quit(); |
| 259 return false; | 268 return false; |
| 260 } | 269 } |
| 261 // If we're coming from A, then add B, otherwise A. | 270 // If we're coming from A, then add B, otherwise A. |
| 262 if (connection->GetRemoteApplicationURL() == kTestAURLString) | 271 if (connection->GetRemoteApplicationURL() == kTestAURLString) |
| 263 connection->AddService<TestBImpl>(context_); | 272 connection->AddService<TestB>(this); |
| 264 else | 273 else |
| 265 connection->AddService<TestAImpl>(context_); | 274 connection->AddService<TestA>(this); |
| 266 return true; | 275 return true; |
| 267 } | 276 } |
| 268 | 277 |
| 269 virtual bool ConfigureOutgoingConnection( | 278 virtual bool ConfigureOutgoingConnection( |
| 270 ApplicationConnection* connection) OVERRIDE { | 279 ApplicationConnection* connection) OVERRIDE { |
| 271 // If we're connecting to B, then add C. | 280 // If we're connecting to B, then add C. |
| 272 if (connection->GetRemoteApplicationURL() == kTestBURLString) | 281 if (connection->GetRemoteApplicationURL() == kTestBURLString) |
| 273 connection->AddService<TestCImpl>(context_); | 282 connection->AddService<TestC>(this); |
| 274 return true; | 283 return true; |
| 275 } | 284 } |
| 276 | 285 |
| 286 virtual void Create(ApplicationConnection* connection, |
| 287 InterfaceRequest<TestA> request) OVERRIDE { |
| 288 BindToRequest(new TestAImpl(connection, context_), &request); |
| 289 } |
| 290 |
| 291 virtual void Create(ApplicationConnection* connection, |
| 292 InterfaceRequest<TestB> request) OVERRIDE { |
| 293 BindToRequest(new TestBImpl(connection, context_), &request); |
| 294 } |
| 295 |
| 296 virtual void Create(ApplicationConnection* connection, |
| 297 InterfaceRequest<TestC> request) OVERRIDE { |
| 298 BindToRequest(new TestCImpl(connection, context_), &request); |
| 299 } |
| 300 |
| 277 TesterContext* context_; | 301 TesterContext* context_; |
| 278 scoped_ptr<ApplicationImpl> app_; | 302 scoped_ptr<ApplicationImpl> app_; |
| 279 std::string requestor_url_; | 303 std::string requestor_url_; |
| 280 }; | 304 }; |
| 281 | 305 |
| 282 class TestServiceInterceptor : public ServiceManager::Interceptor { | 306 class TestServiceInterceptor : public ServiceManager::Interceptor { |
| 283 public: | 307 public: |
| 284 TestServiceInterceptor() : call_count_(0) {} | 308 TestServiceInterceptor() : call_count_(0) {} |
| 285 | 309 |
| 286 virtual ServiceProviderPtr OnConnectToClient( | 310 virtual ServiceProviderPtr OnConnectToClient( |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 411 | 435 |
| 412 // http::test1 should go to default loader. | 436 // http::test1 should go to default loader. |
| 413 sm.ConnectToService(GURL("http:test1"), &test_service); | 437 sm.ConnectToService(GURL("http:test1"), &test_service); |
| 414 EXPECT_EQ(1, url_loader->num_loads()); | 438 EXPECT_EQ(1, url_loader->num_loads()); |
| 415 EXPECT_EQ(1, scheme_loader->num_loads()); | 439 EXPECT_EQ(1, scheme_loader->num_loads()); |
| 416 EXPECT_EQ(1, default_loader->num_loads()); | 440 EXPECT_EQ(1, default_loader->num_loads()); |
| 417 } | 441 } |
| 418 | 442 |
| 419 // Confirm that the url of a service is correctly passed to another service that | 443 // Confirm that the url of a service is correctly passed to another service that |
| 420 // it loads. | 444 // it loads. |
| 421 TEST_F(ServiceManagerTest, ACallB) { | 445 // http://crbug.com/396300 |
| 446 TEST_F(ServiceManagerTest, DISABLED_ACallB) { |
| 422 TesterContext context; | 447 TesterContext context; |
| 423 ServiceManager sm; | 448 ServiceManager sm; |
| 424 | 449 |
| 425 // Any url can load a. | 450 // Any url can load a. |
| 426 sm.SetLoaderForURL( | 451 sm.SetLoaderForURL( |
| 427 scoped_ptr<ServiceLoader>(new Tester(&context, std::string())), | 452 scoped_ptr<ServiceLoader>(new Tester(&context, std::string())), |
| 428 GURL(kTestAURLString)); | 453 GURL(kTestAURLString)); |
| 429 | 454 |
| 430 // Only a can load b. | 455 // Only a can load b. |
| 431 sm.SetLoaderForURL( | 456 sm.SetLoaderForURL( |
| 432 scoped_ptr<ServiceLoader>( | 457 scoped_ptr<ServiceLoader>( |
| 433 new Tester(&context, kTestAURLString)), | 458 new Tester(&context, kTestAURLString)), |
| 434 GURL(kTestBURLString)); | 459 GURL(kTestBURLString)); |
| 435 | 460 |
| 436 TestAPtr a; | 461 TestAPtr a; |
| 437 sm.ConnectToService(GURL(kTestAURLString), &a); | 462 sm.ConnectToService(GURL(kTestAURLString), &a); |
| 438 a->CallB(); | 463 a->CallB(); |
| 439 loop_.Run(); | 464 loop_.Run(); |
| 440 EXPECT_EQ(1, context.num_b_calls); | 465 EXPECT_EQ(1, context.num_b_calls); |
| 441 EXPECT_TRUE(context.a_called_quit); | 466 EXPECT_TRUE(context.a_called_quit); |
| 442 } | 467 } |
| 443 | 468 |
| 444 // A calls B which calls C. | 469 // A calls B which calls C. |
| 445 TEST_F(ServiceManagerTest, BCallC) { | 470 // http://crbug.com/396300 |
| 471 TEST_F(ServiceManagerTest, DISABLED_BCallC) { |
| 446 TesterContext context; | 472 TesterContext context; |
| 447 ServiceManager sm; | 473 ServiceManager sm; |
| 448 | 474 |
| 449 // Any url can load a. | 475 // Any url can load a. |
| 450 sm.SetLoaderForURL( | 476 sm.SetLoaderForURL( |
| 451 scoped_ptr<ServiceLoader>(new Tester(&context, std::string())), | 477 scoped_ptr<ServiceLoader>(new Tester(&context, std::string())), |
| 452 GURL(kTestAURLString)); | 478 GURL(kTestAURLString)); |
| 453 | 479 |
| 454 // Only a can load b. | 480 // Only a can load b. |
| 455 sm.SetLoaderForURL( | 481 sm.SetLoaderForURL( |
| 456 scoped_ptr<ServiceLoader>( | 482 scoped_ptr<ServiceLoader>( |
| 457 new Tester(&context, kTestAURLString)), | 483 new Tester(&context, kTestAURLString)), |
| 458 GURL(kTestBURLString)); | 484 GURL(kTestBURLString)); |
| 459 | 485 |
| 460 TestAPtr a; | 486 TestAPtr a; |
| 461 sm.ConnectToService(GURL(kTestAURLString), &a); | 487 sm.ConnectToService(GURL(kTestAURLString), &a); |
| 462 a->CallCFromB(); | 488 a->CallCFromB(); |
| 463 loop_.Run(); | 489 loop_.Run(); |
| 464 | 490 |
| 465 EXPECT_EQ(1, context.num_b_calls); | 491 EXPECT_EQ(1, context.num_b_calls); |
| 466 EXPECT_EQ(1, context.num_c_calls); | 492 EXPECT_EQ(1, context.num_c_calls); |
| 467 EXPECT_TRUE(context.a_called_quit); | 493 EXPECT_TRUE(context.a_called_quit); |
| 468 } | 494 } |
| 469 | 495 |
| 470 // Confirm that a service impl will be deleted if the app that connected to | 496 // Confirm that a service impl will be deleted if the app that connected to |
| 471 // it goes away. | 497 // it goes away. |
| 472 TEST_F(ServiceManagerTest, BDeleted) { | 498 // http://crbug.com/396300 |
| 499 TEST_F(ServiceManagerTest, DISABLED_BDeleted) { |
| 473 TesterContext context; | 500 TesterContext context; |
| 474 ServiceManager sm; | 501 ServiceManager sm; |
| 475 | 502 |
| 476 sm.SetLoaderForURL( | 503 sm.SetLoaderForURL( |
| 477 scoped_ptr<ServiceLoader>(new Tester(&context, std::string())), | 504 scoped_ptr<ServiceLoader>(new Tester(&context, std::string())), |
| 478 GURL(kTestAURLString)); | 505 GURL(kTestAURLString)); |
| 479 | 506 |
| 480 sm.SetLoaderForURL( | 507 sm.SetLoaderForURL( |
| 481 scoped_ptr<ServiceLoader>( new Tester(&context, std::string())), | 508 scoped_ptr<ServiceLoader>( new Tester(&context, std::string())), |
| 482 GURL(kTestBURLString)); | 509 GURL(kTestBURLString)); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 546 std::string url("test:test3"); | 573 std::string url("test:test3"); |
| 547 TestServicePtr test_service; | 574 TestServicePtr test_service; |
| 548 sm.ConnectToService(GURL(url), &test_service); | 575 sm.ConnectToService(GURL(url), &test_service); |
| 549 | 576 |
| 550 EXPECT_EQ(1, interceptor.call_count()); | 577 EXPECT_EQ(1, interceptor.call_count()); |
| 551 EXPECT_EQ(url, interceptor.url_spec()); | 578 EXPECT_EQ(url, interceptor.url_spec()); |
| 552 EXPECT_EQ(1, default_loader->num_loads()); | 579 EXPECT_EQ(1, default_loader->num_loads()); |
| 553 } | 580 } |
| 554 | 581 |
| 555 } // namespace mojo | 582 } // namespace mojo |
| OLD | NEW |