| 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 8a56f45d9156dcd2d7f7d83b15305ccb779ba13d..ccf7f1918a2920eedfd0dccc6ebc8bae91419f72 100644
|
| --- a/chrome/browser/extensions/user_script_master.cc
|
| +++ b/chrome/browser/extensions/user_script_master.cc
|
| @@ -19,7 +19,9 @@
|
| #include "chrome/common/extensions/manifest_handlers/content_scripts_handler.h"
|
| #include "content/public/browser/notification_service.h"
|
| #include "content/public/browser/render_process_host.h"
|
| +#include "extensions/browser/content_verifier.h"
|
| #include "extensions/browser/extension_registry.h"
|
| +#include "extensions/browser/extension_system.h"
|
| #include "extensions/common/file_util.h"
|
| #include "extensions/common/message_bundle.h"
|
| #include "ui/base/resource/resource_bundle.h"
|
| @@ -148,12 +150,13 @@ bool UserScriptMaster::ScriptReloader::ParseMetadataHeader(
|
|
|
| void UserScriptMaster::ScriptReloader::StartLoad(
|
| const UserScriptList& user_scripts,
|
| - const ExtensionsInfo& extensions_info_) {
|
| + const ExtensionsInfo& extensions_info) {
|
| // Add a reference to ourselves to keep ourselves alive while we're running.
|
| // Balanced by NotifyMaster().
|
| AddRef();
|
|
|
| - this->extensions_info_ = extensions_info_;
|
| + verifier_ = master_->content_verifier();
|
| + this->extensions_info_ = extensions_info;
|
| BrowserThread::PostTask(
|
| BrowserThread::FILE, FROM_HERE,
|
| base::Bind(
|
| @@ -175,8 +178,24 @@ void UserScriptMaster::ScriptReloader::NotifyMaster(
|
| Release();
|
| }
|
|
|
| -static bool LoadScriptContent(UserScript::File* script_file,
|
| - const SubstitutionMap* localization_messages) {
|
| +static void VerifyContent(ContentVerifier* verifier,
|
| + const std::string& extension_id,
|
| + const base::FilePath& extension_root,
|
| + const base::FilePath& relative_path,
|
| + const std::string& content) {
|
| + scoped_refptr<ContentVerifyJob> job(
|
| + verifier->CreateJobFor(extension_id, extension_root, relative_path));
|
| + if (job.get()) {
|
| + job->Start();
|
| + job->BytesRead(content.size(), content.data());
|
| + job->DoneReading();
|
| + }
|
| +}
|
| +
|
| +static bool LoadScriptContent(const std::string& extension_id,
|
| + UserScript::File* script_file,
|
| + const SubstitutionMap* localization_messages,
|
| + ContentVerifier* verifier) {
|
| std::string content;
|
| const base::FilePath& path = ExtensionResource::GetFilePath(
|
| script_file->extension_root(), script_file->relative_path(),
|
| @@ -199,6 +218,13 @@ static bool LoadScriptContent(UserScript::File* script_file,
|
| LOG(WARNING) << "Failed to load user script file: " << path.value();
|
| return false;
|
| }
|
| + if (verifier) {
|
| + VerifyContent(verifier,
|
| + extension_id,
|
| + script_file->extension_root(),
|
| + script_file->relative_path(),
|
| + content);
|
| + }
|
| }
|
|
|
| // Localize the content.
|
| @@ -231,12 +257,16 @@ void UserScriptMaster::ScriptReloader::LoadUserScripts(
|
| 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, NULL);
|
| + LoadScriptContent(
|
| + script.extension_id(), &script_file, NULL, verifier_.get());
|
| }
|
| 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, localization_messages.get());
|
| + LoadScriptContent(script.extension_id(),
|
| + &script_file,
|
| + localization_messages.get(),
|
| + verifier_.get());
|
| }
|
| }
|
| }
|
| @@ -370,6 +400,11 @@ void UserScriptMaster::NewScriptsAvailable(base::SharedMemory* handle) {
|
| }
|
| }
|
|
|
| +ContentVerifier* UserScriptMaster::content_verifier() {
|
| + ExtensionSystem* system = ExtensionSystem::Get(profile_);
|
| + return system->content_verifier();
|
| +}
|
| +
|
| void UserScriptMaster::OnExtensionLoaded(
|
| content::BrowserContext* browser_context,
|
| const Extension* extension) {
|
|
|