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)#ifndef CHROME_BROWSER_EXTENSIONS_SHARED_USER_SCRIPT_MASTER_H_ 66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_SHARED_USER_SCRIPT_MASTER_H_ 76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include <set> 96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/scoped_observer.h" 116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/extensions/user_script_loader.h" 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "extensions/browser/extension_registry_observer.h" 136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "extensions/common/extension.h" 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "extensions/common/user_script.h" 156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace content { 176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class BrowserContext; 186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class Profile; 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace extensions { 236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class ExtensionRegistry; 256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Manages statically-defined user scripts for all extensions. Owns a 276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// UserScriptLoader to which file loading and shared memory management 286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// operations are delegated. 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class SharedUserScriptMaster : public ExtensionRegistryObserver { 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public: 316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) explicit SharedUserScriptMaster(Profile* profile); 326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual ~SharedUserScriptMaster(); 336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Provides access to loader state method: scripts_ready(). 356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool scripts_ready() const { return loader_.scripts_ready(); } 366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private: 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // ExtensionRegistryObserver implementation. 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void OnExtensionLoaded(content::BrowserContext* browser_context, 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const Extension* extension) OVERRIDE; 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void OnExtensionUnloaded( 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) content::BrowserContext* browser_context, 436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const Extension* extension, 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) UnloadedExtensionInfo::Reason reason) OVERRIDE; 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Gets an extension's scripts' metadata; i.e., gets a list of UserScript 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // objects that contains script info, but not the contents of the scripts. 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const std::set<UserScript> GetScriptsMetadata(const Extension* extension); 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Script loader that handles loading contents of scripts into shared memory 516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // and notifying renderers of scripts in shared memory. 526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) UserScriptLoader loader_; 536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // The profile for which the scripts managed here are installed. 556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Profile* profile_; 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver> 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) extension_registry_observer_; 596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SharedUserScriptMaster); 616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}; 626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} // namespace extensions 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif // CHROME_BROWSER_EXTENSIONS_SHARED_USER_SCRIPT_MASTER_H_ 66