diff options
author | cpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-22 02:55:04 +0000 |
---|---|---|
committer | cpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-22 02:55:04 +0000 |
commit | 2e114e73ddef537fe075d84b1a580f459b50e8a4 (patch) | |
tree | 9ccea58b222d25a1b79023a6225620385399db14 /chrome/browser/component_updater/component_updater_service.h | |
parent | a5a583a1e097d5e3d28cf756403c6e0a8bf657e0 (diff) | |
download | chromium_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.h | 125 |
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_ + |