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 defines the methods useful for uninstalling Chrome. | 5 // This file defines the methods useful for uninstalling Chrome. |
6 | 6 |
7 #include "chrome/installer/setup/uninstall.h" | 7 #include "chrome/installer/setup/uninstall.h" |
8 | 8 |
9 #include <windows.h> | 9 #include <windows.h> |
10 | 10 |
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
470 const std::vector<base::FilePath>& local_state_folders) { | 470 const std::vector<base::FilePath>& local_state_folders) { |
471 base::FilePath backup; | 471 base::FilePath backup; |
472 | 472 |
473 // Copy the first local state file that is found. | 473 // Copy the first local state file that is found. |
474 for (size_t i = 0; i < local_state_folders.size(); ++i) { | 474 for (size_t i = 0; i < local_state_folders.size(); ++i) { |
475 const base::FilePath& local_state_folder = local_state_folders[i]; | 475 const base::FilePath& local_state_folder = local_state_folders[i]; |
476 base::FilePath state_file( | 476 base::FilePath state_file( |
477 local_state_folder.Append(chrome::kLocalStateFilename)); | 477 local_state_folder.Append(chrome::kLocalStateFilename)); |
478 if (!base::PathExists(state_file)) | 478 if (!base::PathExists(state_file)) |
479 continue; | 479 continue; |
480 if (!file_util::CreateTemporaryFile(&backup)) | 480 if (!base::CreateTemporaryFile(&backup)) |
481 LOG(ERROR) << "Failed to create temporary file for Local State."; | 481 LOG(ERROR) << "Failed to create temporary file for Local State."; |
482 else | 482 else |
483 base::CopyFile(state_file, backup); | 483 base::CopyFile(state_file, backup); |
484 break; | 484 break; |
485 } | 485 } |
486 return backup; | 486 return backup; |
487 } | 487 } |
488 | 488 |
489 // Deletes all user data directories for a product. | 489 // Deletes all user data directories for a product. |
490 DeleteResult DeleteLocalState( | 490 DeleteResult DeleteLocalState( |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
528 // to change the current directory to the TMP directory. On Windows, each | 528 // to change the current directory to the TMP directory. On Windows, each |
529 // process has a handle to its CWD. If setup.exe's CWD happens to be within the | 529 // process has a handle to its CWD. If setup.exe's CWD happens to be within the |
530 // install directory, deletion will fail as a result of the open handle. | 530 // install directory, deletion will fail as a result of the open handle. |
531 bool MoveSetupOutOfInstallFolder(const InstallerState& installer_state, | 531 bool MoveSetupOutOfInstallFolder(const InstallerState& installer_state, |
532 const base::FilePath& setup_exe) { | 532 const base::FilePath& setup_exe) { |
533 bool ret = false; | 533 bool ret = false; |
534 base::FilePath tmp_dir; | 534 base::FilePath tmp_dir; |
535 base::FilePath temp_file; | 535 base::FilePath temp_file; |
536 if (!PathService::Get(base::DIR_TEMP, &tmp_dir)) { | 536 if (!PathService::Get(base::DIR_TEMP, &tmp_dir)) { |
537 NOTREACHED(); | 537 NOTREACHED(); |
538 } else if (!file_util::CreateTemporaryFileInDir(tmp_dir, &temp_file)) { | 538 } else if (!base::CreateTemporaryFileInDir(tmp_dir, &temp_file)) { |
539 LOG(ERROR) << "Failed to create temporary file for setup.exe."; | 539 LOG(ERROR) << "Failed to create temporary file for setup.exe."; |
540 } else { | 540 } else { |
541 VLOG(1) << "Changing current directory to: " << tmp_dir.value(); | 541 VLOG(1) << "Changing current directory to: " << tmp_dir.value(); |
542 if (!file_util::SetCurrentDirectory(tmp_dir)) | 542 if (!file_util::SetCurrentDirectory(tmp_dir)) |
543 PLOG(ERROR) << "Failed to change the current directory."; | 543 PLOG(ERROR) << "Failed to change the current directory."; |
544 | 544 |
545 VLOG(1) << "Attempting to move setup to: " << temp_file.value(); | 545 VLOG(1) << "Attempting to move setup to: " << temp_file.value(); |
546 ret = base::Move(setup_exe, temp_file); | 546 ret = base::Move(setup_exe, temp_file); |
547 PLOG_IF(ERROR, !ret) << "Failed to move setup to " << temp_file.value(); | 547 PLOG_IF(ERROR, !ret) << "Failed to move setup to " << temp_file.value(); |
548 | 548 |
(...skipping 944 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1493 // If we need a reboot to continue, schedule the parent directories for | 1493 // If we need a reboot to continue, schedule the parent directories for |
1494 // deletion unconditionally. If they are not empty, the session manager | 1494 // deletion unconditionally. If they are not empty, the session manager |
1495 // will not delete them on reboot. | 1495 // will not delete them on reboot. |
1496 ScheduleParentAndGrandparentForDeletion(target_path); | 1496 ScheduleParentAndGrandparentForDeletion(target_path); |
1497 } else if (DeleteChromeDirectoriesIfEmpty(target_path) == DELETE_FAILED) { | 1497 } else if (DeleteChromeDirectoriesIfEmpty(target_path) == DELETE_FAILED) { |
1498 *uninstall_status = UNINSTALL_FAILED; | 1498 *uninstall_status = UNINSTALL_FAILED; |
1499 } | 1499 } |
1500 } | 1500 } |
1501 | 1501 |
1502 } // namespace installer | 1502 } // namespace installer |
OLD | NEW |