• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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