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

Unified Diff: extensions/renderer/script_injection_manager.cc

Issue 885493007: Refactoring: de-couple Extensions from "script injection System" [render side] : 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove Host::IsEmpty() and move ExtensionConsumer to extensions/renderer. Created 5 years, 10 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: extensions/renderer/script_injection_manager.cc
diff --git a/extensions/renderer/script_injection_manager.cc b/extensions/renderer/script_injection_manager.cc
index d017a6742eb906abebfe9c9e0835994418c2de3d..f3daf3aed1be8b82507407229143ac6d3cf527ce 100644
--- a/extensions/renderer/script_injection_manager.cc
+++ b/extensions/renderer/script_injection_manager.cc
@@ -14,6 +14,7 @@
#include "extensions/common/extension.h"
#include "extensions/common/extension_messages.h"
#include "extensions/common/extension_set.h"
+#include "extensions/renderer/extension_consumer.h"
#include "extensions/renderer/extension_helper.h"
#include "extensions/renderer/programmatic_script_injector.h"
#include "extensions/renderer/script_injection.h"
@@ -52,6 +53,15 @@ UserScript::RunLocation NextRunLocation(UserScript::RunLocation run_location) {
return UserScript::RUN_LOCATION_LAST;
}
+scoped_ptr<ExtensionConsumer> GetExtensionConsumer(
+ const std::string& extension_id, const ExtensionSet* extensions) {
+ const Extension* extension = extensions->GetByID(extension_id);
+ if (!extension)
+ return scoped_ptr<ExtensionConsumer>();
+ return scoped_ptr<ExtensionConsumer>(new ExtensionConsumer(
+ extension, HostID(HostID::EXTENSIONS, extension_id)));
+}
+
} // namespace
class ScriptInjectionManager::RVOHelper : public content::RenderViewObserver {
@@ -247,7 +257,7 @@ void ScriptInjectionManager::OnUserScriptsUpdated(
for (ScopedVector<ScriptInjection>::iterator iter =
pending_injections_.begin();
iter != pending_injections_.end();) {
- if (changed_extensions.count((*iter)->extension_id()) > 0)
+ if (changed_extensions.count((*iter)->host_id().id()) > 0)
iter = pending_injections_.erase(iter);
else
++iter;
@@ -377,12 +387,15 @@ void ScriptInjectionManager::InjectScripts(
if (!IsFrameValid(frame))
break;
+ const std::string extension_id = (*iter)->host_id().id();
+ scoped_ptr<ExtensionConsumer> extension_consumer = GetExtensionConsumer(
Devlin 2015/02/09 17:40:25 Not really a big deal, since constructing an Exten
Xi Han 2015/02/09 23:28:11 Add a TODO here.
+ extension_id, extensions_);
// Try to inject the script if the extension is not "dirty" (invalidated by
// an update). If the injection does not finish (i.e., it is waiting for
// permission), add it to the list of pending injections.
- if (invalidated_while_injecting_.count((*iter)->extension_id()) == 0 &&
+ if (invalidated_while_injecting_.count(extension_id) == 0 &&
!(*iter)->TryToInject(run_location,
- extensions_->GetByID((*iter)->extension_id()),
+ extension_consumer.get(),
&scripts_run_info)) {
pending_injections_.insert(pending_injections_.begin(), *iter);
iter = frame_injections.weak_erase(iter);
@@ -419,15 +432,20 @@ void ScriptInjectionManager::HandleExecuteCode(
scoped_ptr<ScriptInjector>(
new ProgrammaticScriptInjector(params, main_frame)),
main_frame,
- params.extension_id,
+ HostID(HostID::EXTENSIONS, params.extension_id),
Devlin 2015/02/09 17:40:25 Hmm... should the type be HostID::Extensions if it
Xi Han 2015/02/09 23:28:11 The HostID::Extensions is a host type, WEBVIEW vs
+ params.is_web_view ? params.instance_id : Host::kDefaultInstanceId,
Devlin 2015/02/09 17:40:25 didn't we ensure on the browser side that params.i
Xi Han 2015/02/09 23:28:11 Well, in browser side, if it is not <webview>, we
static_cast<UserScript::RunLocation>(params.run_at),
ExtensionHelper::Get(render_view)->tab_id()));
ScriptsRunInfo scripts_run_info;
FrameStatusMap::const_iterator iter = frame_statuses_.find(main_frame);
+
+ scoped_ptr<ExtensionConsumer> extension_consumer = GetExtensionConsumer(
+ injection->host_id().id(), extensions_);
+
if (!injection->TryToInject(
iter == frame_statuses_.end() ? UserScript::UNDEFINED : iter->second,
- extensions_->GetByID(injection->extension_id()),
+ extension_consumer.get(),
&scripts_run_info)) {
pending_injections_.push_back(injection.release());
}
@@ -439,7 +457,10 @@ void ScriptInjectionManager::HandleExecuteDeclarativeScript(
const ExtensionId& extension_id,
int script_id,
const GURL& url) {
+ scoped_ptr<ExtensionConsumer> extension_consumer = GetExtensionConsumer(
+ extension_id, extensions_);
const Extension* extension = extensions_->GetByID(extension_id);
+
// TODO(dcheng): This function signature should really be a WebLocalFrame,
// rather than trying to coerce it here.
scoped_ptr<ScriptInjection> injection =
@@ -453,7 +474,7 @@ void ScriptInjectionManager::HandleExecuteDeclarativeScript(
ScriptsRunInfo scripts_run_info;
// TODO(markdittmer): Use return value of TryToInject for error handling.
injection->TryToInject(UserScript::BROWSER_DRIVEN,
- extension,
+ extension_consumer.get(),
&scripts_run_info);
scripts_run_info.LogRun(web_frame, UserScript::BROWSER_DRIVEN);
}
@@ -478,8 +499,9 @@ void ScriptInjectionManager::HandlePermitScriptInjection(int64 request_id) {
pending_injections_.weak_erase(iter);
ScriptsRunInfo scripts_run_info;
- if (injection->OnPermissionGranted(extensions_->GetByID(
- injection->extension_id()),
+ scoped_ptr<ExtensionConsumer> extension_consumer = GetExtensionConsumer(
+ injection->host_id().id(), extensions_);
+ if (injection->OnPermissionGranted(extension_consumer.get(),
&scripts_run_info)) {
scripts_run_info.LogRun(injection->web_frame(), UserScript::RUN_DEFERRED);
}

Powered by Google App Engine
This is Rietveld 408576698