Chromium Code Reviews| Index: chrome/installer/util/installation_validator.h |
| =================================================================== |
| --- chrome/installer/util/installation_validator.h (revision 0) |
| +++ chrome/installer/util/installation_validator.h (revision 0) |
| @@ -0,0 +1,161 @@ |
| +// 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_INSTALLER_UTIL_INSTALLATION_VALIDATOR_H_ |
| +#define CHROME_INSTALLER_UTIL_INSTALLATION_VALIDATOR_H_ |
| +#pragma once |
| + |
| +#include <string> |
| +#include <utility> |
| +#include <vector> |
| + |
| +#include "base/basictypes.h" |
| +#include "base/compiler_specific.h" |
| +#include "base/ref_counted.h" |
| +#include "base/scoped_ptr.h" |
| +#include "chrome/installer/util/browser_distribution.h" |
| +#include "chrome/installer/util/channel_info.h" |
| + |
| +class FilePath; |
| +class Version; |
| + |
| +namespace installer { |
| + |
| +class InstallationState; |
| +class ProductState; |
| + |
| +// A class that validates the state of an installation. Violations are logged |
| +// via LOG(ERROR). |
| +class InstallationValidator { |
| + public: |
| + class ProductBits { |
| + public: |
| + // Bits that form the components of an installation type. |
| + enum { |
| + CHROME_SINGLE = 0x01, |
| + CHROME_MULTI = 0x02, |
| + CHROME_FRAME_SINGLE = 0x04, |
| + CHROME_FRAME_MULTI = 0x08, |
| + CHROME_FRAME_READY_MODE = 0x10, |
| + }; |
| + }; // class ProductBits |
| + |
| + // Identifiers of all valid installation types. |
| + enum InstallationType { |
| + NO_PRODUCTS = 0, |
| + CHROME_SINGLE = |
| + ProductBits::CHROME_SINGLE, |
| + CHROME_MULTI = |
| + ProductBits::CHROME_MULTI, |
| + CHROME_FRAME_SINGLE = |
| + ProductBits::CHROME_FRAME_SINGLE, |
| + CHROME_FRAME_SINGLE_CHROME_SINGLE = |
| + ProductBits::CHROME_FRAME_SINGLE | ProductBits::CHROME_SINGLE, |
| + CHROME_FRAME_SINGLE_CHROME_MULTI = |
| + ProductBits::CHROME_FRAME_SINGLE | ProductBits::CHROME_MULTI, |
| + CHROME_FRAME_MULTI = |
| + ProductBits::CHROME_FRAME_MULTI, |
| + CHROME_FRAME_MULTI_CHROME_MULTI = |
| + ProductBits::CHROME_FRAME_MULTI | ProductBits::CHROME_MULTI, |
| + CHROME_FRAME_READY_MODE_CHROME_MULTI = |
| + ProductBits::CHROME_FRAME_READY_MODE | ProductBits::CHROME_MULTI, |
| + }; |
| + |
| + // Validates |machine_state| at user or system level, returning true if valid. |
| + // |type| is populated in either case, although it is a best-guess when the |
| + // method returns false. |
| + static bool ValidateInstallationTypeForState( |
| + const InstallationState& machine_state, |
| + bool system_level, |
| + InstallationType* type); |
| + |
| + // Validates the machine's current installation at user or system level, |
| + // returning true and populating |type| if valid. |
| + static bool ValidateInstallationType(bool system_level, |
| + InstallationType* type); |
| + |
| + protected: |
| + typedef std::vector<std::pair<std::string, bool>> SwitchExpectations; |
|
tommi (sloooow) - chröme
2011/02/12 00:11:17
space before the last >
grt (UTC plus 2)
2011/02/14 04:05:20
Done.
|
| + |
| + // An interface to product-specific validation rules. |
| + class ProductRules { |
| + public: |
| + virtual ~ProductRules() { } |
| + virtual BrowserDistribution::Type distribution_type() const = 0; |
| + virtual void AddUninstallSwitchExpectations( |
| + const InstallationState& machine_state, |
| + bool system_install, |
| + const ProductState& product_state, |
| + SwitchExpectations* expectations) const = 0; |
| + }; |
| + |
| + // Validation rules for the Chrome browser. |
| + class ChromeRules : public ProductRules { |
| + public: |
| + virtual BrowserDistribution::Type distribution_type() const OVERRIDE; |
| + virtual void AddUninstallSwitchExpectations( |
| + const InstallationState& machine_state, |
| + bool system_install, |
| + const ProductState& product_state, |
| + SwitchExpectations* expectations) const OVERRIDE; |
| + }; |
| + |
| + // Validation rules for Chrome Frame. |
| + class ChromeFrameRules : public ProductRules { |
| + public: |
| + virtual BrowserDistribution::Type distribution_type() const OVERRIDE; |
| + virtual void AddUninstallSwitchExpectations( |
| + const InstallationState& machine_state, |
| + bool system_install, |
| + const ProductState& product_state, |
| + SwitchExpectations* expectations) const OVERRIDE; |
| + }; |
| + |
| + struct ProductContext { |
| + const InstallationState& machine_state; |
| + bool system_install; |
| + BrowserDistribution* dist; |
| + const ProductState& state; |
| + const ProductRules& rules; |
| + }; |
| + |
| + static void ValidateBinaries(const InstallationState& machine_state, |
| + bool system_install, |
| + const ProductState& binaries_state, |
| + bool* is_valid); |
| + static void ValidateSetupPath(const ProductContext& ctx, |
| + const FilePath& setup_exe, |
| + const char* purpose, |
| + bool* is_valid); |
| + static void ValidateCommandExpectations(const ProductContext& ctx, |
| + const CommandLine& command, |
| + const SwitchExpectations& expected, |
| + const char* source, |
| + bool* is_valid); |
| + static void ValidateUninstallCommand(const ProductContext& ctx, |
| + const CommandLine& command, |
| + const char* source, |
| + bool* is_valid); |
| + static void ValidateRenameCommand(const ProductContext& ctx, |
| + bool* is_valid); |
| + static void ValidateOldVersionValues(const ProductContext& ctx, |
| + bool* is_valid); |
| + static void ValidateMultiInstallProduct(const ProductContext& ctx, |
| + bool* is_valid); |
| + static void ValidateProduct(const InstallationState& machine_state, |
| + bool system_install, |
| + const ProductState& product_state, |
| + const ProductRules& rules, |
| + bool* is_valid); |
| + |
| + // A collection of all valid installation types. |
| + static const InstallationType kInstallationTypes[]; |
| + |
| + private: |
| + DISALLOW_IMPLICIT_CONSTRUCTORS(InstallationValidator); |
| +}; |
| + |
| +} // namespace installer |
| + |
| +#endif // CHROME_INSTALLER_UTIL_INSTALLATION_VALIDATOR_H_ |
| Property changes on: chrome\installer\util\installation_validator.h |
| ___________________________________________________________________ |
| Added: svn:eol-style |
| + LF |