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

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: Fix crashing Android test. Comments 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/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
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
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
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
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
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 }
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