OLD | NEW |
---|---|
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "chrome/browser/installable/installable_manager.h" | 5 #include "chrome/browser/installable/installable_manager.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/run_loop.h" | 8 #include "base/run_loop.h" |
9 #include "base/threading/thread_task_runner_handle.h" | 9 #include "base/threading/thread_task_runner_handle.h" |
10 #include "chrome/browser/ui/browser.h" | 10 #include "chrome/browser/ui/browser.h" |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
207 ManagerBeginsInEmptyState) { | 207 ManagerBeginsInEmptyState) { |
208 // Ensure that the InstallableManager starts off with everything null. | 208 // Ensure that the InstallableManager starts off with everything null. |
209 InstallableManager* manager = GetManager(); | 209 InstallableManager* manager = GetManager(); |
210 | 210 |
211 EXPECT_TRUE(manager->manifest().IsEmpty()); | 211 EXPECT_TRUE(manager->manifest().IsEmpty()); |
212 EXPECT_TRUE(manager->manifest_url().is_empty()); | 212 EXPECT_TRUE(manager->manifest_url().is_empty()); |
213 EXPECT_TRUE(manager->icons_.empty()); | 213 EXPECT_TRUE(manager->icons_.empty()); |
214 EXPECT_FALSE(manager->is_installable()); | 214 EXPECT_FALSE(manager->is_installable()); |
215 | 215 |
216 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error()); | 216 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error()); |
217 EXPECT_EQ(NO_ERROR_DETECTED, manager->installable_error()); | 217 EXPECT_EQ(NO_ERROR_DETECTED, manager->valid_manifest_error()); |
218 EXPECT_EQ(NO_ERROR_DETECTED, manager->worker_error()); | |
218 EXPECT_TRUE(manager->tasks_.empty()); | 219 EXPECT_TRUE(manager->tasks_.empty()); |
219 } | 220 } |
220 | 221 |
221 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckNoManifest) { | 222 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckNoManifest) { |
222 // Ensure that a page with no manifest returns the appropriate error and with | 223 // Ensure that a page with no manifest returns the appropriate error and with |
223 // null fields for everything. | 224 // null fields for everything. |
224 base::RunLoop run_loop; | 225 base::RunLoop run_loop; |
225 std::unique_ptr<CallbackTester> tester( | 226 std::unique_ptr<CallbackTester> tester( |
226 new CallbackTester(run_loop.QuitClosure())); | 227 new CallbackTester(run_loop.QuitClosure())); |
227 | 228 |
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
536 // Verify that the returned state matches manager internal state. | 537 // Verify that the returned state matches manager internal state. |
537 InstallableManager* manager = GetManager(); | 538 InstallableManager* manager = GetManager(); |
538 | 539 |
539 EXPECT_FALSE(manager->manifest().IsEmpty()); | 540 EXPECT_FALSE(manager->manifest().IsEmpty()); |
540 EXPECT_FALSE(manager->manifest_url().is_empty()); | 541 EXPECT_FALSE(manager->manifest_url().is_empty()); |
541 EXPECT_TRUE(manager->is_installable()); | 542 EXPECT_TRUE(manager->is_installable()); |
542 EXPECT_EQ(1u, manager->icons_.size()); | 543 EXPECT_EQ(1u, manager->icons_.size()); |
543 EXPECT_FALSE((manager->icon_url(kPrimaryIconParams).is_empty())); | 544 EXPECT_FALSE((manager->icon_url(kPrimaryIconParams).is_empty())); |
544 EXPECT_NE(nullptr, (manager->icon(kPrimaryIconParams))); | 545 EXPECT_NE(nullptr, (manager->icon(kPrimaryIconParams))); |
545 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error()); | 546 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error()); |
546 EXPECT_EQ(NO_ERROR_DETECTED, manager->installable_error()); | 547 EXPECT_EQ(NO_ERROR_DETECTED, manager->valid_manifest_error()); |
548 EXPECT_EQ(NO_ERROR_DETECTED, manager->worker_error()); | |
547 EXPECT_EQ(NO_ERROR_DETECTED, (manager->icon_error(kPrimaryIconParams))); | 549 EXPECT_EQ(NO_ERROR_DETECTED, (manager->icon_error(kPrimaryIconParams))); |
548 EXPECT_TRUE(manager->tasks_.empty()); | 550 EXPECT_TRUE(manager->tasks_.empty()); |
549 } | 551 } |
550 | 552 |
551 // Request everything except badge icon again without navigating away. This | 553 // Request everything except badge icon again without navigating away. This |
552 // should work fine. | 554 // should work fine. |
553 { | 555 { |
554 base::RunLoop run_loop; | 556 base::RunLoop run_loop; |
555 std::unique_ptr<CallbackTester> tester( | 557 std::unique_ptr<CallbackTester> tester( |
556 new CallbackTester(run_loop.QuitClosure())); | 558 new CallbackTester(run_loop.QuitClosure())); |
(...skipping 15 matching lines...) Expand all Loading... | |
572 // Verify that the returned state matches manager internal state. | 574 // Verify that the returned state matches manager internal state. |
573 InstallableManager* manager = GetManager(); | 575 InstallableManager* manager = GetManager(); |
574 | 576 |
575 EXPECT_FALSE(manager->manifest().IsEmpty()); | 577 EXPECT_FALSE(manager->manifest().IsEmpty()); |
576 EXPECT_FALSE(manager->manifest_url().is_empty()); | 578 EXPECT_FALSE(manager->manifest_url().is_empty()); |
577 EXPECT_TRUE(manager->is_installable()); | 579 EXPECT_TRUE(manager->is_installable()); |
578 EXPECT_EQ(1u, manager->icons_.size()); | 580 EXPECT_EQ(1u, manager->icons_.size()); |
579 EXPECT_FALSE((manager->icon_url(kPrimaryIconParams).is_empty())); | 581 EXPECT_FALSE((manager->icon_url(kPrimaryIconParams).is_empty())); |
580 EXPECT_NE(nullptr, (manager->icon(kPrimaryIconParams))); | 582 EXPECT_NE(nullptr, (manager->icon(kPrimaryIconParams))); |
581 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error()); | 583 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error()); |
582 EXPECT_EQ(NO_ERROR_DETECTED, manager->installable_error()); | 584 EXPECT_EQ(NO_ERROR_DETECTED, manager->valid_manifest_error()); |
585 EXPECT_EQ(NO_ERROR_DETECTED, manager->worker_error()); | |
583 EXPECT_EQ(NO_ERROR_DETECTED, (manager->icon_error(kPrimaryIconParams))); | 586 EXPECT_EQ(NO_ERROR_DETECTED, (manager->icon_error(kPrimaryIconParams))); |
584 EXPECT_TRUE(manager->tasks_.empty()); | 587 EXPECT_TRUE(manager->tasks_.empty()); |
585 } | 588 } |
586 | 589 |
587 { | 590 { |
588 // Check that a subsequent navigation resets state. | 591 // Check that a subsequent navigation resets state. |
589 ui_test_utils::NavigateToURL(browser(), GURL("about:blank")); | 592 ui_test_utils::NavigateToURL(browser(), GURL("about:blank")); |
590 InstallableManager* manager = GetManager(); | 593 InstallableManager* manager = GetManager(); |
591 | 594 |
592 EXPECT_TRUE(manager->manifest().IsEmpty()); | 595 EXPECT_TRUE(manager->manifest().IsEmpty()); |
593 EXPECT_TRUE(manager->manifest_url().is_empty()); | 596 EXPECT_TRUE(manager->manifest_url().is_empty()); |
594 EXPECT_FALSE(manager->is_installable()); | 597 EXPECT_FALSE(manager->is_installable()); |
595 EXPECT_TRUE(manager->icons_.empty()); | 598 EXPECT_TRUE(manager->icons_.empty()); |
596 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error()); | 599 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error()); |
597 EXPECT_EQ(NO_ERROR_DETECTED, manager->installable_error()); | 600 EXPECT_EQ(NO_ERROR_DETECTED, manager->valid_manifest_error()); |
601 EXPECT_EQ(NO_ERROR_DETECTED, manager->worker_error()); | |
598 EXPECT_TRUE(manager->tasks_.empty()); | 602 EXPECT_TRUE(manager->tasks_.empty()); |
599 } | 603 } |
600 } | 604 } |
601 | 605 |
602 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckWebappInIframe) { | 606 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckWebappInIframe) { |
603 base::RunLoop run_loop; | 607 base::RunLoop run_loop; |
604 std::unique_ptr<CallbackTester> tester( | 608 std::unique_ptr<CallbackTester> tester( |
605 new CallbackTester(run_loop.QuitClosure())); | 609 new CallbackTester(run_loop.QuitClosure())); |
606 | 610 |
607 NavigateAndRunInstallableManager(tester.get(), GetWebAppParams(), | 611 NavigateAndRunInstallableManager(tester.get(), GetWebAppParams(), |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
640 | 644 |
641 EXPECT_TRUE(tester->primary_icon_url().is_empty()); | 645 EXPECT_TRUE(tester->primary_icon_url().is_empty()); |
642 EXPECT_EQ(nullptr, tester->primary_icon()); | 646 EXPECT_EQ(nullptr, tester->primary_icon()); |
643 EXPECT_FALSE(tester->is_installable()); | 647 EXPECT_FALSE(tester->is_installable()); |
644 EXPECT_TRUE(tester->badge_icon_url().is_empty()); | 648 EXPECT_TRUE(tester->badge_icon_url().is_empty()); |
645 EXPECT_EQ(nullptr, tester->badge_icon()); | 649 EXPECT_EQ(nullptr, tester->badge_icon()); |
646 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); | 650 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); |
647 EXPECT_EQ(GetStatus(), InstallabilityCheckStatus::NOT_COMPLETED); | 651 EXPECT_EQ(GetStatus(), InstallabilityCheckStatus::NOT_COMPLETED); |
648 } | 652 } |
649 | 653 |
650 // Fetch the full criteria should fail. | 654 // Fetching the full criteria should fail if we don't wait for the worker. |
651 { | 655 { |
652 base::RunLoop run_loop; | 656 base::RunLoop run_loop; |
653 std::unique_ptr<CallbackTester> tester( | 657 std::unique_ptr<CallbackTester> tester( |
654 new CallbackTester(run_loop.QuitClosure())); | 658 new CallbackTester(run_loop.QuitClosure())); |
655 | 659 |
656 RunInstallableManager(tester.get(), GetWebAppParams()); | 660 InstallableParams params = GetWebAppParams(); |
661 params.wait_for_worker = false; | |
662 RunInstallableManager(tester.get(), params); | |
657 run_loop.Run(); | 663 run_loop.Run(); |
658 | 664 |
659 EXPECT_FALSE(tester->manifest().IsEmpty()); | 665 EXPECT_FALSE(tester->manifest().IsEmpty()); |
660 EXPECT_FALSE(tester->manifest_url().is_empty()); | 666 EXPECT_FALSE(tester->manifest_url().is_empty()); |
661 | 667 |
662 EXPECT_FALSE(tester->primary_icon_url().is_empty()); | 668 EXPECT_FALSE(tester->primary_icon_url().is_empty()); |
663 EXPECT_NE(nullptr, tester->primary_icon()); | 669 EXPECT_NE(nullptr, tester->primary_icon()); |
664 EXPECT_FALSE(tester->is_installable()); | 670 EXPECT_FALSE(tester->is_installable()); |
665 EXPECT_TRUE(tester->badge_icon_url().is_empty()); | 671 EXPECT_TRUE(tester->badge_icon_url().is_empty()); |
666 EXPECT_EQ(nullptr, tester->badge_icon()); | 672 EXPECT_EQ(nullptr, tester->badge_icon()); |
667 EXPECT_EQ(NO_MATCHING_SERVICE_WORKER, tester->error_code()); | 673 EXPECT_EQ(NO_MATCHING_SERVICE_WORKER, tester->error_code()); |
668 EXPECT_EQ(GetStatus(), | 674 EXPECT_EQ(GetStatus(), |
669 InstallabilityCheckStatus::COMPLETE_NON_PROGRESSIVE_WEB_APP); | 675 InstallabilityCheckStatus::COMPLETE_NON_PROGRESSIVE_WEB_APP); |
670 } | 676 } |
671 } | 677 } |
672 | 678 |
673 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, | 679 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, |
680 CheckLazyServiceWorkerFailsWithoutWaiting) { | |
681 base::RunLoop run_loop; | |
682 std::unique_ptr<CallbackTester> tester( | |
683 new CallbackTester(run_loop.QuitClosure())); | |
684 | |
685 // This page registers its worker after a short delay. Verify the check | |
686 // deterministically fails if we don't wait for the worker. | |
687 InstallableParams params = GetWebAppParams(); | |
688 params.wait_for_worker = false; | |
689 NavigateAndRunInstallableManager( | |
690 tester.get(), params, | |
691 "/banners/lazy_service_worker_test_page.html?swdelay=500"); | |
benwells
2017/06/15 04:42:43
Is the 500 important here? Just asking as 300 chan
dominickn
2017/06/15 04:50:12
In my empirical testing, 300ms was originally long
| |
692 run_loop.Run(); | |
693 | |
694 EXPECT_FALSE(tester->manifest().IsEmpty()); | |
695 EXPECT_FALSE(tester->manifest_url().is_empty()); | |
696 | |
697 EXPECT_FALSE(tester->primary_icon_url().is_empty()); | |
698 EXPECT_NE(nullptr, tester->primary_icon()); | |
699 EXPECT_FALSE(tester->is_installable()); | |
700 EXPECT_TRUE(tester->badge_icon_url().is_empty()); | |
701 EXPECT_EQ(nullptr, tester->badge_icon()); | |
702 EXPECT_EQ(NO_MATCHING_SERVICE_WORKER, tester->error_code()); | |
703 EXPECT_EQ(GetStatus(), | |
704 InstallabilityCheckStatus::COMPLETE_NON_PROGRESSIVE_WEB_APP); | |
705 } | |
706 | |
707 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, | |
708 CheckLazyServiceWorkerPassesWhenWaiting) { | |
709 base::RunLoop run_loop; | |
710 std::unique_ptr<CallbackTester> tester( | |
711 new CallbackTester(run_loop.QuitClosure())); | |
712 | |
713 // This page registers its worker after a short delay. Verify the check | |
714 // deterministically passes if we do wait for the worker. | |
715 NavigateAndRunInstallableManager( | |
716 tester.get(), GetWebAppParams(), | |
717 "/banners/lazy_service_worker_test_page.html?swdelay=500"); | |
718 run_loop.Run(); | |
719 | |
720 EXPECT_FALSE(tester->manifest().IsEmpty()); | |
721 EXPECT_FALSE(tester->manifest_url().is_empty()); | |
722 EXPECT_FALSE(tester->primary_icon_url().is_empty()); | |
723 EXPECT_NE(nullptr, tester->primary_icon()); | |
724 EXPECT_TRUE(tester->is_installable()); | |
725 EXPECT_TRUE(tester->badge_icon_url().is_empty()); | |
726 EXPECT_EQ(nullptr, tester->badge_icon()); | |
727 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); | |
728 EXPECT_EQ(GetStatus(), | |
729 InstallabilityCheckStatus::COMPLETE_PROGRESSIVE_WEB_APP); | |
730 } | |
731 | |
732 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, | |
674 CheckPageWithNoServiceWorkerFetchHandler) { | 733 CheckPageWithNoServiceWorkerFetchHandler) { |
675 base::RunLoop run_loop; | 734 base::RunLoop run_loop; |
676 std::unique_ptr<CallbackTester> tester( | 735 std::unique_ptr<CallbackTester> tester( |
677 new CallbackTester(run_loop.QuitClosure())); | 736 new CallbackTester(run_loop.QuitClosure())); |
678 | 737 |
679 NavigateAndRunInstallableManager( | 738 NavigateAndRunInstallableManager( |
680 tester.get(), GetWebAppParams(), | 739 tester.get(), GetWebAppParams(), |
681 "/banners/no_sw_fetch_handler_test_page.html"); | 740 "/banners/no_sw_fetch_handler_test_page.html"); |
682 | 741 |
683 RunInstallableManager(tester.get(), GetWebAppParams()); | 742 RunInstallableManager(tester.get(), GetWebAppParams()); |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
841 CheckNestedCallsToGetData) { | 900 CheckNestedCallsToGetData) { |
842 // Verify that we can call GetData while in a callback from GetData. | 901 // Verify that we can call GetData while in a callback from GetData. |
843 base::RunLoop run_loop; | 902 base::RunLoop run_loop; |
844 InstallableParams params = GetWebAppParams(); | 903 InstallableParams params = GetWebAppParams(); |
845 std::unique_ptr<NestedCallbackTester> tester( | 904 std::unique_ptr<NestedCallbackTester> tester( |
846 new NestedCallbackTester(GetManager(), params, run_loop.QuitClosure())); | 905 new NestedCallbackTester(GetManager(), params, run_loop.QuitClosure())); |
847 | 906 |
848 tester->Run(); | 907 tester->Run(); |
849 run_loop.Run(); | 908 run_loop.Run(); |
850 } | 909 } |
OLD | NEW |