Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(310)

Side by Side Diff: chrome/installer/setup/setup_main.cc

Issue 11267023: Implementing --app-launcher install/uninstall flow. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 <windows.h> 5 #include <windows.h>
6 #include <msi.h> 6 #include <msi.h>
7 #include <shellapi.h> 7 #include <shellapi.h>
8 #include <shlobj.h> 8 #include <shlobj.h>
9 9
10 #include "base/at_exit.h" 10 #include "base/at_exit.h"
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 const Product* binaries = 354 const Product* binaries =
355 installer_state->FindProduct(BrowserDistribution::CHROME_BINARIES); 355 installer_state->FindProduct(BrowserDistribution::CHROME_BINARIES);
356 const Product* chrome_frame = 356 const Product* chrome_frame =
357 installer_state->FindProduct(BrowserDistribution::CHROME_FRAME); 357 installer_state->FindProduct(BrowserDistribution::CHROME_FRAME);
358 const ProductState* cf_state = 358 const ProductState* cf_state =
359 original_state.GetProductState(system_level, 359 original_state.GetProductState(system_level,
360 BrowserDistribution::CHROME_FRAME); 360 BrowserDistribution::CHROME_FRAME);
361 const ProductState* chrome_state = 361 const ProductState* chrome_state =
362 original_state.GetProductState(system_level, 362 original_state.GetProductState(system_level,
363 BrowserDistribution::CHROME_BROWSER); 363 BrowserDistribution::CHROME_BROWSER);
364 const ProductState* app_host_state =
365 original_state.GetProductState(system_level,
366 BrowserDistribution::CHROME_APP_HOST);
364 367
365 if (!binaries) { 368 if (!binaries) {
366 // This will only be hit if --multi-install is given with no products, or 369 // This will only be hit if --multi-install is given with no products, or
367 // if the app host is being installed and doesn't need the binaries at 370 // if the app host is being installed and doesn't need the binaries at
368 // user-level. 371 // user-level.
369 // The former case might be due to a request by an orphaned Application 372 // The former case might be due to a request by an orphaned Application
370 // Host to re-install the binaries. Thus we add them to the installation. 373 // Host to re-install the binaries. Thus we add them to the installation.
371 // The latter case is fine and we let it be. 374 // The latter case is fine and we let it be.
372 // If this is not an app host install and the binaries are not already 375 // If this is not an app host install and the binaries are not already
373 // present, the installation will fail later due to a lack of products to 376 // present, the installation will fail later due to a lack of products to
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 // Fail if we're installing Chrome Frame when a single-install of it is 448 // Fail if we're installing Chrome Frame when a single-install of it is
446 // already installed. 449 // already installed.
447 if (chrome_frame && cf_state && !cf_state->is_multi_install()) { 450 if (chrome_frame && cf_state && !cf_state->is_multi_install()) {
448 LOG(ERROR) << "Cannot migrate existing Chrome Frame installation to " 451 LOG(ERROR) << "Cannot migrate existing Chrome Frame installation to "
449 << "multi-install."; 452 << "multi-install.";
450 *status = installer::NON_MULTI_INSTALLATION_EXISTS; 453 *status = installer::NON_MULTI_INSTALLATION_EXISTS;
451 installer_state->WriteInstallerResult(*status, 454 installer_state->WriteInstallerResult(*status,
452 IDS_INSTALL_NON_MULTI_INSTALLATION_EXISTS_BASE, NULL); 455 IDS_INSTALL_NON_MULTI_INSTALLATION_EXISTS_BASE, NULL);
453 return false; 456 return false;
454 } 457 }
458
459 if (app_host) {
460 // TODO(huangs): Revisit all these once App Launcher is default.
461 if (app_host_state) {
462 const installer::ChannelInfo& channel_info(app_host_state->channel());
grt (UTC plus 2) 2012/10/25 14:46:53 same here: don't use the channel info for this. c
huangs 2012/10/29 21:15:16 Done.
463 if (channel_info.IsAppLauncher() &&
464 !app_host->HasOption(installer::kOptionAppLauncher)) {
465 LOG(ERROR) << "Cannot downgrade from App Launcher to App Host";
466 *status = installer::HIGHER_VERSION_EXISTS;
grt (UTC plus 2) 2012/10/25 14:46:53 please introduce a new code rather than overloadin
huangs 2012/10/29 21:15:16 Not doing this anymore, so moot.
467 return false;
468 }
469 }
470 }
471
455 } else { 472 } else {
456 // This is a non-multi installation. 473 // This is a non-multi installation.
457 474
458 // Check for an existing installation of the product. 475 // Check for an existing installation of the product.
459 const ProductState* product_state = original_state.GetProductState( 476 const ProductState* product_state = original_state.GetProductState(
460 system_level, products[0]->distribution()->GetType()); 477 system_level, products[0]->distribution()->GetType());
461 if (product_state != NULL) { 478 if (product_state != NULL) {
462 // Block downgrades from multi-install to single-install. 479 // Block downgrades from multi-install to single-install.
463 if (product_state->is_multi_install()) { 480 if (product_state->is_multi_install()) {
464 LOG(ERROR) << "Multi-install " 481 LOG(ERROR) << "Multi-install "
(...skipping 959 matching lines...) Expand 10 before | Expand all | Expand 10 after
1424 prefs.GetBool(installer::master_preferences::kSystemLevel, &system_install); 1441 prefs.GetBool(installer::master_preferences::kSystemLevel, &system_install);
1425 VLOG(1) << "system install is " << system_install; 1442 VLOG(1) << "system install is " << system_install;
1426 1443
1427 google_breakpad::scoped_ptr<google_breakpad::ExceptionHandler> breakpad( 1444 google_breakpad::scoped_ptr<google_breakpad::ExceptionHandler> breakpad(
1428 InitializeCrashReporting(system_install)); 1445 InitializeCrashReporting(system_install));
1429 1446
1430 InstallationState original_state; 1447 InstallationState original_state;
1431 original_state.Initialize(); 1448 original_state.Initialize();
1432 1449
1433 InstallerState installer_state; 1450 InstallerState installer_state;
1434 installer_state.Initialize(cmd_line, prefs, original_state); 1451 if (!installer_state.Initialize(cmd_line, prefs, original_state)) {
1452 LOG(ERROR) << "Conflicting options are found.";
1453 // TODO(huangs): Find better error code!
1454 return installer::INSTALL_FAILED;
1455 }
1435 const bool is_uninstall = cmd_line.HasSwitch(installer::switches::kUninstall); 1456 const bool is_uninstall = cmd_line.HasSwitch(installer::switches::kUninstall);
1436 1457
1437 // Check to make sure current system is WinXP or later. If not, log 1458 // Check to make sure current system is WinXP or later. If not, log
1438 // error message and get out. 1459 // error message and get out.
1439 if (!InstallUtil::IsOSSupported()) { 1460 if (!InstallUtil::IsOSSupported()) {
1440 LOG(ERROR) << "Chrome only supports Windows XP or later."; 1461 LOG(ERROR) << "Chrome only supports Windows XP or later.";
1441 installer_state.WriteInstallerResult( 1462 installer_state.WriteInstallerResult(
1442 installer::OS_NOT_SUPPORTED, IDS_INSTALL_OS_NOT_SUPPORTED_BASE, NULL); 1463 installer::OS_NOT_SUPPORTED, IDS_INSTALL_OS_NOT_SUPPORTED_BASE, NULL);
1443 return installer::OS_NOT_SUPPORTED; 1464 return installer::OS_NOT_SUPPORTED;
1444 } 1465 }
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
1551 if (!(installer_state.is_msi() && is_uninstall)) 1572 if (!(installer_state.is_msi() && is_uninstall))
1552 // Note that we allow the status installer::UNINSTALL_REQUIRES_REBOOT 1573 // Note that we allow the status installer::UNINSTALL_REQUIRES_REBOOT
1553 // to pass through, since this is only returned on uninstall which is 1574 // to pass through, since this is only returned on uninstall which is
1554 // never invoked directly by Google Update. 1575 // never invoked directly by Google Update.
1555 return_code = InstallUtil::GetInstallReturnCode(install_status); 1576 return_code = InstallUtil::GetInstallReturnCode(install_status);
1556 1577
1557 VLOG(1) << "Installation complete, returning: " << return_code; 1578 VLOG(1) << "Installation complete, returning: " << return_code;
1558 1579
1559 return return_code; 1580 return return_code;
1560 } 1581 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698