Home | History | Annotate | Download | only in extensions
      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