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#ifndef CHROME_BROWSER_EXTENSIONS_DECLARATIVE_USER_SCRIPT_MASTER_H_ 6#define CHROME_BROWSER_EXTENSIONS_DECLARATIVE_USER_SCRIPT_MASTER_H_ 7 8#include "base/scoped_observer.h" 9#include "chrome/browser/extensions/user_script_loader.h" 10#include "extensions/browser/extension_registry_observer.h" 11#include "extensions/common/extension.h" 12 13class Profile; 14 15namespace extensions { 16 17class ExtensionRegistry; 18class UserScript; 19 20// Manages declarative user scripts for a single extension. Owns a 21// UserScriptLoader to which file loading and shared memory management 22// operations are delegated, and provides an interface for adding, removing, 23// and clearing scripts. 24class DeclarativeUserScriptMaster : public ExtensionRegistryObserver { 25 public: 26 DeclarativeUserScriptMaster(Profile* profile, 27 const ExtensionId& extension_id); 28 virtual ~DeclarativeUserScriptMaster(); 29 30 // Adds script to shared memory region. This may not happen right away if a 31 // script load is in progress. 32 void AddScript(const UserScript& script); 33 34 // Removes script from shared memory region. This may not happen right away if 35 // a script load is in progress. 36 void RemoveScript(const UserScript& script); 37 38 // Removes all scripts from shared memory region. This may not happen right 39 // away if a script load is in progress. 40 void ClearScripts(); 41 42 const ExtensionId& extension_id() const { return extension_id_; } 43 44 private: 45 // ExtensionRegistryObserver implementation. 46 virtual void OnExtensionUnloaded( 47 content::BrowserContext* browser_context, 48 const Extension* extension, 49 UnloadedExtensionInfo::Reason reason) OVERRIDE; 50 51 // ID of extension that owns scripts that this component manages. 52 ExtensionId extension_id_; 53 54 // Script loader that handles loading contents of scripts into shared memory 55 // and notifying renderers of script updates. 56 UserScriptLoader loader_; 57 58 ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver> 59 extension_registry_observer_; 60 61 DISALLOW_COPY_AND_ASSIGN(DeclarativeUserScriptMaster); 62}; 63 64} // namespace extensions 65 66#endif // CHROME_BROWSER_EXTENSIONS_DECLARATIVE_USER_SCRIPT_MASTER_H_ 67