Index: extensions/renderer/user_script_set_manager.cc |
diff --git a/extensions/renderer/user_script_set_manager.cc b/extensions/renderer/user_script_set_manager.cc |
index 6f4679211b96f2f43f81cf2a6c306da8046f6278..11a0d98d8722da7b16c6cdfa5fb781417dcb60e7 100644 |
--- a/extensions/renderer/user_script_set_manager.cc |
+++ b/extensions/renderer/user_script_set_manager.cc |
@@ -31,6 +31,27 @@ void UserScriptSetManager::RemoveObserver(Observer* observer) { |
observers_.RemoveObserver(observer); |
} |
+scoped_ptr<ScriptInjection> |
+UserScriptSetManager::GetInjectionForDeclarativeScript( |
+ int64 script_id, |
+ blink::WebFrame* web_frame, |
+ int tab_id, |
+ const GURL& url, |
+ const Extension* extension) { |
+ UserScriptSet* user_script_set = |
+ GetProgrammaticScriptsByExtension(extension->id()); |
+ if (!user_script_set) |
+ return scoped_ptr<ScriptInjection>(); |
+ |
+ return user_script_set->GetDeclarativeScriptInjection( |
+ script_id, |
+ web_frame, |
+ tab_id, |
+ UserScript::BROWSER_DRIVEN, |
+ url, |
+ extension); |
+} |
+ |
bool UserScriptSetManager::OnControlMessageReceived( |
const IPC::Message& message) { |
bool handled = true; |
@@ -41,13 +62,6 @@ bool UserScriptSetManager::OnControlMessageReceived( |
return handled; |
} |
-const UserScriptSet* UserScriptSetManager::GetProgrammaticScriptsByExtension( |
- const ExtensionId& extension_id) { |
- UserScriptSetMap::const_iterator it = |
- programmatic_scripts_.find(extension_id); |
- return it != programmatic_scripts_.end() ? it->second.get() : NULL; |
-} |
- |
void UserScriptSetManager::GetAllInjections( |
ScopedVector<ScriptInjection>* injections, |
blink::WebFrame* web_frame, |
@@ -72,6 +86,13 @@ void UserScriptSetManager::GetAllActiveExtensionIds( |
} |
} |
+UserScriptSet* UserScriptSetManager::GetProgrammaticScriptsByExtension( |
+ const ExtensionId& extension_id) { |
+ UserScriptSetMap::const_iterator it = |
+ programmatic_scripts_.find(extension_id); |
+ return it != programmatic_scripts_.end() ? it->second.get() : NULL; |
+} |
+ |
void UserScriptSetManager::OnUpdateUserScripts( |
base::SharedMemoryHandle shared_memory, |
const ExtensionId& extension_id, |
@@ -92,10 +113,10 @@ void UserScriptSetManager::OnUpdateUserScripts( |
UserScriptSet* scripts = NULL; |
if (!extension_id.empty()) { |
- // The expectation when there is an extensions that "owns" this shared |
- // memory region is that it will list itself as the only changed extension. |
- CHECK(changed_extensions.size() == 1 && |
- changed_extensions.find(extension_id) != changed_extensions.end()); |
+ // The expectation when there is an extension that "owns" this shared |
+ // memory region is that the |changed_extensions| is either the empty list |
+ // or just the owner. |
+ CHECK(changed_extensions.size() <= 1); |
if (programmatic_scripts_.find(extension_id) == |
programmatic_scripts_.end()) { |
scripts = new UserScriptSet(extensions_); |
@@ -114,7 +135,14 @@ void UserScriptSetManager::OnUpdateUserScripts( |
const std::set<std::string>* effective_extensions = &changed_extensions; |
std::set<std::string> all_extensions; |
if (changed_extensions.empty()) { |
- all_extensions = extensions_->GetIDs(); |
+ // The meaning of "all extensions" varies, depending on whether some |
+ // extension "owns" this shared memory region. |
+ // No owner => all known extensions. |
+ // Owner => just the owner extension. |
+ if (extension_id.empty()) |
+ all_extensions = extensions_->GetIDs(); |
+ else |
+ all_extensions.insert(extension_id); |
effective_extensions = &all_extensions; |
} |