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> |
(...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
474 set_ignore_failure(true); | 474 set_ignore_failure(true); |
475 } | 475 } |
476 } | 476 } |
477 | 477 |
478 // Delete any new_chrome.exe if present (we will end up creating a new one | 478 // Delete any new_chrome.exe if present (we will end up creating a new one |
479 // if required) and then copy chrome.exe | 479 // if required) and then copy chrome.exe |
480 base::FilePath new_chrome_exe(target_path.Append(installer::kChromeNewExe)); | 480 base::FilePath new_chrome_exe(target_path.Append(installer::kChromeNewExe)); |
481 | 481 |
482 install_list->AddDeleteTreeWorkItem(new_chrome_exe, temp_path); | 482 install_list->AddDeleteTreeWorkItem(new_chrome_exe, temp_path); |
483 | 483 |
| 484 // TODO(grt): Remove this check in M35. |
484 if (installer_state.IsChromeFrameRunning(original_state)) { | 485 if (installer_state.IsChromeFrameRunning(original_state)) { |
485 VLOG(1) << "Chrome Frame in use. Copying to new_chrome.exe"; | 486 VLOG(1) << "Chrome Frame in use. Copying to new_chrome.exe"; |
486 install_list->AddCopyTreeWorkItem( | 487 install_list->AddCopyTreeWorkItem( |
487 src_path.Append(installer::kChromeExe).value(), | 488 src_path.Append(installer::kChromeExe).value(), |
488 new_chrome_exe.value(), | 489 new_chrome_exe.value(), |
489 temp_path.value(), | 490 temp_path.value(), |
490 WorkItem::ALWAYS); | 491 WorkItem::ALWAYS); |
491 } else { | 492 } else { |
492 install_list->AddCopyTreeWorkItem( | 493 install_list->AddCopyTreeWorkItem( |
493 src_path.Append(installer::kChromeExe).value(), | 494 src_path.Append(installer::kChromeExe).value(), |
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
909 // For system-level installs, make sure the ClientStateMedium key for the | 910 // For system-level installs, make sure the ClientStateMedium key for the |
910 // binaries exists. | 911 // binaries exists. |
911 if (system_install) { | 912 if (system_install) { |
912 install_list->AddCreateRegKeyWorkItem( | 913 install_list->AddCreateRegKeyWorkItem( |
913 root_key, | 914 root_key, |
914 installer_state.multi_package_binaries_distribution()-> | 915 installer_state.multi_package_binaries_distribution()-> |
915 GetStateMediumKey().c_str()); | 916 GetStateMediumKey().c_str()); |
916 } | 917 } |
917 | 918 |
918 // Creating the ClientState key for binaries, if we're migrating to multi then | 919 // Creating the ClientState key for binaries, if we're migrating to multi then |
919 // copy over Chrome's brand code if it has one. Chrome Frame currently never | 920 // copy over Chrome's brand code if it has one. |
920 // has a brand code. | |
921 if (installer_state.state_type() != BrowserDistribution::CHROME_BINARIES) { | 921 if (installer_state.state_type() != BrowserDistribution::CHROME_BINARIES) { |
922 const ProductState* chrome_product_state = | 922 const ProductState* chrome_product_state = |
923 original_state.GetNonVersionedProductState( | 923 original_state.GetNonVersionedProductState( |
924 system_install, BrowserDistribution::CHROME_BROWSER); | 924 system_install, BrowserDistribution::CHROME_BROWSER); |
925 | 925 |
926 const string16& brand(chrome_product_state->brand()); | 926 const string16& brand(chrome_product_state->brand()); |
927 if (!brand.empty()) { | 927 if (!brand.empty()) { |
928 install_list->AddCreateRegKeyWorkItem(root_key, multi_key); | 928 install_list->AddCreateRegKeyWorkItem(root_key, multi_key); |
929 // Write Chrome's brand code to the multi key. Never overwrite the value | 929 // Write Chrome's brand code to the multi key. Never overwrite the value |
930 // if one is already present (although this shouldn't happen). | 930 // if one is already present (although this shouldn't happen). |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1065 // values. | 1065 // values. |
1066 if (dist->GetType() != BrowserDistribution::CHROME_BINARIES) { | 1066 if (dist->GetType() != BrowserDistribution::CHROME_BINARIES) { |
1067 CommandLine product_rename_cmd(rename); | 1067 CommandLine product_rename_cmd(rename); |
1068 products[i]->AppendRenameFlags(&product_rename_cmd); | 1068 products[i]->AppendRenameFlags(&product_rename_cmd); |
1069 in_use_update_work_items->AddSetRegValueWorkItem( | 1069 in_use_update_work_items->AddSetRegValueWorkItem( |
1070 root, version_key, google_update::kRegRenameCmdField, | 1070 root, version_key, google_update::kRegRenameCmdField, |
1071 product_rename_cmd.GetCommandLineString(), true); | 1071 product_rename_cmd.GetCommandLineString(), true); |
1072 } | 1072 } |
1073 } | 1073 } |
1074 | 1074 |
1075 if (installer_state.FindProduct(BrowserDistribution::CHROME_FRAME)) { | |
1076 AddCopyIELowRightsPolicyWorkItems(installer_state, | |
1077 in_use_update_work_items.get()); | |
1078 } | |
1079 | |
1080 post_install_task_list->AddWorkItem(in_use_update_work_items.release()); | 1075 post_install_task_list->AddWorkItem(in_use_update_work_items.release()); |
1081 } | 1076 } |
1082 | 1077 |
1083 // Append work items that will be executed if this was NOT an in-use update. | 1078 // Append work items that will be executed if this was NOT an in-use update. |
1084 { | 1079 { |
1085 scoped_ptr<WorkItemList> regular_update_work_items( | 1080 scoped_ptr<WorkItemList> regular_update_work_items( |
1086 WorkItem::CreateConditionalWorkItemList( | 1081 WorkItem::CreateConditionalWorkItemList( |
1087 new Not(new ConditionRunIfFileExists(new_chrome_exe)))); | 1082 new Not(new ConditionRunIfFileExists(new_chrome_exe)))); |
1088 regular_update_work_items->set_log_message("RegularUpdateWorkItemList"); | 1083 regular_update_work_items->set_log_message("RegularUpdateWorkItemList"); |
1089 | 1084 |
1090 // Since this was not an in-use-update, delete 'opv', 'cpv', and 'cmd' keys. | 1085 // Since this was not an in-use-update, delete 'opv', 'cpv', and 'cmd' keys. |
1091 for (size_t i = 0; i < products.size(); ++i) { | 1086 for (size_t i = 0; i < products.size(); ++i) { |
1092 BrowserDistribution* dist = products[i]->distribution(); | 1087 BrowserDistribution* dist = products[i]->distribution(); |
1093 string16 version_key(dist->GetVersionKey()); | 1088 string16 version_key(dist->GetVersionKey()); |
1094 regular_update_work_items->AddDeleteRegValueWorkItem(root, version_key, | 1089 regular_update_work_items->AddDeleteRegValueWorkItem(root, version_key, |
1095 google_update::kRegOldVersionField); | 1090 google_update::kRegOldVersionField); |
1096 regular_update_work_items->AddDeleteRegValueWorkItem(root, version_key, | 1091 regular_update_work_items->AddDeleteRegValueWorkItem(root, version_key, |
1097 google_update::kRegCriticalVersionField); | 1092 google_update::kRegCriticalVersionField); |
1098 regular_update_work_items->AddDeleteRegValueWorkItem(root, version_key, | 1093 regular_update_work_items->AddDeleteRegValueWorkItem(root, version_key, |
1099 google_update::kRegRenameCmdField); | 1094 google_update::kRegRenameCmdField); |
1100 } | 1095 } |
1101 | 1096 |
1102 if (installer_state.FindProduct(BrowserDistribution::CHROME_FRAME)) { | |
1103 AddDeleteOldIELowRightsPolicyWorkItems(installer_state, | |
1104 regular_update_work_items.get()); | |
1105 } | |
1106 | |
1107 post_install_task_list->AddWorkItem(regular_update_work_items.release()); | 1097 post_install_task_list->AddWorkItem(regular_update_work_items.release()); |
1108 } | 1098 } |
1109 | 1099 |
1110 AddRegisterComDllWorkItemsForPackage(installer_state, current_version, | 1100 AddRegisterComDllWorkItemsForPackage(installer_state, current_version, |
1111 new_version, post_install_task_list); | 1101 new_version, post_install_task_list); |
1112 | 1102 |
1113 // If we're told that we're an MSI install, make sure to set the marker | 1103 // If we're told that we're an MSI install, make sure to set the marker |
1114 // in the client state key so that future updates do the right thing. | 1104 // in the client state key so that future updates do the right thing. |
1115 if (installer_state.is_msi()) { | 1105 if (installer_state.is_msi()) { |
1116 for (size_t i = 0; i < products.size(); ++i) { | 1106 for (size_t i = 0; i < products.size(); ++i) { |
(...skipping 27 matching lines...) Expand all Loading... |
1144 WorkItemList* install_list) { | 1134 WorkItemList* install_list) { |
1145 DCHECK(install_list); | 1135 DCHECK(install_list); |
1146 | 1136 |
1147 const base::FilePath& target_path = installer_state.target_path(); | 1137 const base::FilePath& target_path = installer_state.target_path(); |
1148 | 1138 |
1149 // A temp directory that work items need and the actual install directory. | 1139 // A temp directory that work items need and the actual install directory. |
1150 install_list->AddCreateDirWorkItem(temp_path); | 1140 install_list->AddCreateDirWorkItem(temp_path); |
1151 install_list->AddCreateDirWorkItem(target_path); | 1141 install_list->AddCreateDirWorkItem(target_path); |
1152 | 1142 |
1153 if (installer_state.FindProduct(BrowserDistribution::CHROME_BROWSER) || | 1143 if (installer_state.FindProduct(BrowserDistribution::CHROME_BROWSER) || |
1154 installer_state.FindProduct(BrowserDistribution::CHROME_FRAME) || | |
1155 installer_state.FindProduct(BrowserDistribution::CHROME_BINARIES)) { | 1144 installer_state.FindProduct(BrowserDistribution::CHROME_BINARIES)) { |
1156 AddChromeWorkItems(original_state, | 1145 AddChromeWorkItems(original_state, |
1157 installer_state, | 1146 installer_state, |
1158 setup_path, | 1147 setup_path, |
1159 archive_path, | 1148 archive_path, |
1160 src_path, | 1149 src_path, |
1161 temp_path, | 1150 temp_path, |
1162 current_version, | 1151 current_version, |
1163 new_version, | 1152 new_version, |
1164 install_list); | 1153 install_list); |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1379 void AddDeleteOldIELowRightsPolicyWorkItems( | 1368 void AddDeleteOldIELowRightsPolicyWorkItems( |
1380 const InstallerState& installer_state, | 1369 const InstallerState& installer_state, |
1381 WorkItemList* install_list) { | 1370 WorkItemList* install_list) { |
1382 DCHECK(install_list); | 1371 DCHECK(install_list); |
1383 | 1372 |
1384 string16 key_path; | 1373 string16 key_path; |
1385 GetIELowRightsElevationPolicyKeyPath(OLD_ELEVATION_POLICY, &key_path); | 1374 GetIELowRightsElevationPolicyKeyPath(OLD_ELEVATION_POLICY, &key_path); |
1386 install_list->AddDeleteRegKeyWorkItem(installer_state.root_key(), key_path); | 1375 install_list->AddDeleteRegKeyWorkItem(installer_state.root_key(), key_path); |
1387 } | 1376 } |
1388 | 1377 |
1389 // Adds work items to copy the chrome_launcher IE low rights elevation policy | |
1390 // from the primary policy GUID to the "old" policy GUID. Take care not to | |
1391 // perform the copy if there is already an old policy present, as the ones under | |
1392 // the main kElevationPolicyGuid would then correspond to an intermediate | |
1393 // version (current_version < pv < new_version). | |
1394 void AddCopyIELowRightsPolicyWorkItems(const InstallerState& installer_state, | |
1395 WorkItemList* install_list) { | |
1396 DCHECK(install_list); | |
1397 | |
1398 string16 current_key_path; | |
1399 string16 old_key_path; | |
1400 | |
1401 GetIELowRightsElevationPolicyKeyPath(CURRENT_ELEVATION_POLICY, | |
1402 ¤t_key_path); | |
1403 GetIELowRightsElevationPolicyKeyPath(OLD_ELEVATION_POLICY, &old_key_path); | |
1404 // Do not clobber existing old policies. | |
1405 install_list->AddCopyRegKeyWorkItem(installer_state.root_key(), | |
1406 current_key_path, old_key_path, | |
1407 WorkItem::IF_NOT_PRESENT); | |
1408 } | |
1409 | |
1410 void AppendUninstallCommandLineFlags(const InstallerState& installer_state, | 1378 void AppendUninstallCommandLineFlags(const InstallerState& installer_state, |
1411 const Product& product, | 1379 const Product& product, |
1412 CommandLine* uninstall_cmd) { | 1380 CommandLine* uninstall_cmd) { |
1413 DCHECK(uninstall_cmd); | 1381 DCHECK(uninstall_cmd); |
1414 | 1382 |
1415 uninstall_cmd->AppendSwitch(installer::switches::kUninstall); | 1383 uninstall_cmd->AppendSwitch(installer::switches::kUninstall); |
1416 | 1384 |
1417 // Append the product-specific uninstall flags. | 1385 // Append the product-specific uninstall flags. |
1418 product.AppendProductFlags(uninstall_cmd); | 1386 product.AppendProductFlags(uninstall_cmd); |
1419 if (installer_state.is_msi()) { | 1387 if (installer_state.is_msi()) |
1420 uninstall_cmd->AppendSwitch(installer::switches::kMsi); | 1388 uninstall_cmd->AppendSwitch(installer::switches::kMsi); |
1421 // See comment in uninstall.cc where we check for the kDeleteProfile switch. | |
1422 if (product.is_chrome_frame()) { | |
1423 uninstall_cmd->AppendSwitch(installer::switches::kDeleteProfile); | |
1424 } | |
1425 } | |
1426 if (installer_state.system_install()) | 1389 if (installer_state.system_install()) |
1427 uninstall_cmd->AppendSwitch(installer::switches::kSystemLevel); | 1390 uninstall_cmd->AppendSwitch(installer::switches::kSystemLevel); |
1428 if (installer_state.verbose_logging()) | 1391 if (installer_state.verbose_logging()) |
1429 uninstall_cmd->AppendSwitch(installer::switches::kVerboseLogging); | 1392 uninstall_cmd->AppendSwitch(installer::switches::kVerboseLogging); |
1430 } | 1393 } |
1431 | 1394 |
1432 void RefreshElevationPolicy() { | 1395 void RefreshElevationPolicy() { |
1433 const wchar_t kIEFrameDll[] = L"ieframe.dll"; | 1396 const wchar_t kIEFrameDll[] = L"ieframe.dll"; |
1434 const char kIERefreshPolicy[] = "IERefreshElevationPolicy"; | 1397 const char kIERefreshPolicy[] = "IERefreshElevationPolicy"; |
1435 | 1398 |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1522 // Unconditionally remove the legacy Quick Enable command from the binaries. | 1485 // Unconditionally remove the legacy Quick Enable command from the binaries. |
1523 // Do this even if multi-install Chrome isn't installed to ensure that it is | 1486 // Do this even if multi-install Chrome isn't installed to ensure that it is |
1524 // not left behind in any case. | 1487 // not left behind in any case. |
1525 work_item_list->AddDeleteRegKeyWorkItem( | 1488 work_item_list->AddDeleteRegKeyWorkItem( |
1526 installer_state.root_key(), cmd_key)->set_log_message( | 1489 installer_state.root_key(), cmd_key)->set_log_message( |
1527 "removing " + WideToASCII(kCmdQuickEnableCf) + " command"); | 1490 "removing " + WideToASCII(kCmdQuickEnableCf) + " command"); |
1528 | 1491 |
1529 } | 1492 } |
1530 | 1493 |
1531 } // namespace installer | 1494 } // namespace installer |
OLD | NEW |