Home | History | Annotate | Download | only in setup
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 //
      5 // This file contains the declarations of the installer functions that build
      6 // the WorkItemList used to install the application.
      7 
      8 #ifndef CHROME_INSTALLER_SETUP_INSTALL_WORKER_H_
      9 #define CHROME_INSTALLER_SETUP_INSTALL_WORKER_H_
     10 
     11 #include <windows.h>
     12 
     13 #include <vector>
     14 
     15 #include "base/strings/string16.h"
     16 
     17 class BrowserDistribution;
     18 class WorkItemList;
     19 
     20 namespace base {
     21 class CommandLine;
     22 class FilePath;
     23 class Version;
     24 }
     25 
     26 namespace installer {
     27 
     28 class InstallationState;
     29 class InstallerState;
     30 class Product;
     31 
     32 // This method adds work items to create (or update) Chrome uninstall entry in
     33 // either the Control Panel->Add/Remove Programs list or in the Omaha client
     34 // state key if running under an MSI installer.
     35 void AddUninstallShortcutWorkItems(const InstallerState& installer_state,
     36                                    const base::FilePath& setup_path,
     37                                    const base::Version& new_version,
     38                                    const Product& product,
     39                                    WorkItemList* install_list);
     40 
     41 // Creates Version key for a product (if not already present) and sets the new
     42 // product version as the last step.  If |add_language_identifier| is true, the
     43 // "lang" value is also set according to the currently selected translation.
     44 void AddVersionKeyWorkItems(HKEY root,
     45                             const base::string16& version_key,
     46                             const base::string16& product_name,
     47                             const base::Version& new_version,
     48                             bool add_language_identifier,
     49                             WorkItemList* list);
     50 
     51 // Helper function for AddGoogleUpdateWorkItems that mirrors oeminstall.
     52 void AddOemInstallWorkItems(const InstallationState& original_state,
     53                             const InstallerState& installer_state,
     54                             WorkItemList* install_list);
     55 
     56 // Helper function for AddGoogleUpdateWorkItems that mirrors eulaaccepted.
     57 void AddEulaAcceptedWorkItems(const InstallationState& original_state,
     58                               const InstallerState& installer_state,
     59                               WorkItemList* install_list);
     60 
     61 // Adds work items that make registry adjustments for Google Update; namely,
     62 // copy brand, oeminstall, and eulaaccepted values; and move a usagestats value.
     63 void AddGoogleUpdateWorkItems(const InstallationState& original_state,
     64                               const InstallerState& installer_state,
     65                               WorkItemList* install_list);
     66 
     67 // Adds work items that make registry adjustments for stats and crash
     68 // collection.  When a product is installed, Google Update may write a
     69 // "usagestats" value to Chrome or Chrome Frame's ClientState key.  In the
     70 // multi-install case, both products will consult/modify stats for the binaries'
     71 // app guid.  Consequently, during install and update we will move a
     72 // product-specific value into the binaries' ClientState key.
     73 void AddUsageStatsWorkItems(const InstallationState& original_state,
     74                             const InstallerState& installer_state,
     75                             WorkItemList* install_list);
     76 
     77 // After a successful copying of all the files, this function is called to
     78 // do a few post install tasks:
     79 // - Handle the case of in-use-update by updating "opv" (old version) key or
     80 //   deleting it if not required.
     81 // - Register any new dlls and unregister old dlls.
     82 // - If this is an MSI install, ensures that the MSI marker is set, and sets
     83 //   it if not.
     84 // If these operations are successful, the function returns true, otherwise
     85 // false.
     86 // |current_version| can be NULL to indicate no Chrome is currently installed.
     87 bool AppendPostInstallTasks(const InstallerState& installer_state,
     88                             const base::FilePath& setup_path,
     89                             const base::Version* current_version,
     90                             const base::Version& new_version,
     91                             const base::FilePath& temp_path,
     92                             WorkItemList* post_install_task_list);
     93 
     94 // Builds the complete WorkItemList used to build the set of installation steps
     95 // needed to lay down one or more installed products.
     96 //
     97 // setup_path: Path to the executable (setup.exe) as it will be copied
     98 //           to Chrome install folder after install is complete
     99 // archive_path: Path to the archive (chrome.7z) as it will be copied
    100 //               to Chrome install folder after install is complete
    101 // src_path: the path that contains a complete and unpacked Chrome package
    102 //           to be installed.
    103 // temp_path: the path of working directory used during installation. This path
    104 //            does not need to exist.
    105 // |current_version| can be NULL to indicate no Chrome is currently installed.
    106 void AddInstallWorkItems(const InstallationState& original_state,
    107                          const InstallerState& installer_state,
    108                          const base::FilePath& setup_path,
    109                          const base::FilePath& archive_path,
    110                          const base::FilePath& src_path,
    111                          const base::FilePath& temp_path,
    112                          const base::Version* current_version,
    113                          const base::Version& new_version,
    114                          WorkItemList* install_list);
    115 
    116 // Appends registration or unregistration work items to |work_item_list| for the
    117 // COM DLLs whose file names are given in |dll_files| and which reside in the
    118 // path |dll_folder|.
    119 // |system_level| specifies whether to call the system or user level DLL
    120 // registration entry points.
    121 // |do_register| says whether to register or unregister.
    122 // |may_fail| states whether this is best effort or not. If |may_fail| is true
    123 // then |work_item_list| will still succeed if the registration fails and
    124 // no registration rollback will be performed.
    125 void AddRegisterComDllWorkItems(const base::FilePath& dll_folder,
    126                                 const std::vector<base::FilePath>& dll_files,
    127                                 bool system_level,
    128                                 bool do_register,
    129                                 bool ignore_failures,
    130                                 WorkItemList* work_item_list);
    131 
    132 void AddSetMsiMarkerWorkItem(const InstallerState& installer_state,
    133                              BrowserDistribution* dist,
    134                              bool set,
    135                              WorkItemList* work_item_list);
    136 
    137 // Called for either installation or uninstallation. This method adds or
    138 // removes COM registration for a product's DelegateExecute verb handler.
    139 // If |new_version| is empty, the registrations will point to
    140 // delegate_execute.exe directly in |target_path|.
    141 void AddDelegateExecuteWorkItems(const InstallerState& installer_state,
    142                                  const base::FilePath& target_path,
    143                                  const base::Version& new_version,
    144                                  const Product& product,
    145                                  WorkItemList* list);
    146 
    147 // Adds Active Setup registration for sytem-level setup to be called by Windows
    148 // on user-login post-install/update.
    149 // This method should be called for installation only.
    150 // |product|: The product being installed. This method is a no-op if this is
    151 // anything other than system-level Chrome/Chromium.
    152 void AddActiveSetupWorkItems(const InstallerState& installer_state,
    153                              const base::FilePath& setup_path,
    154                              const base::Version& new_version,
    155                              const Product& product,
    156                              WorkItemList* list);
    157 
    158 // Unregisters the "opv" version of ChromeLauncher from IE's low rights
    159 // elevation policy.
    160 void AddDeleteOldIELowRightsPolicyWorkItems(
    161     const InstallerState& installer_state,
    162     WorkItemList* install_list);
    163 
    164 // Utility method currently shared between install.cc and install_worker.cc
    165 void AppendUninstallCommandLineFlags(const InstallerState& installer_state,
    166                                      const Product& product,
    167                                      base::CommandLine* uninstall_cmd);
    168 
    169 // Refreshes the elevation policy on platforms where it is supported.
    170 void RefreshElevationPolicy();
    171 
    172 // Adds work items to add or remove the "on-os-upgrade" command to |product|'s
    173 // version key on the basis of the current operation (represented in
    174 // |installer_state|).  |new_version| is the version of the product(s)
    175 // currently being installed -- can be empty on uninstall.
    176 void AddOsUpgradeWorkItems(const InstallerState& installer_state,
    177                            const base::FilePath& setup_path,
    178                            const base::Version& new_version,
    179                            const Product& product,
    180                            WorkItemList* install_list);
    181 
    182 // Adds work items to add or remove the "query-eula-acceptance" command to
    183 // |product|'s version key on the basis of the current operation (represented
    184 // in |installer_state|).  |new_version| is the version of the product(s)
    185 // currently being installed -- can be empty on uninstall.
    186 void AddQueryEULAAcceptanceWorkItems(const InstallerState& installer_state,
    187                                      const base::FilePath& setup_path,
    188                                      const base::Version& new_version,
    189                                      const Product& product,
    190                                      WorkItemList* work_item_list);
    191 
    192 // Adds work items to remove "quick-enable-cf" from the multi-installer
    193 // binaries' version key.
    194 void AddQuickEnableChromeFrameWorkItems(const InstallerState& installer_state,
    195                                         WorkItemList* work_item_list);
    196 
    197 }  // namespace installer
    198 
    199 #endif  // CHROME_INSTALLER_SETUP_INSTALL_WORKER_H_
    200