| Index: chrome/browser/extensions/user_script_master.cc
|
| diff --git a/chrome/browser/extensions/user_script_master.cc b/chrome/browser/extensions/user_script_master.cc
|
| index 8267b78eef58d5f5b7bc7fe5d4af5cebcfec180a..7d2fc1452e2044adcefa1087e977a7302575c162 100644
|
| --- a/chrome/browser/extensions/user_script_master.cc
|
| +++ b/chrome/browser/extensions/user_script_master.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "chrome/browser/extensions/user_script_master.h"
|
|
|
| +#include <map>
|
| #include <string>
|
| #include <vector>
|
|
|
| @@ -18,8 +19,10 @@
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/common/chrome_notification_types.h"
|
| #include "chrome/common/extensions/extension.h"
|
| -#include "chrome/common/extensions/extension_messages.h"
|
| +#include "chrome/common/extensions/extension_file_util.h"
|
| +#include "chrome/common/extensions/extension_message_bundle.h"
|
| #include "chrome/common/extensions/extension_resource.h"
|
| +#include "chrome/common/extensions/extension_set.h"
|
| #include "content/browser/renderer_host/render_process_host.h"
|
| #include "content/common/notification_service.h"
|
|
|
| @@ -44,6 +47,12 @@ static bool GetDeclarationValue(const base::StringPiece& line,
|
| UserScriptMaster::ScriptReloader::ScriptReloader(UserScriptMaster* master)
|
| : master_(master) {
|
| CHECK(BrowserThread::GetCurrentThreadIdentifier(&master_thread_id_));
|
| +
|
| + // Gather extensions information needed for localization.
|
| + if (master && master->profile_ && master->profile_->GetExtensionInfoMap()) {
|
| + const ExtensionInfoMap* info_map = master->profile_->GetExtensionInfoMap();
|
| + info_map->extensions().GetExtensionsPathAndDefaultLocale(extensions_info_);
|
| + }
|
| }
|
|
|
| // static
|
| @@ -160,7 +169,8 @@ void UserScriptMaster::ScriptReloader::NotifyMaster(
|
| Release();
|
| }
|
|
|
| -static bool LoadScriptContent(UserScript::File* script_file) {
|
| +static bool LoadScriptContent(UserScript::File* script_file,
|
| + const SubstitutionMap* localization_messages) {
|
| std::string content;
|
| const FilePath& path = ExtensionResource::GetFilePath(
|
| script_file->extension_root(), script_file->relative_path());
|
| @@ -169,6 +179,13 @@ static bool LoadScriptContent(UserScript::File* script_file) {
|
| return false;
|
| }
|
|
|
| + // Localize the content.
|
| + if (localization_messages) {
|
| + std::string error;
|
| + ExtensionMessageBundle::ReplaceMessagesWithExternalDictionary(
|
| + *localization_messages, &content, &error);
|
| + }
|
| +
|
| // Remove BOM from the content.
|
| std::string::size_type index = content.find(kUtf8ByteOrderMark);
|
| if (index == 0) {
|
| @@ -180,24 +197,37 @@ static bool LoadScriptContent(UserScript::File* script_file) {
|
| return true;
|
| }
|
|
|
| -// static
|
| void UserScriptMaster::ScriptReloader::LoadUserScripts(
|
| UserScriptList* user_scripts) {
|
| for (size_t i = 0; i < user_scripts->size(); ++i) {
|
| UserScript& script = user_scripts->at(i);
|
| + scoped_ptr<SubstitutionMap> localization_messages(
|
| + GetLocalizationMessages(script.extension_id()));
|
| for (size_t k = 0; k < script.js_scripts().size(); ++k) {
|
| UserScript::File& script_file = script.js_scripts()[k];
|
| if (script_file.GetContent().empty())
|
| - LoadScriptContent(&script_file);
|
| + LoadScriptContent(&script_file, NULL);
|
| }
|
| for (size_t k = 0; k < script.css_scripts().size(); ++k) {
|
| UserScript::File& script_file = script.css_scripts()[k];
|
| if (script_file.GetContent().empty())
|
| - LoadScriptContent(&script_file);
|
| + LoadScriptContent(&script_file, localization_messages.get());
|
| }
|
| }
|
| }
|
|
|
| +SubstitutionMap* UserScriptMaster::ScriptReloader::GetLocalizationMessages(
|
| + std::string extension_id) {
|
| + if (extensions_info_.find(extension_id) == extensions_info_.end()) {
|
| + return NULL;
|
| + }
|
| +
|
| + return extension_file_util::LoadExtensionMessageBundleSubstitutionMap(
|
| + extensions_info_[extension_id].first,
|
| + extension_id,
|
| + extensions_info_[extension_id].second);
|
| +}
|
| +
|
| // Pickle user scripts and return pointer to the shared memory.
|
| static base::SharedMemory* Serialize(const UserScriptList& scripts) {
|
| Pickle pickle;
|
|
|