16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file. 46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/extensions/shared_user_script_master.h" 66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/extensions/extension_util.h" 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/common/extensions/manifest_handlers/content_scripts_handler.h" 106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "extensions/browser/extension_registry.h" 116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace extensions { 136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)SharedUserScriptMaster::SharedUserScriptMaster(Profile* profile) 156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) : loader_(profile, 166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string() /* owner_extension_id */, 176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true /* listen_for_extension_system_loaded */), 186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) profile_(profile), 196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) extension_registry_observer_(this) { 206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) extension_registry_observer_.Add(ExtensionRegistry::Get(profile_)); 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)SharedUserScriptMaster::~SharedUserScriptMaster() { 246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void SharedUserScriptMaster::OnExtensionLoaded( 276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) content::BrowserContext* browser_context, 286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const Extension* extension) { 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) loader_.AddScripts(GetScriptsMetadata(extension)); 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void SharedUserScriptMaster::OnExtensionUnloaded( 336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) content::BrowserContext* browser_context, 346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const Extension* extension, 356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) UnloadedExtensionInfo::Reason reason) { 366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) loader_.RemoveScripts(GetScriptsMetadata(extension)); 376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)const std::set<UserScript> SharedUserScriptMaster::GetScriptsMetadata( 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const Extension* extension) { 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool incognito_enabled = util::IsIncognitoEnabled(extension->id(), profile_); 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const UserScriptList& script_list = 436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ContentScriptsInfo::GetContentScripts(extension); 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::set<UserScript> script_set; 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) for (UserScriptList::const_iterator it = script_list.begin(); 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) it != script_list.end(); 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ++it) { 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) UserScript script = *it; 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) script.set_incognito_enabled(incognito_enabled); 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) script_set.insert(script); 516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return script_set; 546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} // namespace extensions 57