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_DECLARATIVE_USER_SCRIPT_MASTER_H_ 66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_DECLARATIVE_USER_SCRIPT_MASTER_H_ 76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/scoped_observer.h" 96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/extensions/user_script_loader.h" 106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "extensions/browser/extension_registry_observer.h" 116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "extensions/common/extension.h" 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class Profile; 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace extensions { 166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class ExtensionRegistry; 186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class UserScript; 196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Manages declarative user scripts for a single extension. Owns a 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// UserScriptLoader to which file loading and shared memory management 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// operations are delegated, and provides an interface for adding, removing, 236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// and clearing scripts. 246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class DeclarativeUserScriptMaster : public ExtensionRegistryObserver { 256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public: 266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DeclarativeUserScriptMaster(Profile* profile, 276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const ExtensionId& extension_id); 286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual ~DeclarativeUserScriptMaster(); 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Adds script to shared memory region. This may not happen right away if a 316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // script load is in progress. 326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void AddScript(const UserScript& script); 336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Removes script from shared memory region. This may not happen right away if 356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // a script load is in progress. 366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void RemoveScript(const UserScript& script); 376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Removes all scripts from shared memory region. This may not happen right 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // away if a script load is in progress. 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void ClearScripts(); 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const ExtensionId& extension_id() const { return extension_id_; } 436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private: 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // ExtensionRegistryObserver implementation. 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void OnExtensionUnloaded( 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) content::BrowserContext* browser_context, 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const Extension* extension, 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) UnloadedExtensionInfo::Reason reason) OVERRIDE; 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // ID of extension that owns scripts that this component manages. 526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ExtensionId extension_id_; 536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Script loader that handles loading contents of scripts into shared memory 556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // and notifying renderers of script updates. 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) UserScriptLoader loader_; 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver> 596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) extension_registry_observer_; 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DeclarativeUserScriptMaster); 626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}; 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} // namespace extensions 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif // CHROME_BROWSER_EXTENSIONS_DECLARATIVE_USER_SCRIPT_MASTER_H_ 67