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.
5 #ifndef EXTENSIONS_BROWSER_DECLARATIVE_USER_SCRIPT_MANAGER_H_
6 #define EXTENSIONS_BROWSER_DECLARATIVE_USER_SCRIPT_MANAGER_H_
10 #include "base/macros.h"
11 #include "base/memory/linked_ptr.h"
12 #include "base/scoped_observer.h"
13 #include "extensions/browser/extension_registry_observer.h"
14 #include "extensions/common/host_id.h"
20 namespace extensions
{
21 class DeclarativeUserScriptMaster
;
23 // Manages a set of DeclarativeUserScriptMaster objects for script injections.
24 class DeclarativeUserScriptManager
: public ExtensionRegistryObserver
{
26 explicit DeclarativeUserScriptManager(
27 content::BrowserContext
* browser_context
);
28 ~DeclarativeUserScriptManager() override
;
30 // Gets the user script master for declarative scripts by the given
31 // HostID; if one does not exist, a new object will be created.
32 DeclarativeUserScriptMaster
* GetDeclarativeUserScriptMasterByID(
33 const HostID
& host_id
);
36 using UserScriptMasterMap
=
37 std::map
<HostID
, linked_ptr
<DeclarativeUserScriptMaster
>>;
39 // ExtensionRegistryObserver:
40 void OnExtensionUnloaded(content::BrowserContext
* browser_context
,
41 const Extension
* extension
,
42 UnloadedExtensionInfo::Reason reason
) override
;
44 // Creates a DeclarativeUserScriptMaster object.
45 DeclarativeUserScriptMaster
* CreateDeclarativeUserScriptMaster(
46 const HostID
& host_id
);
48 // A map of DeclarativeUserScriptMasters for each host; each master
49 // is lazily initialized.
50 UserScriptMasterMap declarative_user_script_masters_
;
52 content::BrowserContext
* browser_context_
;
54 ScopedObserver
<ExtensionRegistry
, ExtensionRegistryObserver
>
55 extension_registry_observer_
;
57 DISALLOW_COPY_AND_ASSIGN(DeclarativeUserScriptManager
);
60 } // namespace extensions
62 #endif // EXTENSIONS_BROWSER_DECLARATIVE_USER_SCRIPT_MANAGER_H_