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_SHARED_USER_SCRIPT_MASTER_H_ 6#define CHROME_BROWSER_EXTENSIONS_SHARED_USER_SCRIPT_MASTER_H_ 7 8#include <set> 9 10#include "base/scoped_observer.h" 11#include "chrome/browser/extensions/user_script_loader.h" 12#include "extensions/browser/extension_registry_observer.h" 13#include "extensions/common/extension.h" 14#include "extensions/common/user_script.h" 15 16namespace content { 17class BrowserContext; 18} 19 20class Profile; 21 22namespace extensions { 23 24class ExtensionRegistry; 25 26// Manages statically-defined user scripts for all extensions. Owns a 27// UserScriptLoader to which file loading and shared memory management 28// operations are delegated. 29class SharedUserScriptMaster : public ExtensionRegistryObserver { 30 public: 31 explicit SharedUserScriptMaster(Profile* profile); 32 virtual ~SharedUserScriptMaster(); 33 34 // Provides access to loader state method: scripts_ready(). 35 bool scripts_ready() const { return loader_.scripts_ready(); } 36 37 private: 38 // ExtensionRegistryObserver implementation. 39 virtual void OnExtensionLoaded(content::BrowserContext* browser_context, 40 const Extension* extension) OVERRIDE; 41 virtual void OnExtensionUnloaded( 42 content::BrowserContext* browser_context, 43 const Extension* extension, 44 UnloadedExtensionInfo::Reason reason) OVERRIDE; 45 46 // Gets an extension's scripts' metadata; i.e., gets a list of UserScript 47 // objects that contains script info, but not the contents of the scripts. 48 const std::set<UserScript> GetScriptsMetadata(const Extension* extension); 49 50 // Script loader that handles loading contents of scripts into shared memory 51 // and notifying renderers of scripts in shared memory. 52 UserScriptLoader loader_; 53 54 // The profile for which the scripts managed here are installed. 55 Profile* profile_; 56 57 ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver> 58 extension_registry_observer_; 59 60 DISALLOW_COPY_AND_ASSIGN(SharedUserScriptMaster); 61}; 62 63} // namespace extensions 64 65#endif // CHROME_BROWSER_EXTENSIONS_SHARED_USER_SCRIPT_MASTER_H_ 66