| 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 #include "chrome/installer/setup/setup_main.h" | 5 #include "chrome/installer/setup/setup_main.h" |
| 6 | 6 |
| 7 #include <windows.h> | 7 #include <windows.h> |
| 8 #include <msi.h> | 8 #include <msi.h> |
| 9 #include <shellapi.h> | 9 #include <shellapi.h> |
| 10 #include <shlobj.h> | 10 #include <shlobj.h> |
| (...skipping 1481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1492 if (!installer_version.get()) { | 1492 if (!installer_version.get()) { |
| 1493 LOG(ERROR) << "Did not find any valid version in installer."; | 1493 LOG(ERROR) << "Did not find any valid version in installer."; |
| 1494 install_status = INVALID_ARCHIVE; | 1494 install_status = INVALID_ARCHIVE; |
| 1495 installer_state.WriteInstallerResult(install_status, | 1495 installer_state.WriteInstallerResult(install_status, |
| 1496 IDS_INSTALL_INVALID_ARCHIVE_BASE, NULL); | 1496 IDS_INSTALL_INVALID_ARCHIVE_BASE, NULL); |
| 1497 } else { | 1497 } else { |
| 1498 VLOG(1) << "version to install: " << installer_version->GetString(); | 1498 VLOG(1) << "version to install: " << installer_version->GetString(); |
| 1499 bool proceed_with_installation = true; | 1499 bool proceed_with_installation = true; |
| 1500 | 1500 |
| 1501 uint32 higher_products = 0; | 1501 uint32 higher_products = 0; |
| 1502 COMPILE_ASSERT( | 1502 static_assert(sizeof(higher_products) * 8 > BrowserDistribution::NUM_TYPES, |
| 1503 sizeof(higher_products) * 8 > BrowserDistribution::NUM_TYPES, | 1503 "too many distribution types"); |
| 1504 too_many_distribution_types_); | |
| 1505 const Products& products = installer_state.products(); | 1504 const Products& products = installer_state.products(); |
| 1506 for (Products::const_iterator it = products.begin(); it < products.end(); | 1505 for (Products::const_iterator it = products.begin(); it < products.end(); |
| 1507 ++it) { | 1506 ++it) { |
| 1508 const Product& product = **it; | 1507 const Product& product = **it; |
| 1509 const ProductState* product_state = | 1508 const ProductState* product_state = |
| 1510 original_state.GetProductState(system_install, | 1509 original_state.GetProductState(system_install, |
| 1511 product.distribution()->GetType()); | 1510 product.distribution()->GetType()); |
| 1512 if (product_state != NULL && | 1511 if (product_state != NULL && |
| 1513 (product_state->version().CompareTo(*installer_version) > 0)) { | 1512 (product_state->version().CompareTo(*installer_version) > 0)) { |
| 1514 LOG(ERROR) << "Higher version of " | 1513 LOG(ERROR) << "Higher version of " |
| 1515 << product.distribution()->GetDisplayName() | 1514 << product.distribution()->GetDisplayName() |
| 1516 << " is already installed."; | 1515 << " is already installed."; |
| 1517 higher_products |= (1 << product.distribution()->GetType()); | 1516 higher_products |= (1 << product.distribution()->GetType()); |
| 1518 } | 1517 } |
| 1519 } | 1518 } |
| 1520 | 1519 |
| 1521 if (higher_products != 0) { | 1520 if (higher_products != 0) { |
| 1522 COMPILE_ASSERT(BrowserDistribution::NUM_TYPES == 3, | 1521 static_assert(BrowserDistribution::NUM_TYPES == 3, |
| 1523 add_support_for_new_products_here_); | 1522 "add support for new products here"); |
| 1524 int message_id = IDS_INSTALL_HIGHER_VERSION_BASE; | 1523 int message_id = IDS_INSTALL_HIGHER_VERSION_BASE; |
| 1525 proceed_with_installation = false; | 1524 proceed_with_installation = false; |
| 1526 install_status = HIGHER_VERSION_EXISTS; | 1525 install_status = HIGHER_VERSION_EXISTS; |
| 1527 installer_state.WriteInstallerResult(install_status, message_id, NULL); | 1526 installer_state.WriteInstallerResult(install_status, message_id, NULL); |
| 1528 } | 1527 } |
| 1529 | 1528 |
| 1530 if (proceed_with_installation) { | 1529 if (proceed_with_installation) { |
| 1531 base::FilePath prefs_source_path(cmd_line.GetSwitchValueNative( | 1530 base::FilePath prefs_source_path(cmd_line.GetSwitchValueNative( |
| 1532 switches::kInstallerData)); | 1531 switches::kInstallerData)); |
| 1533 install_status = InstallOrUpdateProduct( | 1532 install_status = InstallOrUpdateProduct( |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1825 // Note that we allow the status installer::UNINSTALL_REQUIRES_REBOOT | 1824 // Note that we allow the status installer::UNINSTALL_REQUIRES_REBOOT |
| 1826 // to pass through, since this is only returned on uninstall which is | 1825 // to pass through, since this is only returned on uninstall which is |
| 1827 // never invoked directly by Google Update. | 1826 // never invoked directly by Google Update. |
| 1828 return_code = InstallUtil::GetInstallReturnCode(install_status); | 1827 return_code = InstallUtil::GetInstallReturnCode(install_status); |
| 1829 } | 1828 } |
| 1830 | 1829 |
| 1831 VLOG(1) << "Installation complete, returning: " << return_code; | 1830 VLOG(1) << "Installation complete, returning: " << return_code; |
| 1832 | 1831 |
| 1833 return return_code; | 1832 return return_code; |
| 1834 } | 1833 } |
| OLD | NEW |