summaryrefslogtreecommitdiffstats
path: root/chrome/browser/component_updater/component_updater_service.h
diff options
context:
space:
mode:
authorcpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-22 02:55:04 +0000
committercpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-22 02:55:04 +0000
commit2e114e73ddef537fe075d84b1a580f459b50e8a4 (patch)
tree9ccea58b222d25a1b79023a6225620385399db14 /chrome/browser/component_updater/component_updater_service.h
parenta5a583a1e097d5e3d28cf756403c6e0a8bf657e0 (diff)
downloadchromium_src-2e114e73ddef537fe075d84b1a580f459b50e8a4.zip
chromium_src-2e114e73ddef537fe075d84b1a580f459b50e8a4.tar.gz
chromium_src-2e114e73ddef537fe075d84b1a580f459b50e8a4.tar.bz2
Component updater second installment
introducing the main external objects: -ComponentInstaller -ComponentUpdateService The ComponentUnpacker is an implementation detail but it is fairly simple and we might as well deal with it. Tests are comming with the next CL. TEST=none BUG=61602 Review URL: http://codereview.chromium.org/7458011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@93530 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/component_updater/component_updater_service.h')
-rw-r--r--chrome/browser/component_updater/component_updater_service.h125
1 files changed, 125 insertions, 0 deletions
diff --git a/chrome/browser/component_updater/component_updater_service.h b/chrome/browser/component_updater/component_updater_service.h
new file mode 100644
index 0000000..9e55a33
--- /dev/null
+++ b/chrome/browser/component_updater/component_updater_service.h
@@ -0,0 +1,125 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_COMPONENT_UPDATER_COMPONENT_UPDATER_SERVICE_H_
+#define CHROME_BROWSER_COMPONENT_UPDATER_COMPONENT_UPDATER_SERVICE_H_
+#pragma once
+
+#include <string>
+#include <vector>
+
+#include "base/version.h"
+#include "googleurl/src/gurl.h"
+
+class FilePath;
+
+namespace net {
+class URLRequestContextGetter;
+}
+
+namespace base {
+class DictionaryValue;
+}
+
+// Component specific installers must derive from this class and implement
+// OnUpdateError() and Install(). A valid instance of this class must be
+// given to ComponentUpdateService::RegisterComponent().
+class ComponentInstaller {
+ public :
+ virtual ~ComponentInstaller() {}
+
+ // Called by the component updater on the UI thread when there was a
+ // problem unpacking or verifying the component. |error| is a non-zero
+ // value which is only meaninful to the component updater.
+ virtual void OnUpdateError(int error) = 0;
+
+ // Called by the component updater when a component has been unpacked
+ // and is ready to be installed. |manifest| contains the CRX manifest
+ // json dictionary and |unpack_path| contains the temporary directory
+ // with all the unpacked CRX files.
+ virtual bool Install(base::DictionaryValue* manifest,
+ const FilePath& unpack_path) = 0;
+};
+
+// Describes a particular component that can be installed or updated. This
+// structure is required to register a component with the component updater.
+// Only |name| is optional. |pk_hash| is the SHA256 hash of the component's
+// public key. If the component is to be installed then version should be
+// "0" or "0.0", else it should be the current version.
+struct CrxComponent {
+ std::vector<uint8> pk_hash;
+ ComponentInstaller* installer;
+ Version version;
+ std::string name;
+ CrxComponent();
+ ~CrxComponent();
+};
+
+// The component update service is in charge of installing or upgrading
+// select parts of chrome. Each part is called a component and managed by
+// instances of CrxComponent registered using RegisterComponent(). On the
+// server, each component is packaged as a CRX which is the same format used
+// to package extensions. To the update service each component is identified
+// by its public key hash (CrxComponent::pk_hash). If there is an update
+// available and its version is bigger than (CrxComponent::version), it will
+// be downloaded, verified and unpacked. Then component-specific installer
+// ComponentInstaller::Install (of CrxComponent::installer) will be called.
+//
+// During the normal operation of the component updater some specific
+// notifications are fired, like COMPONENT_UPDATER_STARTED and
+// COMPONENT_UPDATE_FOUND. See notification_type.h for more details.
+//
+// All methods are safe to call ONLY from chrome's UI thread.
+class ComponentUpdateService {
+ public:
+ enum Status {
+ kOk,
+ kReplaced,
+ kError
+ };
+ // Controls the component updater behavior.
+ class Configurator {
+ public:
+ virtual ~Configurator() {}
+ // Delay in seconds from calling Start() to the first update check.
+ virtual int InitialDelay() = 0;
+ // Delay in seconds to every subsequent update check. 0 means don't check.
+ virtual int NextCheckDelay() = 0;
+ // Delay in seconds from each task step. Used to smooth out CPU/IO usage.
+ virtual int StepDelay() = 0;
+ // The url that is going to be used update checks over Omaha protocol.
+ virtual GURL UpdateUrl() = 0;
+ // How big each update request can be. Don't go above 2000.
+ virtual size_t UrlSizeLimit() = 0;
+ // The source of contexts for all the url requests.
+ virtual net::URLRequestContextGetter* RequestContext() = 0;
+ // True means that all ops are peformed in this process.
+ virtual bool InProcess() = 0;
+ };
+
+ // Start doing update checks and installing new versions of registered
+ // components after Configurator::InitialDelay() seconds.
+ virtual Status Start() = 0;
+
+ // Stop doing update checks. In-flight requests and pending installations
+ // will not be cancelled.
+ virtual Status Stop() = 0;
+
+ // Add component to be checked for updates. You can call this method
+ // before calling Start().
+ virtual Status RegisterComponent(const CrxComponent& component) = 0;
+
+ protected:
+ virtual ~ComponentUpdateService() {}
+};
+
+// Creates the component updater. Pass NULL in |config| to use the default
+// configuration. Only the first caller can specify a configuration; on
+// subsequent calls it will be ignored and the current instance of the
+// component updater will be used.
+ComponentUpdateService* ComponentUpdateServiceFactory(
+ ComponentUpdateService::Configurator* config);
+
+#endif // CHROME_BROWSER_COMPONENT_UPDATER_COMPONENT_UPDATER_SERVICE_H_
+