Home | History | Annotate | Download | only in extensions
      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.
     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