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

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

Issue 2773353002: Make minimum PWA icon size the same accross all device densities
Patch Set: Merge branch 'master' into min_size Created 3 years, 8 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"
11 #include "chrome/browser/ui/tabs/tab_strip_model.h" 11 #include "chrome/browser/ui/tabs/tab_strip_model.h"
12 #include "chrome/common/chrome_switches.h" 12 #include "chrome/common/chrome_switches.h"
13 #include "chrome/test/base/in_process_browser_test.h" 13 #include "chrome/test/base/in_process_browser_test.h"
14 #include "chrome/test/base/ui_test_utils.h" 14 #include "chrome/test/base/ui_test_utils.h"
15 #include "net/test/embedded_test_server/embedded_test_server.h" 15 #include "net/test/embedded_test_server/embedded_test_server.h"
16 16
17 using IconPurpose = content::Manifest::Icon::IconPurpose; 17 using IconPurpose = content::Manifest::Icon::IconPurpose;
18 18
19 namespace { 19 namespace {
20 20
21 const std::tuple<int, int, IconPurpose> kPrimaryIconParams{144, 144, 21 const std::pair<int, IconPurpose> kPrimaryIconParams{144, IconPurpose::ANY};
22 IconPurpose::ANY};
23 22
24 InstallableParams GetManifestParams() { 23 InstallableParams GetManifestParams() {
25 InstallableParams params; 24 InstallableParams params;
26 params.check_installable = false; 25 params.check_installable = false;
27 params.fetch_valid_primary_icon = false; 26 params.fetch_valid_primary_icon = false;
28 return params; 27 return params;
29 } 28 }
30 29
31 InstallableParams GetWebAppParams() { 30 InstallableParams GetWebAppParams() {
32 InstallableParams params = GetManifestParams(); 31 InstallableParams params = GetManifestParams();
33 params.ideal_primary_icon_size_in_px = 144; 32 params.ideal_primary_icon_size_in_px = 144;
34 params.minimum_primary_icon_size_in_px = 144;
35 params.check_installable = true; 33 params.check_installable = true;
36 params.fetch_valid_primary_icon = true; 34 params.fetch_valid_primary_icon = true;
37 return params; 35 return params;
38 } 36 }
39 37
40 InstallableParams GetPrimaryIconParams() { 38 InstallableParams GetPrimaryIconParams() {
41 InstallableParams params = GetManifestParams(); 39 InstallableParams params = GetManifestParams();
42 params.ideal_primary_icon_size_in_px = 144; 40 params.ideal_primary_icon_size_in_px = 144;
43 params.minimum_primary_icon_size_in_px = 144;
44 params.fetch_valid_primary_icon = true; 41 params.fetch_valid_primary_icon = true;
45 return params; 42 return params;
46 } 43 }
47 44
48 InstallableParams GetPrimaryIconAndBadgeIconParams() { 45 InstallableParams GetPrimaryIconAndBadgeIconParams() {
49 InstallableParams params = GetManifestParams(); 46 InstallableParams params = GetManifestParams();
50 params.ideal_primary_icon_size_in_px = 144; 47 params.ideal_primary_icon_size_in_px = 144;
51 params.minimum_primary_icon_size_in_px = 144;
52 params.fetch_valid_primary_icon = true; 48 params.fetch_valid_primary_icon = true;
53 params.ideal_badge_icon_size_in_px = 72; 49 params.ideal_badge_icon_size_in_px = 72;
54 params.minimum_badge_icon_size_in_px = 72;
55 params.fetch_valid_badge_icon = true; 50 params.fetch_valid_badge_icon = true;
56 return params; 51 return params;
57 } 52 }
58 53
59 } // anonymous namespace 54 } // anonymous namespace
60 55
61 class CallbackTester { 56 class CallbackTester {
62 public: 57 public:
63 explicit CallbackTester(base::Closure quit_closure) 58 explicit CallbackTester(base::Closure quit_closure)
64 : quit_closure_(quit_closure) { } 59 : quit_closure_(quit_closure) { }
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 374
380 // Ask for a different size primary icon. This should fail with 375 // Ask for a different size primary icon. This should fail with
381 // START_URL_NOT_VALID since we won't have a cached icon error. 376 // START_URL_NOT_VALID since we won't have a cached icon error.
382 { 377 {
383 base::RunLoop run_loop; 378 base::RunLoop run_loop;
384 std::unique_ptr<CallbackTester> tester( 379 std::unique_ptr<CallbackTester> tester(
385 new CallbackTester(run_loop.QuitClosure())); 380 new CallbackTester(run_loop.QuitClosure()));
386 381
387 InstallableParams params = GetWebAppParams(); 382 InstallableParams params = GetWebAppParams();
388 params.ideal_primary_icon_size_in_px = 96; 383 params.ideal_primary_icon_size_in_px = 96;
389 params.minimum_primary_icon_size_in_px = 96;
390 RunInstallableManager(tester.get(), params); 384 RunInstallableManager(tester.get(), params);
391 run_loop.Run(); 385 run_loop.Run();
392 386
393 EXPECT_FALSE(tester->manifest().IsEmpty()); 387 EXPECT_FALSE(tester->manifest().IsEmpty());
394 EXPECT_FALSE(tester->manifest_url().is_empty()); 388 EXPECT_FALSE(tester->manifest_url().is_empty());
395 EXPECT_TRUE(tester->manifest().prefer_related_applications); 389 EXPECT_TRUE(tester->manifest().prefer_related_applications);
396 390
397 EXPECT_TRUE(tester->primary_icon_url().is_empty()); 391 EXPECT_TRUE(tester->primary_icon_url().is_empty());
398 EXPECT_EQ(nullptr, tester->primary_icon()); 392 EXPECT_EQ(nullptr, tester->primary_icon());
399 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 393 EXPECT_TRUE(tester->badge_icon_url().is_empty());
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 441
448 // Request an oversized badge icon. This should fetch only the manifest and 442 // Request an oversized badge icon. This should fetch only the manifest and
449 // the primary icon, and return no errors. 443 // the primary icon, and return no errors.
450 { 444 {
451 base::RunLoop run_loop; 445 base::RunLoop run_loop;
452 std::unique_ptr<CallbackTester> tester( 446 std::unique_ptr<CallbackTester> tester(
453 new CallbackTester(run_loop.QuitClosure())); 447 new CallbackTester(run_loop.QuitClosure()));
454 448
455 InstallableParams params = GetPrimaryIconAndBadgeIconParams(); 449 InstallableParams params = GetPrimaryIconAndBadgeIconParams();
456 params.ideal_badge_icon_size_in_px = 2000; 450 params.ideal_badge_icon_size_in_px = 2000;
457 params.minimum_badge_icon_size_in_px = 2000;
458 RunInstallableManager(tester.get(), params); 451 RunInstallableManager(tester.get(), params);
459 run_loop.Run(); 452 run_loop.Run();
460 453
461 EXPECT_FALSE(tester->manifest().IsEmpty()); 454 EXPECT_FALSE(tester->manifest().IsEmpty());
462 EXPECT_FALSE(tester->manifest_url().is_empty()); 455 EXPECT_FALSE(tester->manifest_url().is_empty());
463 456
464 EXPECT_FALSE(tester->primary_icon_url().is_empty()); 457 EXPECT_FALSE(tester->primary_icon_url().is_empty());
465 EXPECT_NE(nullptr, tester->primary_icon()); 458 EXPECT_NE(nullptr, tester->primary_icon());
466 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 459 EXPECT_TRUE(tester->badge_icon_url().is_empty());
467 EXPECT_EQ(nullptr, tester->badge_icon()); 460 EXPECT_EQ(nullptr, tester->badge_icon());
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
699 std::unique_ptr<CallbackTester> tester( 692 std::unique_ptr<CallbackTester> tester(
700 new CallbackTester(run_loop.QuitClosure())); 693 new CallbackTester(run_loop.QuitClosure()));
701 694
702 NavigateAndRunInstallableManager(tester.get(), GetWebAppParams(), 695 NavigateAndRunInstallableManager(tester.get(), GetWebAppParams(),
703 "/banners/manifest_test_page.html"); 696 "/banners/manifest_test_page.html");
704 run_loop.Run(); 697 run_loop.Run();
705 698
706 EXPECT_FALSE(tester->manifest_url().is_empty()); 699 EXPECT_FALSE(tester->manifest_url().is_empty());
707 EXPECT_FALSE(tester->manifest().IsEmpty()); 700 EXPECT_FALSE(tester->manifest().IsEmpty());
708 EXPECT_TRUE(tester->is_installable()); 701 EXPECT_TRUE(tester->is_installable());
709 EXPECT_FALSE(tester->primary_icon_url().is_empty()); 702 EXPECT_EQ(embedded_test_server()->GetURL("/banners/launcher-icon-3x.png"),
703 tester->primary_icon_url());
710 EXPECT_NE(nullptr, tester->primary_icon()); 704 EXPECT_NE(nullptr, tester->primary_icon());
711 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 705 EXPECT_TRUE(tester->badge_icon_url().is_empty());
712 EXPECT_EQ(nullptr, tester->badge_icon()); 706 EXPECT_EQ(nullptr, tester->badge_icon());
713 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 707 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
714 } 708 }
715 709
716 { 710 {
717 base::RunLoop run_loop; 711 base::RunLoop run_loop;
718 std::unique_ptr<CallbackTester> tester( 712 std::unique_ptr<CallbackTester> tester(
719 new CallbackTester(run_loop.QuitClosure())); 713 new CallbackTester(run_loop.QuitClosure()));
720 714
721 // Dial up the primary icon size requirements to something that isn't 715 // Change the requested primary icon size. A different primary icon should
722 // available. This should now fail with NoIconMatchingRequirements. 716 // be returned.
723 InstallableParams params = GetWebAppParams(); 717 InstallableParams params = GetWebAppParams();
724 params.ideal_primary_icon_size_in_px = 2000; 718 params.ideal_primary_icon_size_in_px = 512;
725 params.minimum_primary_icon_size_in_px = 2000;
726 RunInstallableManager(tester.get(), params); 719 RunInstallableManager(tester.get(), params);
727 run_loop.Run(); 720 run_loop.Run();
728 721
729 EXPECT_FALSE(tester->manifest_url().is_empty()); 722 EXPECT_FALSE(tester->manifest_url().is_empty());
730 EXPECT_FALSE(tester->manifest().IsEmpty()); 723 EXPECT_FALSE(tester->manifest().IsEmpty());
731 EXPECT_TRUE(tester->is_installable()); 724 EXPECT_TRUE(tester->is_installable());
732 EXPECT_TRUE(tester->primary_icon_url().is_empty()); 725 EXPECT_EQ(embedded_test_server()->GetURL("/banners/image-512px.png"),
733 EXPECT_EQ(nullptr, tester->primary_icon()); 726 tester->primary_icon_url());
734 EXPECT_TRUE(tester->badge_icon_url().is_empty());
735 EXPECT_EQ(nullptr, tester->badge_icon());
736 EXPECT_EQ(NO_ACCEPTABLE_ICON, tester->error_code());
737 }
738
739 // Navigate and verify the reverse: an overly large primary icon requested
740 // first fails, but a smaller primary icon requested second passes.
741 {
742 base::RunLoop run_loop;
743 std::unique_ptr<CallbackTester> tester(
744 new CallbackTester(run_loop.QuitClosure()));
745
746 // This should fail with NoIconMatchingRequirements.
747 InstallableParams params = GetWebAppParams();
748 params.ideal_primary_icon_size_in_px = 2000;
749 params.minimum_primary_icon_size_in_px = 2000;
750 NavigateAndRunInstallableManager(tester.get(), params,
751 "/banners/manifest_test_page.html");
752 run_loop.Run();
753
754 EXPECT_FALSE(tester->manifest_url().is_empty());
755 EXPECT_FALSE(tester->manifest().IsEmpty());
756 EXPECT_TRUE(tester->is_installable());
757 EXPECT_TRUE(tester->primary_icon_url().is_empty());
758 EXPECT_EQ(nullptr, tester->primary_icon());
759 EXPECT_TRUE(tester->badge_icon_url().is_empty());
760 EXPECT_EQ(nullptr, tester->badge_icon());
761 EXPECT_EQ(NO_ACCEPTABLE_ICON, tester->error_code());
762 }
763
764 {
765 base::RunLoop run_loop;
766 std::unique_ptr<CallbackTester> tester(
767 new CallbackTester(run_loop.QuitClosure()));
768 RunInstallableManager(tester.get(), GetWebAppParams());
769
770 run_loop.Run();
771
772 // The smaller primary icon requirements should allow this to pass.
773 EXPECT_FALSE(tester->manifest_url().is_empty());
774 EXPECT_FALSE(tester->manifest().IsEmpty());
775 EXPECT_TRUE(tester->is_installable());
776 EXPECT_FALSE(tester->primary_icon_url().is_empty());
777 EXPECT_NE(nullptr, tester->primary_icon()); 727 EXPECT_NE(nullptr, tester->primary_icon());
778 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 728 EXPECT_TRUE(tester->badge_icon_url().is_empty());
779 EXPECT_EQ(nullptr, tester->badge_icon()); 729 EXPECT_EQ(nullptr, tester->badge_icon());
780 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 730 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
781 } 731 }
782 } 732 }
783 733
784 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, 734 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest,
785 CheckNestedCallsToGetData) { 735 CheckNestedCallsToGetData) {
786 // Verify that we can call GetData while in a callback from GetData. 736 // Verify that we can call GetData while in a callback from GetData.
787 base::RunLoop run_loop; 737 base::RunLoop run_loop;
788 InstallableParams params = GetWebAppParams(); 738 InstallableParams params = GetWebAppParams();
789 std::unique_ptr<NestedCallbackTester> tester( 739 std::unique_ptr<NestedCallbackTester> tester(
790 new NestedCallbackTester(GetManager(), params, run_loop.QuitClosure())); 740 new NestedCallbackTester(GetManager(), params, run_loop.QuitClosure()));
791 741
792 tester->Run(); 742 tester->Run();
793 run_loop.Run(); 743 run_loop.Run();
794 } 744 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698