Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3604)

Unified Diff: chrome/browser/extensions/user_script_master.cc

Issue 7552028: Injected CSS localization fix (see bug no.) (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Updated. Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698