Chromium Code Reviews| 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/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "base/threading/thread_task_runner_handle.h" | 10 #include "base/threading/thread_task_runner_handle.h" |
| (...skipping 690 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 701 CheckLazyServiceWorkerPassesWhenWaiting) { | 701 CheckLazyServiceWorkerPassesWhenWaiting) { |
| 702 base::RunLoop tester_run_loop, sw_run_loop; | 702 base::RunLoop tester_run_loop, sw_run_loop; |
| 703 std::unique_ptr<CallbackTester> tester( | 703 std::unique_ptr<CallbackTester> tester( |
| 704 new CallbackTester(tester_run_loop.QuitClosure())); | 704 new CallbackTester(tester_run_loop.QuitClosure())); |
| 705 | 705 |
| 706 content::WebContents* web_contents = | 706 content::WebContents* web_contents = |
| 707 browser()->tab_strip_model()->GetActiveWebContents(); | 707 browser()->tab_strip_model()->GetActiveWebContents(); |
| 708 auto manager = base::MakeUnique<LazyWorkerInstallableManager>( | 708 auto manager = base::MakeUnique<LazyWorkerInstallableManager>( |
| 709 web_contents, sw_run_loop.QuitClosure()); | 709 web_contents, sw_run_loop.QuitClosure()); |
| 710 | 710 |
| 711 // Load a URL with no service worker. | 711 { |
| 712 GURL test_url = embedded_test_server()->GetURL( | 712 // Load a URL with no service worker. |
| 713 "/banners/manifest_no_service_worker.html"); | 713 GURL test_url = embedded_test_server()->GetURL( |
| 714 ui_test_utils::NavigateToURL(browser(), test_url); | 714 "/banners/manifest_no_service_worker.html"); |
| 715 ui_test_utils::NavigateToURL(browser(), test_url); | |
| 715 | 716 |
| 716 // Kick off fetching the data. This should block on waiting for a worker. | 717 // Kick off fetching the data. This should block on waiting for a worker. |
| 717 manager->GetData(GetWebAppParams(), | 718 manager->GetData(GetWebAppParams(), |
| 718 base::Bind(&CallbackTester::OnDidFinishInstallableCheck, | 719 base::Bind(&CallbackTester::OnDidFinishInstallableCheck, |
| 719 base::Unretained(tester.get()))); | 720 base::Unretained(tester.get()))); |
| 720 sw_run_loop.Run(); | 721 sw_run_loop.Run(); |
|
benwells
2017/06/27 07:20:59
Unrelated to this change - do you need so many run
dominickn
2017/06/27 07:32:49
base::RunLoop has no reset method, and it can only
benwells
2017/06/27 08:31:01
Right, the pattern I've seen is to have a unique_p
| |
| 722 } | |
| 721 | 723 |
| 722 // We should now be waiting for the service worker. | 724 // We should now be waiting for the service worker. |
| 725 EXPECT_TRUE(tester->manifest().IsEmpty()); | |
| 723 EXPECT_FALSE(manager->manifest().IsEmpty()); | 726 EXPECT_FALSE(manager->manifest().IsEmpty()); |
| 724 EXPECT_FALSE(manager->manifest_url().is_empty()); | 727 EXPECT_FALSE(manager->manifest_url().is_empty()); |
| 725 EXPECT_FALSE(manager->is_installable()); | 728 EXPECT_FALSE(manager->is_installable()); |
| 726 EXPECT_EQ(1u, manager->icons_.size()); | 729 EXPECT_EQ(1u, manager->icons_.size()); |
| 727 EXPECT_FALSE((manager->icon_url(kPrimaryIconParams).is_empty())); | 730 EXPECT_FALSE((manager->icon_url(kPrimaryIconParams).is_empty())); |
| 728 EXPECT_NE(nullptr, (manager->icon(kPrimaryIconParams))); | 731 EXPECT_NE(nullptr, (manager->icon(kPrimaryIconParams))); |
| 729 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error()); | 732 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error()); |
| 730 EXPECT_EQ(NO_ERROR_DETECTED, manager->valid_manifest_error()); | 733 EXPECT_EQ(NO_ERROR_DETECTED, manager->valid_manifest_error()); |
| 731 EXPECT_EQ(NO_ERROR_DETECTED, manager->worker_error()); | 734 EXPECT_EQ(NO_ERROR_DETECTED, manager->worker_error()); |
| 732 EXPECT_EQ(NO_ERROR_DETECTED, (manager->icon_error(kPrimaryIconParams))); | 735 EXPECT_EQ(NO_ERROR_DETECTED, (manager->icon_error(kPrimaryIconParams))); |
| 733 EXPECT_TRUE(manager->worker_waiting()); | 736 EXPECT_TRUE(manager->tasks_.empty()); |
| 734 EXPECT_FALSE(manager->tasks_.empty()); | 737 EXPECT_FALSE(manager->paused_tasks_.empty()); |
| 738 | |
| 739 { | |
| 740 // Fetching just the manifest and icons should not hang while the other call | |
| 741 // is waiting for a worker. | |
| 742 base::RunLoop run_loop; | |
| 743 std::unique_ptr<CallbackTester> nested_tester( | |
| 744 new CallbackTester(run_loop.QuitClosure())); | |
| 745 manager->GetData(GetPrimaryIconParams(), | |
| 746 base::Bind(&CallbackTester::OnDidFinishInstallableCheck, | |
| 747 base::Unretained(nested_tester.get()))); | |
| 748 run_loop.Run(); | |
| 749 | |
| 750 EXPECT_FALSE(nested_tester->manifest().IsEmpty()); | |
| 751 EXPECT_FALSE(nested_tester->manifest_url().is_empty()); | |
| 752 EXPECT_FALSE(nested_tester->primary_icon_url().is_empty()); | |
| 753 EXPECT_NE(nullptr, nested_tester->primary_icon()); | |
| 754 EXPECT_FALSE(nested_tester->is_installable()); | |
| 755 EXPECT_TRUE(nested_tester->badge_icon_url().is_empty()); | |
| 756 EXPECT_EQ(nullptr, nested_tester->badge_icon()); | |
| 757 EXPECT_EQ(NO_ERROR_DETECTED, nested_tester->error_code()); | |
| 758 } | |
| 735 | 759 |
| 736 // Load the service worker. | 760 // Load the service worker. |
| 737 EXPECT_TRUE(content::ExecuteScript( | 761 EXPECT_TRUE(content::ExecuteScript( |
| 738 web_contents, "navigator.serviceWorker.register('service_worker.js');")); | 762 web_contents, "navigator.serviceWorker.register('service_worker.js');")); |
| 739 tester_run_loop.Run(); | 763 tester_run_loop.Run(); |
| 740 | 764 |
| 741 // We should have passed now. | 765 // We should have passed now. |
| 742 EXPECT_FALSE(tester->manifest().IsEmpty()); | 766 EXPECT_FALSE(tester->manifest().IsEmpty()); |
| 743 EXPECT_FALSE(tester->manifest_url().is_empty()); | 767 EXPECT_FALSE(tester->manifest_url().is_empty()); |
| 744 EXPECT_FALSE(tester->primary_icon_url().is_empty()); | 768 EXPECT_FALSE(tester->primary_icon_url().is_empty()); |
| 745 EXPECT_NE(nullptr, tester->primary_icon()); | 769 EXPECT_NE(nullptr, tester->primary_icon()); |
| 746 EXPECT_TRUE(tester->is_installable()); | 770 EXPECT_TRUE(tester->is_installable()); |
| 747 EXPECT_TRUE(tester->badge_icon_url().is_empty()); | 771 EXPECT_TRUE(tester->badge_icon_url().is_empty()); |
| 748 EXPECT_EQ(nullptr, tester->badge_icon()); | 772 EXPECT_EQ(nullptr, tester->badge_icon()); |
| 749 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); | 773 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); |
| 750 EXPECT_EQ(manager->page_status_, | 774 EXPECT_EQ(manager->page_status_, |
| 751 InstallabilityCheckStatus::COMPLETE_PROGRESSIVE_WEB_APP); | 775 InstallabilityCheckStatus::COMPLETE_PROGRESSIVE_WEB_APP); |
| 752 | 776 |
| 753 // Verify internal state. | 777 // Verify internal state. |
| 754 EXPECT_FALSE(manager->manifest().IsEmpty()); | 778 EXPECT_FALSE(manager->manifest().IsEmpty()); |
| 755 EXPECT_FALSE(manager->manifest_url().is_empty()); | 779 EXPECT_FALSE(manager->manifest_url().is_empty()); |
| 756 EXPECT_TRUE(manager->is_installable()); | 780 EXPECT_TRUE(manager->is_installable()); |
| 757 EXPECT_EQ(1u, manager->icons_.size()); | 781 EXPECT_EQ(1u, manager->icons_.size()); |
| 758 EXPECT_FALSE((manager->icon_url(kPrimaryIconParams).is_empty())); | 782 EXPECT_FALSE((manager->icon_url(kPrimaryIconParams).is_empty())); |
| 759 EXPECT_NE(nullptr, (manager->icon(kPrimaryIconParams))); | 783 EXPECT_NE(nullptr, (manager->icon(kPrimaryIconParams))); |
| 760 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error()); | 784 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error()); |
| 761 EXPECT_EQ(NO_ERROR_DETECTED, manager->valid_manifest_error()); | 785 EXPECT_EQ(NO_ERROR_DETECTED, manager->valid_manifest_error()); |
| 762 EXPECT_EQ(NO_ERROR_DETECTED, manager->worker_error()); | 786 EXPECT_EQ(NO_ERROR_DETECTED, manager->worker_error()); |
| 763 EXPECT_EQ(NO_ERROR_DETECTED, (manager->icon_error(kPrimaryIconParams))); | 787 EXPECT_EQ(NO_ERROR_DETECTED, (manager->icon_error(kPrimaryIconParams))); |
| 764 EXPECT_FALSE(manager->worker_waiting()); | |
| 765 EXPECT_TRUE(manager->tasks_.empty()); | 788 EXPECT_TRUE(manager->tasks_.empty()); |
| 789 EXPECT_TRUE(manager->paused_tasks_.empty()); | |
| 766 } | 790 } |
| 767 | 791 |
| 768 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, | 792 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, |
| 769 CheckLazyServiceWorkerNoFetchHandlerFails) { | 793 CheckLazyServiceWorkerNoFetchHandlerFails) { |
| 770 base::RunLoop tester_run_loop, sw_run_loop; | 794 base::RunLoop tester_run_loop, sw_run_loop; |
| 771 std::unique_ptr<CallbackTester> tester( | 795 std::unique_ptr<CallbackTester> tester( |
| 772 new CallbackTester(tester_run_loop.QuitClosure())); | 796 new CallbackTester(tester_run_loop.QuitClosure())); |
| 773 | 797 |
| 774 content::WebContents* web_contents = | 798 content::WebContents* web_contents = |
| 775 browser()->tab_strip_model()->GetActiveWebContents(); | 799 browser()->tab_strip_model()->GetActiveWebContents(); |
| 776 auto manager = base::MakeUnique<LazyWorkerInstallableManager>( | 800 auto manager = base::MakeUnique<LazyWorkerInstallableManager>( |
| 777 web_contents, sw_run_loop.QuitClosure()); | 801 web_contents, sw_run_loop.QuitClosure()); |
| 778 | 802 |
| 779 // Load a URL with no service worker. | 803 // Load a URL with no service worker. |
| 780 GURL test_url = embedded_test_server()->GetURL( | 804 GURL test_url = embedded_test_server()->GetURL( |
| 781 "/banners/manifest_no_service_worker.html"); | 805 "/banners/manifest_no_service_worker.html"); |
| 782 ui_test_utils::NavigateToURL(browser(), test_url); | 806 ui_test_utils::NavigateToURL(browser(), test_url); |
| 783 | 807 |
| 784 // Kick off fetching the data. This should block on waiting for a worker. | 808 // Kick off fetching the data. This should block on waiting for a worker. |
| 785 manager->GetData(GetWebAppParams(), | 809 manager->GetData(GetWebAppParams(), |
| 786 base::Bind(&CallbackTester::OnDidFinishInstallableCheck, | 810 base::Bind(&CallbackTester::OnDidFinishInstallableCheck, |
| 787 base::Unretained(tester.get()))); | 811 base::Unretained(tester.get()))); |
| 788 sw_run_loop.Run(); | 812 sw_run_loop.Run(); |
| 789 | 813 |
| 790 // We should now be waiting for the service worker. | 814 // We should now be waiting for the service worker. |
| 791 EXPECT_TRUE(manager->worker_waiting()); | 815 EXPECT_TRUE(manager->tasks_.empty()); |
| 792 EXPECT_FALSE(manager->tasks_.empty()); | 816 EXPECT_FALSE(manager->paused_tasks_.empty()); |
| 793 | 817 |
| 794 // Load the service worker with no fetch handler. | 818 // Load the service worker with no fetch handler. |
| 795 EXPECT_TRUE(content::ExecuteScript(web_contents, | 819 EXPECT_TRUE(content::ExecuteScript(web_contents, |
| 796 "navigator.serviceWorker.register('" | 820 "navigator.serviceWorker.register('" |
| 797 "service_worker_no_fetch_handler.js');")); | 821 "service_worker_no_fetch_handler.js');")); |
| 798 tester_run_loop.Run(); | 822 tester_run_loop.Run(); |
| 799 | 823 |
| 800 // We should fail the check. | 824 // We should fail the check. |
| 801 EXPECT_FALSE(tester->manifest().IsEmpty()); | 825 EXPECT_FALSE(tester->manifest().IsEmpty()); |
| 802 EXPECT_FALSE(tester->manifest_url().is_empty()); | 826 EXPECT_FALSE(tester->manifest_url().is_empty()); |
| 803 EXPECT_FALSE(tester->primary_icon_url().is_empty()); | 827 EXPECT_FALSE(tester->primary_icon_url().is_empty()); |
| 804 EXPECT_NE(nullptr, tester->primary_icon()); | 828 EXPECT_NE(nullptr, tester->primary_icon()); |
| 805 EXPECT_FALSE(tester->is_installable()); | 829 EXPECT_FALSE(tester->is_installable()); |
| 806 EXPECT_TRUE(tester->badge_icon_url().is_empty()); | 830 EXPECT_TRUE(tester->badge_icon_url().is_empty()); |
| 807 EXPECT_EQ(nullptr, tester->badge_icon()); | 831 EXPECT_EQ(nullptr, tester->badge_icon()); |
| 808 EXPECT_EQ(NOT_OFFLINE_CAPABLE, tester->error_code()); | 832 EXPECT_EQ(NOT_OFFLINE_CAPABLE, tester->error_code()); |
| 809 EXPECT_FALSE(manager->worker_waiting()); | |
| 810 EXPECT_EQ(manager->page_status_, | 833 EXPECT_EQ(manager->page_status_, |
| 811 InstallabilityCheckStatus::COMPLETE_NON_PROGRESSIVE_WEB_APP); | 834 InstallabilityCheckStatus::COMPLETE_NON_PROGRESSIVE_WEB_APP); |
| 812 } | 835 } |
| 813 | 836 |
| 814 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, | 837 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, |
| 815 CheckServiceWorkerErrorIsNotCached) { | 838 CheckServiceWorkerErrorIsNotCached) { |
| 816 content::WebContents* web_contents = | 839 content::WebContents* web_contents = |
| 817 browser()->tab_strip_model()->GetActiveWebContents(); | 840 browser()->tab_strip_model()->GetActiveWebContents(); |
| 818 base::RunLoop sw_run_loop; | 841 base::RunLoop sw_run_loop; |
| 819 auto manager = base::MakeUnique<LazyWorkerInstallableManager>( | 842 auto manager = base::MakeUnique<LazyWorkerInstallableManager>( |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1037 CheckNestedCallsToGetData) { | 1060 CheckNestedCallsToGetData) { |
| 1038 // Verify that we can call GetData while in a callback from GetData. | 1061 // Verify that we can call GetData while in a callback from GetData. |
| 1039 base::RunLoop run_loop; | 1062 base::RunLoop run_loop; |
| 1040 InstallableParams params = GetWebAppParams(); | 1063 InstallableParams params = GetWebAppParams(); |
| 1041 std::unique_ptr<NestedCallbackTester> tester( | 1064 std::unique_ptr<NestedCallbackTester> tester( |
| 1042 new NestedCallbackTester(GetManager(), params, run_loop.QuitClosure())); | 1065 new NestedCallbackTester(GetManager(), params, run_loop.QuitClosure())); |
| 1043 | 1066 |
| 1044 tester->Run(); | 1067 tester->Run(); |
| 1045 run_loop.Run(); | 1068 run_loop.Run(); |
| 1046 } | 1069 } |
| OLD | NEW |