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/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(), |
| 608 "/banners/iframe_test_page.html"); | 612 "/banners/iframe_test_page.html"); |
| 609 run_loop.Run(); | 613 run_loop.Run(); |
| 610 | 614 |
| 611 // The installable manager should only retrieve items in the main frame; | 615 // The installable manager should only retrieve items in the main frame; |
| 612 // everything should be empty here. | 616 // everything should be empty here. |
| 613 EXPECT_TRUE(tester->manifest().IsEmpty()); | 617 EXPECT_TRUE(tester->manifest().IsEmpty()); |
| 614 EXPECT_TRUE(tester->manifest_url().is_empty()); | 618 EXPECT_TRUE(tester->manifest_url().is_empty()); |
| 615 EXPECT_TRUE(tester->primary_icon_url().is_empty()); | 619 EXPECT_TRUE(tester->primary_icon_url().is_empty()); |
| 616 EXPECT_EQ(nullptr, tester->primary_icon()); | 620 EXPECT_EQ(nullptr, tester->primary_icon()); |
| 617 EXPECT_FALSE(tester->is_installable()); | 621 EXPECT_FALSE(tester->is_installable()); |
| 618 EXPECT_TRUE(tester->badge_icon_url().is_empty()); | 622 EXPECT_TRUE(tester->badge_icon_url().is_empty()); |
| 619 EXPECT_EQ(nullptr, tester->badge_icon()); | 623 EXPECT_EQ(nullptr, tester->badge_icon()); |
| 620 EXPECT_EQ(NO_MANIFEST, tester->error_code()); | 624 EXPECT_EQ(NO_MANIFEST, tester->error_code()); |
| 621 EXPECT_EQ(GetStatus(), | 625 EXPECT_EQ(GetStatus(), |
| 622 InstallabilityCheckStatus::COMPLETE_NON_PROGRESSIVE_WEB_APP); | 626 InstallabilityCheckStatus::COMPLETE_NON_PROGRESSIVE_WEB_APP); |
| 623 } | 627 } |
| 624 | 628 |
| 625 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, | 629 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckLazyServiceWorker) { |
| 626 CheckPageWithManifestAndNoServiceWorker) { | |
|
benwells
2017/06/14 11:39:06
Is the no service worker case tested at all?
dominickn
2017/06/15 04:16:07
I can restore the no service worker test with the
| |
| 627 // Just fetch the manifest. This should have no error. | |
| 628 { | 630 { |
| 629 base::RunLoop run_loop; | 631 base::RunLoop run_loop; |
| 630 std::unique_ptr<CallbackTester> tester( | 632 std::unique_ptr<CallbackTester> tester( |
| 631 new CallbackTester(run_loop.QuitClosure())); | 633 new CallbackTester(run_loop.QuitClosure())); |
| 632 | 634 |
| 633 NavigateAndRunInstallableManager( | 635 NavigateAndRunInstallableManager( |
| 634 tester.get(), GetManifestParams(), | 636 tester.get(), GetWebAppParams(), |
| 635 "/banners/manifest_no_service_worker.html"); | 637 "/banners/lazy_service_worker_test_page.html"); |
| 636 run_loop.Run(); | 638 run_loop.Run(); |
| 637 | 639 |
| 638 EXPECT_FALSE(tester->manifest().IsEmpty()); | 640 EXPECT_FALSE(tester->manifest().IsEmpty()); |
| 639 EXPECT_FALSE(tester->manifest_url().is_empty()); | 641 EXPECT_FALSE(tester->manifest_url().is_empty()); |
| 640 | 642 EXPECT_FALSE(tester->primary_icon_url().is_empty()); |
| 641 EXPECT_TRUE(tester->primary_icon_url().is_empty()); | 643 EXPECT_NE(nullptr, tester->primary_icon()); |
| 642 EXPECT_EQ(nullptr, tester->primary_icon()); | 644 EXPECT_TRUE(tester->is_installable()); |
| 643 EXPECT_FALSE(tester->is_installable()); | |
| 644 EXPECT_TRUE(tester->badge_icon_url().is_empty()); | 645 EXPECT_TRUE(tester->badge_icon_url().is_empty()); |
| 645 EXPECT_EQ(nullptr, tester->badge_icon()); | 646 EXPECT_EQ(nullptr, tester->badge_icon()); |
| 646 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); | 647 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); |
| 647 EXPECT_EQ(GetStatus(), InstallabilityCheckStatus::NOT_COMPLETED); | 648 EXPECT_EQ(GetStatus(), |
| 649 InstallabilityCheckStatus::COMPLETE_PROGRESSIVE_WEB_APP); | |
| 650 | |
| 651 // Verify that the returned state matches manager internal state. | |
| 652 InstallableManager* manager = GetManager(); | |
| 653 | |
| 654 EXPECT_FALSE(manager->manifest().IsEmpty()); | |
| 655 EXPECT_FALSE(manager->manifest_url().is_empty()); | |
| 656 EXPECT_TRUE(manager->is_installable()); | |
| 657 EXPECT_EQ(1u, manager->icons_.size()); | |
| 658 EXPECT_FALSE((manager->icon_url(kPrimaryIconParams).is_empty())); | |
| 659 EXPECT_NE(nullptr, (manager->icon(kPrimaryIconParams))); | |
| 660 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error()); | |
| 661 EXPECT_EQ(NO_ERROR_DETECTED, manager->valid_manifest_error()); | |
| 662 EXPECT_EQ(NO_ERROR_DETECTED, manager->worker_error()); | |
| 663 EXPECT_EQ(NO_ERROR_DETECTED, (manager->icon_error(kPrimaryIconParams))); | |
| 664 EXPECT_TRUE(manager->tasks_.empty()); | |
| 648 } | 665 } |
| 649 | 666 |
| 650 // Fetch the full criteria should fail. | |
| 651 { | 667 { |
| 652 base::RunLoop run_loop; | 668 // Check that a subsequent navigation resets state. |
| 653 std::unique_ptr<CallbackTester> tester( | 669 ui_test_utils::NavigateToURL(browser(), GURL("about:blank")); |
| 654 new CallbackTester(run_loop.QuitClosure())); | 670 InstallableManager* manager = GetManager(); |
| 655 | 671 |
| 656 RunInstallableManager(tester.get(), GetWebAppParams()); | 672 EXPECT_TRUE(manager->manifest().IsEmpty()); |
| 657 run_loop.Run(); | 673 EXPECT_TRUE(manager->manifest_url().is_empty()); |
| 658 | 674 EXPECT_FALSE(manager->is_installable()); |
| 659 EXPECT_FALSE(tester->manifest().IsEmpty()); | 675 EXPECT_TRUE(manager->icons_.empty()); |
| 660 EXPECT_FALSE(tester->manifest_url().is_empty()); | 676 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error()); |
| 661 | 677 EXPECT_EQ(NO_ERROR_DETECTED, manager->valid_manifest_error()); |
| 662 EXPECT_FALSE(tester->primary_icon_url().is_empty()); | 678 EXPECT_EQ(NO_ERROR_DETECTED, manager->worker_error()); |
| 663 EXPECT_NE(nullptr, tester->primary_icon()); | 679 EXPECT_TRUE(manager->tasks_.empty()); |
| 664 EXPECT_FALSE(tester->is_installable()); | |
| 665 EXPECT_TRUE(tester->badge_icon_url().is_empty()); | |
| 666 EXPECT_EQ(nullptr, tester->badge_icon()); | |
| 667 EXPECT_EQ(NO_MATCHING_SERVICE_WORKER, tester->error_code()); | |
| 668 EXPECT_EQ(GetStatus(), | |
| 669 InstallabilityCheckStatus::COMPLETE_NON_PROGRESSIVE_WEB_APP); | |
| 670 } | 680 } |
| 671 } | 681 } |
| 672 | 682 |
| 673 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, | 683 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, |
| 674 CheckPageWithNoServiceWorkerFetchHandler) { | 684 CheckPageWithNoServiceWorkerFetchHandler) { |
| 675 base::RunLoop run_loop; | 685 base::RunLoop run_loop; |
| 676 std::unique_ptr<CallbackTester> tester( | 686 std::unique_ptr<CallbackTester> tester( |
| 677 new CallbackTester(run_loop.QuitClosure())); | 687 new CallbackTester(run_loop.QuitClosure())); |
| 678 | 688 |
| 679 NavigateAndRunInstallableManager( | 689 NavigateAndRunInstallableManager( |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 841 CheckNestedCallsToGetData) { | 851 CheckNestedCallsToGetData) { |
| 842 // Verify that we can call GetData while in a callback from GetData. | 852 // Verify that we can call GetData while in a callback from GetData. |
| 843 base::RunLoop run_loop; | 853 base::RunLoop run_loop; |
| 844 InstallableParams params = GetWebAppParams(); | 854 InstallableParams params = GetWebAppParams(); |
| 845 std::unique_ptr<NestedCallbackTester> tester( | 855 std::unique_ptr<NestedCallbackTester> tester( |
| 846 new NestedCallbackTester(GetManager(), params, run_loop.QuitClosure())); | 856 new NestedCallbackTester(GetManager(), params, run_loop.QuitClosure())); |
| 847 | 857 |
| 848 tester->Run(); | 858 tester->Run(); |
| 849 run_loop.Run(); | 859 run_loop.Run(); |
| 850 } | 860 } |
| OLD | NEW |