• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 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_PLUGIN_MANAGER_H_
6 #define CHROME_BROWSER_EXTENSIONS_PLUGIN_MANAGER_H_
7 
8 #include <set>
9 #include <string>
10 
11 #include "base/scoped_observer.h"
12 #include "chrome/common/extensions/manifest_handlers/nacl_modules_handler.h"
13 #include "extensions/browser/browser_context_keyed_api_factory.h"
14 #include "extensions/browser/extension_registry_observer.h"
15 
16 class GURL;
17 class Profile;
18 
19 namespace content {
20 class BrowserContext;
21 }
22 
23 namespace extensions {
24 class ExtensionRegistry;
25 
26 class PluginManager : public BrowserContextKeyedAPI,
27                       public ExtensionRegistryObserver {
28  public:
29   explicit PluginManager(content::BrowserContext* context);
30   virtual ~PluginManager();
31 
32   // BrowserContextKeyedAPI implementation.
33   static BrowserContextKeyedAPIFactory<PluginManager>* GetFactoryInstance();
34 
35  private:
36   friend class BrowserContextKeyedAPIFactory<PluginManager>;
37 
38   // We implement some Pepper plug-ins using NaCl to take advantage of NaCl's
39   // strong sandbox. Typically, these NaCl modules are stored in extensions
40   // and registered here. Not all NaCl modules need to register for a MIME
41   // type, just the ones that are responsible for rendering a particular MIME
42   // type, like application/pdf. Note: We only register NaCl modules in the
43   // browser process.
44   void RegisterNaClModule(const NaClModuleInfo& info);
45   void UnregisterNaClModule(const NaClModuleInfo& info);
46 
47   // Call UpdatePluginListWithNaClModules() after registering or unregistering
48   // a NaCl module to see those changes reflected in the PluginList.
49   void UpdatePluginListWithNaClModules();
50 
51   extensions::NaClModuleInfo::List::iterator FindNaClModule(const GURL& url);
52 
53   // ExtensionRegistryObserver implementation.
54   virtual void OnExtensionLoaded(content::BrowserContext* browser_context,
55                                  const Extension* extension) OVERRIDE;
56   virtual void OnExtensionUnloaded(
57       content::BrowserContext* browser_context,
58       const Extension* extension,
59       UnloadedExtensionInfo::Reason reason) OVERRIDE;
60 
61   // BrowserContextKeyedAPI implementation.
service_name()62   static const char* service_name() { return "PluginManager"; }
63   static const bool kServiceIsNULLWhileTesting = true;
64 
65   extensions::NaClModuleInfo::List nacl_module_list_;
66 
67   Profile* profile_;
68 
69   // Listen to extension load, unloaded notifications.
70   ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
71       extension_registry_observer_;
72 };
73 
74 }  // namespace extensions
75 
76 #endif  // CHROME_BROWSER_EXTENSIONS_PLUGIN_MANAGER_H_
77