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 // Uninstall shared modules which are not used by other extensions. 59 void PruneSharedModules(); 60 61 // ExtensionRegistryObserver implementation. 62 virtual void OnExtensionInstalled(content::BrowserContext* browser_context, 63 const Extension* extension, 64 bool is_update) OVERRIDE; 65 virtual void OnExtensionUninstalled( 66 content::BrowserContext* browser_context, 67 const Extension* extension, 68 extensions::UninstallReason reason) OVERRIDE; 69 70 ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver> 71 extension_registry_observer_; 72 73 // The context associated with this SharedModuleService. 74 content::BrowserContext* browser_context_; 75 76 DISALLOW_COPY_AND_ASSIGN(SharedModuleService); 77 }; 78 79 } // namespace extensions 80 81 #endif // CHROME_BROWSER_EXTENSIONS_SHARED_MODULE_SERVICE_H_ 82