Chromium Code Reviews| Index: chrome/browser/extensions/declarative_user_script_manager.cc |
| diff --git a/chrome/browser/extensions/declarative_user_script_manager.cc b/chrome/browser/extensions/declarative_user_script_manager.cc |
| index e740b5b4f4e25c94889afcea7c8d1f92cecc1eb6..f1d0c2c4766c1189c408feca7a33b56b8e7cd671 100644 |
| --- a/chrome/browser/extensions/declarative_user_script_manager.cc |
| +++ b/chrome/browser/extensions/declarative_user_script_manager.cc |
| @@ -5,11 +5,14 @@ |
| #include "chrome/browser/extensions/declarative_user_script_manager.h" |
| #include "chrome/browser/extensions/declarative_user_script_master.h" |
| +#include "chrome/browser/profiles/profile.h" |
| +#include "extensions/browser/extension_registry.h" |
| namespace extensions { |
| DeclarativeUserScriptManager::DeclarativeUserScriptManager(Profile* profile) |
| - : profile_(profile) { |
| + : profile_(profile), extension_registry_observer_(this) { |
| + extension_registry_observer_.Add(ExtensionRegistry::Get(profile)); |
| } |
| DeclarativeUserScriptManager::~DeclarativeUserScriptManager() { |
| @@ -17,16 +20,34 @@ DeclarativeUserScriptManager::~DeclarativeUserScriptManager() { |
| DeclarativeUserScriptMaster* |
| DeclarativeUserScriptManager::GetDeclarativeUserScriptMasterByID( |
| - const std::string& id) { |
| - UserScriptMasterMap::iterator it = declarative_user_script_masters_.find(id); |
| + const ConsumerID& consumer_id) { |
|
Devlin
2015/01/21 23:25:20
Thinking about this more, this means that every ti
Xi Han
2015/01/22 17:19:36
This is a good point, and I realize that the curre
|
| + UserScriptMasterMap::iterator it = |
| + declarative_user_script_masters_.find(consumer_id); |
| if (it != declarative_user_script_masters_.end()) |
| return it->second.get(); |
| + return CreateDeclarativeUserScriptMaster(consumer_id); |
| +} |
| + |
| +DeclarativeUserScriptMaster* |
| +DeclarativeUserScriptManager::CreateDeclarativeUserScriptMaster( |
| + const ConsumerID& consumer_id) { |
| linked_ptr<DeclarativeUserScriptMaster> master( |
| - new DeclarativeUserScriptMaster(profile_, id)); |
| - declarative_user_script_masters_[id] = master; |
| + new DeclarativeUserScriptMaster(profile_, consumer_id)); |
| + declarative_user_script_masters_[consumer_id] = master; |
| return master.get(); |
| } |
| -} // extensions |
| +void DeclarativeUserScriptManager::OnExtensionUnloaded( |
| + content::BrowserContext* browser_context, |
| + const Extension* extension, |
| + UnloadedExtensionInfo::Reason reason) { |
| + for (const auto& val : declarative_user_script_masters_) { |
| + DeclarativeUserScriptMaster* master = val.second.get(); |
| + if (master->consumer_id().host_id() == extension->id()) |
| + master->ClearScripts(); |
| + } |
| +} |
| + |
| +} // namespace extensions |