Index: chrome/common/extensions/extension_message_bundle.cc |
=================================================================== |
--- chrome/common/extensions/extension_message_bundle.cc (revision 29587) |
+++ chrome/common/extensions/extension_message_bundle.cc (working copy) |
@@ -5,8 +5,10 @@ |
#include "chrome/common/extensions/extension_message_bundle.h" |
#include <string> |
+#include <vector> |
#include "base/hash_tables.h" |
+#include "base/linked_ptr.h" |
#include "base/scoped_ptr.h" |
#include "base/string_util.h" |
#include "base/values.h" |
@@ -34,54 +36,36 @@ |
// static |
ExtensionMessageBundle* ExtensionMessageBundle::Create( |
- const DictionaryValue& default_locale_catalog, |
- const DictionaryValue& current_locale_catalog, |
+ const CatalogVector& locale_catalogs, |
std::string* error) { |
scoped_ptr<ExtensionMessageBundle> message_bundle( |
new ExtensionMessageBundle); |
- if (!message_bundle->Init(default_locale_catalog, |
- current_locale_catalog, |
- error)) |
+ if (!message_bundle->Init(locale_catalogs, error)) |
return NULL; |
return message_bundle.release(); |
} |
-bool ExtensionMessageBundle::Init(const DictionaryValue& default_locale_catalog, |
- const DictionaryValue& current_locale_catalog, |
+bool ExtensionMessageBundle::Init(const CatalogVector& locale_catalogs, |
std::string* error) { |
dictionary_.clear(); |
- // Create a single dictionary out of default and current_locale catalogs. |
- // If message is missing from current_locale catalog, we take one from default |
- // catalog. |
- DictionaryValue::key_iterator key_it = current_locale_catalog.begin_keys(); |
- for (; key_it != current_locale_catalog.end_keys(); ++key_it) { |
- std::string key(StringToLowerASCII(WideToUTF8(*key_it))); |
- if (!IsValidName(*key_it)) |
- return BadKeyMessage(key, error); |
- std::string value; |
- if (!GetMessageValue(*key_it, current_locale_catalog, &value, error)) |
- return false; |
- // Keys are not case-sensitive. |
- dictionary_[key] = value; |
+ CatalogVector::const_reverse_iterator it = locale_catalogs.rbegin(); |
+ for (; it != locale_catalogs.rend(); ++it) { |
+ DictionaryValue* catalog = (*it).get(); |
+ DictionaryValue::key_iterator key_it = catalog->begin_keys(); |
+ for (; key_it != catalog->end_keys(); ++key_it) { |
+ std::string key(StringToLowerASCII(WideToUTF8(*key_it))); |
+ if (!IsValidName(*key_it)) |
+ return BadKeyMessage(key, error); |
+ std::string value; |
+ if (!GetMessageValue(*key_it, *catalog, &value, error)) |
+ return false; |
+ // Keys are not case-sensitive. |
+ dictionary_[key] = value; |
+ } |
} |
- key_it = default_locale_catalog.begin_keys(); |
- for (; key_it != default_locale_catalog.end_keys(); ++key_it) { |
- std::string key(StringToLowerASCII(WideToUTF8(*key_it))); |
- if (!IsValidName(*key_it)) |
- return BadKeyMessage(key, error); |
- // Add only messages that are not provided by app_catalog. |
- if (dictionary_.find(key) != dictionary_.end()) |
- continue; |
- std::string value; |
- if (!GetMessageValue(*key_it, default_locale_catalog, &value, error)) |
- return false; |
- // Keys are not case-sensitive. |
- dictionary_[key] = value; |
- } |
- |
return true; |
} |