Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(354)

Side by Side Diff: mojo/shell/application_manager_unittest.cc

Issue 1538823002: Convert Pass()→std::move() in mojo/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « mojo/shell/application_manager_apptest_driver.cc ('k') | mojo/shell/capability_filter_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "mojo/shell/application_manager.h"
6
7 #include <utility>
8
5 #include "base/at_exit.h" 9 #include "base/at_exit.h"
6 #include "base/bind.h" 10 #include "base/bind.h"
7 #include "base/macros.h" 11 #include "base/macros.h"
8 #include "base/memory/scoped_vector.h" 12 #include "base/memory/scoped_vector.h"
9 #include "base/message_loop/message_loop.h" 13 #include "base/message_loop/message_loop.h"
10 #include "base/run_loop.h" 14 #include "base/run_loop.h"
11 #include "mojo/application/public/cpp/application_connection.h" 15 #include "mojo/application/public/cpp/application_connection.h"
12 #include "mojo/application/public/cpp/application_delegate.h" 16 #include "mojo/application/public/cpp/application_delegate.h"
13 #include "mojo/application/public/cpp/application_impl.h" 17 #include "mojo/application/public/cpp/application_impl.h"
14 #include "mojo/application/public/cpp/interface_factory.h" 18 #include "mojo/application/public/cpp/interface_factory.h"
15 #include "mojo/application/public/interfaces/service_provider.mojom.h" 19 #include "mojo/application/public/interfaces/service_provider.mojom.h"
16 #include "mojo/public/cpp/bindings/strong_binding.h" 20 #include "mojo/public/cpp/bindings/strong_binding.h"
17 #include "mojo/shell/application_loader.h" 21 #include "mojo/shell/application_loader.h"
18 #include "mojo/shell/application_manager.h"
19 #include "mojo/shell/connect_util.h" 22 #include "mojo/shell/connect_util.h"
20 #include "mojo/shell/fetcher.h" 23 #include "mojo/shell/fetcher.h"
21 #include "mojo/shell/package_manager.h" 24 #include "mojo/shell/package_manager.h"
22 #include "mojo/shell/test.mojom.h" 25 #include "mojo/shell/test.mojom.h"
23 #include "mojo/shell/test_package_manager.h" 26 #include "mojo/shell/test_package_manager.h"
24 #include "testing/gtest/include/gtest/gtest.h" 27 #include "testing/gtest/include/gtest/gtest.h"
25 28
26 namespace mojo { 29 namespace mojo {
27 namespace shell { 30 namespace shell {
28 namespace test { 31 namespace test {
(...skipping 10 matching lines...) Expand all
39 }; 42 };
40 43
41 void QuitClosure(bool* value) { 44 void QuitClosure(bool* value) {
42 *value = true; 45 *value = true;
43 base::MessageLoop::current()->QuitWhenIdle(); 46 base::MessageLoop::current()->QuitWhenIdle();
44 } 47 }
45 48
46 class TestServiceImpl : public TestService { 49 class TestServiceImpl : public TestService {
47 public: 50 public:
48 TestServiceImpl(TestContext* context, InterfaceRequest<TestService> request) 51 TestServiceImpl(TestContext* context, InterfaceRequest<TestService> request)
49 : context_(context), binding_(this, request.Pass()) { 52 : context_(context), binding_(this, std::move(request)) {
50 ++context_->num_impls; 53 ++context_->num_impls;
51 } 54 }
52 55
53 ~TestServiceImpl() override { 56 ~TestServiceImpl() override {
54 --context_->num_impls; 57 --context_->num_impls;
55 if (!base::MessageLoop::current()->is_running()) 58 if (!base::MessageLoop::current()->is_running())
56 return; 59 return;
57 base::MessageLoop::current()->QuitWhenIdle(); 60 base::MessageLoop::current()->QuitWhenIdle();
58 } 61 }
59 62
60 // TestService implementation: 63 // TestService implementation:
61 void Test(const String& test_string, 64 void Test(const String& test_string,
62 const Callback<void()>& callback) override { 65 const Callback<void()>& callback) override {
63 context_->last_test_string = test_string; 66 context_->last_test_string = test_string;
64 callback.Run(); 67 callback.Run();
65 } 68 }
66 69
67 private: 70 private:
68 TestContext* context_; 71 TestContext* context_;
69 StrongBinding<TestService> binding_; 72 StrongBinding<TestService> binding_;
70 }; 73 };
71 74
72 class TestClient { 75 class TestClient {
73 public: 76 public:
74 explicit TestClient(TestServicePtr service) 77 explicit TestClient(TestServicePtr service)
75 : service_(service.Pass()), quit_after_ack_(false) {} 78 : service_(std::move(service)), quit_after_ack_(false) {}
76 79
77 void AckTest() { 80 void AckTest() {
78 if (quit_after_ack_) 81 if (quit_after_ack_)
79 base::MessageLoop::current()->QuitWhenIdle(); 82 base::MessageLoop::current()->QuitWhenIdle();
80 } 83 }
81 84
82 void Test(const std::string& test_string) { 85 void Test(const std::string& test_string) {
83 quit_after_ack_ = true; 86 quit_after_ack_ = true;
84 service_->Test(test_string, 87 service_->Test(test_string,
85 base::Bind(&TestClient::AckTest, base::Unretained(this))); 88 base::Bind(&TestClient::AckTest, base::Unretained(this)));
(...skipping 20 matching lines...) Expand all
106 109
107 void set_context(TestContext* context) { context_ = context; } 110 void set_context(TestContext* context) { context_ = context; }
108 int num_loads() const { return num_loads_; } 111 int num_loads() const { return num_loads_; }
109 const GURL& last_requestor_url() const { return last_requestor_url_; } 112 const GURL& last_requestor_url() const { return last_requestor_url_; }
110 113
111 private: 114 private:
112 // ApplicationLoader implementation. 115 // ApplicationLoader implementation.
113 void Load(const GURL& url, 116 void Load(const GURL& url,
114 InterfaceRequest<Application> application_request) override { 117 InterfaceRequest<Application> application_request) override {
115 ++num_loads_; 118 ++num_loads_;
116 test_app_.reset(new ApplicationImpl(this, application_request.Pass())); 119 test_app_.reset(new ApplicationImpl(this, std::move(application_request)));
117 } 120 }
118 121
119 // ApplicationDelegate implementation. 122 // ApplicationDelegate implementation.
120 bool ConfigureIncomingConnection(ApplicationConnection* connection) override { 123 bool ConfigureIncomingConnection(ApplicationConnection* connection) override {
121 connection->AddService<TestService>(this); 124 connection->AddService<TestService>(this);
122 last_requestor_url_ = GURL(connection->GetRemoteApplicationURL()); 125 last_requestor_url_ = GURL(connection->GetRemoteApplicationURL());
123 return true; 126 return true;
124 } 127 }
125 128
126 // InterfaceFactory<TestService> implementation. 129 // InterfaceFactory<TestService> implementation.
127 void Create(ApplicationConnection* connection, 130 void Create(ApplicationConnection* connection,
128 InterfaceRequest<TestService> request) override { 131 InterfaceRequest<TestService> request) override {
129 new TestServiceImpl(context_, request.Pass()); 132 new TestServiceImpl(context_, std::move(request));
130 } 133 }
131 134
132 scoped_ptr<ApplicationImpl> test_app_; 135 scoped_ptr<ApplicationImpl> test_app_;
133 TestContext* context_; 136 TestContext* context_;
134 int num_loads_; 137 int num_loads_;
135 GURL last_requestor_url_; 138 GURL last_requestor_url_;
136 139
137 DISALLOW_COPY_AND_ASSIGN(TestApplicationLoader); 140 DISALLOW_COPY_AND_ASSIGN(TestApplicationLoader);
138 }; 141 };
139 142
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 241
239 base::MessageLoop* loop_; 242 base::MessageLoop* loop_;
240 }; 243 };
241 244
242 // Used to test that the requestor url will be correctly passed. 245 // Used to test that the requestor url will be correctly passed.
243 class TestAImpl : public TestA { 246 class TestAImpl : public TestA {
244 public: 247 public:
245 TestAImpl(ApplicationImpl* app_impl, 248 TestAImpl(ApplicationImpl* app_impl,
246 TesterContext* test_context, 249 TesterContext* test_context,
247 InterfaceRequest<TestA> request) 250 InterfaceRequest<TestA> request)
248 : test_context_(test_context), binding_(this, request.Pass()) { 251 : test_context_(test_context), binding_(this, std::move(request)) {
249 connection_ = app_impl->ConnectToApplication(kTestBURLString); 252 connection_ = app_impl->ConnectToApplication(kTestBURLString);
250 connection_->ConnectToService(&b_); 253 connection_->ConnectToService(&b_);
251 } 254 }
252 255
253 ~TestAImpl() override { 256 ~TestAImpl() override {
254 test_context_->IncrementNumADeletes(); 257 test_context_->IncrementNumADeletes();
255 if (base::MessageLoop::current()->is_running()) 258 if (base::MessageLoop::current()->is_running())
256 Quit(); 259 Quit();
257 } 260 }
258 261
(...skipping 16 matching lines...) Expand all
275 TesterContext* test_context_; 278 TesterContext* test_context_;
276 TestBPtr b_; 279 TestBPtr b_;
277 StrongBinding<TestA> binding_; 280 StrongBinding<TestA> binding_;
278 }; 281 };
279 282
280 class TestBImpl : public TestB { 283 class TestBImpl : public TestB {
281 public: 284 public:
282 TestBImpl(ApplicationConnection* connection, 285 TestBImpl(ApplicationConnection* connection,
283 TesterContext* test_context, 286 TesterContext* test_context,
284 InterfaceRequest<TestB> request) 287 InterfaceRequest<TestB> request)
285 : test_context_(test_context), binding_(this, request.Pass()) { 288 : test_context_(test_context), binding_(this, std::move(request)) {
286 connection->ConnectToService(&c_); 289 connection->ConnectToService(&c_);
287 } 290 }
288 291
289 ~TestBImpl() override { 292 ~TestBImpl() override {
290 test_context_->IncrementNumBDeletes(); 293 test_context_->IncrementNumBDeletes();
291 if (base::MessageLoop::current()->is_running()) 294 if (base::MessageLoop::current()->is_running())
292 base::MessageLoop::current()->QuitWhenIdle(); 295 base::MessageLoop::current()->QuitWhenIdle();
293 test_context_->QuitSoon(); 296 test_context_->QuitSoon();
294 } 297 }
295 298
(...skipping 11 matching lines...) Expand all
307 TesterContext* test_context_; 310 TesterContext* test_context_;
308 TestCPtr c_; 311 TestCPtr c_;
309 StrongBinding<TestB> binding_; 312 StrongBinding<TestB> binding_;
310 }; 313 };
311 314
312 class TestCImpl : public TestC { 315 class TestCImpl : public TestC {
313 public: 316 public:
314 TestCImpl(ApplicationConnection* connection, 317 TestCImpl(ApplicationConnection* connection,
315 TesterContext* test_context, 318 TesterContext* test_context,
316 InterfaceRequest<TestC> request) 319 InterfaceRequest<TestC> request)
317 : test_context_(test_context), binding_(this, request.Pass()) {} 320 : test_context_(test_context), binding_(this, std::move(request)) {}
318 321
319 ~TestCImpl() override { test_context_->IncrementNumCDeletes(); } 322 ~TestCImpl() override { test_context_->IncrementNumCDeletes(); }
320 323
321 private: 324 private:
322 void C(const Callback<void()>& callback) override { 325 void C(const Callback<void()>& callback) override {
323 test_context_->IncrementNumCCalls(); 326 test_context_->IncrementNumCCalls();
324 callback.Run(); 327 callback.Run();
325 } 328 }
326 329
327 TesterContext* test_context_; 330 TesterContext* test_context_;
328 StrongBinding<TestC> binding_; 331 StrongBinding<TestC> binding_;
329 }; 332 };
330 333
331 class Tester : public ApplicationDelegate, 334 class Tester : public ApplicationDelegate,
332 public ApplicationLoader, 335 public ApplicationLoader,
333 public InterfaceFactory<TestA>, 336 public InterfaceFactory<TestA>,
334 public InterfaceFactory<TestB>, 337 public InterfaceFactory<TestB>,
335 public InterfaceFactory<TestC> { 338 public InterfaceFactory<TestC> {
336 public: 339 public:
337 Tester(TesterContext* context, const std::string& requestor_url) 340 Tester(TesterContext* context, const std::string& requestor_url)
338 : context_(context), requestor_url_(requestor_url) {} 341 : context_(context), requestor_url_(requestor_url) {}
339 ~Tester() override {} 342 ~Tester() override {}
340 343
341 private: 344 private:
342 void Load(const GURL& url, 345 void Load(const GURL& url,
343 InterfaceRequest<Application> application_request) override { 346 InterfaceRequest<Application> application_request) override {
344 app_.reset(new ApplicationImpl(this, application_request.Pass())); 347 app_.reset(new ApplicationImpl(this, std::move(application_request)));
345 } 348 }
346 349
347 bool ConfigureIncomingConnection(ApplicationConnection* connection) override { 350 bool ConfigureIncomingConnection(ApplicationConnection* connection) override {
348 if (!requestor_url_.empty() && 351 if (!requestor_url_.empty() &&
349 requestor_url_ != connection->GetRemoteApplicationURL()) { 352 requestor_url_ != connection->GetRemoteApplicationURL()) {
350 context_->set_tester_called_quit(); 353 context_->set_tester_called_quit();
351 context_->QuitSoon(); 354 context_->QuitSoon();
352 base::MessageLoop::current()->QuitWhenIdle(); 355 base::MessageLoop::current()->QuitWhenIdle();
353 return false; 356 return false;
354 } 357 }
355 // If we're coming from A, then add B, otherwise A. 358 // If we're coming from A, then add B, otherwise A.
356 if (connection->GetRemoteApplicationURL() == kTestAURLString) 359 if (connection->GetRemoteApplicationURL() == kTestAURLString)
357 connection->AddService<TestB>(this); 360 connection->AddService<TestB>(this);
358 else 361 else
359 connection->AddService<TestA>(this); 362 connection->AddService<TestA>(this);
360 return true; 363 return true;
361 } 364 }
362 365
363 bool ConfigureOutgoingConnection(ApplicationConnection* connection) override { 366 bool ConfigureOutgoingConnection(ApplicationConnection* connection) override {
364 // If we're connecting to B, then add C. 367 // If we're connecting to B, then add C.
365 if (connection->GetRemoteApplicationURL() == kTestBURLString) 368 if (connection->GetRemoteApplicationURL() == kTestBURLString)
366 connection->AddService<TestC>(this); 369 connection->AddService<TestC>(this);
367 return true; 370 return true;
368 } 371 }
369 372
370 void Create(ApplicationConnection* connection, 373 void Create(ApplicationConnection* connection,
371 InterfaceRequest<TestA> request) override { 374 InterfaceRequest<TestA> request) override {
372 a_bindings_.push_back(new TestAImpl(app_.get(), context_, request.Pass())); 375 a_bindings_.push_back(
376 new TestAImpl(app_.get(), context_, std::move(request)));
373 } 377 }
374 378
375 void Create(ApplicationConnection* connection, 379 void Create(ApplicationConnection* connection,
376 InterfaceRequest<TestB> request) override { 380 InterfaceRequest<TestB> request) override {
377 new TestBImpl(connection, context_, request.Pass()); 381 new TestBImpl(connection, context_, std::move(request));
378 } 382 }
379 383
380 void Create(ApplicationConnection* connection, 384 void Create(ApplicationConnection* connection,
381 InterfaceRequest<TestC> request) override { 385 InterfaceRequest<TestC> request) override {
382 new TestCImpl(connection, context_, request.Pass()); 386 new TestCImpl(connection, context_, std::move(request));
383 } 387 }
384 388
385 TesterContext* context_; 389 TesterContext* context_;
386 scoped_ptr<ApplicationImpl> app_; 390 scoped_ptr<ApplicationImpl> app_;
387 std::string requestor_url_; 391 std::string requestor_url_;
388 ScopedVector<TestAImpl> a_bindings_; 392 ScopedVector<TestAImpl> a_bindings_;
389 }; 393 };
390 394
391 class ApplicationManagerTest : public testing::Test { 395 class ApplicationManagerTest : public testing::Test {
392 public: 396 public:
393 ApplicationManagerTest() : tester_context_(&loop_) {} 397 ApplicationManagerTest() : tester_context_(&loop_) {}
394 398
395 ~ApplicationManagerTest() override {} 399 ~ApplicationManagerTest() override {}
396 400
397 void SetUp() override { 401 void SetUp() override {
398 application_manager_.reset(new ApplicationManager( 402 application_manager_.reset(new ApplicationManager(
399 make_scoped_ptr(new TestPackageManager))); 403 make_scoped_ptr(new TestPackageManager)));
400 test_loader_ = new TestApplicationLoader; 404 test_loader_ = new TestApplicationLoader;
401 test_loader_->set_context(&context_); 405 test_loader_->set_context(&context_);
402 application_manager_->set_default_loader( 406 application_manager_->set_default_loader(
403 scoped_ptr<ApplicationLoader>(test_loader_)); 407 scoped_ptr<ApplicationLoader>(test_loader_));
404 408
405 TestServicePtr service_proxy; 409 TestServicePtr service_proxy;
406 ConnectToService(application_manager_.get(), GURL(kTestURLString), 410 ConnectToService(application_manager_.get(), GURL(kTestURLString),
407 &service_proxy); 411 &service_proxy);
408 test_client_.reset(new TestClient(service_proxy.Pass())); 412 test_client_.reset(new TestClient(std::move(service_proxy)));
409 } 413 }
410 414
411 void TearDown() override { 415 void TearDown() override {
412 test_client_.reset(); 416 test_client_.reset();
413 application_manager_.reset(); 417 application_manager_.reset();
414 } 418 }
415 419
416 void AddLoaderForURL(const GURL& url, const std::string& requestor_url) { 420 void AddLoaderForURL(const GURL& url, const std::string& requestor_url) {
417 application_manager_->SetLoaderForURL( 421 application_manager_->SetLoaderForURL(
418 make_scoped_ptr(new Tester(&tester_context_, requestor_url)), url); 422 make_scoped_ptr(new Tester(&tester_context_, requestor_url)), url);
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 TEST_F(ApplicationManagerTest, TestEndApplicationClosure) { 587 TEST_F(ApplicationManagerTest, TestEndApplicationClosure) {
584 ClosingApplicationLoader* loader = new ClosingApplicationLoader(); 588 ClosingApplicationLoader* loader = new ClosingApplicationLoader();
585 application_manager_->SetLoaderForURL( 589 application_manager_->SetLoaderForURL(
586 scoped_ptr<ApplicationLoader>(loader), GURL("test:test")); 590 scoped_ptr<ApplicationLoader>(loader), GURL("test:test"));
587 591
588 bool called = false; 592 bool called = false;
589 scoped_ptr<ConnectToApplicationParams> params(new ConnectToApplicationParams); 593 scoped_ptr<ConnectToApplicationParams> params(new ConnectToApplicationParams);
590 params->SetTargetURL(GURL("test:test")); 594 params->SetTargetURL(GURL("test:test"));
591 params->set_on_application_end( 595 params->set_on_application_end(
592 base::Bind(&QuitClosure, base::Unretained(&called))); 596 base::Bind(&QuitClosure, base::Unretained(&called)));
593 application_manager_->ConnectToApplication(params.Pass()); 597 application_manager_->ConnectToApplication(std::move(params));
594 loop_.Run(); 598 loop_.Run();
595 EXPECT_TRUE(called); 599 EXPECT_TRUE(called);
596 } 600 }
597 601
598 TEST_F(ApplicationManagerTest, SameIdentityShouldNotCauseDuplicateLoad) { 602 TEST_F(ApplicationManagerTest, SameIdentityShouldNotCauseDuplicateLoad) {
599 // 1 because ApplicationManagerTest connects once at startup. 603 // 1 because ApplicationManagerTest connects once at startup.
600 EXPECT_EQ(1, test_loader_->num_loads()); 604 EXPECT_EQ(1, test_loader_->num_loads());
601 605
602 TestServicePtr test_service; 606 TestServicePtr test_service;
603 ConnectToService(application_manager_.get(), 607 ConnectToService(application_manager_.get(),
(...skipping 18 matching lines...) Expand all
622 626
623 // A different identity because the domain is different. 627 // A different identity because the domain is different.
624 ConnectToService(application_manager_.get(), 628 ConnectToService(application_manager_.get(),
625 GURL("http://www.another_domain.org/abc"), &test_service); 629 GURL("http://www.another_domain.org/abc"), &test_service);
626 EXPECT_EQ(4, test_loader_->num_loads()); 630 EXPECT_EQ(4, test_loader_->num_loads());
627 } 631 }
628 632
629 } // namespace test 633 } // namespace test
630 } // namespace shell 634 } // namespace shell
631 } // namespace mojo 635 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/shell/application_manager_apptest_driver.cc ('k') | mojo/shell/capability_filter_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698