| // Copyright (c) 2012 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 contains the declarations of the installer functions that build |
| // the WorkItemList used to install the application. |
| |
| #ifndef CHROME_INSTALLER_SETUP_INSTALL_WORKER_H_ |
| #define CHROME_INSTALLER_SETUP_INSTALL_WORKER_H_ |
| |
| #include <windows.h> |
| |
| #include <vector> |
| |
| class BrowserDistribution; |
| class WorkItemList; |
| |
| namespace base { |
| class CommandLine; |
| class FilePath; |
| class Version; |
| } |
| |
| namespace installer { |
| |
| class InstallationState; |
| class InstallerState; |
| class Product; |
| |
| // This method adds work items to create (or update) Chrome uninstall entry in |
| // either the Control Panel->Add/Remove Programs list or in the Omaha client |
| // state key if running under an MSI installer. |
| void AddUninstallShortcutWorkItems(const InstallerState& installer_state, |
| const base::FilePath& setup_path, |
| const base::Version& new_version, |
| const Product& product, |
| WorkItemList* install_list); |
| |
| // Creates Version key for a product (if not already present) and sets the new |
| // product version as the last step. If |add_language_identifier| is true, the |
| // "lang" value is also set according to the currently selected translation. |
| void AddVersionKeyWorkItems(HKEY root, |
| BrowserDistribution* dist, |
| const base::Version& new_version, |
| bool add_language_identifier, |
| WorkItemList* list); |
| |
| // Helper function for AddGoogleUpdateWorkItems that mirrors oeminstall. |
| void AddOemInstallWorkItems(const InstallationState& original_state, |
| const InstallerState& installer_state, |
| WorkItemList* install_list); |
| |
| // Helper function for AddGoogleUpdateWorkItems that mirrors eulaaccepted. |
| void AddEulaAcceptedWorkItems(const InstallationState& original_state, |
| const InstallerState& installer_state, |
| WorkItemList* install_list); |
| |
| // Adds work items that make registry adjustments for Google Update; namely, |
| // copy brand, oeminstall, and eulaaccepted values; and move a usagestats value. |
| void AddGoogleUpdateWorkItems(const InstallationState& original_state, |
| const InstallerState& installer_state, |
| WorkItemList* install_list); |
| |
| // Adds work items that make registry adjustments for stats and crash |
| // collection. When a product is installed, Google Update may write a |
| // "usagestats" value to Chrome or Chrome Frame's ClientState key. In the |
| // multi-install case, both products will consult/modify stats for the binaries' |
| // app guid. Consequently, during install and update we will move a |
| // product-specific value into the binaries' ClientState key. |
| void AddUsageStatsWorkItems(const InstallationState& original_state, |
| const InstallerState& installer_state, |
| WorkItemList* install_list); |
| |
| // After a successful copying of all the files, this function is called to |
| // do a few post install tasks: |
| // - Handle the case of in-use-update by updating "opv" (old version) key or |
| // deleting it if not required. |
| // - Register any new dlls and unregister old dlls. |
| // - If this is an MSI install, ensures that the MSI marker is set, and sets |
| // it if not. |
| // If these operations are successful, the function returns true, otherwise |
| // false. |
| // |current_version| can be NULL to indicate no Chrome is currently installed. |
| bool AppendPostInstallTasks(const InstallerState& installer_state, |
| const base::FilePath& setup_path, |
| const base::Version* current_version, |
| const base::Version& new_version, |
| const base::FilePath& temp_path, |
| WorkItemList* post_install_task_list); |
| |
| // Builds the complete WorkItemList used to build the set of installation steps |
| // needed to lay down one or more installed products. |
| // |
| // setup_path: Path to the executable (setup.exe) as it will be copied |
| // to Chrome install folder after install is complete |
| // archive_path: Path to the archive (chrome.7z) as it will be copied |
| // to Chrome install folder after install is complete |
| // src_path: the path that contains a complete and unpacked Chrome package |
| // to be installed. |
| // temp_path: the path of working directory used during installation. This path |
| // does not need to exist. |
| // |current_version| can be NULL to indicate no Chrome is currently installed. |
| void AddInstallWorkItems(const InstallationState& original_state, |
| const InstallerState& installer_state, |
| const base::FilePath& setup_path, |
| const base::FilePath& archive_path, |
| const base::FilePath& src_path, |
| const base::FilePath& temp_path, |
| const base::Version* current_version, |
| const base::Version& new_version, |
| WorkItemList* install_list); |
| |
| // Appends registration or unregistration work items to |work_item_list| for the |
| // COM DLLs whose file names are given in |dll_files| and which reside in the |
| // path |dll_folder|. |
| // |system_level| specifies whether to call the system or user level DLL |
| // registration entry points. |
| // |do_register| says whether to register or unregister. |
| // |may_fail| states whether this is best effort or not. If |may_fail| is true |
| // then |work_item_list| will still succeed if the registration fails and |
| // no registration rollback will be performed. |
| void AddRegisterComDllWorkItems(const base::FilePath& dll_folder, |
| const std::vector<base::FilePath>& dll_files, |
| bool system_level, |
| bool do_register, |
| bool ignore_failures, |
| WorkItemList* work_item_list); |
| |
| void AddSetMsiMarkerWorkItem(const InstallerState& installer_state, |
| BrowserDistribution* dist, |
| bool set, |
| WorkItemList* work_item_list); |
| |
| // Called for either installation or uninstallation. This method adds or |
| // removes COM registration for a product's DelegateExecute verb handler. |
| // If |new_version| is empty, the registrations will point to |
| // delegate_execute.exe directly in |target_path|. |
| void AddDelegateExecuteWorkItems(const InstallerState& installer_state, |
| const base::FilePath& target_path, |
| const base::Version& new_version, |
| const Product& product, |
| WorkItemList* list); |
| |
| // Adds Active Setup registration for sytem-level setup to be called by Windows |
| // on user-login post-install/update. |
| // This method should be called for installation only. |
| // |product|: The product being installed. This method is a no-op if this is |
| // anything other than system-level Chrome/Chromium. |
| void AddActiveSetupWorkItems(const InstallerState& installer_state, |
| const base::FilePath& setup_path, |
| const base::Version& new_version, |
| const Product& product, |
| WorkItemList* list); |
| |
| // Unregisters the "opv" version of ChromeLauncher from IE's low rights |
| // elevation policy. |
| void AddDeleteOldIELowRightsPolicyWorkItems( |
| const InstallerState& installer_state, |
| WorkItemList* install_list); |
| |
| // Utility method currently shared between install.cc and install_worker.cc |
| void AppendUninstallCommandLineFlags(const InstallerState& installer_state, |
| const Product& product, |
| base::CommandLine* uninstall_cmd); |
| |
| // Refreshes the elevation policy on platforms where it is supported. |
| void RefreshElevationPolicy(); |
| |
| // Adds work items to add or remove the "on-os-upgrade" command to |product|'s |
| // version key on the basis of the current operation (represented in |
| // |installer_state|). |new_version| is the version of the product(s) |
| // currently being installed -- can be empty on uninstall. |
| void AddOsUpgradeWorkItems(const InstallerState& installer_state, |
| const base::FilePath& setup_path, |
| const base::Version& new_version, |
| const Product& product, |
| WorkItemList* install_list); |
| |
| // Adds work items to add or remove the "query-eula-acceptance" command to |
| // |product|'s version key on the basis of the current operation (represented |
| // in |installer_state|). |new_version| is the version of the product(s) |
| // currently being installed -- can be empty on uninstall. |
| void AddQueryEULAAcceptanceWorkItems(const InstallerState& installer_state, |
| const base::FilePath& setup_path, |
| const base::Version& new_version, |
| const Product& product, |
| WorkItemList* work_item_list); |
| |
| // Adds work items to remove "quick-enable-cf" from the multi-installer |
| // binaries' version key. |
| void AddQuickEnableChromeFrameWorkItems(const InstallerState& installer_state, |
| WorkItemList* work_item_list); |
| |
| } // namespace installer |
| |
| #endif // CHROME_INSTALLER_SETUP_INSTALL_WORKER_H_ |