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

Side by Side Diff: chrome/browser/installable/installable_manager_browsertest.cc

Issue 2942513002: Allow banners to trigger on sites which don't register a service worker onload. (Closed)
Patch Set: Don't cache NO_MATCHING_SERVICE_WORKER Created 3 years, 6 months 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
OLDNEW
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/run_loop.h" 9 #include "base/run_loop.h"
9 #include "base/threading/thread_task_runner_handle.h" 10 #include "base/threading/thread_task_runner_handle.h"
10 #include "chrome/browser/ui/browser.h" 11 #include "chrome/browser/ui/browser.h"
11 #include "chrome/browser/ui/tabs/tab_strip_model.h" 12 #include "chrome/browser/ui/tabs/tab_strip_model.h"
12 #include "chrome/common/chrome_switches.h" 13 #include "chrome/common/chrome_switches.h"
13 #include "chrome/test/base/in_process_browser_test.h" 14 #include "chrome/test/base/in_process_browser_test.h"
14 #include "chrome/test/base/ui_test_utils.h" 15 #include "chrome/test/base/ui_test_utils.h"
16 #include "content/public/test/browser_test_utils.h"
15 #include "net/test/embedded_test_server/embedded_test_server.h" 17 #include "net/test/embedded_test_server/embedded_test_server.h"
16 18
17 using IconPurpose = content::Manifest::Icon::IconPurpose; 19 using IconPurpose = content::Manifest::Icon::IconPurpose;
18 20
19 namespace { 21 namespace {
20 22
21 const std::tuple<int, int, IconPurpose> kPrimaryIconParams{144, 144, 23 const std::tuple<int, int, IconPurpose> kPrimaryIconParams{144, 144,
22 IconPurpose::ANY}; 24 IconPurpose::ANY};
23 25
24 InstallableParams GetManifestParams() { 26 InstallableParams GetManifestParams() {
(...skipping 26 matching lines...) Expand all
51 params.minimum_primary_icon_size_in_px = 144; 53 params.minimum_primary_icon_size_in_px = 144;
52 params.fetch_valid_primary_icon = true; 54 params.fetch_valid_primary_icon = true;
53 params.ideal_badge_icon_size_in_px = 72; 55 params.ideal_badge_icon_size_in_px = 72;
54 params.minimum_badge_icon_size_in_px = 72; 56 params.minimum_badge_icon_size_in_px = 72;
55 params.fetch_valid_badge_icon = true; 57 params.fetch_valid_badge_icon = true;
56 return params; 58 return params;
57 } 59 }
58 60
59 } // anonymous namespace 61 } // anonymous namespace
60 62
63 // Used only for testing pages with no service workers. This class will dispatch
64 // a RunLoop::QuitClosure when it begins waiting for a service worker to be
65 // registered.
66 class LazyWorkerInstallableManager : public InstallableManager {
67 public:
68 LazyWorkerInstallableManager(content::WebContents* web_contents,
69 base::Closure quit_closure)
70 : InstallableManager(web_contents), quit_closure_(quit_closure) {}
71 ~LazyWorkerInstallableManager() override {}
72
73 protected:
74 void OnWaitingForServiceWorker() override {
75 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, quit_closure_);
76 };
77
78 private:
79 base::Closure quit_closure_;
80 };
81
61 class CallbackTester { 82 class CallbackTester {
62 public: 83 public:
63 explicit CallbackTester(base::Closure quit_closure) 84 explicit CallbackTester(base::Closure quit_closure)
64 : quit_closure_(quit_closure) {} 85 : quit_closure_(quit_closure) {}
65 86
66 void OnDidFinishInstallableCheck(const InstallableData& data) { 87 void OnDidFinishInstallableCheck(const InstallableData& data) {
67 error_code_ = data.error_code; 88 error_code_ = data.error_code;
68 manifest_url_ = data.manifest_url; 89 manifest_url_ = data.manifest_url;
69 manifest_ = data.manifest; 90 manifest_ = data.manifest;
70 primary_icon_url_ = data.primary_icon_url; 91 primary_icon_url_ = data.primary_icon_url;
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 ManagerBeginsInEmptyState) { 228 ManagerBeginsInEmptyState) {
208 // Ensure that the InstallableManager starts off with everything null. 229 // Ensure that the InstallableManager starts off with everything null.
209 InstallableManager* manager = GetManager(); 230 InstallableManager* manager = GetManager();
210 231
211 EXPECT_TRUE(manager->manifest().IsEmpty()); 232 EXPECT_TRUE(manager->manifest().IsEmpty());
212 EXPECT_TRUE(manager->manifest_url().is_empty()); 233 EXPECT_TRUE(manager->manifest_url().is_empty());
213 EXPECT_TRUE(manager->icons_.empty()); 234 EXPECT_TRUE(manager->icons_.empty());
214 EXPECT_FALSE(manager->is_installable()); 235 EXPECT_FALSE(manager->is_installable());
215 236
216 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error()); 237 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error());
217 EXPECT_EQ(NO_ERROR_DETECTED, manager->installable_error()); 238 EXPECT_EQ(NO_ERROR_DETECTED, manager->valid_manifest_error());
239 EXPECT_EQ(NO_ERROR_DETECTED, manager->worker_error());
218 EXPECT_TRUE(manager->tasks_.empty()); 240 EXPECT_TRUE(manager->tasks_.empty());
219 } 241 }
220 242
221 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckNoManifest) { 243 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckNoManifest) {
222 // Ensure that a page with no manifest returns the appropriate error and with 244 // Ensure that a page with no manifest returns the appropriate error and with
223 // null fields for everything. 245 // null fields for everything.
224 base::RunLoop run_loop; 246 base::RunLoop run_loop;
225 std::unique_ptr<CallbackTester> tester( 247 std::unique_ptr<CallbackTester> tester(
226 new CallbackTester(run_loop.QuitClosure())); 248 new CallbackTester(run_loop.QuitClosure()));
227 249
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 // Verify that the returned state matches manager internal state. 558 // Verify that the returned state matches manager internal state.
537 InstallableManager* manager = GetManager(); 559 InstallableManager* manager = GetManager();
538 560
539 EXPECT_FALSE(manager->manifest().IsEmpty()); 561 EXPECT_FALSE(manager->manifest().IsEmpty());
540 EXPECT_FALSE(manager->manifest_url().is_empty()); 562 EXPECT_FALSE(manager->manifest_url().is_empty());
541 EXPECT_TRUE(manager->is_installable()); 563 EXPECT_TRUE(manager->is_installable());
542 EXPECT_EQ(1u, manager->icons_.size()); 564 EXPECT_EQ(1u, manager->icons_.size());
543 EXPECT_FALSE((manager->icon_url(kPrimaryIconParams).is_empty())); 565 EXPECT_FALSE((manager->icon_url(kPrimaryIconParams).is_empty()));
544 EXPECT_NE(nullptr, (manager->icon(kPrimaryIconParams))); 566 EXPECT_NE(nullptr, (manager->icon(kPrimaryIconParams)));
545 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error()); 567 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error());
546 EXPECT_EQ(NO_ERROR_DETECTED, manager->installable_error()); 568 EXPECT_EQ(NO_ERROR_DETECTED, manager->valid_manifest_error());
569 EXPECT_EQ(NO_ERROR_DETECTED, manager->worker_error());
547 EXPECT_EQ(NO_ERROR_DETECTED, (manager->icon_error(kPrimaryIconParams))); 570 EXPECT_EQ(NO_ERROR_DETECTED, (manager->icon_error(kPrimaryIconParams)));
548 EXPECT_TRUE(manager->tasks_.empty()); 571 EXPECT_TRUE(manager->tasks_.empty());
549 } 572 }
550 573
551 // Request everything except badge icon again without navigating away. This 574 // Request everything except badge icon again without navigating away. This
552 // should work fine. 575 // should work fine.
553 { 576 {
554 base::RunLoop run_loop; 577 base::RunLoop run_loop;
555 std::unique_ptr<CallbackTester> tester( 578 std::unique_ptr<CallbackTester> tester(
556 new CallbackTester(run_loop.QuitClosure())); 579 new CallbackTester(run_loop.QuitClosure()));
(...skipping 15 matching lines...) Expand all
572 // Verify that the returned state matches manager internal state. 595 // Verify that the returned state matches manager internal state.
573 InstallableManager* manager = GetManager(); 596 InstallableManager* manager = GetManager();
574 597
575 EXPECT_FALSE(manager->manifest().IsEmpty()); 598 EXPECT_FALSE(manager->manifest().IsEmpty());
576 EXPECT_FALSE(manager->manifest_url().is_empty()); 599 EXPECT_FALSE(manager->manifest_url().is_empty());
577 EXPECT_TRUE(manager->is_installable()); 600 EXPECT_TRUE(manager->is_installable());
578 EXPECT_EQ(1u, manager->icons_.size()); 601 EXPECT_EQ(1u, manager->icons_.size());
579 EXPECT_FALSE((manager->icon_url(kPrimaryIconParams).is_empty())); 602 EXPECT_FALSE((manager->icon_url(kPrimaryIconParams).is_empty()));
580 EXPECT_NE(nullptr, (manager->icon(kPrimaryIconParams))); 603 EXPECT_NE(nullptr, (manager->icon(kPrimaryIconParams)));
581 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error()); 604 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error());
582 EXPECT_EQ(NO_ERROR_DETECTED, manager->installable_error()); 605 EXPECT_EQ(NO_ERROR_DETECTED, manager->valid_manifest_error());
606 EXPECT_EQ(NO_ERROR_DETECTED, manager->worker_error());
583 EXPECT_EQ(NO_ERROR_DETECTED, (manager->icon_error(kPrimaryIconParams))); 607 EXPECT_EQ(NO_ERROR_DETECTED, (manager->icon_error(kPrimaryIconParams)));
584 EXPECT_TRUE(manager->tasks_.empty()); 608 EXPECT_TRUE(manager->tasks_.empty());
585 } 609 }
586 610
587 { 611 {
588 // Check that a subsequent navigation resets state. 612 // Check that a subsequent navigation resets state.
589 ui_test_utils::NavigateToURL(browser(), GURL("about:blank")); 613 ui_test_utils::NavigateToURL(browser(), GURL("about:blank"));
590 InstallableManager* manager = GetManager(); 614 InstallableManager* manager = GetManager();
591 615
592 EXPECT_TRUE(manager->manifest().IsEmpty()); 616 EXPECT_TRUE(manager->manifest().IsEmpty());
593 EXPECT_TRUE(manager->manifest_url().is_empty()); 617 EXPECT_TRUE(manager->manifest_url().is_empty());
594 EXPECT_FALSE(manager->is_installable()); 618 EXPECT_FALSE(manager->is_installable());
595 EXPECT_TRUE(manager->icons_.empty()); 619 EXPECT_TRUE(manager->icons_.empty());
596 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error()); 620 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error());
597 EXPECT_EQ(NO_ERROR_DETECTED, manager->installable_error()); 621 EXPECT_EQ(NO_ERROR_DETECTED, manager->valid_manifest_error());
622 EXPECT_EQ(NO_ERROR_DETECTED, manager->worker_error());
598 EXPECT_TRUE(manager->tasks_.empty()); 623 EXPECT_TRUE(manager->tasks_.empty());
599 } 624 }
600 } 625 }
601 626
602 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckWebappInIframe) { 627 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckWebappInIframe) {
603 base::RunLoop run_loop; 628 base::RunLoop run_loop;
604 std::unique_ptr<CallbackTester> tester( 629 std::unique_ptr<CallbackTester> tester(
605 new CallbackTester(run_loop.QuitClosure())); 630 new CallbackTester(run_loop.QuitClosure()));
606 631
607 NavigateAndRunInstallableManager(tester.get(), GetWebAppParams(), 632 NavigateAndRunInstallableManager(tester.get(), GetWebAppParams(),
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 665
641 EXPECT_TRUE(tester->primary_icon_url().is_empty()); 666 EXPECT_TRUE(tester->primary_icon_url().is_empty());
642 EXPECT_EQ(nullptr, tester->primary_icon()); 667 EXPECT_EQ(nullptr, tester->primary_icon());
643 EXPECT_FALSE(tester->is_installable()); 668 EXPECT_FALSE(tester->is_installable());
644 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 669 EXPECT_TRUE(tester->badge_icon_url().is_empty());
645 EXPECT_EQ(nullptr, tester->badge_icon()); 670 EXPECT_EQ(nullptr, tester->badge_icon());
646 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 671 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
647 EXPECT_EQ(GetStatus(), InstallabilityCheckStatus::NOT_COMPLETED); 672 EXPECT_EQ(GetStatus(), InstallabilityCheckStatus::NOT_COMPLETED);
648 } 673 }
649 674
650 // Fetch the full criteria should fail. 675 // Fetching the full criteria should fail if we don't wait for the worker.
651 { 676 {
652 base::RunLoop run_loop; 677 base::RunLoop run_loop;
653 std::unique_ptr<CallbackTester> tester( 678 std::unique_ptr<CallbackTester> tester(
654 new CallbackTester(run_loop.QuitClosure())); 679 new CallbackTester(run_loop.QuitClosure()));
655 680
656 RunInstallableManager(tester.get(), GetWebAppParams()); 681 InstallableParams params = GetWebAppParams();
682 params.wait_for_worker = false;
683 RunInstallableManager(tester.get(), params);
657 run_loop.Run(); 684 run_loop.Run();
658 685
659 EXPECT_FALSE(tester->manifest().IsEmpty()); 686 EXPECT_FALSE(tester->manifest().IsEmpty());
660 EXPECT_FALSE(tester->manifest_url().is_empty()); 687 EXPECT_FALSE(tester->manifest_url().is_empty());
661 688
662 EXPECT_FALSE(tester->primary_icon_url().is_empty()); 689 EXPECT_FALSE(tester->primary_icon_url().is_empty());
663 EXPECT_NE(nullptr, tester->primary_icon()); 690 EXPECT_NE(nullptr, tester->primary_icon());
664 EXPECT_FALSE(tester->is_installable()); 691 EXPECT_FALSE(tester->is_installable());
665 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 692 EXPECT_TRUE(tester->badge_icon_url().is_empty());
666 EXPECT_EQ(nullptr, tester->badge_icon()); 693 EXPECT_EQ(nullptr, tester->badge_icon());
667 EXPECT_EQ(NO_MATCHING_SERVICE_WORKER, tester->error_code()); 694 EXPECT_EQ(NO_MATCHING_SERVICE_WORKER, tester->error_code());
668 EXPECT_EQ(GetStatus(), 695 EXPECT_EQ(GetStatus(),
669 InstallabilityCheckStatus::COMPLETE_NON_PROGRESSIVE_WEB_APP); 696 InstallabilityCheckStatus::COMPLETE_NON_PROGRESSIVE_WEB_APP);
670 } 697 }
671 } 698 }
672 699
673 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, 700 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest,
701 CheckLazyServiceWorkerPassesWhenWaiting) {
702 base::RunLoop tester_run_loop, sw_run_loop;
703 std::unique_ptr<CallbackTester> tester(
704 new CallbackTester(tester_run_loop.QuitClosure()));
705
706 content::WebContents* web_contents =
707 browser()->tab_strip_model()->GetActiveWebContents();
708 auto manager = base::MakeUnique<LazyWorkerInstallableManager>(
709 web_contents, sw_run_loop.QuitClosure());
710
711 // Load a URL with no service worker.
712 GURL test_url = embedded_test_server()->GetURL(
713 "/banners/manifest_no_service_worker.html");
714 ui_test_utils::NavigateToURL(browser(), test_url);
715
716 // Kick off fetching the data. This should block on waiting for a worker.
717 manager->GetData(GetWebAppParams(),
718 base::Bind(&CallbackTester::OnDidFinishInstallableCheck,
719 base::Unretained(tester.get())));
720 sw_run_loop.Run();
721
722 // We should now be waiting for the service worker.
723 EXPECT_FALSE(manager->manifest().IsEmpty());
724 EXPECT_FALSE(manager->manifest_url().is_empty());
725 EXPECT_FALSE(manager->is_installable());
726 EXPECT_EQ(1u, manager->icons_.size());
727 EXPECT_FALSE((manager->icon_url(kPrimaryIconParams).is_empty()));
728 EXPECT_NE(nullptr, (manager->icon(kPrimaryIconParams)));
729 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error());
730 EXPECT_EQ(NO_ERROR_DETECTED, manager->valid_manifest_error());
731 EXPECT_EQ(NO_ERROR_DETECTED, manager->worker_error());
732 EXPECT_EQ(NO_ERROR_DETECTED, (manager->icon_error(kPrimaryIconParams)));
733 EXPECT_TRUE(manager->worker_waiting());
734 EXPECT_FALSE(manager->tasks_.empty());
735
736 // Load the service worker.
737 EXPECT_TRUE(content::ExecuteScript(
738 web_contents, "navigator.serviceWorker.register('service_worker.js');"));
739 tester_run_loop.Run();
740
741 // We should have passed now.
742 EXPECT_FALSE(tester->manifest().IsEmpty());
743 EXPECT_FALSE(tester->manifest_url().is_empty());
744 EXPECT_FALSE(tester->primary_icon_url().is_empty());
745 EXPECT_NE(nullptr, tester->primary_icon());
746 EXPECT_TRUE(tester->is_installable());
747 EXPECT_TRUE(tester->badge_icon_url().is_empty());
748 EXPECT_EQ(nullptr, tester->badge_icon());
749 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
750 EXPECT_EQ(manager->page_status_,
751 InstallabilityCheckStatus::COMPLETE_PROGRESSIVE_WEB_APP);
752
753 // Verify internal state.
754 EXPECT_FALSE(manager->manifest().IsEmpty());
755 EXPECT_FALSE(manager->manifest_url().is_empty());
756 EXPECT_TRUE(manager->is_installable());
757 EXPECT_EQ(1u, manager->icons_.size());
758 EXPECT_FALSE((manager->icon_url(kPrimaryIconParams).is_empty()));
759 EXPECT_NE(nullptr, (manager->icon(kPrimaryIconParams)));
760 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error());
761 EXPECT_EQ(NO_ERROR_DETECTED, manager->valid_manifest_error());
762 EXPECT_EQ(NO_ERROR_DETECTED, manager->worker_error());
763 EXPECT_EQ(NO_ERROR_DETECTED, (manager->icon_error(kPrimaryIconParams)));
764 EXPECT_FALSE(manager->worker_waiting());
765 EXPECT_TRUE(manager->tasks_.empty());
766 }
767
768 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest,
769 CheckLazyServiceWorkerNoFetchHandlerFails) {
770 base::RunLoop tester_run_loop, sw_run_loop;
771 std::unique_ptr<CallbackTester> tester(
772 new CallbackTester(tester_run_loop.QuitClosure()));
773
774 content::WebContents* web_contents =
775 browser()->tab_strip_model()->GetActiveWebContents();
776 auto manager = base::MakeUnique<LazyWorkerInstallableManager>(
777 web_contents, sw_run_loop.QuitClosure());
778
779 // Load a URL with no service worker.
780 GURL test_url = embedded_test_server()->GetURL(
781 "/banners/manifest_no_service_worker.html");
782 ui_test_utils::NavigateToURL(browser(), test_url);
783
784 // Kick off fetching the data. This should block on waiting for a worker.
785 manager->GetData(GetWebAppParams(),
786 base::Bind(&CallbackTester::OnDidFinishInstallableCheck,
787 base::Unretained(tester.get())));
788 sw_run_loop.Run();
789
790 // We should now be waiting for the service worker.
791 EXPECT_TRUE(manager->worker_waiting());
792 EXPECT_FALSE(manager->tasks_.empty());
793
794 // Load the service worker with no fetch handler.
795 EXPECT_TRUE(content::ExecuteScript(web_contents,
796 "navigator.serviceWorker.register('"
797 "service_worker_no_fetch_handler.js');"));
798 tester_run_loop.Run();
799
800 // We should fail the check.
801 EXPECT_FALSE(tester->manifest().IsEmpty());
802 EXPECT_FALSE(tester->manifest_url().is_empty());
803 EXPECT_FALSE(tester->primary_icon_url().is_empty());
804 EXPECT_NE(nullptr, tester->primary_icon());
805 EXPECT_FALSE(tester->is_installable());
806 EXPECT_TRUE(tester->badge_icon_url().is_empty());
807 EXPECT_EQ(nullptr, tester->badge_icon());
808 EXPECT_EQ(NOT_OFFLINE_CAPABLE, tester->error_code());
809 EXPECT_FALSE(manager->worker_waiting());
810 EXPECT_EQ(manager->page_status_,
811 InstallabilityCheckStatus::COMPLETE_NON_PROGRESSIVE_WEB_APP);
812 }
813
814 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest,
815 CheckServiceWorkerErrorIsNotCached) {
816 content::WebContents* web_contents =
817 browser()->tab_strip_model()->GetActiveWebContents();
818 base::RunLoop sw_run_loop;
819 auto manager = base::MakeUnique<LazyWorkerInstallableManager>(
820 web_contents, sw_run_loop.QuitClosure());
821
822 // Load a URL with no service worker.
823 GURL test_url = embedded_test_server()->GetURL(
824 "/banners/manifest_no_service_worker.html");
825 ui_test_utils::NavigateToURL(browser(), test_url);
826
827 {
828 base::RunLoop tester_run_loop;
829 std::unique_ptr<CallbackTester> tester(
830 new CallbackTester(tester_run_loop.QuitClosure()));
831
832 InstallableParams params = GetWebAppParams();
833 params.wait_for_worker = false;
834 manager->GetData(params,
835 base::Bind(&CallbackTester::OnDidFinishInstallableCheck,
836 base::Unretained(tester.get())));
837 tester_run_loop.Run();
838
839 // We should have returned with an error.
840 EXPECT_FALSE(tester->manifest().IsEmpty());
841 EXPECT_FALSE(tester->is_installable());
842 EXPECT_EQ(NO_MATCHING_SERVICE_WORKER, tester->error_code());
843 }
844
845 {
846 base::RunLoop tester_run_loop;
847 std::unique_ptr<CallbackTester> tester(
848 new CallbackTester(tester_run_loop.QuitClosure()));
849
850 InstallableParams params = GetWebAppParams();
851 params.wait_for_worker = true;
852 manager->GetData(params,
853 base::Bind(&CallbackTester::OnDidFinishInstallableCheck,
854 base::Unretained(tester.get())));
855 sw_run_loop.Run();
856
857 EXPECT_TRUE(content::ExecuteScript(
858 web_contents,
859 "navigator.serviceWorker.register('service_worker.js');"));
860 tester_run_loop.Run();
861
862 // The callback should tell us that the page is installable
863 EXPECT_FALSE(tester->manifest().IsEmpty());
864 EXPECT_TRUE(tester->is_installable());
865 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
866 }
867 }
868
869 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest,
674 CheckPageWithNoServiceWorkerFetchHandler) { 870 CheckPageWithNoServiceWorkerFetchHandler) {
675 base::RunLoop run_loop; 871 base::RunLoop run_loop;
676 std::unique_ptr<CallbackTester> tester( 872 std::unique_ptr<CallbackTester> tester(
677 new CallbackTester(run_loop.QuitClosure())); 873 new CallbackTester(run_loop.QuitClosure()));
678 874
679 NavigateAndRunInstallableManager( 875 NavigateAndRunInstallableManager(
680 tester.get(), GetWebAppParams(), 876 tester.get(), GetWebAppParams(),
681 "/banners/no_sw_fetch_handler_test_page.html"); 877 "/banners/no_sw_fetch_handler_test_page.html");
682 878
683 RunInstallableManager(tester.get(), GetWebAppParams()); 879 RunInstallableManager(tester.get(), GetWebAppParams());
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
841 CheckNestedCallsToGetData) { 1037 CheckNestedCallsToGetData) {
842 // Verify that we can call GetData while in a callback from GetData. 1038 // Verify that we can call GetData while in a callback from GetData.
843 base::RunLoop run_loop; 1039 base::RunLoop run_loop;
844 InstallableParams params = GetWebAppParams(); 1040 InstallableParams params = GetWebAppParams();
845 std::unique_ptr<NestedCallbackTester> tester( 1041 std::unique_ptr<NestedCallbackTester> tester(
846 new NestedCallbackTester(GetManager(), params, run_loop.QuitClosure())); 1042 new NestedCallbackTester(GetManager(), params, run_loop.QuitClosure()));
847 1043
848 tester->Run(); 1044 tester->Run();
849 run_loop.Run(); 1045 run_loop.Run();
850 } 1046 }
OLDNEW
« no previous file with comments | « chrome/browser/installable/installable_manager.cc ('k') | chrome/browser/installable/installable_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698