OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 // | 4 // |
5 // This file contains the definitions of the installer functions that build | 5 // This file contains the definitions of the installer functions that build |
6 // the WorkItemList used to install the application. | 6 // the WorkItemList used to install the application. |
7 | 7 |
8 #include "chrome/installer/setup/install_worker.h" | 8 #include "chrome/installer/setup/install_worker.h" |
9 | 9 |
10 #include <oaidl.h> | 10 #include <oaidl.h> |
11 #include <shlobj.h> | 11 #include <shlobj.h> |
12 #include <stddef.h> | 12 #include <stddef.h> |
13 #include <stdint.h> | 13 #include <stdint.h> |
14 #include <time.h> | 14 #include <time.h> |
15 | 15 |
| 16 #include <memory> |
16 #include <vector> | 17 #include <vector> |
17 | 18 |
18 #include "base/bind.h" | 19 #include "base/bind.h" |
19 #include "base/command_line.h" | 20 #include "base/command_line.h" |
20 #include "base/files/file_path.h" | 21 #include "base/files/file_path.h" |
21 #include "base/files/file_util.h" | 22 #include "base/files/file_util.h" |
22 #include "base/logging.h" | 23 #include "base/logging.h" |
23 #include "base/macros.h" | 24 #include "base/macros.h" |
24 #include "base/memory/scoped_ptr.h" | |
25 #include "base/path_service.h" | 25 #include "base/path_service.h" |
26 #include "base/strings/string_util.h" | 26 #include "base/strings/string_util.h" |
27 #include "base/strings/utf_string_conversions.h" | 27 #include "base/strings/utf_string_conversions.h" |
28 #include "base/version.h" | 28 #include "base/version.h" |
29 #include "base/win/registry.h" | 29 #include "base/win/registry.h" |
30 #include "base/win/windows_version.h" | 30 #include "base/win/windows_version.h" |
31 #include "chrome/common/chrome_constants.h" | 31 #include "chrome/common/chrome_constants.h" |
32 #include "chrome/common/chrome_switches.h" | 32 #include "chrome/common/chrome_switches.h" |
33 #include "chrome/installer/setup/app_launcher_installer.h" | 33 #include "chrome/installer/setup/app_launcher_installer.h" |
34 #include "chrome/installer/setup/install.h" | 34 #include "chrome/installer/setup/install.h" |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 // case. | 183 // case. |
184 bool AddFirewallRulesCallback(bool system_level, | 184 bool AddFirewallRulesCallback(bool system_level, |
185 BrowserDistribution* dist, | 185 BrowserDistribution* dist, |
186 const base::FilePath& chrome_path, | 186 const base::FilePath& chrome_path, |
187 bool remove_on_rollback, | 187 bool remove_on_rollback, |
188 const CallbackWorkItem& work_item) { | 188 const CallbackWorkItem& work_item) { |
189 // There is no work to do on rollback if this is not a new install. | 189 // There is no work to do on rollback if this is not a new install. |
190 if (work_item.IsRollback() && !remove_on_rollback) | 190 if (work_item.IsRollback() && !remove_on_rollback) |
191 return true; | 191 return true; |
192 | 192 |
193 scoped_ptr<FirewallManager> manager = | 193 std::unique_ptr<FirewallManager> manager = |
194 FirewallManager::Create(dist, chrome_path); | 194 FirewallManager::Create(dist, chrome_path); |
195 if (!manager) { | 195 if (!manager) { |
196 LOG(ERROR) << "Failed creating a FirewallManager. Continuing with install."; | 196 LOG(ERROR) << "Failed creating a FirewallManager. Continuing with install."; |
197 return true; | 197 return true; |
198 } | 198 } |
199 | 199 |
200 if (work_item.IsRollback()) { | 200 if (work_item.IsRollback()) { |
201 manager->RemoveFirewallRules(); | 201 manager->RemoveFirewallRules(); |
202 return true; | 202 return true; |
203 } | 203 } |
(...skipping 694 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
898 HKEY root = installer_state.root_key(); | 898 HKEY root = installer_state.root_key(); |
899 const Products& products = installer_state.products(); | 899 const Products& products = installer_state.products(); |
900 base::FilePath new_chrome_exe( | 900 base::FilePath new_chrome_exe( |
901 installer_state.target_path().Append(installer::kChromeNewExe)); | 901 installer_state.target_path().Append(installer::kChromeNewExe)); |
902 | 902 |
903 // Append work items that will only be executed if this was an update. | 903 // Append work items that will only be executed if this was an update. |
904 // We update the 'opv' value with the current version that is active, | 904 // We update the 'opv' value with the current version that is active, |
905 // the 'cpv' value with the critical update version (if present), and the | 905 // the 'cpv' value with the critical update version (if present), and the |
906 // 'cmd' value with the rename command to run. | 906 // 'cmd' value with the rename command to run. |
907 { | 907 { |
908 scoped_ptr<WorkItemList> in_use_update_work_items( | 908 std::unique_ptr<WorkItemList> in_use_update_work_items( |
909 WorkItem::CreateConditionalWorkItemList( | 909 WorkItem::CreateConditionalWorkItemList( |
910 new ConditionRunIfFileExists(new_chrome_exe))); | 910 new ConditionRunIfFileExists(new_chrome_exe))); |
911 in_use_update_work_items->set_log_message("InUseUpdateWorkItemList"); | 911 in_use_update_work_items->set_log_message("InUseUpdateWorkItemList"); |
912 | 912 |
913 // |critical_version| will be valid only if this in-use update includes a | 913 // |critical_version| will be valid only if this in-use update includes a |
914 // version considered critical relative to the version being updated. | 914 // version considered critical relative to the version being updated. |
915 Version critical_version(installer_state.DetermineCriticalVersion( | 915 Version critical_version(installer_state.DetermineCriticalVersion( |
916 current_version, new_version)); | 916 current_version, new_version)); |
917 base::FilePath installer_path( | 917 base::FilePath installer_path( |
918 installer_state.GetInstallerDirectory(new_version).Append( | 918 installer_state.GetInstallerDirectory(new_version).Append( |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
972 product_rename_cmd.GetCommandLineString(), | 972 product_rename_cmd.GetCommandLineString(), |
973 true); | 973 true); |
974 } | 974 } |
975 } | 975 } |
976 | 976 |
977 post_install_task_list->AddWorkItem(in_use_update_work_items.release()); | 977 post_install_task_list->AddWorkItem(in_use_update_work_items.release()); |
978 } | 978 } |
979 | 979 |
980 // Append work items that will be executed if this was NOT an in-use update. | 980 // Append work items that will be executed if this was NOT an in-use update. |
981 { | 981 { |
982 scoped_ptr<WorkItemList> regular_update_work_items( | 982 std::unique_ptr<WorkItemList> regular_update_work_items( |
983 WorkItem::CreateConditionalWorkItemList( | 983 WorkItem::CreateConditionalWorkItemList( |
984 new Not(new ConditionRunIfFileExists(new_chrome_exe)))); | 984 new Not(new ConditionRunIfFileExists(new_chrome_exe)))); |
985 regular_update_work_items->set_log_message("RegularUpdateWorkItemList"); | 985 regular_update_work_items->set_log_message("RegularUpdateWorkItemList"); |
986 | 986 |
987 // Since this was not an in-use-update, delete 'opv', 'cpv', and 'cmd' keys. | 987 // Since this was not an in-use-update, delete 'opv', 'cpv', and 'cmd' keys. |
988 for (size_t i = 0; i < products.size(); ++i) { | 988 for (size_t i = 0; i < products.size(); ++i) { |
989 BrowserDistribution* dist = products[i]->distribution(); | 989 BrowserDistribution* dist = products[i]->distribution(); |
990 base::string16 version_key(dist->GetVersionKey()); | 990 base::string16 version_key(dist->GetVersionKey()); |
991 regular_update_work_items->AddDeleteRegValueWorkItem( | 991 regular_update_work_items->AddDeleteRegValueWorkItem( |
992 root, | 992 root, |
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1354 // Unconditionally remove the legacy Quick Enable command from the binaries. | 1354 // Unconditionally remove the legacy Quick Enable command from the binaries. |
1355 // Do this even if multi-install Chrome isn't installed to ensure that it is | 1355 // Do this even if multi-install Chrome isn't installed to ensure that it is |
1356 // not left behind in any case. | 1356 // not left behind in any case. |
1357 work_item_list->AddDeleteRegKeyWorkItem( | 1357 work_item_list->AddDeleteRegKeyWorkItem( |
1358 installer_state.root_key(), cmd_key, KEY_WOW64_32KEY) | 1358 installer_state.root_key(), cmd_key, KEY_WOW64_32KEY) |
1359 ->set_log_message("removing " + base::UTF16ToASCII(kCmdQuickEnableCf) + | 1359 ->set_log_message("removing " + base::UTF16ToASCII(kCmdQuickEnableCf) + |
1360 " command"); | 1360 " command"); |
1361 } | 1361 } |
1362 | 1362 |
1363 } // namespace installer | 1363 } // namespace installer |
OLD | NEW |