| Index: extensions/common/file_util.cc
|
| diff --git a/extensions/common/file_util.cc b/extensions/common/file_util.cc
|
| index 96982d064d9f9f43815f44b00f34fc298902839a..2e986c43088c91f6b1c5b440777008b6311cc824 100644
|
| --- a/extensions/common/file_util.cc
|
| +++ b/extensions/common/file_util.cc
|
| @@ -38,7 +38,6 @@
|
| #include "extensions/common/manifest_handler.h"
|
| #include "extensions/common/manifest_handlers/default_locale_handler.h"
|
| #include "extensions/common/manifest_handlers/icons_handler.h"
|
| -#include "extensions/common/manifest_handlers/shared_module_info.h"
|
| #include "grit/extensions_strings.h"
|
| #include "net/base/escape.h"
|
| #include "net/base/filename_util.h"
|
| @@ -514,77 +513,40 @@ MessageBundle::SubstitutionMap* LoadMessageBundleSubstitutionMap(
|
| const base::FilePath& extension_path,
|
| const std::string& extension_id,
|
| const std::string& default_locale) {
|
| + return LoadMessageBundleSubstitutionMapFromPaths(
|
| + {extension_path}, extension_id, default_locale);
|
| +}
|
| +
|
| +MessageBundle::SubstitutionMap* LoadNonLocalizedMessageBundleSubstitutionMap(
|
| + const std::string& extension_id) {
|
| MessageBundle::SubstitutionMap* return_value =
|
| new MessageBundle::SubstitutionMap();
|
| - if (!default_locale.empty()) {
|
| - // Touch disk only if extension is localized.
|
| - std::string error;
|
| - std::unique_ptr<MessageBundle> bundle(
|
| - LoadMessageBundle(extension_path, default_locale, &error));
|
|
|
| - if (bundle.get())
|
| - *return_value = *bundle->dictionary();
|
| - }
|
| -
|
| - // Add @@extension_id reserved message here, so it's available to
|
| - // non-localized extensions too.
|
| + // Add @@extension_id reserved message here.
|
| return_value->insert(
|
| std::make_pair(MessageBundle::kExtensionIdKey, extension_id));
|
|
|
| return return_value;
|
| }
|
|
|
| -MessageBundle::SubstitutionMap* LoadMessageBundleSubstitutionMapWithImports(
|
| +MessageBundle::SubstitutionMap* LoadMessageBundleSubstitutionMapFromPaths(
|
| + const std::vector<base::FilePath>& paths,
|
| const std::string& extension_id,
|
| - const ExtensionSet& extension_set) {
|
| - const Extension* extension = extension_set.GetByID(extension_id);
|
| + const std::string& default_locale) {
|
| MessageBundle::SubstitutionMap* return_value =
|
| - new MessageBundle::SubstitutionMap();
|
| -
|
| - // Add @@extension_id reserved message here, so it's available to
|
| - // non-localized extensions too.
|
| - return_value->insert(
|
| - std::make_pair(MessageBundle::kExtensionIdKey, extension_id));
|
| -
|
| - base::FilePath extension_path;
|
| - std::string default_locale;
|
| - if (!extension) {
|
| - NOTREACHED() << "Missing extension " << extension_id;
|
| - return return_value;
|
| - }
|
| + LoadNonLocalizedMessageBundleSubstitutionMap(extension_id);
|
|
|
| // Touch disk only if extension is localized.
|
| - default_locale = LocaleInfo::GetDefaultLocale(extension);
|
| - if (default_locale.empty()) {
|
| + if (default_locale.empty())
|
| return return_value;
|
| - }
|
|
|
| std::string error;
|
| - std::unique_ptr<MessageBundle> bundle(
|
| - LoadMessageBundle(extension->path(), default_locale, &error));
|
| -
|
| - if (bundle.get()) {
|
| - for (auto iter : *bundle->dictionary()) {
|
| - return_value->insert(std::make_pair(iter.first, iter.second));
|
| - }
|
| - }
|
| -
|
| - auto imports = extensions::SharedModuleInfo::GetImports(extension);
|
| - // Iterate through the imports in reverse. This will allow later imported
|
| - // modules to override earlier imported modules, as the list order is
|
| - // maintained from the definition in manifest.json of the imports.
|
| - for (auto it = imports.rbegin(); it != imports.rend(); ++it) {
|
| - const extensions::Extension* imported_extension =
|
| - extension_set.GetByID(it->extension_id);
|
| - if (!imported_extension) {
|
| - NOTREACHED() << "Missing shared module " << it->extension_id;
|
| - continue;
|
| - }
|
| - std::unique_ptr<MessageBundle> imported_bundle(
|
| - LoadMessageBundle(imported_extension->path(), default_locale, &error));
|
| + for (const base::FilePath& path : paths) {
|
| + std::unique_ptr<MessageBundle> bundle(
|
| + LoadMessageBundle(path, default_locale, &error));
|
|
|
| - if (imported_bundle.get()) {
|
| - for (auto iter : *imported_bundle->dictionary()) {
|
| + if (bundle) {
|
| + for (const auto& iter : *bundle->dictionary()) {
|
| // |insert| only adds new entries, and does not replace entries in
|
| // the main extension or previously processed imports.
|
| return_value->insert(std::make_pair(iter.first, iter.second));
|
|
|