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 "mojo/public/cpp/application/application_connection.h" | 10 #include "mojo/public/cpp/application/application_connection.h" |
11 #include "mojo/public/cpp/application/application_delegate.h" | 11 #include "mojo/public/cpp/application/application_delegate.h" |
12 #include "mojo/public/cpp/application/application_impl.h" | 12 #include "mojo/public/cpp/application/application_impl.h" |
13 #include "mojo/public/cpp/application/interface_factory.h" | 13 #include "mojo/public/cpp/application/interface_factory.h" |
14 #include "mojo/public/cpp/bindings/strong_binding.h" | 14 #include "mojo/public/cpp/bindings/strong_binding.h" |
15 #include "mojo/public/interfaces/application/service_provider.mojom.h" | 15 #include "mojo/public/interfaces/application/service_provider.mojom.h" |
16 #include "shell/application_manager/application_loader.h" | 16 #include "shell/application_manager/application_loader.h" |
17 #include "shell/application_manager/application_manager.h" | 17 #include "shell/application_manager/application_manager.h" |
18 #include "shell/application_manager/test.mojom.h" | 18 #include "shell/application_manager/test.mojom.h" |
19 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
20 | 20 |
| 21 using mojo::Application; |
| 22 using mojo::ApplicationConnection; |
| 23 using mojo::ApplicationDelegate; |
| 24 using mojo::ApplicationImpl; |
| 25 using mojo::Callback; |
| 26 using mojo::InterfaceFactory; |
| 27 using mojo::InterfaceRequest; |
| 28 using mojo::StrongBinding; |
| 29 |
21 namespace shell { | 30 namespace shell { |
22 namespace { | 31 namespace { |
23 | 32 |
24 const char kTestURLString[] = "test:testService"; | 33 const char kTestURLString[] = "test:testService"; |
25 const char kTestAURLString[] = "test:TestA"; | 34 const char kTestAURLString[] = "test:TestA"; |
26 const char kTestBURLString[] = "test:TestB"; | 35 const char kTestBURLString[] = "test:TestB"; |
27 | 36 |
28 struct TestContext { | 37 struct TestContext { |
29 TestContext() : num_impls(0), num_loader_deletes(0) {} | 38 TestContext() : num_impls(0), num_loader_deletes(0) {} |
30 std::string last_test_string; | 39 std::string last_test_string; |
(...skipping 15 matching lines...) Expand all Loading... |
46 void OnConnectionError() override { | 55 void OnConnectionError() override { |
47 base::MessageLoop::current()->QuitWhenIdle(); | 56 base::MessageLoop::current()->QuitWhenIdle(); |
48 } | 57 } |
49 | 58 |
50 private: | 59 private: |
51 DISALLOW_COPY_AND_ASSIGN(QuitMessageLoopErrorHandler); | 60 DISALLOW_COPY_AND_ASSIGN(QuitMessageLoopErrorHandler); |
52 }; | 61 }; |
53 | 62 |
54 class TestServiceImpl : public TestService { | 63 class TestServiceImpl : public TestService { |
55 public: | 64 public: |
56 TestServiceImpl(TestContext* context, | 65 TestServiceImpl(TestContext* context, InterfaceRequest<TestService> request) |
57 mojo::InterfaceRequest<TestService> request) | |
58 : context_(context), binding_(this, request.Pass()) { | 66 : context_(context), binding_(this, request.Pass()) { |
59 ++context_->num_impls; | 67 ++context_->num_impls; |
60 } | 68 } |
61 | 69 |
62 ~TestServiceImpl() override { | 70 ~TestServiceImpl() override { |
63 --context_->num_impls; | 71 --context_->num_impls; |
64 if (!base::MessageLoop::current()->is_running()) | 72 if (!base::MessageLoop::current()->is_running()) |
65 return; | 73 return; |
66 base::MessageLoop::current()->Quit(); | 74 base::MessageLoop::current()->Quit(); |
67 } | 75 } |
68 | 76 |
69 // TestService implementation: | 77 // TestService implementation: |
70 void Test(const mojo::String& test_string, | 78 void Test(const mojo::String& test_string, |
71 const mojo::Callback<void()>& callback) override { | 79 const Callback<void()>& callback) override { |
72 context_->last_test_string = test_string; | 80 context_->last_test_string = test_string; |
73 callback.Run(); | 81 callback.Run(); |
74 } | 82 } |
75 | 83 |
76 private: | 84 private: |
77 TestContext* context_; | 85 TestContext* context_; |
78 mojo::StrongBinding<TestService> binding_; | 86 StrongBinding<TestService> binding_; |
79 }; | 87 }; |
80 | 88 |
81 class TestClient { | 89 class TestClient { |
82 public: | 90 public: |
83 explicit TestClient(TestServicePtr service) | 91 explicit TestClient(TestServicePtr service) |
84 : service_(service.Pass()), quit_after_ack_(false) {} | 92 : service_(service.Pass()), quit_after_ack_(false) {} |
85 | 93 |
86 void AckTest() { | 94 void AckTest() { |
87 if (quit_after_ack_) | 95 if (quit_after_ack_) |
88 base::MessageLoop::current()->Quit(); | 96 base::MessageLoop::current()->Quit(); |
89 } | 97 } |
90 | 98 |
91 void Test(const std::string& test_string) { | 99 void Test(const std::string& test_string) { |
92 quit_after_ack_ = true; | 100 quit_after_ack_ = true; |
93 service_->Test(test_string, | 101 service_->Test(test_string, |
94 base::Bind(&TestClient::AckTest, base::Unretained(this))); | 102 base::Bind(&TestClient::AckTest, base::Unretained(this))); |
95 } | 103 } |
96 | 104 |
97 private: | 105 private: |
98 TestServicePtr service_; | 106 TestServicePtr service_; |
99 bool quit_after_ack_; | 107 bool quit_after_ack_; |
100 DISALLOW_COPY_AND_ASSIGN(TestClient); | 108 DISALLOW_COPY_AND_ASSIGN(TestClient); |
101 }; | 109 }; |
102 | 110 |
103 class TestApplicationLoader : public ApplicationLoader, | 111 class TestApplicationLoader : public ApplicationLoader, |
104 public mojo::ApplicationDelegate, | 112 public ApplicationDelegate, |
105 public mojo::InterfaceFactory<TestService> { | 113 public InterfaceFactory<TestService> { |
106 public: | 114 public: |
107 TestApplicationLoader() : context_(nullptr), num_loads_(0) {} | 115 TestApplicationLoader() : context_(nullptr), num_loads_(0) {} |
108 | 116 |
109 ~TestApplicationLoader() override { | 117 ~TestApplicationLoader() override { |
110 if (context_) | 118 if (context_) |
111 ++context_->num_loader_deletes; | 119 ++context_->num_loader_deletes; |
112 test_app_.reset(); | 120 test_app_.reset(); |
113 } | 121 } |
114 | 122 |
115 void set_context(TestContext* context) { context_ = context; } | 123 void set_context(TestContext* context) { context_ = context; } |
116 int num_loads() const { return num_loads_; } | 124 int num_loads() const { return num_loads_; } |
117 const std::vector<std::string>& GetArgs() const { return test_app_->args(); } | 125 const std::vector<std::string>& GetArgs() const { return test_app_->args(); } |
118 | 126 |
119 private: | 127 private: |
120 // ApplicationLoader implementation. | 128 // ApplicationLoader implementation. |
121 void Load( | 129 void Load(const GURL& url, |
122 const GURL& url, | 130 InterfaceRequest<Application> application_request) override { |
123 mojo::InterfaceRequest<mojo::Application> application_request) override { | |
124 ++num_loads_; | 131 ++num_loads_; |
125 test_app_.reset( | 132 test_app_.reset(new ApplicationImpl(this, application_request.Pass())); |
126 new mojo::ApplicationImpl(this, application_request.Pass())); | |
127 } | 133 } |
128 | 134 |
129 // mojo::ApplicationDelegate implementation. | 135 // ApplicationDelegate implementation. |
130 bool ConfigureIncomingConnection( | 136 bool ConfigureIncomingConnection(ApplicationConnection* connection) override { |
131 mojo::ApplicationConnection* connection) override { | |
132 connection->AddService(this); | 137 connection->AddService(this); |
133 return true; | 138 return true; |
134 } | 139 } |
135 | 140 |
136 // mojo::InterfaceFactory implementation. | 141 // InterfaceFactory implementation. |
137 void Create(mojo::ApplicationConnection* connection, | 142 void Create(ApplicationConnection* connection, |
138 mojo::InterfaceRequest<TestService> request) override { | 143 InterfaceRequest<TestService> request) override { |
139 new TestServiceImpl(context_, request.Pass()); | 144 new TestServiceImpl(context_, request.Pass()); |
140 } | 145 } |
141 | 146 |
142 scoped_ptr<mojo::ApplicationImpl> test_app_; | 147 scoped_ptr<ApplicationImpl> test_app_; |
143 TestContext* context_; | 148 TestContext* context_; |
144 int num_loads_; | 149 int num_loads_; |
145 DISALLOW_COPY_AND_ASSIGN(TestApplicationLoader); | 150 DISALLOW_COPY_AND_ASSIGN(TestApplicationLoader); |
146 }; | 151 }; |
147 | 152 |
148 class ClosingApplicationLoader : public ApplicationLoader { | 153 class ClosingApplicationLoader : public ApplicationLoader { |
149 private: | 154 private: |
150 // ApplicationLoader implementation. | 155 // ApplicationLoader implementation. |
151 void Load( | 156 void Load(const GURL& url, |
152 const GURL& url, | 157 InterfaceRequest<Application> application_request) override {} |
153 mojo::InterfaceRequest<mojo::Application> application_request) override {} | |
154 }; | 158 }; |
155 | 159 |
156 class TesterContext { | 160 class TesterContext { |
157 public: | 161 public: |
158 explicit TesterContext(base::MessageLoop* loop) | 162 explicit TesterContext(base::MessageLoop* loop) |
159 : num_b_calls_(0), | 163 : num_b_calls_(0), |
160 num_c_calls_(0), | 164 num_c_calls_(0), |
161 num_a_deletes_(0), | 165 num_a_deletes_(0), |
162 num_b_deletes_(0), | 166 num_b_deletes_(0), |
163 num_c_deletes_(0), | 167 num_c_deletes_(0), |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 int num_c_deletes_; | 248 int num_c_deletes_; |
245 bool tester_called_quit_; | 249 bool tester_called_quit_; |
246 bool a_called_quit_; | 250 bool a_called_quit_; |
247 | 251 |
248 base::MessageLoop* loop_; | 252 base::MessageLoop* loop_; |
249 }; | 253 }; |
250 | 254 |
251 // Used to test that the requestor url will be correctly passed. | 255 // Used to test that the requestor url will be correctly passed. |
252 class TestAImpl : public TestA { | 256 class TestAImpl : public TestA { |
253 public: | 257 public: |
254 TestAImpl(mojo::ApplicationImpl* app_impl, | 258 TestAImpl(ApplicationImpl* app_impl, |
255 TesterContext* test_context, | 259 TesterContext* test_context, |
256 mojo::InterfaceRequest<TestA> request) | 260 InterfaceRequest<TestA> request) |
257 : test_context_(test_context), binding_(this, request.Pass()) { | 261 : test_context_(test_context), binding_(this, request.Pass()) { |
258 app_impl->ConnectToApplication(kTestBURLString)->ConnectToService(&b_); | 262 app_impl->ConnectToApplication(kTestBURLString)->ConnectToService(&b_); |
259 } | 263 } |
260 | 264 |
261 ~TestAImpl() override { | 265 ~TestAImpl() override { |
262 test_context_->IncrementNumADeletes(); | 266 test_context_->IncrementNumADeletes(); |
263 if (base::MessageLoop::current()->is_running()) | 267 if (base::MessageLoop::current()->is_running()) |
264 Quit(); | 268 Quit(); |
265 } | 269 } |
266 | 270 |
267 private: | 271 private: |
268 void CallB() override { | 272 void CallB() override { |
269 b_->B(base::Bind(&TestAImpl::Quit, base::Unretained(this))); | 273 b_->B(base::Bind(&TestAImpl::Quit, base::Unretained(this))); |
270 } | 274 } |
271 | 275 |
272 void CallCFromB() override { | 276 void CallCFromB() override { |
273 b_->CallC(base::Bind(&TestAImpl::Quit, base::Unretained(this))); | 277 b_->CallC(base::Bind(&TestAImpl::Quit, base::Unretained(this))); |
274 } | 278 } |
275 | 279 |
276 void Quit() { | 280 void Quit() { |
277 base::MessageLoop::current()->Quit(); | 281 base::MessageLoop::current()->Quit(); |
278 test_context_->set_a_called_quit(); | 282 test_context_->set_a_called_quit(); |
279 test_context_->QuitSoon(); | 283 test_context_->QuitSoon(); |
280 } | 284 } |
281 | 285 |
282 TesterContext* test_context_; | 286 TesterContext* test_context_; |
283 TestBPtr b_; | 287 TestBPtr b_; |
284 mojo::StrongBinding<TestA> binding_; | 288 StrongBinding<TestA> binding_; |
285 }; | 289 }; |
286 | 290 |
287 class TestBImpl : public TestB { | 291 class TestBImpl : public TestB { |
288 public: | 292 public: |
289 TestBImpl(mojo::ApplicationConnection* connection, | 293 TestBImpl(ApplicationConnection* connection, |
290 TesterContext* test_context, | 294 TesterContext* test_context, |
291 mojo::InterfaceRequest<TestB> request) | 295 InterfaceRequest<TestB> request) |
292 : test_context_(test_context), binding_(this, request.Pass()) { | 296 : test_context_(test_context), binding_(this, request.Pass()) { |
293 connection->ConnectToService(&c_); | 297 connection->ConnectToService(&c_); |
294 } | 298 } |
295 | 299 |
296 ~TestBImpl() override { | 300 ~TestBImpl() override { |
297 test_context_->IncrementNumBDeletes(); | 301 test_context_->IncrementNumBDeletes(); |
298 if (base::MessageLoop::current()->is_running()) | 302 if (base::MessageLoop::current()->is_running()) |
299 base::MessageLoop::current()->Quit(); | 303 base::MessageLoop::current()->Quit(); |
300 test_context_->QuitSoon(); | 304 test_context_->QuitSoon(); |
301 } | 305 } |
302 | 306 |
303 private: | 307 private: |
304 void B(const mojo::Callback<void()>& callback) override { | 308 void B(const Callback<void()>& callback) override { |
305 test_context_->IncrementNumBCalls(); | 309 test_context_->IncrementNumBCalls(); |
306 callback.Run(); | 310 callback.Run(); |
307 } | 311 } |
308 | 312 |
309 void CallC(const mojo::Callback<void()>& callback) override { | 313 void CallC(const Callback<void()>& callback) override { |
310 test_context_->IncrementNumBCalls(); | 314 test_context_->IncrementNumBCalls(); |
311 c_->C(callback); | 315 c_->C(callback); |
312 } | 316 } |
313 | 317 |
314 TesterContext* test_context_; | 318 TesterContext* test_context_; |
315 TestCPtr c_; | 319 TestCPtr c_; |
316 mojo::StrongBinding<TestB> binding_; | 320 StrongBinding<TestB> binding_; |
317 }; | 321 }; |
318 | 322 |
319 class TestCImpl : public TestC { | 323 class TestCImpl : public TestC { |
320 public: | 324 public: |
321 TestCImpl(mojo::ApplicationConnection* connection, | 325 TestCImpl(ApplicationConnection* connection, |
322 TesterContext* test_context, | 326 TesterContext* test_context, |
323 mojo::InterfaceRequest<TestC> request) | 327 InterfaceRequest<TestC> request) |
324 : test_context_(test_context), binding_(this, request.Pass()) {} | 328 : test_context_(test_context), binding_(this, request.Pass()) {} |
325 | 329 |
326 ~TestCImpl() override { test_context_->IncrementNumCDeletes(); } | 330 ~TestCImpl() override { test_context_->IncrementNumCDeletes(); } |
327 | 331 |
328 private: | 332 private: |
329 void C(const mojo::Callback<void()>& callback) override { | 333 void C(const Callback<void()>& callback) override { |
330 test_context_->IncrementNumCCalls(); | 334 test_context_->IncrementNumCCalls(); |
331 callback.Run(); | 335 callback.Run(); |
332 } | 336 } |
333 | 337 |
334 TesterContext* test_context_; | 338 TesterContext* test_context_; |
335 mojo::StrongBinding<TestC> binding_; | 339 StrongBinding<TestC> binding_; |
336 }; | 340 }; |
337 | 341 |
338 class Tester : public mojo::ApplicationDelegate, | 342 class Tester : public ApplicationDelegate, |
339 public ApplicationLoader, | 343 public ApplicationLoader, |
340 public mojo::InterfaceFactory<TestA>, | 344 public InterfaceFactory<TestA>, |
341 public mojo::InterfaceFactory<TestB>, | 345 public InterfaceFactory<TestB>, |
342 public mojo::InterfaceFactory<TestC> { | 346 public InterfaceFactory<TestC> { |
343 public: | 347 public: |
344 Tester(TesterContext* context, const std::string& requestor_url) | 348 Tester(TesterContext* context, const std::string& requestor_url) |
345 : context_(context), requestor_url_(requestor_url) {} | 349 : context_(context), requestor_url_(requestor_url) {} |
346 ~Tester() override {} | 350 ~Tester() override {} |
347 | 351 |
348 private: | 352 private: |
349 void Load( | 353 void Load(const GURL& url, |
350 const GURL& url, | 354 InterfaceRequest<Application> application_request) override { |
351 mojo::InterfaceRequest<mojo::Application> application_request) override { | 355 app_.reset(new ApplicationImpl(this, application_request.Pass())); |
352 app_.reset(new mojo::ApplicationImpl(this, application_request.Pass())); | |
353 } | 356 } |
354 | 357 |
355 bool ConfigureIncomingConnection( | 358 bool ConfigureIncomingConnection(ApplicationConnection* connection) override { |
356 mojo::ApplicationConnection* connection) override { | |
357 if (!requestor_url_.empty() && | 359 if (!requestor_url_.empty() && |
358 requestor_url_ != connection->GetRemoteApplicationURL()) { | 360 requestor_url_ != connection->GetRemoteApplicationURL()) { |
359 context_->set_tester_called_quit(); | 361 context_->set_tester_called_quit(); |
360 context_->QuitSoon(); | 362 context_->QuitSoon(); |
361 base::MessageLoop::current()->Quit(); | 363 base::MessageLoop::current()->Quit(); |
362 return false; | 364 return false; |
363 } | 365 } |
364 // If we're coming from A, then add B, otherwise A. | 366 // If we're coming from A, then add B, otherwise A. |
365 if (connection->GetRemoteApplicationURL() == kTestAURLString) | 367 if (connection->GetRemoteApplicationURL() == kTestAURLString) |
366 connection->AddService<TestB>(this); | 368 connection->AddService<TestB>(this); |
367 else | 369 else |
368 connection->AddService<TestA>(this); | 370 connection->AddService<TestA>(this); |
369 return true; | 371 return true; |
370 } | 372 } |
371 | 373 |
372 bool ConfigureOutgoingConnection( | 374 bool ConfigureOutgoingConnection(ApplicationConnection* connection) override { |
373 mojo::ApplicationConnection* connection) override { | |
374 // If we're connecting to B, then add C. | 375 // If we're connecting to B, then add C. |
375 if (connection->GetRemoteApplicationURL() == kTestBURLString) | 376 if (connection->GetRemoteApplicationURL() == kTestBURLString) |
376 connection->AddService<TestC>(this); | 377 connection->AddService<TestC>(this); |
377 return true; | 378 return true; |
378 } | 379 } |
379 | 380 |
380 void Create(mojo::ApplicationConnection* connection, | 381 void Create(ApplicationConnection* connection, |
381 mojo::InterfaceRequest<TestA> request) override { | 382 InterfaceRequest<TestA> request) override { |
382 a_bindings_.push_back(new TestAImpl(app_.get(), context_, request.Pass())); | 383 a_bindings_.push_back(new TestAImpl(app_.get(), context_, request.Pass())); |
383 } | 384 } |
384 | 385 |
385 void Create(mojo::ApplicationConnection* connection, | 386 void Create(ApplicationConnection* connection, |
386 mojo::InterfaceRequest<TestB> request) override { | 387 InterfaceRequest<TestB> request) override { |
387 new TestBImpl(connection, context_, request.Pass()); | 388 new TestBImpl(connection, context_, request.Pass()); |
388 } | 389 } |
389 | 390 |
390 void Create(mojo::ApplicationConnection* connection, | 391 void Create(ApplicationConnection* connection, |
391 mojo::InterfaceRequest<TestC> request) override { | 392 InterfaceRequest<TestC> request) override { |
392 new TestCImpl(connection, context_, request.Pass()); | 393 new TestCImpl(connection, context_, request.Pass()); |
393 } | 394 } |
394 | 395 |
395 TesterContext* context_; | 396 TesterContext* context_; |
396 scoped_ptr<mojo::ApplicationImpl> app_; | 397 scoped_ptr<ApplicationImpl> app_; |
397 std::string requestor_url_; | 398 std::string requestor_url_; |
398 ScopedVector<TestAImpl> a_bindings_; | 399 ScopedVector<TestAImpl> a_bindings_; |
399 }; | 400 }; |
400 | 401 |
401 class TestDelegate : public ApplicationManager::Delegate { | 402 class TestDelegate : public ApplicationManager::Delegate { |
402 public: | 403 public: |
403 void AddMapping(const GURL& from, const GURL& to) { mappings_[from] = to; } | 404 void AddMapping(const GURL& from, const GURL& to) { mappings_[from] = to; } |
404 | 405 |
405 // ApplicationManager::Delegate | 406 // ApplicationManager::Delegate |
406 GURL ResolveMappings(const GURL& url) override { | 407 GURL ResolveMappings(const GURL& url) override { |
(...skipping 12 matching lines...) Expand all Loading... |
419 replacements.SetScheme("file", url::Component(0, 4)); | 420 replacements.SetScheme("file", url::Component(0, 4)); |
420 mapped_url = mapped_url.ReplaceComponents(replacements); | 421 mapped_url = mapped_url.ReplaceComponents(replacements); |
421 } | 422 } |
422 return mapped_url; | 423 return mapped_url; |
423 } | 424 } |
424 | 425 |
425 private: | 426 private: |
426 std::map<GURL, GURL> mappings_; | 427 std::map<GURL, GURL> mappings_; |
427 }; | 428 }; |
428 | 429 |
429 class TestExternal : public mojo::ApplicationDelegate { | 430 class TestExternal : public ApplicationDelegate { |
430 public: | 431 public: |
431 TestExternal() : configure_incoming_connection_called_(false) {} | 432 TestExternal() : configure_incoming_connection_called_(false) {} |
432 | 433 |
433 void Initialize(mojo::ApplicationImpl* app) override { | 434 void Initialize(ApplicationImpl* app) override { |
434 initialize_args_ = app->args(); | 435 initialize_args_ = app->args(); |
435 base::MessageLoop::current()->Quit(); | 436 base::MessageLoop::current()->Quit(); |
436 } | 437 } |
437 | 438 |
438 bool ConfigureIncomingConnection( | 439 bool ConfigureIncomingConnection(ApplicationConnection* connection) override { |
439 mojo::ApplicationConnection* connection) override { | |
440 configure_incoming_connection_called_ = true; | 440 configure_incoming_connection_called_ = true; |
441 base::MessageLoop::current()->Quit(); | 441 base::MessageLoop::current()->Quit(); |
442 return true; | 442 return true; |
443 } | 443 } |
444 | 444 |
445 const std::vector<std::string>& initialize_args() const { | 445 const std::vector<std::string>& initialize_args() const { |
446 return initialize_args_; | 446 return initialize_args_; |
447 } | 447 } |
448 | 448 |
449 bool configure_incoming_connection_called() const { | 449 bool configure_incoming_connection_called() const { |
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
811 bool called = false; | 811 bool called = false; |
812 application_manager_->ConnectToApplication( | 812 application_manager_->ConnectToApplication( |
813 GURL("test:test"), GURL(), nullptr, nullptr, | 813 GURL("test:test"), GURL(), nullptr, nullptr, |
814 base::Bind(&QuitClosure, base::Unretained(&called))); | 814 base::Bind(&QuitClosure, base::Unretained(&called))); |
815 loop_.Run(); | 815 loop_.Run(); |
816 EXPECT_TRUE(called); | 816 EXPECT_TRUE(called); |
817 } | 817 } |
818 | 818 |
819 } // namespace | 819 } // namespace |
820 } // namespace shell | 820 } // namespace shell |
OLD | NEW |