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