Home | History | Annotate | Download | only in extensions
      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_SHARED_MODULE_SERVICE_H_
      6 #define CHROME_BROWSER_EXTENSIONS_SHARED_MODULE_SERVICE_H_
      7 
      8 #include <list>
      9 
     10 #include "base/scoped_observer.h"
     11 #include "extensions/browser/extension_registry_observer.h"
     12 #include "extensions/common/manifest_handlers/shared_module_info.h"
     13 
     14 namespace content {
     15 class BrowserContext;
     16 }
     17 
     18 namespace extensions {
     19 class Extension;
     20 class ExtensionSet;
     21 class ExtensionRegistry;
     22 
     23 class SharedModuleService : public ExtensionRegistryObserver {
     24  public:
     25   enum ImportStatus {
     26     // No imports needed.
     27     IMPORT_STATUS_OK,
     28 
     29     // Imports are needed, but can be satisfied (i.e., there are missing or
     30     // outdated imports for a webstore extension).
     31     IMPORT_STATUS_UNSATISFIED,
     32 
     33     // Imports are needed, and can't be satisfied (i.e., missing or outdated
     34     // imports for an extension not in the webstore).
     35     IMPORT_STATUS_UNRECOVERABLE
     36   };
     37 
     38   explicit SharedModuleService(content::BrowserContext* context);
     39   virtual ~SharedModuleService();
     40 
     41   // Checks an extension's imports. Imports that are not installed are stored
     42   // in |missing_modules|, and imports that are out of date are stored in
     43   // |outdated_modules|.
     44   ImportStatus CheckImports(
     45       const Extension* extension,
     46       std::list<SharedModuleInfo::ImportInfo>* missing_modules,
     47       std::list<SharedModuleInfo::ImportInfo>* outdated_modules);
     48 
     49   // Checks an extension's shared module imports to see if they are satisfied.
     50   // If they are not, this function adds the dependencies to the pending install
     51   // list if |extension| came from the webstore.
     52   ImportStatus SatisfyImports(const Extension* extension);
     53 
     54   // Returns a set of extensions that import a given extension.
     55   scoped_ptr<ExtensionSet> GetDependentExtensions(const Extension* extension);
     56 
     57  private:
     58   // ExtensionRegistryObserver implementation.
     59   virtual void OnExtensionUninstalled(content::BrowserContext* browser_context,
     60                                       const Extension* extension) OVERRIDE;
     61 
     62   ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
     63       extension_registry_observer_;
     64 
     65   // The context associated with this SharedModuleService.
     66   content::BrowserContext* browser_context_;
     67 
     68   DISALLOW_COPY_AND_ASSIGN(SharedModuleService);
     69 };
     70 
     71 }  // namespace extensions
     72 
     73 #endif  // CHROME_BROWSER_EXTENSIONS_SHARED_MODULE_SERVICE_H_
     74