1 // Copyright (c) 2011 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_EXTERNAL_EXTENSION_PROVIDER_IMPL_H_ 6 #define CHROME_BROWSER_EXTENSIONS_EXTERNAL_EXTENSION_PROVIDER_IMPL_H_ 7 #pragma once 8 9 #include "chrome/browser/extensions/external_extension_provider_interface.h" 10 11 #include "base/memory/ref_counted.h" 12 #include "chrome/browser/extensions/external_extension_loader.h" 13 14 class DictionaryValue; 15 class ExternalExtensionLoader; 16 class Profile; 17 class ValueSerializer; 18 class Version; 19 20 // A specialization of the ExternalExtensionProvider that uses an instance 21 // of ExternalExtensionLoader to provide external extensions. This class 22 // can be seen as a bridge between the extension system and an 23 // ExternalExtensionLoader. Instances live their entire life on the UI thread. 24 class ExternalExtensionProviderImpl 25 : public ExternalExtensionProviderInterface { 26 public: 27 // The constructed provider will provide the extensions loaded from |loader| 28 // to |service|, that will deal with the installation. The location 29 // attributes of the provided extensions are also specified here: 30 // |crx_location|: extensions originating from crx files 31 // |download_location|: extensions originating from update URLs 32 // If either of the origins is not supported by this provider, then it should 33 // be initialized as Extensions::INVALID. 34 ExternalExtensionProviderImpl( 35 VisitorInterface* service, 36 ExternalExtensionLoader* loader, 37 Extension::Location crx_location, 38 Extension::Location download_location); 39 40 virtual ~ExternalExtensionProviderImpl(); 41 42 // Populates a list with providers for all known sources. 43 static void CreateExternalProviders( 44 VisitorInterface* service, 45 Profile* profile, 46 ProviderCollection* provider_list); 47 48 // Sets underlying prefs and notifies provider. Only to be called by the 49 // owned ExternalExtensionLoader instance. 50 void SetPrefs(DictionaryValue* prefs); 51 52 // ExternalExtensionProvider implementation: 53 virtual void VisitRegisteredExtension() const; 54 55 virtual bool HasExtension(const std::string& id) const; 56 57 virtual bool GetExtensionDetails(const std::string& id, 58 Extension::Location* location, 59 scoped_ptr<Version>* version) const; 60 61 virtual void ServiceShutdown(); 62 63 virtual bool IsReady(); 64 65 static const char kLocation[]; 66 static const char kState[]; 67 static const char kExternalCrx[]; 68 static const char kExternalVersion[]; 69 static const char kExternalUpdateUrl[]; 70 71 private: 72 // Location for external extensions that are provided by this provider from 73 // local crx files. 74 const Extension::Location crx_location_; 75 76 // Location for external extensions that are provided by this provider from 77 // update URLs. 78 const Extension::Location download_location_; 79 80 private: 81 // Weak pointer to the object that consumes the external extensions. 82 // This is zeroed out by: ServiceShutdown() 83 VisitorInterface* service_; // weak 84 85 // Dictionary of the external extensions that are provided by this provider. 86 scoped_ptr<DictionaryValue> prefs_; 87 88 // Indicates that the extensions provided by this provider are loaded 89 // entirely. 90 bool ready_; 91 92 // The loader that loads the list of external extensions and reports them 93 // via |SetPrefs|. 94 scoped_refptr<ExternalExtensionLoader> loader_; 95 96 DISALLOW_COPY_AND_ASSIGN(ExternalExtensionProviderImpl); 97 }; 98 99 #endif // CHROME_BROWSER_EXTENSIONS_EXTERNAL_EXTENSION_PROVIDER_IMPL_H_ 100