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

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

Issue 266963003: Beginning of support for extension content verification (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merged latest trunk Created 6 years, 7 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
« no previous file with comments | « chrome/browser/extensions/user_script_master.h ('k') | chrome/chrome_tests.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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) {
« no previous file with comments | « chrome/browser/extensions/user_script_master.h ('k') | chrome/chrome_tests.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698