diff options
Diffstat (limited to 'chrome/browser/extensions/extension_prefs_unittest.cc')
-rw-r--r-- | chrome/browser/extensions/extension_prefs_unittest.cc | 271 |
1 files changed, 229 insertions, 42 deletions
diff --git a/chrome/browser/extensions/extension_prefs_unittest.cc b/chrome/browser/extensions/extension_prefs_unittest.cc index 3d937d8..66dfbfd 100644 --- a/chrome/browser/extensions/extension_prefs_unittest.cc +++ b/chrome/browser/extensions/extension_prefs_unittest.cc @@ -10,11 +10,13 @@ #include "base/stringprintf.h" #include "chrome/browser/extensions/extension_prefs.h" #include "chrome/browser/extensions/test_extension_prefs.h" +#include "chrome/browser/extensions/extension_pref_value_map.h" #include "chrome/browser/prefs/pref_change_registrar.h" #include "chrome/browser/prefs/scoped_user_pref_update.h" #include "chrome/common/chrome_paths.h" #include "chrome/common/extensions/extension_constants.h" #include "chrome/common/extensions/extension_permission_set.h" +#include "chrome/common/string_ordinal.h" #include "content/public/browser/notification_details.h" #include "content/public/browser/notification_source.h" #include "content/test/notification_observer_mock.h" @@ -654,7 +656,8 @@ class ExtensionPrefsOnExtensionInstalled : public ExtensionPrefsTest { extension_ = prefs_.AddExtension("on_extension_installed"); EXPECT_FALSE(prefs()->IsExtensionDisabled(extension_->id())); prefs()->OnExtensionInstalled( - extension_.get(), Extension::DISABLED, false, -1); + extension_.get(), Extension::DISABLED, false, + StringOrdinal()); } virtual void Verify() { @@ -667,85 +670,109 @@ class ExtensionPrefsOnExtensionInstalled : public ExtensionPrefsTest { TEST_F(ExtensionPrefsOnExtensionInstalled, ExtensionPrefsOnExtensionInstalled) {} -class ExtensionPrefsAppLaunchIndex : public ExtensionPrefsTest { +class ExtensionPrefsAppLaunchOrdinal : public ExtensionPrefsTest { public: virtual void Initialize() { // No extensions yet. - EXPECT_EQ(0, prefs()->GetNextAppLaunchIndex(0)); + StringOrdinal page = StringOrdinal::CreateInitialOrdinal(); + EXPECT_TRUE(StringOrdinal::CreateInitialOrdinal().Equal( + prefs()->CreateNextAppLaunchOrdinal(page))); extension_ = prefs_.AddApp("on_extension_installed"); EXPECT_FALSE(prefs()->IsExtensionDisabled(extension_->id())); prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED, - false, -1); + false, StringOrdinal()); } virtual void Verify() { - int launch_index = prefs()->GetAppLaunchIndex(extension_->id()); - // Extension should have been assigned a launch index > 0. - EXPECT_GT(launch_index, 0); - EXPECT_EQ(launch_index + 1, prefs()->GetNextAppLaunchIndex(0)); - // Set a new launch index of one higher and verify. - prefs()->SetAppLaunchIndex(extension_->id(), - prefs()->GetNextAppLaunchIndex(0)); - int new_launch_index = prefs()->GetAppLaunchIndex(extension_->id()); - EXPECT_EQ(launch_index + 1, new_launch_index); - - // This extension doesn't exist, so it should return -1. - EXPECT_EQ(-1, prefs()->GetAppLaunchIndex("foo")); - - // The second page doesn't have any apps so its next launch index should - // still be 0. - EXPECT_EQ(prefs()->GetNextAppLaunchIndex(1), 0); + StringOrdinal launch_ordinal = + prefs()->GetAppLaunchOrdinal(extension_->id()); + StringOrdinal page_ordinal = StringOrdinal::CreateInitialOrdinal(); + + // Extension should have been assigned a valid StringOrdinal. + EXPECT_TRUE(launch_ordinal.IsValid()); + EXPECT_TRUE(launch_ordinal.LessThan( + prefs()->CreateNextAppLaunchOrdinal(page_ordinal))); + // Set a new launch ordinal of and verify it comes after. + prefs()->SetAppLaunchOrdinal( + extension_->id(), + prefs()->CreateNextAppLaunchOrdinal(page_ordinal)); + StringOrdinal new_launch_ordinal = + prefs()->GetAppLaunchOrdinal(extension_->id()); + EXPECT_TRUE(launch_ordinal.LessThan(new_launch_ordinal)); + + // This extension doesn't exist, so it should return an invalid + // StringOrdinal. + StringOrdinal invalid_app_launch_ordinal = + prefs()->GetAppLaunchOrdinal("foo"); + EXPECT_FALSE(invalid_app_launch_ordinal.IsValid()); + EXPECT_EQ(-1, prefs()->PageStringOrdinalAsInteger( + invalid_app_launch_ordinal)); + + // The second page doesn't have any apps so its next launch ordinal should + // be the first launch ordinal. + StringOrdinal next_page = page_ordinal.CreateAfter(); + StringOrdinal next_page_app_launch_ordinal = + prefs()->CreateNextAppLaunchOrdinal(next_page); + EXPECT_TRUE(next_page_app_launch_ordinal.Equal( + prefs()->CreateFirstAppLaunchOrdinal(next_page))); } private: scoped_refptr<Extension> extension_; }; -TEST_F(ExtensionPrefsAppLaunchIndex, ExtensionPrefsAppLaunchIndex) {} +TEST_F(ExtensionPrefsAppLaunchOrdinal, ExtensionPrefsAppLaunchOrdinal) {} -class ExtensionPrefsPageIndex : public ExtensionPrefsTest { +class ExtensionPrefsPageOrdinal : public ExtensionPrefsTest { public: virtual void Initialize() { - extension_ = prefs_.AddApp("page_index"); - // Install to page 3 (index 2). + extension_ = prefs_.AddApp("page_ordinal"); + // Install with a page preference. + StringOrdinal page = StringOrdinal::CreateInitialOrdinal(); prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED, - false, 2); - EXPECT_EQ(2, prefs()->GetPageIndex(extension_->id())); + false, page); + EXPECT_TRUE(page.Equal(prefs()->GetPageOrdinal(extension_->id()))); + EXPECT_EQ(0, prefs()->PageStringOrdinalAsInteger(page)); - scoped_refptr<Extension> extension2 = prefs_.AddApp("page_index_2"); + scoped_refptr<Extension> extension2 = prefs_.AddApp("page_ordinal_2"); // Install without any page preference. prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED, - false, -1); - EXPECT_EQ(0, prefs()->GetPageIndex(extension_->id())); + false, StringOrdinal()); + EXPECT_TRUE(prefs()->GetPageOrdinal(extension_->id()).IsValid()); } virtual void Verify() { - // Set the page index. - prefs()->SetPageIndex(extension_->id(), 1); - // Verify the page index. - EXPECT_EQ(1, prefs()->GetPageIndex(extension_->id())); + StringOrdinal old_page = prefs()->GetPageOrdinal(extension_->id()); + StringOrdinal new_page = old_page.CreateAfter(); + + // Set the page ordinal. + prefs()->SetPageOrdinal(extension_->id(), new_page); + // Verify the page ordinal. + EXPECT_TRUE(new_page.Equal(prefs()->GetPageOrdinal(extension_->id()))); + EXPECT_EQ(1, prefs()->PageStringOrdinalAsInteger(new_page)); - // This extension doesn't exist, so it should return -1. - EXPECT_EQ(-1, prefs()->GetPageIndex("foo")); + // This extension doesn't exist, so it should return an invalid + // StringOrdinal. + EXPECT_FALSE(prefs()->GetPageOrdinal("foo").IsValid()); } private: scoped_refptr<Extension> extension_; }; -TEST_F(ExtensionPrefsPageIndex, ExtensionPrefsPageIndex) {} +TEST_F(ExtensionPrefsPageOrdinal, ExtensionPrefsPageOrdinal) {} class ExtensionPrefsAppLocation : public ExtensionPrefsTest { public: virtual void Initialize() { extension_ = prefs_.AddExtension("not_an_app"); - // Non-apps should not have any app launch index or page index. + // Non-apps should not have any app launch ordinal or page ordinal. prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED, - false, 0); + false, StringOrdinal()); } virtual void Verify() { - EXPECT_EQ(-1, prefs()->GetAppLaunchIndex(extension_->id())); - EXPECT_EQ(-1, prefs()->GetPageIndex(extension_->id())); + EXPECT_FALSE(prefs()->GetAppLaunchOrdinal(extension_->id()).IsValid()); + EXPECT_FALSE(prefs()->GetPageOrdinal(extension_->id()).IsValid()); } private: @@ -759,7 +786,7 @@ class ExtensionPrefsAppDraggedByUser : public ExtensionPrefsTest { extension_ = prefs_.AddExtension("on_extension_installed"); EXPECT_FALSE(prefs()->WasAppDraggedByUser(extension_->id())); prefs()->OnExtensionInstalled(extension_.get(), Extension::ENABLED, - false, -1); + false, StringOrdinal()); } virtual void Verify() { @@ -909,7 +936,8 @@ class ExtensionPrefsPreferencesBase : public ExtensionPrefsTest { Extension* extensions[] = {ext1_, ext2_, ext3_}; for (int i = 0; i < 3; ++i) { if (ext == extensions[i] && !installed[i]) { - prefs()->OnExtensionInstalled(ext, Extension::ENABLED, false, -1); + prefs()->OnExtensionInstalled(ext, Extension::ENABLED, + false, StringOrdinal()); installed[i] = true; break; } @@ -1216,3 +1244,162 @@ class ExtensionPrefsDisableExtensions int iteration_; }; TEST_F(ExtensionPrefsDisableExtensions, ExtensionPrefsDisableExtensions) {} + +// Tests the application index to ordinal migration code. This should be removed +// when the migrate code is taken out. +class ExtensionPrefsMigrateAppIndex : public ExtensionPrefsPreferencesBase { + public: + ExtensionPrefsMigrateAppIndex() {} + virtual ~ExtensionPrefsMigrateAppIndex() {} + virtual void Initialize() { + // A preference determining the order of which the apps appear on the NTP. + const char kPrefAppLaunchIndexDeprecated[] = "app_launcher_index"; + // A preference determining the page on which an app appears in the NTP. + const char kPrefPageIndexDeprecated[] = "page_index"; + + // Setup the deprecated preferences. + prefs()->UpdateExtensionPref(ext1_->id(), + kPrefAppLaunchIndexDeprecated, + Value::CreateIntegerValue(0)); + prefs()->UpdateExtensionPref(ext1_->id(), + kPrefPageIndexDeprecated, + Value::CreateIntegerValue(0)); + + prefs()->UpdateExtensionPref(ext2_->id(), + kPrefAppLaunchIndexDeprecated, + Value::CreateIntegerValue(1)); + prefs()->UpdateExtensionPref(ext2_->id(), + kPrefPageIndexDeprecated, + Value::CreateIntegerValue(0)); + + prefs()->UpdateExtensionPref(ext3_->id(), + kPrefAppLaunchIndexDeprecated, + Value::CreateIntegerValue(0)); + prefs()->UpdateExtensionPref(ext3_->id(), + kPrefPageIndexDeprecated, + Value::CreateIntegerValue(1)); + + // We insert the ids in reserve order so that we have to deal with the + // element on the 2nd page before the 1st page is seen. + ExtensionPrefs::ExtensionIdSet ids; + ids.push_back(ext3_->id()); + ids.push_back(ext2_->id()); + ids.push_back(ext1_->id()); + + prefs_.prefs()->MigrateAppIndex(ids); + } + virtual void Verify() { + StringOrdinal first_ordinal = StringOrdinal::CreateInitialOrdinal(); + + EXPECT_TRUE(first_ordinal.Equal(prefs()->GetAppLaunchOrdinal(ext1_->id()))); + EXPECT_TRUE(first_ordinal.LessThan( + prefs()->GetAppLaunchOrdinal(ext2_->id()))); + EXPECT_TRUE(first_ordinal.Equal(prefs()->GetAppLaunchOrdinal(ext3_->id()))); + + EXPECT_TRUE(first_ordinal.Equal(prefs()->GetPageOrdinal(ext1_->id()))); + EXPECT_TRUE(first_ordinal.Equal(prefs()->GetPageOrdinal(ext2_->id()))); + EXPECT_TRUE(first_ordinal.LessThan(prefs()->GetPageOrdinal(ext3_->id()))); + } +}; +TEST_F(ExtensionPrefsMigrateAppIndex, ExtensionPrefsMigrateAppIndex) {} + +// Tests the application index to ordinal migration code for values that +// shouldn't be converted. This should be removed when the migrate code +// is taken out. +// http://crbug.com/107376 +class ExtensionPrefsMigrateAppIndexInvalid + : public ExtensionPrefsPreferencesBase { + public: + ExtensionPrefsMigrateAppIndexInvalid() {} + virtual ~ExtensionPrefsMigrateAppIndexInvalid() {} + virtual void Initialize() { + // A preference determining the order of which the apps appear on the NTP. + const char kPrefAppLaunchIndexDeprecated[] = "app_launcher_index"; + // A preference determining the page on which an app appears in the NTP. + const char kPrefPageIndexDeprecated[] = "page_index"; + + // Setup the deprecated preference. + prefs()->UpdateExtensionPref(ext1_->id(), + kPrefAppLaunchIndexDeprecated, + Value::CreateIntegerValue(0)); + prefs()->UpdateExtensionPref(ext1_->id(), + kPrefPageIndexDeprecated, + Value::CreateIntegerValue(-1)); + + ExtensionPrefs::ExtensionIdSet ids; + ids.push_back(ext1_->id()); + + prefs_.prefs()->MigrateAppIndex(ids); + } + virtual void Verify() { + // Make sure that the invalid page_index wasn't converted over. + EXPECT_FALSE(prefs()->GetAppLaunchOrdinal(ext1_->id()).IsValid()); + } +}; +TEST_F(ExtensionPrefsMigrateAppIndexInvalid, + ExtensionPrefsMigrateAppIndexInvalid) {} + +class ExtensionPrefsGetMinOrMaxAppLaunchOrdinalsOnPage : + public ExtensionPrefsPreferencesBase { + public: + ExtensionPrefsGetMinOrMaxAppLaunchOrdinalsOnPage() {} + virtual ~ExtensionPrefsGetMinOrMaxAppLaunchOrdinalsOnPage() {} + virtual void Initialize() { + DictionaryValue simple_dict; + simple_dict.SetString(keys::kVersion, "1.0.0.0"); + simple_dict.SetString(keys::kName, "unused"); + simple_dict.SetString(keys::kApp, "true"); + simple_dict.SetString(keys::kLaunchLocalPath, "fake.html"); + + std::string error; + app1_scoped_ = Extension::Create( + prefs_.temp_dir().AppendASCII("app1_"), Extension::EXTERNAL_PREF, + simple_dict, Extension::STRICT_ERROR_CHECKS, &error); + prefs()->OnExtensionInstalled(app1_scoped_.get(), + Extension::ENABLED, + false, + StringOrdinal()); + + app2_scoped_ = Extension::Create( + prefs_.temp_dir().AppendASCII("app2_"), Extension::EXTERNAL_PREF, + simple_dict, Extension::STRICT_ERROR_CHECKS, &error); + prefs()->OnExtensionInstalled(app2_scoped_.get(), + Extension::ENABLED, + false, + StringOrdinal()); + } + virtual void Verify() { + StringOrdinal page = StringOrdinal::CreateInitialOrdinal(); + + StringOrdinal min = prefs()->GetMinOrMaxAppLaunchOrdinalsOnPage( + page, + ExtensionPrefs::MIN_ORDINAL); + StringOrdinal max = prefs()->GetMinOrMaxAppLaunchOrdinalsOnPage( + page, + ExtensionPrefs::MAX_ORDINAL); + EXPECT_TRUE(min.IsValid()); + EXPECT_TRUE(max.IsValid()); + EXPECT_TRUE(min.LessThan(max)); + + // Ensure that the min and max values aren't set for empty pages. + min = StringOrdinal(); + max = StringOrdinal(); + StringOrdinal empty_page = page.CreateAfter(); + EXPECT_FALSE(min.IsValid()); + EXPECT_FALSE(max.IsValid()); + min = prefs()->GetMinOrMaxAppLaunchOrdinalsOnPage( + empty_page, + ExtensionPrefs::MIN_ORDINAL); + max = prefs()->GetMinOrMaxAppLaunchOrdinalsOnPage( + empty_page, + ExtensionPrefs::MAX_ORDINAL); + EXPECT_FALSE(min.IsValid()); + EXPECT_FALSE(max.IsValid()); + } + + private: + scoped_refptr<Extension> app1_scoped_; + scoped_refptr<Extension> app2_scoped_; +}; +TEST_F(ExtensionPrefsGetMinOrMaxAppLaunchOrdinalsOnPage, + ExtensionPrefsGetMinOrMaxAppLaunchOrdinalsOnPage) {} |