1 // Copyright (c) 2012 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_PROVIDER_IMPL_H_ 6 #define CHROME_BROWSER_EXTENSIONS_EXTERNAL_PROVIDER_IMPL_H_ 7 8 #include <string> 9 10 #include "base/memory/ref_counted.h" 11 #include "chrome/browser/extensions/external_loader.h" 12 #include "extensions/browser/external_provider_interface.h" 13 #include "extensions/common/manifest.h" 14 15 class Profile; 16 17 namespace base { 18 class DictionaryValue; 19 class Version; 20 } 21 22 namespace extensions { 23 24 // A specialization of the ExternalProvider that uses an instance of 25 // ExternalLoader to provide external extensions. This class can be seen as a 26 // bridge between the extension system and an ExternalLoader. Instances live 27 // their entire life on the UI thread. 28 class ExternalProviderImpl : public ExternalProviderInterface { 29 public: 30 // The constructed provider will provide the extensions loaded from |loader| 31 // to |service|, that will deal with the installation. The location 32 // attributes of the provided extensions are also specified here: 33 // |crx_location|: extensions originating from crx files 34 // |download_location|: extensions originating from update URLs 35 // If either of the origins is not supported by this provider, then it should 36 // be initialized as Manifest::INVALID_LOCATION. 37 ExternalProviderImpl(VisitorInterface* service, 38 const scoped_refptr<ExternalLoader>& loader, 39 Profile* profile, 40 Manifest::Location crx_location, 41 Manifest::Location download_location, 42 int creation_flags); 43 44 virtual ~ExternalProviderImpl(); 45 46 // Populates a list with providers for all known sources. 47 static void CreateExternalProviders( 48 VisitorInterface* service, 49 Profile* profile, 50 ProviderCollection* provider_list); 51 52 // Sets underlying prefs and notifies provider. Only to be called by the 53 // owned ExternalLoader instance. 54 virtual void SetPrefs(base::DictionaryValue* prefs); 55 56 // ExternalProvider implementation: 57 virtual void ServiceShutdown() OVERRIDE; 58 virtual void VisitRegisteredExtension() OVERRIDE; 59 virtual bool HasExtension(const std::string& id) const OVERRIDE; 60 virtual bool GetExtensionDetails( 61 const std::string& id, 62 Manifest::Location* location, 63 scoped_ptr<base::Version>* version) const OVERRIDE; 64 65 virtual bool IsReady() const OVERRIDE; 66 67 static const char kExternalCrx[]; 68 static const char kExternalVersion[]; 69 static const char kExternalUpdateUrl[]; 70 static const char kInstallParam[]; 71 static const char kIsBookmarkApp[]; 72 static const char kIsFromWebstore[]; 73 static const char kKeepIfPresent[]; 74 static const char kSupportedLocales[]; 75 static const char kWasInstalledByOem[]; 76 set_auto_acknowledge(bool auto_acknowledge)77 void set_auto_acknowledge(bool auto_acknowledge) { 78 auto_acknowledge_ = auto_acknowledge; 79 } 80 81 private: 82 // Location for external extensions that are provided by this provider from 83 // local crx files. 84 const Manifest::Location crx_location_; 85 86 // Location for external extensions that are provided by this provider from 87 // update URLs. 88 const Manifest::Location download_location_; 89 90 // Weak pointer to the object that consumes the external extensions. 91 // This is zeroed out by: ServiceShutdown() 92 VisitorInterface* service_; // weak 93 94 // Dictionary of the external extensions that are provided by this provider. 95 scoped_ptr<base::DictionaryValue> prefs_; 96 97 // Indicates that the extensions provided by this provider are loaded 98 // entirely. 99 bool ready_; 100 101 // The loader that loads the list of external extensions and reports them 102 // via |SetPrefs|. 103 scoped_refptr<ExternalLoader> loader_; 104 105 // The profile that will be used to install external extensions. 106 Profile* profile_; 107 108 // Creation flags to use for the extension. These flags will be used 109 // when calling Extension::Create() by the crx installer. 110 int creation_flags_; 111 112 // Whether loaded extensions should be automatically acknowledged, so that 113 // the user doesn't see an alert about them. 114 bool auto_acknowledge_; 115 116 DISALLOW_COPY_AND_ASSIGN(ExternalProviderImpl); 117 }; 118 119 } // namespace extensions 120 121 #endif // CHROME_BROWSER_EXTENSIONS_EXTERNAL_PROVIDER_IMPL_H_ 122