| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/extensions/extension_sorting.h" |
| 6 |
| 7 #include <map> |
| 8 |
| 5 #include "chrome/browser/extensions/extension_prefs_unittest.h" | 9 #include "chrome/browser/extensions/extension_prefs_unittest.h" |
| 6 #include "chrome/browser/extensions/extension_sorting.h" | |
| 7 #include "chrome/common/extensions/extension_manifest_constants.h" | 10 #include "chrome/common/extensions/extension_manifest_constants.h" |
| 8 #include "sync/api/string_ordinal.h" | 11 #include "sync/api/string_ordinal.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
| 10 | 13 |
| 11 using extensions::Extension; | 14 using extensions::Extension; |
| 12 | 15 |
| 13 namespace keys = extension_manifest_keys; | 16 namespace keys = extension_manifest_keys; |
| 14 | 17 |
| 15 class ExtensionSortingTest : public extensions::ExtensionPrefsTest { | 18 class ExtensionSortingTest : public extensions::ExtensionPrefsTest { |
| 16 protected: | 19 protected: |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 89 extension_sorting()->CreateFirstAppLaunchOrdinal(next_page))); | 92 extension_sorting()->CreateFirstAppLaunchOrdinal(next_page))); |
| 90 } | 93 } |
| 91 | 94 |
| 92 private: | 95 private: |
| 93 scoped_refptr<Extension> extension_; | 96 scoped_refptr<Extension> extension_; |
| 94 }; | 97 }; |
| 95 TEST_F(ExtensionSortingAppLaunchOrdinal, ExtensionSortingAppLaunchOrdinal) {} | 98 TEST_F(ExtensionSortingAppLaunchOrdinal, ExtensionSortingAppLaunchOrdinal) {} |
| 96 | 99 |
| 97 class ExtensionSortingPageOrdinal : public ExtensionSortingTest { | 100 class ExtensionSortingPageOrdinal : public ExtensionSortingTest { |
| 98 public: | 101 public: |
| 99 virtual void Initialize() OVERRIDE{ | 102 virtual void Initialize() OVERRIDE { |
| 100 extension_ = prefs_.AddApp("page_ordinal"); | 103 extension_ = prefs_.AddApp("page_ordinal"); |
| 101 // Install with a page preference. | 104 // Install with a page preference. |
| 102 first_page_ = syncer::StringOrdinal::CreateInitialOrdinal(); | 105 first_page_ = syncer::StringOrdinal::CreateInitialOrdinal(); |
| 103 prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED, | 106 prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED, |
| 104 false, first_page_); | 107 false, first_page_); |
| 105 EXPECT_TRUE(first_page_.Equals( | 108 EXPECT_TRUE(first_page_.Equals( |
| 106 extension_sorting()->GetPageOrdinal(extension_->id()))); | 109 extension_sorting()->GetPageOrdinal(extension_->id()))); |
| 107 EXPECT_EQ(0, extension_sorting()->PageStringOrdinalAsInteger(first_page_)); | 110 EXPECT_EQ(0, extension_sorting()->PageStringOrdinalAsInteger(first_page_)); |
| 108 | 111 |
| 109 scoped_refptr<Extension> extension2 = prefs_.AddApp("page_ordinal_2"); | 112 scoped_refptr<Extension> extension2 = prefs_.AddApp("page_ordinal_2"); |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 } | 248 } |
| 246 }; | 249 }; |
| 247 TEST_F(ExtensionSortingInitializeWithNoApps, | 250 TEST_F(ExtensionSortingInitializeWithNoApps, |
| 248 ExtensionSortingInitializeWithNoApps) {} | 251 ExtensionSortingInitializeWithNoApps) {} |
| 249 | 252 |
| 250 // Tests the application index to ordinal migration code for values that | 253 // Tests the application index to ordinal migration code for values that |
| 251 // shouldn't be converted. This should be removed when the migrate code | 254 // shouldn't be converted. This should be removed when the migrate code |
| 252 // is taken out. | 255 // is taken out. |
| 253 // http://crbug.com/107376 | 256 // http://crbug.com/107376 |
| 254 class ExtensionSortingMigrateAppIndexInvalid | 257 class ExtensionSortingMigrateAppIndexInvalid |
| 255 : public extensions::ExtensionPrefsPrepopulatedTest { | 258 : public extensions::ExtensionPrefsPrepopulatedTest { |
| 256 public: | 259 public: |
| 257 ExtensionSortingMigrateAppIndexInvalid() {} | 260 ExtensionSortingMigrateAppIndexInvalid() {} |
| 258 virtual ~ExtensionSortingMigrateAppIndexInvalid() {} | 261 virtual ~ExtensionSortingMigrateAppIndexInvalid() {} |
| 259 | 262 |
| 260 virtual void Initialize() OVERRIDE { | 263 virtual void Initialize() OVERRIDE { |
| 261 // A preference determining the order of which the apps appear on the NTP. | 264 // A preference determining the order of which the apps appear on the NTP. |
| 262 const char kPrefAppLaunchIndexDeprecated[] = "app_launcher_index"; | 265 const char kPrefAppLaunchIndexDeprecated[] = "app_launcher_index"; |
| 263 // A preference determining the page on which an app appears in the NTP. | 266 // A preference determining the page on which an app appears in the NTP. |
| 264 const char kPrefPageIndexDeprecated[] = "page_index"; | 267 const char kPrefPageIndexDeprecated[] = "page_index"; |
| 265 | 268 |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 519 EXPECT_TRUE(extension_sorting->GetPageOrdinal(ext4_->id()).Equals( | 522 EXPECT_TRUE(extension_sorting->GetPageOrdinal(ext4_->id()).Equals( |
| 520 first_ordinal_)); | 523 first_ordinal_)); |
| 521 } | 524 } |
| 522 | 525 |
| 523 private: | 526 private: |
| 524 syncer::StringOrdinal first_ordinal_; | 527 syncer::StringOrdinal first_ordinal_; |
| 525 }; | 528 }; |
| 526 TEST_F(ExtensionSortingFixNTPCollisionsTwoCollisions, | 529 TEST_F(ExtensionSortingFixNTPCollisionsTwoCollisions, |
| 527 ExtensionSortingFixNTPCollisionsTwoCollisions) {} | 530 ExtensionSortingFixNTPCollisionsTwoCollisions) {} |
| 528 | 531 |
| 529 class ExtensionSortingEnsureValidOrdinals : | 532 class ExtensionSortingEnsureValidOrdinals |
| 530 public extensions::ExtensionPrefsPrepopulatedTest { | 533 : public extensions::ExtensionPrefsPrepopulatedTest { |
| 531 public : | 534 public : |
| 532 ExtensionSortingEnsureValidOrdinals() {} | 535 ExtensionSortingEnsureValidOrdinals() {} |
| 533 ~ExtensionSortingEnsureValidOrdinals() {} | 536 ~ExtensionSortingEnsureValidOrdinals() {} |
| 534 | 537 |
| 535 virtual void Initialize() {} | 538 virtual void Initialize() {} |
| 536 virtual void Verify() { | 539 virtual void Verify() { |
| 537 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); | 540 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); |
| 538 | 541 |
| 539 // Give ext1 invalid ordinals and then check that EnsureValidOrdinals fixes | 542 // Give ext1 invalid ordinals and then check that EnsureValidOrdinals fixes |
| 540 // them. | 543 // them. |
| 541 extension_sorting->SetAppLaunchOrdinal(ext1_->id(), | 544 extension_sorting->SetAppLaunchOrdinal(ext1_->id(), |
| 542 syncer::StringOrdinal()); | 545 syncer::StringOrdinal()); |
| 543 extension_sorting->SetPageOrdinal(ext1_->id(), syncer::StringOrdinal()); | 546 extension_sorting->SetPageOrdinal(ext1_->id(), syncer::StringOrdinal()); |
| 544 | 547 |
| 545 extension_sorting->EnsureValidOrdinals(ext1_->id()); | 548 extension_sorting->EnsureValidOrdinals(ext1_->id(), |
| 549 syncer::StringOrdinal()); |
| 546 | 550 |
| 547 EXPECT_TRUE(extension_sorting->GetAppLaunchOrdinal(ext1_->id()).IsValid()); | 551 EXPECT_TRUE(extension_sorting->GetAppLaunchOrdinal(ext1_->id()).IsValid()); |
| 548 EXPECT_TRUE(extension_sorting->GetPageOrdinal(ext1_->id()).IsValid()); | 552 EXPECT_TRUE(extension_sorting->GetPageOrdinal(ext1_->id()).IsValid()); |
| 549 } | 553 } |
| 550 }; | 554 }; |
| 551 TEST_F(ExtensionSortingEnsureValidOrdinals, | 555 TEST_F(ExtensionSortingEnsureValidOrdinals, |
| 552 ExtensionSortingEnsureValidOrdinals) {} | 556 ExtensionSortingEnsureValidOrdinals) {} |
| 553 | 557 |
| 554 class ExtensionSortingPageOrdinalMapping : | 558 class ExtensionSortingPageOrdinalMapping |
| 555 public extensions::ExtensionPrefsPrepopulatedTest { | 559 : public extensions::ExtensionPrefsPrepopulatedTest { |
| 556 public: | 560 public: |
| 557 ExtensionSortingPageOrdinalMapping() {} | 561 ExtensionSortingPageOrdinalMapping() {} |
| 558 virtual ~ExtensionSortingPageOrdinalMapping() {} | 562 virtual ~ExtensionSortingPageOrdinalMapping() {} |
| 559 | 563 |
| 560 virtual void Initialize() {} | 564 virtual void Initialize() OVERRIDE {} |
| 561 virtual void Verify() { | 565 virtual void Verify() OVERRIDE { |
| 562 std::string ext_1 = "ext_1"; | 566 std::string ext_1 = "ext_1"; |
| 563 std::string ext_2 = "ext_2"; | 567 std::string ext_2 = "ext_2"; |
| 564 | 568 |
| 565 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); | 569 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); |
| 566 syncer::StringOrdinal first_ordinal = | 570 syncer::StringOrdinal first_ordinal = |
| 567 syncer::StringOrdinal::CreateInitialOrdinal(); | 571 syncer::StringOrdinal::CreateInitialOrdinal(); |
| 568 | 572 |
| 569 // Ensure attempting to removing a mapping with an invalid page doesn't | 573 // Ensure attempting to removing a mapping with an invalid page doesn't |
| 570 // modify the map. | 574 // modify the map. |
| 571 EXPECT_TRUE(extension_sorting->ntp_ordinal_map_.empty()); | 575 EXPECT_TRUE(extension_sorting->ntp_ordinal_map_.empty()); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 604 EXPECT_EQ(1U, extension_sorting->ntp_ordinal_map_[first_ordinal].size()); | 608 EXPECT_EQ(1U, extension_sorting->ntp_ordinal_map_[first_ordinal].size()); |
| 605 | 609 |
| 606 it = extension_sorting->ntp_ordinal_map_[first_ordinal].find( | 610 it = extension_sorting->ntp_ordinal_map_[first_ordinal].find( |
| 607 first_ordinal); | 611 first_ordinal); |
| 608 EXPECT_EQ(ext_2, it->second); | 612 EXPECT_EQ(ext_2, it->second); |
| 609 } | 613 } |
| 610 }; | 614 }; |
| 611 TEST_F(ExtensionSortingPageOrdinalMapping, | 615 TEST_F(ExtensionSortingPageOrdinalMapping, |
| 612 ExtensionSortingPageOrdinalMapping) {} | 616 ExtensionSortingPageOrdinalMapping) {} |
| 613 | 617 |
| 614 class ExtensionSortingPreinstalledAppsBase : | 618 class ExtensionSortingPreinstalledAppsBase |
| 615 public extensions::ExtensionPrefsPrepopulatedTest { | 619 : public extensions::ExtensionPrefsPrepopulatedTest { |
| 616 public: | 620 public: |
| 617 ExtensionSortingPreinstalledAppsBase() { | 621 ExtensionSortingPreinstalledAppsBase() { |
| 618 DictionaryValue simple_dict; | 622 DictionaryValue simple_dict; |
| 619 simple_dict.SetString(keys::kVersion, "1.0.0.0"); | 623 simple_dict.SetString(keys::kVersion, "1.0.0.0"); |
| 620 simple_dict.SetString(keys::kName, "unused"); | 624 simple_dict.SetString(keys::kName, "unused"); |
| 621 simple_dict.SetString(keys::kApp, "true"); | 625 simple_dict.SetString(keys::kApp, "true"); |
| 622 simple_dict.SetString(keys::kLaunchLocalPath, "fake.html"); | 626 simple_dict.SetString(keys::kLaunchLocalPath, "fake.html"); |
| 623 | 627 |
| 624 std::string error; | 628 std::string error; |
| 625 app1_scoped_ = Extension::Create( | 629 app1_scoped_ = Extension::Create( |
| (...skipping 16 matching lines...) Expand all Loading... |
| 642 app2_ = app2_scoped_.get(); | 646 app2_ = app2_scoped_.get(); |
| 643 } | 647 } |
| 644 virtual ~ExtensionSortingPreinstalledAppsBase() {} | 648 virtual ~ExtensionSortingPreinstalledAppsBase() {} |
| 645 | 649 |
| 646 protected: | 650 protected: |
| 647 // Weak references, for convenience. | 651 // Weak references, for convenience. |
| 648 Extension* app1_; | 652 Extension* app1_; |
| 649 Extension* app2_; | 653 Extension* app2_; |
| 650 | 654 |
| 651 private: | 655 private: |
| 652 scoped_refptr<Extension> app1_scoped_; | 656 scoped_refptr<Extension> app1_scoped_; |
| 653 scoped_refptr<Extension> app2_scoped_; | 657 scoped_refptr<Extension> app2_scoped_; |
| 654 }; | 658 }; |
| 655 | 659 |
| 656 class ExtensionSortingGetMinOrMaxAppLaunchOrdinalsOnPage : | 660 class ExtensionSortingGetMinOrMaxAppLaunchOrdinalsOnPage |
| 657 public ExtensionSortingPreinstalledAppsBase { | 661 : public ExtensionSortingPreinstalledAppsBase { |
| 658 public: | 662 public: |
| 659 ExtensionSortingGetMinOrMaxAppLaunchOrdinalsOnPage() {} | 663 ExtensionSortingGetMinOrMaxAppLaunchOrdinalsOnPage() {} |
| 660 virtual ~ExtensionSortingGetMinOrMaxAppLaunchOrdinalsOnPage() {} | 664 virtual ~ExtensionSortingGetMinOrMaxAppLaunchOrdinalsOnPage() {} |
| 661 | 665 |
| 662 virtual void Initialize() OVERRIDE {} | 666 virtual void Initialize() OVERRIDE {} |
| 663 virtual void Verify() OVERRIDE { | 667 virtual void Verify() OVERRIDE { |
| 664 syncer::StringOrdinal page = syncer::StringOrdinal::CreateInitialOrdinal(); | 668 syncer::StringOrdinal page = syncer::StringOrdinal::CreateInitialOrdinal(); |
| 665 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); | 669 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); |
| 666 | 670 |
| 667 syncer::StringOrdinal min = | 671 syncer::StringOrdinal min = |
| (...skipping 22 matching lines...) Expand all Loading... |
| 690 ExtensionSorting::MAX_ORDINAL); | 694 ExtensionSorting::MAX_ORDINAL); |
| 691 EXPECT_FALSE(min.IsValid()); | 695 EXPECT_FALSE(min.IsValid()); |
| 692 EXPECT_FALSE(max.IsValid()); | 696 EXPECT_FALSE(max.IsValid()); |
| 693 } | 697 } |
| 694 }; | 698 }; |
| 695 TEST_F(ExtensionSortingGetMinOrMaxAppLaunchOrdinalsOnPage, | 699 TEST_F(ExtensionSortingGetMinOrMaxAppLaunchOrdinalsOnPage, |
| 696 ExtensionSortingGetMinOrMaxAppLaunchOrdinalsOnPage) {} | 700 ExtensionSortingGetMinOrMaxAppLaunchOrdinalsOnPage) {} |
| 697 | 701 |
| 698 // Make sure that empty pages aren't removed from the integer to ordinal | 702 // Make sure that empty pages aren't removed from the integer to ordinal |
| 699 // mapping. See http://www.crbug.com/109802 for details. | 703 // mapping. See http://www.crbug.com/109802 for details. |
| 700 class ExtensionSortingKeepEmptyStringOrdinalPages : | 704 class ExtensionSortingKeepEmptyStringOrdinalPages |
| 701 public ExtensionSortingPreinstalledAppsBase { | 705 : public ExtensionSortingPreinstalledAppsBase { |
| 702 public: | 706 public: |
| 703 ExtensionSortingKeepEmptyStringOrdinalPages() {} | 707 ExtensionSortingKeepEmptyStringOrdinalPages() {} |
| 704 virtual ~ExtensionSortingKeepEmptyStringOrdinalPages() {} | 708 virtual ~ExtensionSortingKeepEmptyStringOrdinalPages() {} |
| 705 | 709 |
| 706 virtual void Initialize() { | 710 virtual void Initialize() OVERRIDE { |
| 707 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); | 711 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); |
| 708 | 712 |
| 709 syncer::StringOrdinal first_page = | 713 syncer::StringOrdinal first_page = |
| 710 syncer::StringOrdinal::CreateInitialOrdinal(); | 714 syncer::StringOrdinal::CreateInitialOrdinal(); |
| 711 extension_sorting->SetPageOrdinal(app1_->id(), first_page); | 715 extension_sorting->SetPageOrdinal(app1_->id(), first_page); |
| 712 EXPECT_EQ(0, extension_sorting->PageStringOrdinalAsInteger(first_page)); | 716 EXPECT_EQ(0, extension_sorting->PageStringOrdinalAsInteger(first_page)); |
| 713 | 717 |
| 714 last_page_ = first_page.CreateAfter(); | 718 last_page_ = first_page.CreateAfter(); |
| 715 extension_sorting->SetPageOrdinal(app2_->id(), last_page_); | 719 extension_sorting->SetPageOrdinal(app2_->id(), last_page_); |
| 716 EXPECT_EQ(1, extension_sorting->PageStringOrdinalAsInteger(last_page_)); | 720 EXPECT_EQ(1, extension_sorting->PageStringOrdinalAsInteger(last_page_)); |
| 717 | 721 |
| 718 // Move the second app to create an empty page. | 722 // Move the second app to create an empty page. |
| 719 extension_sorting->SetPageOrdinal(app2_->id(), first_page); | 723 extension_sorting->SetPageOrdinal(app2_->id(), first_page); |
| 720 EXPECT_EQ(0, extension_sorting->PageStringOrdinalAsInteger(first_page)); | 724 EXPECT_EQ(0, extension_sorting->PageStringOrdinalAsInteger(first_page)); |
| 721 } | 725 } |
| 722 virtual void Verify() { | 726 virtual void Verify() OVERRIDE { |
| 723 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); | 727 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); |
| 724 | 728 |
| 725 // Move the second app to a new empty page at the end, skipping over | 729 // Move the second app to a new empty page at the end, skipping over |
| 726 // the current empty page. | 730 // the current empty page. |
| 727 last_page_ = last_page_.CreateAfter(); | 731 last_page_ = last_page_.CreateAfter(); |
| 728 extension_sorting->SetPageOrdinal(app2_->id(), last_page_); | 732 extension_sorting->SetPageOrdinal(app2_->id(), last_page_); |
| 729 EXPECT_EQ(2, extension_sorting->PageStringOrdinalAsInteger(last_page_)); | 733 EXPECT_EQ(2, extension_sorting->PageStringOrdinalAsInteger(last_page_)); |
| 730 EXPECT_TRUE( | 734 EXPECT_TRUE( |
| 731 last_page_.Equals(extension_sorting->PageIntegerAsStringOrdinal(2))); | 735 last_page_.Equals(extension_sorting->PageIntegerAsStringOrdinal(2))); |
| 732 } | 736 } |
| 733 | 737 |
| 734 private: | 738 private: |
| 735 syncer::StringOrdinal last_page_; | 739 syncer::StringOrdinal last_page_; |
| 736 }; | 740 }; |
| 737 TEST_F(ExtensionSortingKeepEmptyStringOrdinalPages, | 741 TEST_F(ExtensionSortingKeepEmptyStringOrdinalPages, |
| 738 ExtensionSortingKeepEmptyStringOrdinalPages) {} | 742 ExtensionSortingKeepEmptyStringOrdinalPages) {} |
| 739 | 743 |
| 740 class ExtensionSortingMakesFillerOrdinals : | 744 class ExtensionSortingMakesFillerOrdinals |
| 741 public ExtensionSortingPreinstalledAppsBase { | 745 : public ExtensionSortingPreinstalledAppsBase { |
| 742 public: | 746 public: |
| 743 ExtensionSortingMakesFillerOrdinals() {} | 747 ExtensionSortingMakesFillerOrdinals() {} |
| 744 virtual ~ExtensionSortingMakesFillerOrdinals() {} | 748 virtual ~ExtensionSortingMakesFillerOrdinals() {} |
| 745 | 749 |
| 746 virtual void Initialize() { | 750 virtual void Initialize() OVERRIDE { |
| 747 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); | 751 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); |
| 748 | 752 |
| 749 syncer::StringOrdinal first_page = | 753 syncer::StringOrdinal first_page = |
| 750 syncer::StringOrdinal::CreateInitialOrdinal(); | 754 syncer::StringOrdinal::CreateInitialOrdinal(); |
| 751 extension_sorting->SetPageOrdinal(app1_->id(), first_page); | 755 extension_sorting->SetPageOrdinal(app1_->id(), first_page); |
| 752 EXPECT_EQ(0, extension_sorting->PageStringOrdinalAsInteger(first_page)); | 756 EXPECT_EQ(0, extension_sorting->PageStringOrdinalAsInteger(first_page)); |
| 753 } | 757 } |
| 754 virtual void Verify() { | 758 virtual void Verify() OVERRIDE { |
| 755 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); | 759 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); |
| 756 | 760 |
| 757 // Because the UI can add an unlimited number of empty pages without an app | 761 // Because the UI can add an unlimited number of empty pages without an app |
| 758 // on them, this test simulates dropping of an app on the 1st and 4th empty | 762 // on them, this test simulates dropping of an app on the 1st and 4th empty |
| 759 // pages (3rd and 6th pages by index) to ensure we don't crash and that | 763 // pages (3rd and 6th pages by index) to ensure we don't crash and that |
| 760 // filler ordinals are created as needed. See: http://crbug.com/122214 | 764 // filler ordinals are created as needed. See: http://crbug.com/122214 |
| 761 syncer::StringOrdinal page_three = | 765 syncer::StringOrdinal page_three = |
| 762 extension_sorting->PageIntegerAsStringOrdinal(2); | 766 extension_sorting->PageIntegerAsStringOrdinal(2); |
| 763 extension_sorting->SetPageOrdinal(app1_->id(), page_three); | 767 extension_sorting->SetPageOrdinal(app1_->id(), page_three); |
| 764 EXPECT_EQ(2, extension_sorting->PageStringOrdinalAsInteger(page_three)); | 768 EXPECT_EQ(2, extension_sorting->PageStringOrdinalAsInteger(page_three)); |
| 765 | 769 |
| 766 syncer::StringOrdinal page_six = | 770 syncer::StringOrdinal page_six = |
| 767 extension_sorting->PageIntegerAsStringOrdinal(5); | 771 extension_sorting->PageIntegerAsStringOrdinal(5); |
| 768 extension_sorting->SetPageOrdinal(app1_->id(), page_six); | 772 extension_sorting->SetPageOrdinal(app1_->id(), page_six); |
| 769 EXPECT_EQ(5, extension_sorting->PageStringOrdinalAsInteger(page_six)); | 773 EXPECT_EQ(5, extension_sorting->PageStringOrdinalAsInteger(page_six)); |
| 770 } | 774 } |
| 771 }; | 775 }; |
| 772 TEST_F(ExtensionSortingMakesFillerOrdinals, | 776 TEST_F(ExtensionSortingMakesFillerOrdinals, |
| 773 ExtensionSortingMakesFillerOrdinals) {} | 777 ExtensionSortingMakesFillerOrdinals) {} |
| 778 |
| 779 class ExtensionSortingDefaultOrdinalsBase : public ExtensionSortingTest { |
| 780 public: |
| 781 ExtensionSortingDefaultOrdinalsBase() {} |
| 782 virtual ~ExtensionSortingDefaultOrdinalsBase() {} |
| 783 |
| 784 virtual void Initialize() OVERRIDE { |
| 785 app_ = CreateApp("app"); |
| 786 |
| 787 InitDefaultOrdinals(); |
| 788 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); |
| 789 ExtensionSorting::AppOrdinalsMap& sorting_defaults = |
| 790 extension_sorting->default_ordinals_; |
| 791 sorting_defaults[app_->id()].page_ordinal = default_page_ordinal_; |
| 792 sorting_defaults[app_->id()].app_launch_ordinal = |
| 793 default_app_launch_ordinal_; |
| 794 |
| 795 SetupUserOrdinals(); |
| 796 InstallApps(); |
| 797 } |
| 798 |
| 799 protected: |
| 800 scoped_refptr<Extension> CreateApp(const std::string& name) { |
| 801 DictionaryValue simple_dict; |
| 802 simple_dict.SetString(keys::kVersion, "1.0.0.0"); |
| 803 simple_dict.SetString(keys::kName, name); |
| 804 simple_dict.SetString(keys::kApp, "true"); |
| 805 simple_dict.SetString(keys::kLaunchLocalPath, "fake.html"); |
| 806 |
| 807 std::string errors; |
| 808 scoped_refptr<Extension> app = Extension::Create( |
| 809 prefs_.temp_dir().AppendASCII(name), Extension::EXTERNAL_PREF, |
| 810 simple_dict, Extension::NO_FLAGS, &errors); |
| 811 EXPECT_TRUE(app) << errors; |
| 812 EXPECT_TRUE(Extension::IdIsValid(app->id())); |
| 813 return app; |
| 814 } |
| 815 |
| 816 void InitDefaultOrdinals() { |
| 817 default_page_ordinal_ = |
| 818 syncer::StringOrdinal::CreateInitialOrdinal().CreateAfter(); |
| 819 default_app_launch_ordinal_ = |
| 820 syncer::StringOrdinal::CreateInitialOrdinal().CreateBefore(); |
| 821 } |
| 822 |
| 823 virtual void SetupUserOrdinals() {} |
| 824 |
| 825 virtual void InstallApps() { |
| 826 prefs()->OnExtensionInstalled(app_.get(), Extension::ENABLED, |
| 827 false, syncer::StringOrdinal()); |
| 828 } |
| 829 |
| 830 scoped_refptr<Extension> app_; |
| 831 syncer::StringOrdinal default_page_ordinal_; |
| 832 syncer::StringOrdinal default_app_launch_ordinal_; |
| 833 }; |
| 834 |
| 835 // Tests that the app gets its default ordinals. |
| 836 class ExtensionSortingDefaultOrdinals |
| 837 : public ExtensionSortingDefaultOrdinalsBase { |
| 838 public: |
| 839 ExtensionSortingDefaultOrdinals() {} |
| 840 virtual ~ExtensionSortingDefaultOrdinals() {} |
| 841 |
| 842 virtual void Verify() OVERRIDE { |
| 843 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); |
| 844 EXPECT_TRUE(extension_sorting->GetPageOrdinal(app_->id()).Equals( |
| 845 default_page_ordinal_)); |
| 846 EXPECT_TRUE(extension_sorting->GetAppLaunchOrdinal(app_->id()).Equals( |
| 847 default_app_launch_ordinal_)); |
| 848 } |
| 849 }; |
| 850 TEST_F(ExtensionSortingDefaultOrdinals, |
| 851 ExtensionSortingDefaultOrdinals) {} |
| 852 |
| 853 // Tests that the default page ordinal is overridden by install page ordinal. |
| 854 class ExtensionSortingDefaultOrdinalOverriddenByInstallPage |
| 855 : public ExtensionSortingDefaultOrdinalsBase { |
| 856 public: |
| 857 ExtensionSortingDefaultOrdinalOverriddenByInstallPage() {} |
| 858 virtual ~ExtensionSortingDefaultOrdinalOverriddenByInstallPage() {} |
| 859 |
| 860 virtual void Verify() OVERRIDE { |
| 861 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); |
| 862 |
| 863 EXPECT_FALSE(extension_sorting->GetPageOrdinal(app_->id()).Equals( |
| 864 default_page_ordinal_)); |
| 865 EXPECT_TRUE(extension_sorting->GetPageOrdinal(app_->id()).Equals( |
| 866 install_page_)); |
| 867 } |
| 868 |
| 869 protected: |
| 870 virtual void InstallApps() OVERRIDE { |
| 871 install_page_ = default_page_ordinal_.CreateAfter(); |
| 872 prefs()->OnExtensionInstalled(app_.get(), Extension::ENABLED, |
| 873 false, install_page_); |
| 874 } |
| 875 |
| 876 private: |
| 877 syncer::StringOrdinal install_page_; |
| 878 }; |
| 879 TEST_F(ExtensionSortingDefaultOrdinalOverriddenByInstallPage, |
| 880 ExtensionSortingDefaultOrdinalOverriddenByInstallPage) {} |
| 881 |
| 882 // Tests that the default ordinals are overridden by user values. |
| 883 class ExtensionSortingDefaultOrdinalOverriddenByUserValue |
| 884 : public ExtensionSortingDefaultOrdinalsBase { |
| 885 public: |
| 886 ExtensionSortingDefaultOrdinalOverriddenByUserValue() {} |
| 887 virtual ~ExtensionSortingDefaultOrdinalOverriddenByUserValue() {} |
| 888 |
| 889 virtual void Verify() OVERRIDE { |
| 890 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); |
| 891 |
| 892 EXPECT_TRUE(extension_sorting->GetPageOrdinal(app_->id()).Equals( |
| 893 user_page_ordinal_)); |
| 894 EXPECT_TRUE(extension_sorting->GetAppLaunchOrdinal(app_->id()).Equals( |
| 895 user_app_launch_ordinal_)); |
| 896 } |
| 897 |
| 898 protected: |
| 899 virtual void SetupUserOrdinals() { |
| 900 user_page_ordinal_ = default_page_ordinal_.CreateAfter(); |
| 901 user_app_launch_ordinal_ = default_app_launch_ordinal_.CreateBefore(); |
| 902 |
| 903 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); |
| 904 extension_sorting->SetPageOrdinal(app_->id(), user_page_ordinal_); |
| 905 extension_sorting->SetAppLaunchOrdinal(app_->id(), |
| 906 user_app_launch_ordinal_); |
| 907 } |
| 908 |
| 909 private: |
| 910 syncer::StringOrdinal user_page_ordinal_; |
| 911 syncer::StringOrdinal user_app_launch_ordinal_; |
| 912 }; |
| 913 TEST_F(ExtensionSortingDefaultOrdinalOverriddenByUserValue, |
| 914 ExtensionSortingDefaultOrdinalOverriddenByUserValue) {} |
| 915 |
| 916 // Tests that the default app launch ordinal is changed to avoid collision. |
| 917 class ExtensionSortingDefaultOrdinalNoCollision |
| 918 : public ExtensionSortingDefaultOrdinalsBase { |
| 919 public: |
| 920 ExtensionSortingDefaultOrdinalNoCollision() {} |
| 921 virtual ~ExtensionSortingDefaultOrdinalNoCollision() {} |
| 922 |
| 923 virtual void Verify() OVERRIDE { |
| 924 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); |
| 925 |
| 926 // Use the default page. |
| 927 EXPECT_TRUE(extension_sorting->GetPageOrdinal(app_->id()).Equals( |
| 928 default_page_ordinal_)); |
| 929 // Not using the default app launch ordinal because of the collision. |
| 930 EXPECT_FALSE(extension_sorting->GetAppLaunchOrdinal(app_->id()).Equals( |
| 931 default_app_launch_ordinal_)); |
| 932 } |
| 933 |
| 934 protected: |
| 935 virtual void SetupUserOrdinals() { |
| 936 other_app_ = prefs_.AddApp("other_app"); |
| 937 // Creates a collision. |
| 938 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); |
| 939 extension_sorting->SetPageOrdinal(other_app_->id(), default_page_ordinal_); |
| 940 extension_sorting->SetAppLaunchOrdinal(other_app_->id(), |
| 941 default_app_launch_ordinal_); |
| 942 } |
| 943 |
| 944 private: |
| 945 scoped_refptr<Extension> other_app_; |
| 946 }; |
| 947 TEST_F(ExtensionSortingDefaultOrdinalNoCollision, |
| 948 ExtensionSortingDefaultOrdinalNoCollision) {} |
| OLD | NEW |