| // 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. |
| // |
| // This file declares util functions for setup project. |
| |
| #ifndef CHROME_INSTALLER_SETUP_SETUP_UTIL_H_ |
| #define CHROME_INSTALLER_SETUP_SETUP_UTIL_H_ |
| #pragma once |
| |
| #include "base/file_path.h" |
| #include "base/version.h" |
| #include "base/win/scoped_handle.h" |
| #include "chrome/installer/util/install_util.h" |
| |
| namespace installer { |
| |
| class InstallerState; |
| |
| // Apply a diff patch to source file. First tries to apply it using courgette |
| // since it checks for courgette header and fails quickly. If that fails |
| // tries to apply the patch using regular bsdiff. Returns status code. |
| // The installer stage is updated if |installer_state| is non-NULL. |
| int ApplyDiffPatch(const FilePath& src, |
| const FilePath& patch, |
| const FilePath& dest, |
| const InstallerState* installer_state); |
| |
| // Find the version of Chrome from an install source directory. |
| // Chrome_path should contain at least one version folder. |
| // Returns the maximum version found or NULL if no version is found. |
| Version* GetMaxVersionFromArchiveDir(const FilePath& chrome_path); |
| |
| // Spawns a new process that waits for a specified amount of time before |
| // attempting to delete |path|. This is useful for setup to delete the |
| // currently running executable or a file that we cannot close right away but |
| // estimate that it will be possible after some period of time. |
| // Returns true if a new process was started, false otherwise. Note that |
| // given the nature of this function, it is not possible to know if the |
| // delete operation itself succeeded. |
| bool DeleteFileFromTempProcess(const FilePath& path, |
| uint32 delay_before_delete_ms); |
| |
| // A predicate that compares the program portion of a command line with a given |
| // file path. First, the file paths are compared directly. If they do not |
| // match, the filesystem is consulted to determine if the paths reference the |
| // same file. |
| class ProgramCompare : public InstallUtil::RegistryValuePredicate { |
| public: |
| explicit ProgramCompare(const FilePath& path_to_match); |
| virtual ~ProgramCompare(); |
| virtual bool Evaluate(const std::wstring& value) const OVERRIDE; |
| |
| protected: |
| static bool OpenForInfo(const FilePath& path, |
| base::win::ScopedHandle* handle); |
| static bool GetInfo(const base::win::ScopedHandle& handle, |
| BY_HANDLE_FILE_INFORMATION* info); |
| |
| FilePath path_to_match_; |
| base::win::ScopedHandle file_handle_; |
| BY_HANDLE_FILE_INFORMATION file_info_; |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(ProgramCompare); |
| }; // class ProgramCompare |
| |
| } // namespace installer |
| |
| #endif // CHROME_INSTALLER_SETUP_SETUP_UTIL_H_ |