1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/extensions/shared_user_script_master.h" 6 7 #include "chrome/browser/extensions/extension_util.h" 8 #include "chrome/browser/profiles/profile.h" 9 #include "chrome/common/extensions/manifest_handlers/content_scripts_handler.h" 10 #include "extensions/browser/extension_registry.h" 11 12 namespace extensions { 13 14 SharedUserScriptMaster::SharedUserScriptMaster(Profile* profile) 15 : loader_(profile, 16 std::string() /* owner_extension_id */, 17 true /* listen_for_extension_system_loaded */), 18 profile_(profile), 19 extension_registry_observer_(this) { 20 extension_registry_observer_.Add(ExtensionRegistry::Get(profile_)); 21 } 22 23 SharedUserScriptMaster::~SharedUserScriptMaster() { 24 } 25 26 void SharedUserScriptMaster::OnExtensionLoaded( 27 content::BrowserContext* browser_context, 28 const Extension* extension) { 29 loader_.AddScripts(GetScriptsMetadata(extension)); 30 } 31 32 void SharedUserScriptMaster::OnExtensionUnloaded( 33 content::BrowserContext* browser_context, 34 const Extension* extension, 35 UnloadedExtensionInfo::Reason reason) { 36 loader_.RemoveScripts(GetScriptsMetadata(extension)); 37 } 38 39 const std::set<UserScript> SharedUserScriptMaster::GetScriptsMetadata( 40 const Extension* extension) { 41 bool incognito_enabled = util::IsIncognitoEnabled(extension->id(), profile_); 42 const UserScriptList& script_list = 43 ContentScriptsInfo::GetContentScripts(extension); 44 std::set<UserScript> script_set; 45 for (UserScriptList::const_iterator it = script_list.begin(); 46 it != script_list.end(); 47 ++it) { 48 UserScript script = *it; 49 script.set_incognito_enabled(incognito_enabled); 50 script_set.insert(script); 51 } 52 53 return script_set; 54 } 55 56 } // namespace extensions 57