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/message_loop/message_loop.h" | 5 #include "base/message_loop/message_loop.h" |
6 #include "mojo/public/cpp/application/application.h" | 6 #include "mojo/public/cpp/application/application.h" |
7 #include "mojo/public/cpp/environment/environment.h" | 7 #include "mojo/public/cpp/environment/environment.h" |
8 #include "mojo/public/interfaces/service_provider/service_provider.mojom.h" | 8 #include "mojo/public/interfaces/service_provider/service_provider.mojom.h" |
9 #include "mojo/service_manager/service_loader.h" | 9 #include "mojo/service_manager/service_loader.h" |
10 #include "mojo/service_manager/service_manager.h" | 10 #include "mojo/service_manager/service_manager.h" |
(...skipping 17 matching lines...) Expand all Loading... |
28 class TestServiceImpl : public InterfaceImpl<TestService> { | 28 class TestServiceImpl : public InterfaceImpl<TestService> { |
29 public: | 29 public: |
30 explicit TestServiceImpl(TestContext* context) : context_(context) { | 30 explicit TestServiceImpl(TestContext* context) : context_(context) { |
31 ++context_->num_impls; | 31 ++context_->num_impls; |
32 } | 32 } |
33 | 33 |
34 virtual ~TestServiceImpl() { | 34 virtual ~TestServiceImpl() { |
35 --context_->num_impls; | 35 --context_->num_impls; |
36 } | 36 } |
37 | 37 |
| 38 virtual void OnConnectionError() OVERRIDE { |
| 39 base::MessageLoop::current()->Quit(); |
| 40 } |
| 41 |
38 // TestService implementation: | 42 // TestService implementation: |
39 virtual void Test(const String& test_string) OVERRIDE { | 43 virtual void Test(const String& test_string) OVERRIDE { |
40 context_->last_test_string = test_string; | 44 context_->last_test_string = test_string; |
41 client()->AckTest(); | 45 client()->AckTest(); |
42 } | 46 } |
43 | 47 |
44 private: | 48 private: |
45 TestContext* context_; | 49 TestContext* context_; |
46 }; | 50 }; |
47 | 51 |
(...skipping 20 matching lines...) Expand all Loading... |
68 private: | 72 private: |
69 TestServicePtr service_; | 73 TestServicePtr service_; |
70 bool quit_after_ack_; | 74 bool quit_after_ack_; |
71 DISALLOW_COPY_AND_ASSIGN(TestClientImpl); | 75 DISALLOW_COPY_AND_ASSIGN(TestClientImpl); |
72 }; | 76 }; |
73 | 77 |
74 class TestServiceLoader : public ServiceLoader { | 78 class TestServiceLoader : public ServiceLoader { |
75 public: | 79 public: |
76 TestServiceLoader() | 80 TestServiceLoader() |
77 : context_(NULL), | 81 : context_(NULL), |
78 num_loads_(0), | 82 num_loads_(0) { |
79 quit_after_error_(false) { | |
80 } | 83 } |
81 | 84 |
82 virtual ~TestServiceLoader() { | 85 virtual ~TestServiceLoader() { |
83 if (context_) | 86 if (context_) |
84 ++context_->num_loader_deletes; | 87 ++context_->num_loader_deletes; |
85 test_app_.reset(NULL); | 88 test_app_.reset(NULL); |
86 } | 89 } |
87 | 90 |
88 void set_context(TestContext* context) { context_ = context; } | 91 void set_context(TestContext* context) { context_ = context; } |
89 void set_quit_after_error(bool quit_after_error) { | |
90 quit_after_error_ = quit_after_error; | |
91 } | |
92 | |
93 int num_loads() const { return num_loads_; } | 92 int num_loads() const { return num_loads_; } |
94 | 93 |
95 private: | 94 private: |
96 virtual void LoadService( | 95 virtual void LoadService( |
97 ServiceManager* manager, | 96 ServiceManager* manager, |
98 const GURL& url, | 97 const GURL& url, |
99 ScopedMessagePipeHandle service_provider_handle) OVERRIDE { | 98 ScopedMessagePipeHandle service_provider_handle) OVERRIDE { |
100 ++num_loads_; | 99 ++num_loads_; |
101 test_app_.reset(new Application(service_provider_handle.Pass())); | 100 test_app_.reset(new Application(service_provider_handle.Pass())); |
102 test_app_->AddService<TestServiceImpl>(context_); | 101 test_app_->AddService<TestServiceImpl>(context_); |
103 } | 102 } |
104 | 103 |
105 virtual void OnServiceError(ServiceManager* manager, | 104 virtual void OnServiceError(ServiceManager* manager, |
106 const GURL& url) OVERRIDE { | 105 const GURL& url) OVERRIDE { |
107 if (quit_after_error_) { | |
108 base::MessageLoop::current()->PostTask(FROM_HERE, | |
109 base::MessageLoop::QuitClosure()); | |
110 } | |
111 } | 106 } |
112 | 107 |
113 scoped_ptr<Application> test_app_; | 108 scoped_ptr<Application> test_app_; |
114 TestContext* context_; | 109 TestContext* context_; |
115 int num_loads_; | 110 int num_loads_; |
116 bool quit_after_error_; | |
117 DISALLOW_COPY_AND_ASSIGN(TestServiceLoader); | 111 DISALLOW_COPY_AND_ASSIGN(TestServiceLoader); |
118 }; | 112 }; |
119 | 113 |
120 // Used to test that the requestor url will be correctly passed. | 114 // Used to test that the requestor url will be correctly passed. |
121 class TestAImpl : public InterfaceImpl<TestA> { | 115 class TestAImpl : public InterfaceImpl<TestA> { |
122 public: | 116 public: |
123 TestAImpl(Application* app) : app_(app) {} | 117 TestAImpl(Application* app) : app_(app) {} |
124 | 118 |
125 virtual void LoadB() OVERRIDE { | 119 virtual void LoadB() OVERRIDE { |
126 TestBPtr b; | 120 TestBPtr b; |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
216 virtual void SetUp() OVERRIDE { | 210 virtual void SetUp() OVERRIDE { |
217 GURL test_url(kTestURLString); | 211 GURL test_url(kTestURLString); |
218 service_manager_.reset(new ServiceManager); | 212 service_manager_.reset(new ServiceManager); |
219 | 213 |
220 MessagePipe pipe; | 214 MessagePipe pipe; |
221 TestServicePtr service_proxy = MakeProxy<TestService>(pipe.handle0.Pass()); | 215 TestServicePtr service_proxy = MakeProxy<TestService>(pipe.handle0.Pass()); |
222 test_client_.reset(new TestClientImpl(service_proxy.Pass())); | 216 test_client_.reset(new TestClientImpl(service_proxy.Pass())); |
223 | 217 |
224 TestServiceLoader* default_loader = new TestServiceLoader; | 218 TestServiceLoader* default_loader = new TestServiceLoader; |
225 default_loader->set_context(&context_); | 219 default_loader->set_context(&context_); |
226 default_loader->set_quit_after_error(true); | |
227 service_manager_->set_default_loader( | 220 service_manager_->set_default_loader( |
228 scoped_ptr<ServiceLoader>(default_loader)); | 221 scoped_ptr<ServiceLoader>(default_loader)); |
229 | 222 |
230 service_manager_->ConnectToService( | 223 service_manager_->ConnectToService( |
231 test_url, TestService::Name_, pipe.handle1.Pass(), GURL()); | 224 test_url, TestService::Name_, pipe.handle1.Pass(), GURL()); |
232 } | 225 } |
233 | 226 |
234 virtual void TearDown() OVERRIDE { | 227 virtual void TearDown() OVERRIDE { |
235 test_client_.reset(NULL); | 228 test_client_.reset(NULL); |
236 service_manager_.reset(NULL); | 229 service_manager_.reset(NULL); |
(...skipping 20 matching lines...) Expand all Loading... |
257 } | 250 } |
258 | 251 |
259 TEST_F(ServiceManagerTest, ClientError) { | 252 TEST_F(ServiceManagerTest, ClientError) { |
260 test_client_->Test("test"); | 253 test_client_->Test("test"); |
261 EXPECT_TRUE(HasFactoryForTestURL()); | 254 EXPECT_TRUE(HasFactoryForTestURL()); |
262 loop_.Run(); | 255 loop_.Run(); |
263 EXPECT_EQ(1, context_.num_impls); | 256 EXPECT_EQ(1, context_.num_impls); |
264 test_client_.reset(NULL); | 257 test_client_.reset(NULL); |
265 loop_.Run(); | 258 loop_.Run(); |
266 EXPECT_EQ(0, context_.num_impls); | 259 EXPECT_EQ(0, context_.num_impls); |
267 EXPECT_FALSE(HasFactoryForTestURL()); | 260 EXPECT_TRUE(HasFactoryForTestURL()); |
268 } | 261 } |
269 | 262 |
270 TEST_F(ServiceManagerTest, Deletes) { | 263 TEST_F(ServiceManagerTest, Deletes) { |
271 { | 264 { |
272 ServiceManager sm; | 265 ServiceManager sm; |
273 TestServiceLoader* default_loader = new TestServiceLoader; | 266 TestServiceLoader* default_loader = new TestServiceLoader; |
274 default_loader->set_context(&context_); | 267 default_loader->set_context(&context_); |
275 TestServiceLoader* url_loader1 = new TestServiceLoader; | 268 TestServiceLoader* url_loader1 = new TestServiceLoader; |
276 TestServiceLoader* url_loader2 = new TestServiceLoader; | 269 TestServiceLoader* url_loader2 = new TestServiceLoader; |
277 url_loader1->set_context(&context_); | 270 url_loader1->set_context(&context_); |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
374 | 367 |
375 std::string url("test:test3"); | 368 std::string url("test:test3"); |
376 TestServicePtr test_service; | 369 TestServicePtr test_service; |
377 sm.ConnectTo(GURL(url), &test_service, GURL()); | 370 sm.ConnectTo(GURL(url), &test_service, GURL()); |
378 EXPECT_EQ(1, interceptor.call_count()); | 371 EXPECT_EQ(1, interceptor.call_count()); |
379 EXPECT_EQ(url, interceptor.url_spec()); | 372 EXPECT_EQ(url, interceptor.url_spec()); |
380 EXPECT_EQ(1, default_loader->num_loads()); | 373 EXPECT_EQ(1, default_loader->num_loads()); |
381 } | 374 } |
382 | 375 |
383 } // namespace mojo | 376 } // namespace mojo |
OLD | NEW |