summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/extensions_service_unittest.cc
diff options
context:
space:
mode:
authorcira@chromium.org <cira@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-12-16 21:11:06 +0000
committercira@chromium.org <cira@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-12-16 21:11:06 +0000
commitc6d474f8e04b08306349ea514d529b8f25ffd4b2 (patch)
tree756833e85392a8b487cf3ee3cefd0d81ab8c51fa /chrome/browser/extensions/extensions_service_unittest.cc
parent538a1ac2bc5ad7f171e15642edb4e8c1dd34348d (diff)
downloadchromium_src-c6d474f8e04b08306349ea514d529b8f25ffd4b2.zip
chromium_src-c6d474f8e04b08306349ea514d529b8f25ffd4b2.tar.gz
chromium_src-c6d474f8e04b08306349ea514d529b8f25ffd4b2.tar.bz2
Localizing manifest for installed or unpacked extensions.
1. Use _MSG_ format for manifest fields instead of hard-coded names. 2. Localize manifest during installation procedure -> save localized version to prefs. 3. Add current_locale field to manifest so we can detect when chrome locale changes and re-localize manifest. 4. Adds prefs method to MigratePrefs&Write to disk. 5. General refactor of extension_file_util wrt l10n code. 6. Don't localize themes (we can revert this by adding default_locale and current_locale keys to allowed keys for theme section). BUG=27360 Review URL: http://codereview.chromium.org/434015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@34749 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extensions_service_unittest.cc')
-rw-r--r--chrome/browser/extensions/extensions_service_unittest.cc69
1 files changed, 62 insertions, 7 deletions
diff --git a/chrome/browser/extensions/extensions_service_unittest.cc b/chrome/browser/extensions/extensions_service_unittest.cc
index 74709ed..92ea8f6 100644
--- a/chrome/browser/extensions/extensions_service_unittest.cc
+++ b/chrome/browser/extensions/extensions_service_unittest.cc
@@ -32,6 +32,8 @@
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/platform_test.h"
+namespace keys = extension_manifest_keys;
+
namespace {
// Extension ids used during testing.
@@ -398,13 +400,13 @@ class ExtensionsServiceTest
void ValidateBooleanPref(const std::string& extension_id,
const std::wstring& pref_path,
- bool must_equal) {
+ bool expected_val) {
std::wstring msg = L" while checking: ";
msg += ASCIIToWide(extension_id);
msg += L" ";
msg += pref_path;
msg += L" == ";
- msg += must_equal ? L"true" : L"false";
+ msg += expected_val ? L"true" : L"false";
const DictionaryValue* dict =
prefs_->GetDictionary(L"extensions.settings");
@@ -414,7 +416,7 @@ class ExtensionsServiceTest
EXPECT_TRUE(pref != NULL) << msg;
bool val;
ASSERT_TRUE(pref->GetBoolean(pref_path, &val)) << msg;
- EXPECT_EQ(must_equal, val) << msg;
+ EXPECT_EQ(expected_val, val) << msg;
}
bool IsPrefExist(const std::string& extension_id,
@@ -438,13 +440,13 @@ class ExtensionsServiceTest
void ValidateIntegerPref(const std::string& extension_id,
const std::wstring& pref_path,
- int must_equal) {
+ int expected_val) {
std::wstring msg = L" while checking: ";
msg += ASCIIToWide(extension_id);
msg += L" ";
msg += pref_path;
msg += L" == ";
- msg += IntToWString(must_equal);
+ msg += IntToWString(expected_val);
const DictionaryValue* dict =
prefs_->GetDictionary(L"extensions.settings");
@@ -454,7 +456,29 @@ class ExtensionsServiceTest
EXPECT_TRUE(pref != NULL) << msg;
int val;
ASSERT_TRUE(pref->GetInteger(pref_path, &val)) << msg;
- EXPECT_EQ(must_equal, val) << msg;
+ EXPECT_EQ(expected_val, val) << msg;
+ }
+
+ void ValidateStringPref(const std::string& extension_id,
+ const std::wstring& pref_path,
+ const std::string& expected_val) {
+ std::wstring msg = L" while checking: ";
+ msg += ASCIIToWide(extension_id);
+ msg += L".manifest.";
+ msg += pref_path;
+ msg += L" == ";
+ msg += ASCIIToWide(expected_val);
+
+ const DictionaryValue* dict =
+ prefs_->GetDictionary(L"extensions.settings");
+ ASSERT_TRUE(dict != NULL) << msg;
+ DictionaryValue* pref = NULL;
+ std::string manifest_path = extension_id + ".manifest";
+ ASSERT_TRUE(dict->GetDictionary(ASCIIToWide(manifest_path), &pref)) << msg;
+ EXPECT_TRUE(pref != NULL) << msg;
+ std::string val;
+ ASSERT_TRUE(pref->GetString(pref_path, &val)) << msg;
+ EXPECT_EQ(expected_val, val) << msg;
}
void SetPrefInteg(const std::string& extension_id,
@@ -609,7 +633,7 @@ TEST_F(ExtensionsServiceTest, LoadAllExtensionsFromDirectorySuccess) {
// Test loading bad extensions from the profile directory.
TEST_F(ExtensionsServiceTest, LoadAllExtensionsFromDirectoryFail) {
- // Initialize the test dir with a good Preferences/extensions.
+ // Initialize the test dir with a bad Preferences/extensions.
FilePath source_install_dir;
ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_install_dir));
source_install_dir = source_install_dir
@@ -1487,6 +1511,37 @@ TEST_F(ExtensionsServiceTest, ExternalPrefProvider) {
EXPECT_EQ(1, visitor.Visit(json_data, ignore_list));
}
+// Test loading good extensions from the profile directory.
+TEST_F(ExtensionsServiceTest, LoadAndRelocalizeExtensions) {
+ // Initialize the test dir with a good Preferences/extensions.
+ FilePath source_install_dir;
+ ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_install_dir));
+ source_install_dir = source_install_dir
+ .AppendASCII("extensions")
+ .AppendASCII("l10n");
+ FilePath pref_path = source_install_dir.AppendASCII("Preferences");
+ InitializeInstalledExtensionsService(pref_path, source_install_dir);
+
+ service_->Init();
+ loop_.RunAllPending();
+
+ ASSERT_EQ(3u, loaded_.size());
+
+ // This was equal to "sr" on load.
+ ValidateStringPref(loaded_[0]->id(), keys::kCurrentLocale, "en");
+
+ // These are untouched by re-localization.
+ ValidateStringPref(loaded_[1]->id(), keys::kCurrentLocale, "en");
+ EXPECT_FALSE(IsPrefExist(loaded_[1]->id(), keys::kCurrentLocale));
+
+ // This one starts with Serbian name, and gets re-localized into English.
+ EXPECT_EQ("My name is simple.", loaded_[0]->name());
+
+ // These are untouched by re-localization.
+ EXPECT_EQ("My name is simple.", loaded_[1]->name());
+ EXPECT_EQ("no l10n", loaded_[2]->name());
+}
+
class ExtensionsReadyRecorder : public NotificationObserver {
public:
ExtensionsReadyRecorder() : ready_(false) {