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

Unified Diff: extensions/renderer/dispatcher.cc

Issue 321993003: Refactor renderer-side script injection (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Missing files Created 6 years, 6 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/dispatcher.cc
diff --git a/extensions/renderer/dispatcher.cc b/extensions/renderer/dispatcher.cc
index 36134d8788062f22c8bd44f1fccb51943bb7f76a..95eb76914881343d5c49981744dc81b213919146 100644
--- a/extensions/renderer/dispatcher.cc
+++ b/extensions/renderer/dispatcher.cc
@@ -4,6 +4,7 @@
#include "extensions/renderer/dispatcher.h"
+#include "base/bind.h"
#include "base/callback.h"
#include "base/command_line.h"
#include "base/debug/alias.h"
@@ -66,11 +67,12 @@
#include "extensions/renderer/safe_builtins.h"
#include "extensions/renderer/script_context.h"
#include "extensions/renderer/script_context_set.h"
+#include "extensions/renderer/script_injection.h"
+#include "extensions/renderer/script_injection_manager.h"
#include "extensions/renderer/send_request_natives.h"
#include "extensions/renderer/set_icon_natives.h"
#include "extensions/renderer/test_features_native_handler.h"
#include "extensions/renderer/user_gestures_native_handler.h"
-#include "extensions/renderer/user_script_slave.h"
#include "extensions/renderer/utils_native_handler.h"
#include "extensions/renderer/v8_context_native_handler.h"
#include "grit/extensions_renderer_resources.h"
@@ -177,7 +179,8 @@ Dispatcher::Dispatcher(DispatcherDelegate* delegate)
content_watcher_(new ContentWatcher()),
source_map_(&ResourceBundle::GetSharedInstance()),
v8_schema_registry_(new V8SchemaRegistry),
- is_webkit_initialized_(false) {
+ is_webkit_initialized_(false),
+ user_script_injection_list_observer_(this) {
const CommandLine& command_line = *(CommandLine::ForCurrentProcess());
is_extension_process_ =
command_line.HasSwitch(extensions::switches::kExtensionProcess) ||
@@ -190,7 +193,9 @@ Dispatcher::Dispatcher(DispatcherDelegate* delegate)
RenderThread::Get()->RegisterExtension(SafeBuiltins::CreateV8Extension());
- user_script_slave_.reset(new UserScriptSlave(&extensions_));
+ script_injection_manager_.reset(new ScriptInjectionManager(&extensions_));
+ user_script_injection_list_observer_.Add(
+ script_injection_manager_->user_script_injection_list());
request_sender_.reset(new RequestSender(this));
PopulateSourceMap();
}
@@ -198,6 +203,10 @@ Dispatcher::Dispatcher(DispatcherDelegate* delegate)
Dispatcher::~Dispatcher() {
}
+void Dispatcher::OnRenderViewCreated(content::RenderView* render_view) {
+ script_injection_manager_->OnRenderViewCreated(render_view);
+}
+
bool Dispatcher::IsExtensionActive(const std::string& extension_id) const {
bool is_active =
active_extension_ids_.find(extension_id) != active_extension_ids_.end();
@@ -209,7 +218,7 @@ bool Dispatcher::IsExtensionActive(const std::string& extension_id) const {
std::string Dispatcher::GetExtensionID(const WebFrame* frame, int world_id) {
if (world_id != 0) {
// Isolated worlds (content script).
- return user_script_slave_->GetExtensionIdForIsolatedWorld(world_id);
+ return ScriptInjection::GetExtensionIdForIsolatedWorld(world_id);
}
// TODO(kalman): Delete this check.
@@ -466,7 +475,6 @@ bool Dispatcher::OnControlMessageReceived(const IPC::Message& message) {
IPC_MESSAGE_HANDLER(ExtensionMsg_UpdatePermissions, OnUpdatePermissions)
IPC_MESSAGE_HANDLER(ExtensionMsg_UpdateTabSpecificPermissions,
OnUpdateTabSpecificPermissions)
- IPC_MESSAGE_HANDLER(ExtensionMsg_UpdateUserScripts, OnUpdateUserScripts)
IPC_MESSAGE_HANDLER(ExtensionMsg_UsingWebRequestAPI, OnUsingWebRequestAPI)
IPC_MESSAGE_FORWARD(ExtensionMsg_WatchPages,
content_watcher_.get(),
@@ -694,7 +702,7 @@ void Dispatcher::OnUnloaded(const std::string& id) {
// If the extension is later reloaded with a different set of permissions,
// we'd like it to get a new isolated world ID, so that it can pick up the
// changed origin whitelist.
- user_script_slave_->RemoveIsolatedWorld(id);
+ ScriptInjection::RemoveIsolatedWorld(id);
// Invalidate all of the contexts that were removed.
// TODO(kalman): add an invalidation observer interface to ScriptContext.
@@ -766,36 +774,22 @@ void Dispatcher::OnUpdateTabSpecificPermissions(
this, page_id, tab_id, extension_id, origin_set);
}
-void Dispatcher::OnUpdateUserScripts(
- base::SharedMemoryHandle scripts,
- const std::set<std::string>& extension_ids) {
- if (!base::SharedMemory::IsHandleValid(scripts)) {
- NOTREACHED() << "Bad scripts handle";
- return;
- }
-
- for (std::set<std::string>::const_iterator iter = extension_ids.begin();
- iter != extension_ids.end();
- ++iter) {
- if (!Extension::IdIsValid(*iter)) {
- NOTREACHED() << "Invalid extension id: " << *iter;
- return;
- }
- }
-
- user_script_slave_->UpdateScripts(scripts, extension_ids);
- UpdateActiveExtensions();
-}
-
void Dispatcher::OnUsingWebRequestAPI(bool adblock,
bool adblock_plus,
bool other_webrequest) {
delegate_->HandleWebRequestAPIUsage(adblock, adblock_plus, other_webrequest);
}
+void Dispatcher::OnUserScriptsUpdated(
+ const std::set<std::string>& changed_extensions,
+ const std::vector<UserScript*>& scripts) {
+ UpdateActiveExtensions();
+}
+
void Dispatcher::UpdateActiveExtensions() {
std::set<std::string> active_extensions = active_extension_ids_;
- user_script_slave_->GetActiveExtensions(&active_extensions);
+ script_injection_manager_->user_script_injection_list()
+ ->GetActiveExtensionIds(&active_extensions);
delegate_->OnActiveExtensionsUpdated(active_extensions);
}

Powered by Google App Engine
This is Rietveld 408576698