| 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" | 5 #include "chrome/browser/extensions/extension_sorting.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 | 8 |
| 9 #include "chrome/browser/extensions/extension_prefs_unittest.h" | 9 #include "chrome/browser/extensions/extension_prefs_unittest.h" |
| 10 #include "chrome/common/extensions/extension_manifest_constants.h" | 10 #include "chrome/common/extensions/extension_manifest_constants.h" |
| 11 #include "sync/api/string_ordinal.h" | 11 #include "sync/api/string_ordinal.h" |
| 12 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
| 13 | 13 |
| 14 using extensions::Extension; | 14 using extensions::Extension; |
| 15 | 15 |
| 16 namespace keys = extension_manifest_keys; | 16 namespace keys = extension_manifest_keys; |
| 17 | 17 |
| 18 class ExtensionSortingTest : public extensions::ExtensionPrefsTest { | 18 class ExtensionSortingTest : public extensions::ExtensionPrefsTest { |
| 19 protected: | 19 protected: |
| 20 ExtensionSorting* extension_sorting() { | 20 ExtensionSorting* extension_sorting() { |
| 21 return prefs()->extension_sorting(); | 21 return prefs()->extension_sorting(); |
| 22 } | 22 } |
| 23 }; | 23 }; |
| 24 | 24 |
| 25 class ExtensionSortingAppLocation : public ExtensionSortingTest { | 25 class ExtensionSortingAppLocation : public ExtensionSortingTest { |
| 26 public: | 26 public: |
| 27 virtual void Initialize() OVERRIDE { | 27 virtual void Initialize() OVERRIDE { |
| 28 extension_ = prefs_.AddExtension("not_an_app"); | 28 extension_ = prefs_->AddExtension("not_an_app"); |
| 29 // Non-apps should not have any app launch ordinal or page ordinal. | 29 // Non-apps should not have any app launch ordinal or page ordinal. |
| 30 prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED, | 30 prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED, |
| 31 syncer::StringOrdinal()); | 31 syncer::StringOrdinal()); |
| 32 } | 32 } |
| 33 | 33 |
| 34 virtual void Verify() OVERRIDE { | 34 virtual void Verify() OVERRIDE { |
| 35 EXPECT_FALSE( | 35 EXPECT_FALSE( |
| 36 extension_sorting()->GetAppLaunchOrdinal(extension_->id()).IsValid()); | 36 extension_sorting()->GetAppLaunchOrdinal(extension_->id()).IsValid()); |
| 37 EXPECT_FALSE( | 37 EXPECT_FALSE( |
| 38 extension_sorting()->GetPageOrdinal(extension_->id()).IsValid()); | 38 extension_sorting()->GetPageOrdinal(extension_->id()).IsValid()); |
| 39 } | 39 } |
| 40 | 40 |
| 41 private: | 41 private: |
| 42 scoped_refptr<Extension> extension_; | 42 scoped_refptr<Extension> extension_; |
| 43 }; | 43 }; |
| 44 TEST_F(ExtensionSortingAppLocation, ExtensionSortingAppLocation) {} | 44 TEST_F(ExtensionSortingAppLocation, ExtensionSortingAppLocation) {} |
| 45 | 45 |
| 46 class ExtensionSortingAppLaunchOrdinal : public ExtensionSortingTest { | 46 class ExtensionSortingAppLaunchOrdinal : public ExtensionSortingTest { |
| 47 public: | 47 public: |
| 48 virtual void Initialize() OVERRIDE { | 48 virtual void Initialize() OVERRIDE { |
| 49 // No extensions yet. | 49 // No extensions yet. |
| 50 syncer::StringOrdinal page = syncer::StringOrdinal::CreateInitialOrdinal(); | 50 syncer::StringOrdinal page = syncer::StringOrdinal::CreateInitialOrdinal(); |
| 51 EXPECT_TRUE(syncer::StringOrdinal::CreateInitialOrdinal().Equals( | 51 EXPECT_TRUE(syncer::StringOrdinal::CreateInitialOrdinal().Equals( |
| 52 extension_sorting()->CreateNextAppLaunchOrdinal(page))); | 52 extension_sorting()->CreateNextAppLaunchOrdinal(page))); |
| 53 | 53 |
| 54 extension_ = prefs_.AddApp("on_extension_installed"); | 54 extension_ = prefs_->AddApp("on_extension_installed"); |
| 55 EXPECT_FALSE(prefs()->IsExtensionDisabled(extension_->id())); | 55 EXPECT_FALSE(prefs()->IsExtensionDisabled(extension_->id())); |
| 56 prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED, | 56 prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED, |
| 57 syncer::StringOrdinal()); | 57 syncer::StringOrdinal()); |
| 58 } | 58 } |
| 59 | 59 |
| 60 virtual void Verify() OVERRIDE { | 60 virtual void Verify() OVERRIDE { |
| 61 syncer::StringOrdinal launch_ordinal = | 61 syncer::StringOrdinal launch_ordinal = |
| 62 extension_sorting()->GetAppLaunchOrdinal(extension_->id()); | 62 extension_sorting()->GetAppLaunchOrdinal(extension_->id()); |
| 63 syncer::StringOrdinal page_ordinal = | 63 syncer::StringOrdinal page_ordinal = |
| 64 syncer::StringOrdinal::CreateInitialOrdinal(); | 64 syncer::StringOrdinal::CreateInitialOrdinal(); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 93 } | 93 } |
| 94 | 94 |
| 95 private: | 95 private: |
| 96 scoped_refptr<Extension> extension_; | 96 scoped_refptr<Extension> extension_; |
| 97 }; | 97 }; |
| 98 TEST_F(ExtensionSortingAppLaunchOrdinal, ExtensionSortingAppLaunchOrdinal) {} | 98 TEST_F(ExtensionSortingAppLaunchOrdinal, ExtensionSortingAppLaunchOrdinal) {} |
| 99 | 99 |
| 100 class ExtensionSortingPageOrdinal : public ExtensionSortingTest { | 100 class ExtensionSortingPageOrdinal : public ExtensionSortingTest { |
| 101 public: | 101 public: |
| 102 virtual void Initialize() OVERRIDE { | 102 virtual void Initialize() OVERRIDE { |
| 103 extension_ = prefs_.AddApp("page_ordinal"); | 103 extension_ = prefs_->AddApp("page_ordinal"); |
| 104 // Install with a page preference. | 104 // Install with a page preference. |
| 105 first_page_ = syncer::StringOrdinal::CreateInitialOrdinal(); | 105 first_page_ = syncer::StringOrdinal::CreateInitialOrdinal(); |
| 106 prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED, | 106 prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED, |
| 107 first_page_); | 107 first_page_); |
| 108 EXPECT_TRUE(first_page_.Equals( | 108 EXPECT_TRUE(first_page_.Equals( |
| 109 extension_sorting()->GetPageOrdinal(extension_->id()))); | 109 extension_sorting()->GetPageOrdinal(extension_->id()))); |
| 110 EXPECT_EQ(0, extension_sorting()->PageStringOrdinalAsInteger(first_page_)); | 110 EXPECT_EQ(0, extension_sorting()->PageStringOrdinalAsInteger(first_page_)); |
| 111 | 111 |
| 112 scoped_refptr<Extension> extension2 = prefs_.AddApp("page_ordinal_2"); | 112 scoped_refptr<Extension> extension2 = prefs_->AddApp("page_ordinal_2"); |
| 113 // Install without any page preference. | 113 // Install without any page preference. |
| 114 prefs()->OnExtensionInstalled(extension2.get(), Extension::ENABLED, | 114 prefs()->OnExtensionInstalled(extension2.get(), Extension::ENABLED, |
| 115 syncer::StringOrdinal()); | 115 syncer::StringOrdinal()); |
| 116 EXPECT_TRUE(first_page_.Equals( | 116 EXPECT_TRUE(first_page_.Equals( |
| 117 extension_sorting()->GetPageOrdinal(extension2->id()))); | 117 extension_sorting()->GetPageOrdinal(extension2->id()))); |
| 118 } | 118 } |
| 119 virtual void Verify() OVERRIDE { | 119 virtual void Verify() OVERRIDE { |
| 120 // Set the page ordinal. | 120 // Set the page ordinal. |
| 121 syncer::StringOrdinal new_page = first_page_.CreateAfter(); | 121 syncer::StringOrdinal new_page = first_page_.CreateAfter(); |
| 122 extension_sorting()->SetPageOrdinal(extension_->id(), new_page); | 122 extension_sorting()->SetPageOrdinal(extension_->id(), new_page); |
| (...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 620 public: | 620 public: |
| 621 ExtensionSortingPreinstalledAppsBase() { | 621 ExtensionSortingPreinstalledAppsBase() { |
| 622 DictionaryValue simple_dict; | 622 DictionaryValue simple_dict; |
| 623 simple_dict.SetString(keys::kVersion, "1.0.0.0"); | 623 simple_dict.SetString(keys::kVersion, "1.0.0.0"); |
| 624 simple_dict.SetString(keys::kName, "unused"); | 624 simple_dict.SetString(keys::kName, "unused"); |
| 625 simple_dict.SetString(keys::kApp, "true"); | 625 simple_dict.SetString(keys::kApp, "true"); |
| 626 simple_dict.SetString(keys::kLaunchLocalPath, "fake.html"); | 626 simple_dict.SetString(keys::kLaunchLocalPath, "fake.html"); |
| 627 | 627 |
| 628 std::string error; | 628 std::string error; |
| 629 app1_scoped_ = Extension::Create( | 629 app1_scoped_ = Extension::Create( |
| 630 prefs_.temp_dir().AppendASCII("app1_"), Extension::EXTERNAL_PREF, | 630 prefs_->temp_dir().AppendASCII("app1_"), Extension::EXTERNAL_PREF, |
| 631 simple_dict, Extension::NO_FLAGS, &error); | 631 simple_dict, Extension::NO_FLAGS, &error); |
| 632 prefs()->OnExtensionInstalled(app1_scoped_.get(), | 632 prefs()->OnExtensionInstalled(app1_scoped_.get(), |
| 633 Extension::ENABLED, | 633 Extension::ENABLED, |
| 634 syncer::StringOrdinal()); | 634 syncer::StringOrdinal()); |
| 635 | 635 |
| 636 app2_scoped_ = Extension::Create( | 636 app2_scoped_ = Extension::Create( |
| 637 prefs_.temp_dir().AppendASCII("app2_"), Extension::EXTERNAL_PREF, | 637 prefs_->temp_dir().AppendASCII("app2_"), Extension::EXTERNAL_PREF, |
| 638 simple_dict, Extension::NO_FLAGS, &error); | 638 simple_dict, Extension::NO_FLAGS, &error); |
| 639 prefs()->OnExtensionInstalled(app2_scoped_.get(), | 639 prefs()->OnExtensionInstalled(app2_scoped_.get(), |
| 640 Extension::ENABLED, | 640 Extension::ENABLED, |
| 641 syncer::StringOrdinal()); | 641 syncer::StringOrdinal()); |
| 642 | 642 |
| 643 app1_ = app1_scoped_.get(); | 643 app1_ = app1_scoped_.get(); |
| 644 app2_ = app2_scoped_.get(); | 644 app2_ = app2_scoped_.get(); |
| 645 } | 645 } |
| 646 virtual ~ExtensionSortingPreinstalledAppsBase() {} | 646 virtual ~ExtensionSortingPreinstalledAppsBase() {} |
| 647 | 647 |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 797 protected: | 797 protected: |
| 798 scoped_refptr<Extension> CreateApp(const std::string& name) { | 798 scoped_refptr<Extension> CreateApp(const std::string& name) { |
| 799 DictionaryValue simple_dict; | 799 DictionaryValue simple_dict; |
| 800 simple_dict.SetString(keys::kVersion, "1.0.0.0"); | 800 simple_dict.SetString(keys::kVersion, "1.0.0.0"); |
| 801 simple_dict.SetString(keys::kName, name); | 801 simple_dict.SetString(keys::kName, name); |
| 802 simple_dict.SetString(keys::kApp, "true"); | 802 simple_dict.SetString(keys::kApp, "true"); |
| 803 simple_dict.SetString(keys::kLaunchLocalPath, "fake.html"); | 803 simple_dict.SetString(keys::kLaunchLocalPath, "fake.html"); |
| 804 | 804 |
| 805 std::string errors; | 805 std::string errors; |
| 806 scoped_refptr<Extension> app = Extension::Create( | 806 scoped_refptr<Extension> app = Extension::Create( |
| 807 prefs_.temp_dir().AppendASCII(name), Extension::EXTERNAL_PREF, | 807 prefs_->temp_dir().AppendASCII(name), Extension::EXTERNAL_PREF, |
| 808 simple_dict, Extension::NO_FLAGS, &errors); | 808 simple_dict, Extension::NO_FLAGS, &errors); |
| 809 EXPECT_TRUE(app) << errors; | 809 EXPECT_TRUE(app) << errors; |
| 810 EXPECT_TRUE(Extension::IdIsValid(app->id())); | 810 EXPECT_TRUE(Extension::IdIsValid(app->id())); |
| 811 return app; | 811 return app; |
| 812 } | 812 } |
| 813 | 813 |
| 814 void InitDefaultOrdinals() { | 814 void InitDefaultOrdinals() { |
| 815 default_page_ordinal_ = | 815 default_page_ordinal_ = |
| 816 syncer::StringOrdinal::CreateInitialOrdinal().CreateAfter(); | 816 syncer::StringOrdinal::CreateInitialOrdinal().CreateAfter(); |
| 817 default_app_launch_ordinal_ = | 817 default_app_launch_ordinal_ = |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 924 // Use the default page. | 924 // Use the default page. |
| 925 EXPECT_TRUE(extension_sorting->GetPageOrdinal(app_->id()).Equals( | 925 EXPECT_TRUE(extension_sorting->GetPageOrdinal(app_->id()).Equals( |
| 926 default_page_ordinal_)); | 926 default_page_ordinal_)); |
| 927 // Not using the default app launch ordinal because of the collision. | 927 // Not using the default app launch ordinal because of the collision. |
| 928 EXPECT_FALSE(extension_sorting->GetAppLaunchOrdinal(app_->id()).Equals( | 928 EXPECT_FALSE(extension_sorting->GetAppLaunchOrdinal(app_->id()).Equals( |
| 929 default_app_launch_ordinal_)); | 929 default_app_launch_ordinal_)); |
| 930 } | 930 } |
| 931 | 931 |
| 932 protected: | 932 protected: |
| 933 virtual void SetupUserOrdinals() { | 933 virtual void SetupUserOrdinals() { |
| 934 other_app_ = prefs_.AddApp("other_app"); | 934 other_app_ = prefs_->AddApp("other_app"); |
| 935 // Creates a collision. | 935 // Creates a collision. |
| 936 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); | 936 ExtensionSorting* extension_sorting = prefs()->extension_sorting(); |
| 937 extension_sorting->SetPageOrdinal(other_app_->id(), default_page_ordinal_); | 937 extension_sorting->SetPageOrdinal(other_app_->id(), default_page_ordinal_); |
| 938 extension_sorting->SetAppLaunchOrdinal(other_app_->id(), | 938 extension_sorting->SetAppLaunchOrdinal(other_app_->id(), |
| 939 default_app_launch_ordinal_); | 939 default_app_launch_ordinal_); |
| 940 | 940 |
| 941 yet_another_app_ = prefs_.AddApp("yet_aother_app"); | 941 yet_another_app_ = prefs_->AddApp("yet_aother_app"); |
| 942 extension_sorting->SetPageOrdinal(yet_another_app_->id(), | 942 extension_sorting->SetPageOrdinal(yet_another_app_->id(), |
| 943 default_page_ordinal_); | 943 default_page_ordinal_); |
| 944 extension_sorting->SetAppLaunchOrdinal(yet_another_app_->id(), | 944 extension_sorting->SetAppLaunchOrdinal(yet_another_app_->id(), |
| 945 default_app_launch_ordinal_); | 945 default_app_launch_ordinal_); |
| 946 } | 946 } |
| 947 | 947 |
| 948 private: | 948 private: |
| 949 scoped_refptr<Extension> other_app_; | 949 scoped_refptr<Extension> other_app_; |
| 950 scoped_refptr<Extension> yet_another_app_; | 950 scoped_refptr<Extension> yet_another_app_; |
| 951 }; | 951 }; |
| 952 TEST_F(ExtensionSortingDefaultOrdinalNoCollision, | 952 TEST_F(ExtensionSortingDefaultOrdinalNoCollision, |
| 953 ExtensionSortingDefaultOrdinalNoCollision) {} | 953 ExtensionSortingDefaultOrdinalNoCollision) {} |
| OLD | NEW |