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 "extensions/browser/browser_context_keyed_api_factory.h"
     13 #include "extensions/browser/extension_registry_observer.h"
     14 #include "extensions/common/manifest_handlers/nacl_modules_handler.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 #if !defined(DISABLE_NACL)
     39 
     40   // We implement some Pepper plug-ins using NaCl to take advantage of NaCl's
     41   // strong sandbox. Typically, these NaCl modules are stored in extensions
     42   // and registered here. Not all NaCl modules need to register for a MIME
     43   // type, just the ones that are responsible for rendering a particular MIME
     44   // type, like application/pdf. Note: We only register NaCl modules in the
     45   // browser process.
     46   void RegisterNaClModule(const NaClModuleInfo& info);
     47   void UnregisterNaClModule(const NaClModuleInfo& info);
     48 
     49   // Call UpdatePluginListWithNaClModules() after registering or unregistering
     50   // a NaCl module to see those changes reflected in the PluginList.
     51   void UpdatePluginListWithNaClModules();
     52 
     53   extensions::NaClModuleInfo::List::iterator FindNaClModule(const GURL& url);
     54 
     55 #endif  // !defined(DISABLE_NACL)
     56 
     57   // ExtensionRegistryObserver implementation.
     58   virtual void OnExtensionLoaded(content::BrowserContext* browser_context,
     59                                  const Extension* extension) OVERRIDE;
     60   virtual void OnExtensionUnloaded(
     61       content::BrowserContext* browser_context,
     62       const Extension* extension,
     63       UnloadedExtensionInfo::Reason reason) OVERRIDE;
     64 
     65   // BrowserContextKeyedAPI implementation.
     66   static const char* service_name() { return "PluginManager"; }
     67   static const bool kServiceIsNULLWhileTesting = true;
     68 
     69   extensions::NaClModuleInfo::List nacl_module_list_;
     70 
     71   Profile* profile_;
     72 
     73   // Listen to extension load, unloaded notifications.
     74   ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
     75       extension_registry_observer_;
     76 };
     77 
     78 }  // namespace extensions
     79 
     80 #endif  // CHROME_BROWSER_EXTENSIONS_PLUGIN_MANAGER_H_
     81