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

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

Issue 696563002: Cache ShellImpl by resolved URL, not initial URL (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: rebase Created 6 years, 1 month 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/application_manager/application_manager.cc ('k') | mojo/shell/context.h » ('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 "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/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "mojo/application_manager/application_loader.h" 9 #include "mojo/application_manager/application_loader.h"
10 #include "mojo/application_manager/application_manager.h" 10 #include "mojo/application_manager/application_manager.h"
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 } 395 }
396 396
397 int call_count() const { return call_count_; } 397 int call_count() const { return call_count_; }
398 398
399 private: 399 private:
400 int call_count_; 400 int call_count_;
401 GURL url_; 401 GURL url_;
402 DISALLOW_COPY_AND_ASSIGN(TestServiceInterceptor); 402 DISALLOW_COPY_AND_ASSIGN(TestServiceInterceptor);
403 }; 403 };
404 404
405 class TestDelegate : public ApplicationManager::Delegate {
406 public:
407 void AddMapping(const GURL& from, const GURL& to) {
408 mappings_[from] = to;
409 }
410
411 // ApplicationManager::Delegate
412 virtual GURL ResolveURL(const GURL& url) override {
413 auto it = mappings_.find(url);
414 if (it != mappings_.end())
415 return it->second;
416 return url;
417 }
418
419 virtual void OnApplicationError(const GURL& url) override {
420 }
421
422 private:
423 std::map<GURL, GURL> mappings_;
424 };
425
405 } // namespace 426 } // namespace
406 427
407 class ApplicationManagerTest : public testing::Test { 428 class ApplicationManagerTest : public testing::Test {
408 public: 429 public:
409 ApplicationManagerTest() : tester_context_(&loop_) {} 430 ApplicationManagerTest() : tester_context_(&loop_) {}
410 431
411 ~ApplicationManagerTest() override {} 432 ~ApplicationManagerTest() override {}
412 433
413 void SetUp() override { 434 void SetUp() override {
414 application_manager_.reset(new ApplicationManager); 435 application_manager_.reset(new ApplicationManager(&test_delegate_));
415 TestApplicationLoader* default_loader = new TestApplicationLoader; 436 test_loader_ = new TestApplicationLoader;
416 default_loader->set_context(&context_); 437 test_loader_->set_context(&context_);
417 application_manager_->set_default_loader( 438 application_manager_->set_default_loader(
418 scoped_ptr<ApplicationLoader>(default_loader)); 439 scoped_ptr<ApplicationLoader>(test_loader_));
419 440
420 TestServicePtr service_proxy; 441 TestServicePtr service_proxy;
421 application_manager_->ConnectToService(GURL(kTestURLString), 442 application_manager_->ConnectToService(GURL(kTestURLString),
422 &service_proxy); 443 &service_proxy);
423 test_client_.reset(new TestClientImpl(service_proxy.Pass())); 444 test_client_.reset(new TestClientImpl(service_proxy.Pass()));
424 } 445 }
425 446
426 void TearDown() override { 447 void TearDown() override {
427 test_client_.reset(NULL); 448 test_client_.reset(NULL);
428 application_manager_.reset(NULL); 449 application_manager_.reset(NULL);
(...skipping 14 matching lines...) Expand all
443 application_manager_->SetLoaderForURL(MakeLoader(requestor_url), url); 464 application_manager_->SetLoaderForURL(MakeLoader(requestor_url), url);
444 } 465 }
445 466
446 bool HasFactoryForTestURL() { 467 bool HasFactoryForTestURL() {
447 ApplicationManager::TestAPI manager_test_api(application_manager_.get()); 468 ApplicationManager::TestAPI manager_test_api(application_manager_.get());
448 return manager_test_api.HasFactoryForURL(GURL(kTestURLString)); 469 return manager_test_api.HasFactoryForURL(GURL(kTestURLString));
449 } 470 }
450 471
451 protected: 472 protected:
452 base::ShadowingAtExitManager at_exit_; 473 base::ShadowingAtExitManager at_exit_;
474 TestDelegate test_delegate_;
475 TestApplicationLoader* test_loader_;
453 TesterContext tester_context_; 476 TesterContext tester_context_;
454 TestContext context_; 477 TestContext context_;
455 base::MessageLoop loop_; 478 base::MessageLoop loop_;
456 scoped_ptr<TestClientImpl> test_client_; 479 scoped_ptr<TestClientImpl> test_client_;
457 scoped_ptr<ApplicationManager> application_manager_; 480 scoped_ptr<ApplicationManager> application_manager_;
458 DISALLOW_COPY_AND_ASSIGN(ApplicationManagerTest); 481 DISALLOW_COPY_AND_ASSIGN(ApplicationManagerTest);
459 }; 482 };
460 483
461 TEST_F(ApplicationManagerTest, Basic) { 484 TEST_F(ApplicationManagerTest, Basic) {
462 test_client_->Test("test"); 485 test_client_->Test("test");
463 loop_.Run(); 486 loop_.Run();
464 EXPECT_EQ(std::string("test"), context_.last_test_string); 487 EXPECT_EQ(std::string("test"), context_.last_test_string);
465 } 488 }
466 489
467 // Confirm that no arguments are sent to an application by default. 490 // Confirm that no arguments are sent to an application by default.
468 TEST_F(ApplicationManagerTest, NoArgs) { 491 TEST_F(ApplicationManagerTest, NoArgs) {
469 ApplicationManager am; 492 ApplicationManager am(&test_delegate_);
470 GURL test_url("test:test"); 493 GURL test_url("test:test");
471 TestContext context; 494 TestContext context;
472 TestApplicationLoader* loader = new TestApplicationLoader; 495 TestApplicationLoader* loader = new TestApplicationLoader;
473 loader->set_context(&context); 496 loader->set_context(&context);
474 am.SetLoaderForURL(scoped_ptr<ApplicationLoader>(loader), test_url); 497 am.SetLoaderForURL(scoped_ptr<ApplicationLoader>(loader), test_url);
475 TestServicePtr test_service; 498 TestServicePtr test_service;
476 am.ConnectToService(test_url, &test_service); 499 am.ConnectToService(test_url, &test_service);
477 TestClientImpl test_client(test_service.Pass()); 500 TestClientImpl test_client(test_service.Pass());
478 test_client.Test("test"); 501 test_client.Test("test");
479 loop_.Run(); 502 loop_.Run();
480 std::vector<std::string> app_args = loader->GetArgs(); 503 std::vector<std::string> app_args = loader->GetArgs();
481 EXPECT_EQ(0U, app_args.size()); 504 EXPECT_EQ(0U, app_args.size());
482 } 505 }
483 506
484 // Confirm that arguments are sent to an application. 507 // Confirm that arguments are sent to an application.
485 TEST_F(ApplicationManagerTest, Args) { 508 TEST_F(ApplicationManagerTest, Args) {
486 ApplicationManager am; 509 ApplicationManager am(&test_delegate_);
487 GURL test_url("test:test"); 510 GURL test_url("test:test");
488 std::vector<std::string> args; 511 std::vector<std::string> args;
489 args.push_back("test_arg1"); 512 args.push_back("test_arg1");
490 args.push_back("test_arg2"); 513 args.push_back("test_arg2");
491 am.SetArgsForURL(args, test_url); 514 am.SetArgsForURL(args, test_url);
492 TestContext context; 515 TestContext context;
493 TestApplicationLoader* loader = new TestApplicationLoader; 516 TestApplicationLoader* loader = new TestApplicationLoader;
494 loader->set_context(&context); 517 loader->set_context(&context);
495 am.SetLoaderForURL(scoped_ptr<ApplicationLoader>(loader), test_url); 518 am.SetLoaderForURL(scoped_ptr<ApplicationLoader>(loader), test_url);
496 TestServicePtr test_service; 519 TestServicePtr test_service;
(...skipping 13 matching lines...) Expand all
510 loop_.Run(); 533 loop_.Run();
511 EXPECT_EQ(1, context_.num_impls); 534 EXPECT_EQ(1, context_.num_impls);
512 test_client_.reset(NULL); 535 test_client_.reset(NULL);
513 loop_.Run(); 536 loop_.Run();
514 EXPECT_EQ(0, context_.num_impls); 537 EXPECT_EQ(0, context_.num_impls);
515 EXPECT_TRUE(HasFactoryForTestURL()); 538 EXPECT_TRUE(HasFactoryForTestURL());
516 } 539 }
517 540
518 TEST_F(ApplicationManagerTest, Deletes) { 541 TEST_F(ApplicationManagerTest, Deletes) {
519 { 542 {
520 ApplicationManager am; 543 ApplicationManager am(&test_delegate_);
521 TestApplicationLoader* default_loader = new TestApplicationLoader; 544 TestApplicationLoader* default_loader = new TestApplicationLoader;
522 default_loader->set_context(&context_); 545 default_loader->set_context(&context_);
523 TestApplicationLoader* url_loader1 = new TestApplicationLoader; 546 TestApplicationLoader* url_loader1 = new TestApplicationLoader;
524 TestApplicationLoader* url_loader2 = new TestApplicationLoader; 547 TestApplicationLoader* url_loader2 = new TestApplicationLoader;
525 url_loader1->set_context(&context_); 548 url_loader1->set_context(&context_);
526 url_loader2->set_context(&context_); 549 url_loader2->set_context(&context_);
527 TestApplicationLoader* scheme_loader1 = new TestApplicationLoader; 550 TestApplicationLoader* scheme_loader1 = new TestApplicationLoader;
528 TestApplicationLoader* scheme_loader2 = new TestApplicationLoader; 551 TestApplicationLoader* scheme_loader2 = new TestApplicationLoader;
529 scheme_loader1->set_context(&context_); 552 scheme_loader1->set_context(&context_);
530 scheme_loader2->set_context(&context_); 553 scheme_loader2->set_context(&context_);
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
670 693
671 std::string url("test:test3"); 694 std::string url("test:test3");
672 TestServicePtr test_service; 695 TestServicePtr test_service;
673 application_manager_->ConnectToService(GURL(url), &test_service); 696 application_manager_->ConnectToService(GURL(url), &test_service);
674 697
675 EXPECT_EQ(1, interceptor.call_count()); 698 EXPECT_EQ(1, interceptor.call_count());
676 EXPECT_EQ(url, interceptor.url_spec()); 699 EXPECT_EQ(url, interceptor.url_spec());
677 EXPECT_EQ(1, default_loader->num_loads()); 700 EXPECT_EQ(1, default_loader->num_loads());
678 } 701 }
679 702
703 TEST_F(ApplicationManagerTest, MappedURLsShouldNotCauseDuplicateLoad) {
704 test_delegate_.AddMapping(GURL("foo:foo2"), GURL("foo:foo"));
705 // 1 because ApplicationManagerTest connects once at startup.
706 EXPECT_EQ(1, test_loader_->num_loads());
707
708 TestServicePtr test_service;
709 application_manager_->ConnectToService(GURL("foo:foo"), &test_service);
710 EXPECT_EQ(2, test_loader_->num_loads());
711
712 TestServicePtr test_service2;
713 application_manager_->ConnectToService(GURL("foo:foo2"), &test_service2);
714 EXPECT_EQ(2, test_loader_->num_loads());
715
716 TestServicePtr test_service3;
717 application_manager_->ConnectToService(GURL("bar:bar"), &test_service2);
718 EXPECT_EQ(3, test_loader_->num_loads());
719 }
720
680 } // namespace mojo 721 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/application_manager/application_manager.cc ('k') | mojo/shell/context.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698