OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef COMPONENTS_COMPONENT_UPDATER_COMPONENT_UPDATER_SERVICE_H_ | 5 #ifndef COMPONENTS_COMPONENT_UPDATER_COMPONENT_UPDATER_SERVICE_H_ |
6 #define COMPONENTS_COMPONENT_UPDATER_COMPONENT_UPDATER_SERVICE_H_ | 6 #define COMPONENTS_COMPONENT_UPDATER_COMPONENT_UPDATER_SERVICE_H_ |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "base/callback_forward.h" | 12 #include "base/callback_forward.h" |
13 #include "base/gtest_prod_util.h" | 13 #include "base/gtest_prod_util.h" |
14 #include "base/memory/ref_counted.h" | 14 #include "base/memory/ref_counted.h" |
15 #include "base/version.h" | 15 #include "base/version.h" |
16 #include "url/gurl.h" | 16 #include "url/gurl.h" |
17 | 17 |
18 class ComponentsUI; | 18 class ComponentsUI; |
19 class SupervisedUserWhitelistService; | 19 class SupervisedUserWhitelistService; |
20 | 20 |
21 namespace base { | 21 namespace base { |
22 class DictionaryValue; | 22 class DictionaryValue; |
23 class FilePath; | 23 class FilePath; |
24 class SequencedTaskRunner; | 24 class SequencedTaskRunner; |
25 } | 25 } |
26 | 26 |
| 27 namespace content { |
| 28 class ResourceThrottle; |
| 29 } |
| 30 |
27 namespace net { | 31 namespace net { |
28 class URLRequestContextGetter; | 32 class URLRequestContextGetter; |
29 class URLRequest; | 33 class URLRequest; |
30 } | 34 } |
31 | 35 |
32 namespace content { | 36 namespace update_client { |
33 class ResourceThrottle; | 37 class ComponentInstaller; |
| 38 class Configurator; |
| 39 struct CrxComponent; |
| 40 struct CrxUpdateItem; |
34 } | 41 } |
35 | 42 |
36 namespace component_updater { | 43 namespace component_updater { |
37 | 44 |
38 class Configurator; | |
39 class OnDemandUpdater; | 45 class OnDemandUpdater; |
40 | 46 |
41 // Component specific installers must derive from this class and implement | |
42 // OnUpdateError() and Install(). A valid instance of this class must be | |
43 // given to ComponentUpdateService::RegisterComponent(). | |
44 class ComponentInstaller { | |
45 public: | |
46 // Called by the component updater on the main thread when there was a | |
47 // problem unpacking or verifying the component. |error| is a non-zero | |
48 // value which is only meaningful to the component updater. | |
49 virtual void OnUpdateError(int error) = 0; | |
50 | |
51 // Called by the component updater when a component has been unpacked | |
52 // and is ready to be installed. |manifest| contains the CRX manifest | |
53 // json dictionary and |unpack_path| contains the temporary directory | |
54 // with all the unpacked CRX files. This method may be called from | |
55 // a thread other than the main thread. | |
56 virtual bool Install(const base::DictionaryValue& manifest, | |
57 const base::FilePath& unpack_path) = 0; | |
58 | |
59 // Set |installed_file| to the full path to the installed |file|. |file| is | |
60 // the filename of the file in this component's CRX. Returns false if this is | |
61 // not possible (the file has been removed or modified, or its current | |
62 // location is unknown). Otherwise, returns true. | |
63 virtual bool GetInstalledFile(const std::string& file, | |
64 base::FilePath* installed_file) = 0; | |
65 | |
66 virtual ~ComponentInstaller() {} | |
67 }; | |
68 | |
69 // Describes a particular component that can be installed or updated. This | |
70 // structure is required to register a component with the component updater. | |
71 // |pk_hash| is the SHA256 hash of the component's public key. If the component | |
72 // is to be installed then version should be "0" or "0.0", else it should be | |
73 // the current version. |fingerprint|, and |name| are optional. | |
74 // |allow_background_download| specifies that the component can be background | |
75 // downloaded in some cases. The default for this value is |true| and the value | |
76 // can be overriden at the registration time. This is a temporary change until | |
77 // the issue 340448 is resolved. | |
78 struct CrxComponent { | |
79 std::vector<uint8_t> pk_hash; | |
80 ComponentInstaller* installer; | |
81 Version version; | |
82 std::string fingerprint; | |
83 std::string name; | |
84 bool allow_background_download; | |
85 CrxComponent(); | |
86 ~CrxComponent(); | |
87 }; | |
88 | |
89 struct CrxUpdateItem; | |
90 | |
91 // The component update service is in charge of installing or upgrading | 47 // The component update service is in charge of installing or upgrading |
92 // select parts of chrome. Each part is called a component and managed by | 48 // select parts of chrome. Each part is called a component and managed by |
93 // instances of CrxComponent registered using RegisterComponent(). On the | 49 // instances of CrxComponent registered using RegisterComponent(). On the |
94 // server, each component is packaged as a CRX which is the same format used | 50 // server, each component is packaged as a CRX which is the same format used |
95 // to package extensions. To the update service each component is identified | 51 // to package extensions. To the update service each component is identified |
96 // by its public key hash (CrxComponent::pk_hash). If there is an update | 52 // by its public key hash (CrxComponent::pk_hash). If there is an update |
97 // available and its version is bigger than (CrxComponent::version), it will | 53 // available and its version is bigger than (CrxComponent::version), it will |
98 // be downloaded, verified and unpacked. Then component-specific installer | 54 // be downloaded, verified and unpacked. Then component-specific installer |
99 // ComponentInstaller::Install (of CrxComponent::installer) will be called. | 55 // ComponentInstaller::Install (of CrxComponent::installer) will be called. |
100 // | 56 // |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 // Start doing update checks and installing new versions of registered | 114 // Start doing update checks and installing new versions of registered |
159 // components after Configurator::InitialDelay() seconds. | 115 // components after Configurator::InitialDelay() seconds. |
160 virtual Status Start() = 0; | 116 virtual Status Start() = 0; |
161 | 117 |
162 // Stop doing update checks. In-flight requests and pending installations | 118 // Stop doing update checks. In-flight requests and pending installations |
163 // will not be canceled. | 119 // will not be canceled. |
164 virtual Status Stop() = 0; | 120 virtual Status Stop() = 0; |
165 | 121 |
166 // Add component to be checked for updates. You can call this method | 122 // Add component to be checked for updates. You can call this method |
167 // before calling Start(). | 123 // before calling Start(). |
168 virtual Status RegisterComponent(const CrxComponent& component) = 0; | 124 virtual Status RegisterComponent( |
| 125 const update_client::CrxComponent& component) = 0; |
169 | 126 |
170 // Returns a list of registered components. | 127 // Returns a list of registered components. |
171 virtual std::vector<std::string> GetComponentIDs() const = 0; | 128 virtual std::vector<std::string> GetComponentIDs() const = 0; |
172 | 129 |
173 // Returns an interface for on-demand updates. On-demand updates are | 130 // Returns an interface for on-demand updates. On-demand updates are |
174 // proactively triggered outside the normal component update service schedule. | 131 // proactively triggered outside the normal component update service schedule. |
175 virtual OnDemandUpdater& GetOnDemandUpdater() = 0; | 132 virtual OnDemandUpdater& GetOnDemandUpdater() = 0; |
176 | 133 |
177 // This method is used to trigger an on-demand update for component |crx_id|. | 134 // This method is used to trigger an on-demand update for component |crx_id|. |
178 // This can be used when loading a resource that depends on this component. | 135 // This can be used when loading a resource that depends on this component. |
(...skipping 11 matching lines...) Expand all Loading... |
190 const base::Closure& callback) = 0; | 147 const base::Closure& callback) = 0; |
191 | 148 |
192 // Returns a task runner suitable for use by component installers. | 149 // Returns a task runner suitable for use by component installers. |
193 virtual scoped_refptr<base::SequencedTaskRunner> GetSequencedTaskRunner() = 0; | 150 virtual scoped_refptr<base::SequencedTaskRunner> GetSequencedTaskRunner() = 0; |
194 | 151 |
195 virtual ~ComponentUpdateService() {} | 152 virtual ~ComponentUpdateService() {} |
196 | 153 |
197 private: | 154 private: |
198 // Returns details about registered component in the |item| parameter. The | 155 // Returns details about registered component in the |item| parameter. The |
199 // function returns true in case of success and false in case of errors. | 156 // function returns true in case of success and false in case of errors. |
200 virtual bool GetComponentDetails(const std::string& component_id, | 157 virtual bool GetComponentDetails( |
201 CrxUpdateItem* item) const = 0; | 158 const std::string& component_id, |
| 159 update_client::CrxUpdateItem* item) const = 0; |
202 | 160 |
203 friend class ::ComponentsUI; | 161 friend class ::ComponentsUI; |
204 }; | 162 }; |
205 | 163 |
206 typedef ComponentUpdateService::Observer ServiceObserver; | 164 typedef ComponentUpdateService::Observer ServiceObserver; |
207 | 165 |
208 class OnDemandUpdater { | 166 class OnDemandUpdater { |
209 public: | 167 public: |
210 virtual ~OnDemandUpdater() {} | 168 virtual ~OnDemandUpdater() {} |
211 | 169 |
212 private: | 170 private: |
213 friend class OnDemandTester; | 171 friend class OnDemandTester; |
214 friend class SupervisedUserWhitelistInstaller; | 172 friend class SupervisedUserWhitelistInstaller; |
215 friend class ::ComponentsUI; | 173 friend class ::ComponentsUI; |
216 | 174 |
217 // Triggers an update check for a component. |component_id| is a value | 175 // Triggers an update check for a component. |component_id| is a value |
218 // returned by GetCrxComponentID(). If an update for this component is already | 176 // returned by GetCrxComponentID(). If an update for this component is already |
219 // in progress, the function returns |kInProgress|. If an update is available, | 177 // in progress, the function returns |kInProgress|. If an update is available, |
220 // the update will be applied. The caller can subscribe to component update | 178 // the update will be applied. The caller can subscribe to component update |
221 // service notifications to get an indication about the outcome of the | 179 // service notifications to get an indication about the outcome of the |
222 // on-demand update. The function does not implement any cooldown interval. | 180 // on-demand update. The function does not implement any cooldown interval. |
223 virtual ComponentUpdateService::Status OnDemandUpdate( | 181 virtual ComponentUpdateService::Status OnDemandUpdate( |
224 const std::string& component_id) = 0; | 182 const std::string& component_id) = 0; |
225 }; | 183 }; |
226 | 184 |
227 // Creates the component updater. You must pass a valid |config| allocated on | 185 // Creates the component updater. You must pass a valid |config| allocated on |
228 // the heap which the component updater will own. | 186 // the heap which the component updater will own. |
229 ComponentUpdateService* ComponentUpdateServiceFactory(Configurator* config); | 187 ComponentUpdateService* ComponentUpdateServiceFactory( |
| 188 update_client::Configurator* config); |
230 | 189 |
231 } // namespace component_updater | 190 } // namespace component_updater |
232 | 191 |
233 #endif // COMPONENTS_COMPONENT_UPDATER_COMPONENT_UPDATER_SERVICE_H_ | 192 #endif // COMPONENTS_COMPONENT_UPDATER_COMPONENT_UPDATER_SERVICE_H_ |
OLD | NEW |