Home | History | Annotate | Download | only in extensions
      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 
     13 class Profile;
     14 
     15 namespace extensions {
     16 
     17 class ExtensionRegistry;
     18 class 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.
     24 class 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