summaryrefslogtreecommitdiffstats
path: root/chrome/installer/util
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-15 05:09:50 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-15 05:09:50 +0000
commit66ff7356a381d6c8c6c3272b095938408c4f3188 (patch)
tree9c3ae2fb0d55d1d9650a8071d1c80c557e7f0d93 /chrome/installer/util
parent2c8088a4452c2c204237ba9f2f3706e7eeaaf35b (diff)
downloadchromium_src-66ff7356a381d6c8c6c3272b095938408c4f3188.zip
chromium_src-66ff7356a381d6c8c6c3272b095938408c4f3188.tar.gz
chromium_src-66ff7356a381d6c8c6c3272b095938408c4f3188.tar.bz2
Re-try r29078: Remove some deprecated file_util wstring functions.
With the previous patch, the try bots failed with mysterious messages, so I ignored them, patched it into my windows box and tested it there manually, and found no problems. As it turns out, the try failures were real :(. But nsylvain and I found the problem: the behavior of file_util::GetDirectoryFromPath() differs from DirName() when the path is empty (officially, GetDirectoryFromPath is not supposed to support non-absolute paths, but that is not enforced). Here is a green win try result: http://build.chromium.org/buildbot/try-server/builders/win/builds/3705 mac: http://build.chromium.org/buildbot/try-server/builders/mac/builds/3491 linux: http://build.chromium.org/buildbot/try-server/builders/linux/builds/3466 I also applied this patch locally in Windows to test that it doesn't break the chrome frame compile or tests, since that's not covered by the trybots yet. Review URL: http://codereview.chromium.org/271099 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@29094 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/installer/util')
-rw-r--r--chrome/installer/util/copy_tree_work_item.cc53
-rw-r--r--chrome/installer/util/copy_tree_work_item.h14
-rw-r--r--chrome/installer/util/copy_tree_work_item_unittest.cc8
-rw-r--r--chrome/installer/util/delete_after_reboot_helper.cc2
-rw-r--r--chrome/installer/util/delete_tree_work_item.cc31
-rw-r--r--chrome/installer/util/delete_tree_work_item.h12
-rw-r--r--chrome/installer/util/move_tree_work_item.cc31
-rw-r--r--chrome/installer/util/move_tree_work_item.h8
-rw-r--r--chrome/installer/util/shell_util.cc4
9 files changed, 85 insertions, 78 deletions
diff --git a/chrome/installer/util/copy_tree_work_item.cc b/chrome/installer/util/copy_tree_work_item.cc
index ffb3d34..22007990 100644
--- a/chrome/installer/util/copy_tree_work_item.cc
+++ b/chrome/installer/util/copy_tree_work_item.cc
@@ -31,7 +31,7 @@ CopyTreeWorkItem::CopyTreeWorkItem(const std::wstring& source_path,
bool CopyTreeWorkItem::Do() {
if (!file_util::PathExists(source_path_)) {
- LOG(ERROR) << source_path_ << " does not exist";
+ LOG(ERROR) << source_path_.value() << " does not exist";
return false;
}
@@ -39,29 +39,29 @@ bool CopyTreeWorkItem::Do() {
// handle overwrite_option_ = IF_DIFFERENT case.
if ((dest_exist) &&
(overwrite_option_ == WorkItem::IF_DIFFERENT) && // only for single file
- (!PathIsDirectory(source_path_.c_str())) &&
- (!PathIsDirectory(dest_path_.c_str())) &&
+ (!file_util::DirectoryExists(source_path_)) &&
+ (!file_util::DirectoryExists(dest_path_)) &&
(file_util::ContentsEqual(source_path_, dest_path_))) {
- LOG(INFO) << "Source file " << source_path_
- << " and destination file " << dest_path_
+ LOG(INFO) << "Source file " << source_path_.value()
+ << " and destination file " << dest_path_.value()
<< " are exactly same. Returning true.";
return true;
} else if ((dest_exist) &&
(overwrite_option_ == WorkItem::NEW_NAME_IF_IN_USE) &&
- (!PathIsDirectory(source_path_.c_str())) &&
- (!PathIsDirectory(dest_path_.c_str())) &&
+ (!file_util::DirectoryExists(source_path_)) &&
+ (!file_util::DirectoryExists(dest_path_)) &&
(IsFileInUse(dest_path_))) {
// handle overwrite_option_ = NEW_NAME_IF_IN_USE case.
if (alternative_path_.empty() ||
file_util::PathExists(alternative_path_) ||
!file_util::CopyFile(source_path_, alternative_path_)) {
- LOG(ERROR) << "failed to copy " << source_path_ <<
- " to " << alternative_path_;
+ LOG(ERROR) << "failed to copy " << source_path_.value() <<
+ " to " << alternative_path_.value();
return false;
} else {
copied_to_alternate_path_ = true;
- LOG(INFO) << "Copied source file " << source_path_
- << " to alternative path " << alternative_path_;
+ LOG(INFO) << "Copied source file " << source_path_.value()
+ << " to alternative path " << alternative_path_.value();
return true;
}
} else if ((dest_exist) &&
@@ -77,10 +77,11 @@ bool CopyTreeWorkItem::Do() {
if (file_util::Move(dest_path_, backup_path_)) {
moved_to_backup_ = true;
- LOG(INFO) << "Moved destination " << dest_path_
- << " to backup path " << backup_path_;
+ LOG(INFO) << "Moved destination " << dest_path_.value() <<
+ " to backup path " << backup_path_.value();
} else {
- LOG(ERROR) << "failed moving " << dest_path_ << " to " << backup_path_;
+ LOG(ERROR) << "failed moving " << dest_path_.value() << " to " <<
+ backup_path_.value();
return false;
}
}
@@ -88,10 +89,11 @@ bool CopyTreeWorkItem::Do() {
// In all cases that reach here, copy source to destination.
if (file_util::CopyDirectory(source_path_, dest_path_, true)) {
copied_to_dest_path_ = true;
- LOG(INFO) << "Copied source " << source_path_
- << " to destination " << dest_path_;
+ LOG(INFO) << "Copied source " << source_path_.value()
+ << " to destination " << dest_path_.value();
} else {
- LOG(ERROR) << "failed copy " << source_path_ << " to " << dest_path_;
+ LOG(ERROR) << "failed copy " << source_path_.value() <<
+ " to " << dest_path_.value();
return false;
}
@@ -105,22 +107,23 @@ void CopyTreeWorkItem::Rollback() {
// Delete here. For now we just log the error and continue with the
// rest of rollback operation.
if (copied_to_dest_path_ && !file_util::Delete(dest_path_, true)) {
- LOG(ERROR) << "Can not delete " << dest_path_;
+ LOG(ERROR) << "Can not delete " << dest_path_.value();
}
if (moved_to_backup_ && !file_util::Move(backup_path_, dest_path_)) {
- LOG(ERROR) << "failed move " << backup_path_ << " to " << dest_path_;
+ LOG(ERROR) << "failed move " << backup_path_.value() << " to " <<
+ dest_path_.value();
}
if (copied_to_alternate_path_ &&
!file_util::Delete(alternative_path_, true)) {
- LOG(ERROR) << "Can not delete " << alternative_path_;
+ LOG(ERROR) << "Can not delete " << alternative_path_.value();
}
}
-bool CopyTreeWorkItem::IsFileInUse(const std::wstring& path) {
+bool CopyTreeWorkItem::IsFileInUse(const FilePath& path) {
if (!file_util::PathExists(path))
return false;
- HANDLE handle = ::CreateFile(path.c_str(), FILE_ALL_ACCESS,
+ HANDLE handle = ::CreateFile(path.value().c_str(), FILE_ALL_ACCESS,
NULL, NULL, OPEN_EXISTING, NULL, NULL);
if (handle == INVALID_HANDLE_VALUE)
return true;
@@ -130,16 +133,14 @@ bool CopyTreeWorkItem::IsFileInUse(const std::wstring& path) {
}
bool CopyTreeWorkItem::GetBackupPath() {
- std::wstring file_name = file_util::GetFilenameFromPath(dest_path_);
- backup_path_.assign(temp_dir_);
- file_util::AppendToPath(&backup_path_, file_name);
+ backup_path_ = temp_dir_.Append(dest_path_.BaseName());
if (file_util::PathExists(backup_path_)) {
// Ideally we should not fail immediately. Instead we could try some
// random paths under temp_dir_ until we reach certain limit.
// For now our caller always provides a good temporary directory so
// we don't bother.
- LOG(ERROR) << "backup path " << backup_path_ << " already exists";
+ LOG(ERROR) << "backup path " << backup_path_.value() << " already exists";
return false;
}
diff --git a/chrome/installer/util/copy_tree_work_item.h b/chrome/installer/util/copy_tree_work_item.h
index 9fa1d96..b899324 100644
--- a/chrome/installer/util/copy_tree_work_item.h
+++ b/chrome/installer/util/copy_tree_work_item.h
@@ -7,6 +7,8 @@
#include <string>
#include <windows.h>
+
+#include "base/file_path.h"
#include "chrome/installer/util/work_item.h"
// A WorkItem subclass that recursively copies a file system hierarchy from
@@ -40,20 +42,20 @@ class CopyTreeWorkItem : public WorkItem {
const std::wstring& alternative_path);
// Checks if the path specified is in use (and hence can not be deleted)
- bool IsFileInUse(const std::wstring& path);
+ bool IsFileInUse(const FilePath& path);
// Get a backup path that can keep the original files under dest_path_,
// and set backup_path_ with the result.
bool GetBackupPath();
// Source path to copy files from.
- std::wstring source_path_;
+ FilePath source_path_;
// Destination path to copy files to.
- std::wstring dest_path_;
+ FilePath dest_path_;
// Temporary directory that can be used.
- std::wstring temp_dir_;
+ FilePath temp_dir_;
// Controls the behavior for overwriting.
CopyOverWriteOption overwrite_option_;
@@ -61,7 +63,7 @@ class CopyTreeWorkItem : public WorkItem {
// If overwrite_option_ = NEW_NAME_IF_IN_USE, this variables stores the path
// to be used if the file is in use and hence we want to copy it to a
// different path.
- std::wstring alternative_path_;
+ FilePath alternative_path_;
// Whether the source was copied to dest_path_
bool copied_to_dest_path_;
@@ -76,7 +78,7 @@ class CopyTreeWorkItem : public WorkItem {
// The full path in temporary directory that the original dest_path_ has
// been moved to.
- std::wstring backup_path_;
+ FilePath backup_path_;
};
#endif // CHROME_INSTALLER_UTIL_COPY_TREE_WORK_ITEM_H_
diff --git a/chrome/installer/util/copy_tree_work_item_unittest.cc b/chrome/installer/util/copy_tree_work_item_unittest.cc
index c8cae21..bc187e61 100644
--- a/chrome/installer/util/copy_tree_work_item_unittest.cc
+++ b/chrome/installer/util/copy_tree_work_item_unittest.cc
@@ -61,11 +61,11 @@ namespace {
file.close();
}
- bool IsFileInUse(const std::wstring& path) {
+ bool IsFileInUse(const FilePath& path) {
if (!file_util::PathExists(path))
return false;
- HANDLE handle = ::CreateFile(path.c_str(), FILE_ALL_ACCESS,
+ HANDLE handle = ::CreateFile(path.value().c_str(), FILE_ALL_ACCESS,
NULL, NULL, OPEN_EXISTING, NULL, NULL);
if (handle == INVALID_HANDLE_VALUE)
return true;
@@ -478,10 +478,10 @@ TEST_F(CopyTreeWorkItemTest, NewNameAndCopyTest) {
file_name_from.ToWStringHack(), file_name_to.ToWStringHack(),
temp_dir_.ToWStringHack(), WorkItem::NEW_NAME_IF_IN_USE,
alternate_to.ToWStringHack()));
- if (IsFileInUse(file_name_to.value()))
+ if (IsFileInUse(file_name_to))
PlatformThread::Sleep(2000);
// If file is still in use, the rest of the test will fail.
- ASSERT_FALSE(IsFileInUse(file_name_to.value()));
+ ASSERT_FALSE(IsFileInUse(file_name_to));
EXPECT_TRUE(work_item->Do());
EXPECT_TRUE(file_util::PathExists(file_name_from));
diff --git a/chrome/installer/util/delete_after_reboot_helper.cc b/chrome/installer/util/delete_after_reboot_helper.cc
index a54acb3..1bc322c 100644
--- a/chrome/installer/util/delete_after_reboot_helper.cc
+++ b/chrome/installer/util/delete_after_reboot_helper.cc
@@ -64,7 +64,7 @@ bool ScheduleFileSystemEntityForDeletion(const wchar_t* path) {
}
DWORD flags = MOVEFILE_DELAY_UNTIL_REBOOT;
- if (!file_util::DirectoryExists(path)) {
+ if (!file_util::DirectoryExists(FilePath::FromWStringHack(path))) {
// This flag valid only for files
flags |= MOVEFILE_REPLACE_EXISTING;
}
diff --git a/chrome/installer/util/delete_tree_work_item.cc b/chrome/installer/util/delete_tree_work_item.cc
index 8e5610a..839f6bb 100644
--- a/chrome/installer/util/delete_tree_work_item.cc
+++ b/chrome/installer/util/delete_tree_work_item.cc
@@ -7,13 +7,17 @@
#include "chrome/installer/util/delete_tree_work_item.h"
DeleteTreeWorkItem::~DeleteTreeWorkItem() {
- std::wstring tmp_dir = file_util::GetDirectoryFromPath(backup_path_);
- if (file_util::PathExists(tmp_dir)) {
- file_util::Delete(tmp_dir, true);
+ if (!backup_path_.empty()) {
+ FilePath tmp_dir = backup_path_.DirName();
+ if (file_util::PathExists(tmp_dir)) {
+ file_util::Delete(tmp_dir, true);
+ }
}
- tmp_dir = file_util::GetDirectoryFromPath(key_backup_path_);
- if (file_util::PathExists(tmp_dir)) {
- file_util::Delete(tmp_dir, true);
+ if (!key_backup_path_.empty()) {
+ FilePath tmp_dir = key_backup_path_.DirName();
+ if (file_util::PathExists(tmp_dir)) {
+ file_util::Delete(tmp_dir, true);
+ }
}
}
@@ -30,8 +34,8 @@ bool DeleteTreeWorkItem::Do() {
if (!GetBackupPath(key_path_, &key_backup_path_) ||
!file_util::CopyDirectory(key_path_, key_backup_path_, true) ||
!file_util::Delete(key_path_, true)) {
- LOG(ERROR) << "can not delete " << key_path_
- << " OR copy it to backup path " << key_backup_path_;
+ LOG(ERROR) << "can not delete " << key_path_.value()
+ << " OR copy it to backup path " << key_backup_path_.value();
return false;
}
}
@@ -40,8 +44,8 @@ bool DeleteTreeWorkItem::Do() {
if (!GetBackupPath(root_path_, &backup_path_) ||
!file_util::CopyDirectory(root_path_, backup_path_, true) ||
!file_util::Delete(root_path_, true)) {
- LOG(ERROR) << "can not delete " << root_path_
- << " OR copy it to backup path " << backup_path_;
+ LOG(ERROR) << "can not delete " << root_path_.value()
+ << " OR copy it to backup path " << backup_path_.value();
return false;
}
}
@@ -58,15 +62,14 @@ void DeleteTreeWorkItem::Rollback() {
}
}
-bool DeleteTreeWorkItem::GetBackupPath(const std::wstring& for_path,
- std::wstring* backup_path) {
+bool DeleteTreeWorkItem::GetBackupPath(const FilePath& for_path,
+ FilePath* backup_path) {
if (!file_util::CreateNewTempDirectory(L"", backup_path)) {
// We assume that CreateNewTempDirectory() is doing its job well.
LOG(ERROR) << "Couldn't get backup path for delete.";
return false;
}
- std::wstring file_name = file_util::GetFilenameFromPath(for_path);
- file_util::AppendToPath(backup_path, file_name);
+ *backup_path = backup_path->Append(for_path.BaseName());
return true;
}
diff --git a/chrome/installer/util/delete_tree_work_item.h b/chrome/installer/util/delete_tree_work_item.h
index cf7b4be..b5bcb50 100644
--- a/chrome/installer/util/delete_tree_work_item.h
+++ b/chrome/installer/util/delete_tree_work_item.h
@@ -7,6 +7,8 @@
#include <string>
#include <windows.h>
+
+#include "base/file_path.h"
#include "chrome/installer/util/work_item.h"
// A WorkItem subclass that recursively deletes a file system hierarchy at the
@@ -26,25 +28,25 @@ class DeleteTreeWorkItem : public WorkItem {
friend class WorkItem;
// Get a backup path that can keep root_path_ or key_path_
- bool GetBackupPath(const std::wstring& for_path, std::wstring* backup_path);
+ bool GetBackupPath(const FilePath& for_path, FilePath* backup_path);
DeleteTreeWorkItem(const std::wstring& root_path,
const std::wstring& key_path);
// Root path to delete.
- std::wstring root_path_;
+ FilePath root_path_;
// Path to the key file. If the key file is specified, deletion will be
// performed only if the key file is not in use.
- std::wstring key_path_;
+ FilePath key_path_;
// The full path in temporary directory that the original root_path_ has
// been moved to.
- std::wstring backup_path_;
+ FilePath backup_path_;
// The full path in temporary directory that the original key_path_ has
// been moved to.
- std::wstring key_backup_path_;
+ FilePath key_backup_path_;
};
#endif // CHROME_INSTALLER_UTIL_DELETE_TREE_WORK_ITEM_H_
diff --git a/chrome/installer/util/move_tree_work_item.cc b/chrome/installer/util/move_tree_work_item.cc
index b90665e..45c03b2 100644
--- a/chrome/installer/util/move_tree_work_item.cc
+++ b/chrome/installer/util/move_tree_work_item.cc
@@ -26,30 +26,26 @@ MoveTreeWorkItem::MoveTreeWorkItem(const std::wstring& source_path,
bool MoveTreeWorkItem::Do() {
if (!file_util::PathExists(source_path_)) {
- LOG(ERROR) << source_path_ << " does not exist";
+ LOG(ERROR) << source_path_.value() << " does not exist";
return false;
}
- FilePath backup_path;
-
// If dest_path_ exists, move destination to a backup path.
if (file_util::PathExists(dest_path_)) {
// Generate a backup path that can keep the original files under dest_path_.
if (!file_util::CreateTemporaryFileInDir(FilePath(temp_dir_),
- &backup_path)) {
- LOG(ERROR) << "Failed to get backup path in folder " << temp_dir_;
+ &backup_path_)) {
+ LOG(ERROR) << "Failed to get backup path in folder " << temp_dir_.value();
return false;
}
- backup_path_ = backup_path.value();
-
if (file_util::Move(dest_path_, backup_path_)) {
moved_to_backup_ = true;
- LOG(INFO) << "Moved destination " << dest_path_
- << " to backup path " << backup_path_;
+ LOG(INFO) << "Moved destination " << dest_path_.value()
+ << " to backup path " << backup_path_.value();
} else {
- LOG(ERROR) << "failed moving " << dest_path_
- << " to " << backup_path_;
+ LOG(ERROR) << "failed moving " << dest_path_.value()
+ << " to " << backup_path_.value();
return false;
}
}
@@ -57,10 +53,11 @@ bool MoveTreeWorkItem::Do() {
// Now move source to destination.
if (file_util::Move(source_path_, dest_path_)) {
moved_to_dest_path_ = true;
- LOG(INFO) << "Moved source " << source_path_
- << " to destination " << dest_path_;
+ LOG(INFO) << "Moved source " << source_path_.value()
+ << " to destination " << dest_path_.value();
} else {
- LOG(ERROR) << "failed move " << source_path_ << " to " << dest_path_;
+ LOG(ERROR) << "failed move " << source_path_.value() << " to " <<
+ dest_path_.value();
return false;
}
@@ -69,8 +66,10 @@ bool MoveTreeWorkItem::Do() {
void MoveTreeWorkItem::Rollback() {
if (moved_to_dest_path_ && !file_util::Move(dest_path_, source_path_))
- LOG(ERROR) << "Can not move " << dest_path_ << " to " << source_path_;
+ LOG(ERROR) << "Can not move " << dest_path_.value() <<
+ " to " << source_path_.value();
if (moved_to_backup_ && !file_util::Move(backup_path_, dest_path_))
- LOG(ERROR) << "failed move " << backup_path_ << " to " << dest_path_;
+ LOG(ERROR) << "failed move " << backup_path_.value() <<
+ " to " << dest_path_.value();
}
diff --git a/chrome/installer/util/move_tree_work_item.h b/chrome/installer/util/move_tree_work_item.h
index 95964fb..cfa86c4 100644
--- a/chrome/installer/util/move_tree_work_item.h
+++ b/chrome/installer/util/move_tree_work_item.h
@@ -38,17 +38,17 @@ class MoveTreeWorkItem : public WorkItem {
const std::wstring& temp_dir);
// Source path to move files from.
- std::wstring source_path_;
+ FilePath source_path_;
// Destination path to move files to.
- std::wstring dest_path_;
+ FilePath dest_path_;
// Temporary directory to backup dest_path_ (if it already exists).
- std::wstring temp_dir_;
+ FilePath temp_dir_;
// The full path in temp_dir_ where the original dest_path_ has
// been moved to.
- std::wstring backup_path_;
+ FilePath backup_path_;
// Whether the source was moved to dest_path_
bool moved_to_dest_path_;
diff --git a/chrome/installer/util/shell_util.cc b/chrome/installer/util/shell_util.cc
index 86e588b..8e00ba2 100644
--- a/chrome/installer/util/shell_util.cc
+++ b/chrome/installer/util/shell_util.cc
@@ -295,7 +295,7 @@ bool ElevateAndRegisterChrome(const std::wstring& chrome_exe,
const std::wstring& suffix) {
std::wstring exe_path(file_util::GetDirectoryFromPath(chrome_exe));
file_util::AppendToPath(&exe_path, installer_util::kSetupExe);
- if (!file_util::PathExists(exe_path)) {
+ if (!file_util::PathExists(FilePath::FromWStringHack(exe_path))) {
BrowserDistribution* dist = BrowserDistribution::GetDistribution();
HKEY reg_root = InstallUtil::IsPerUserInstall(chrome_exe.c_str()) ?
HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE;
@@ -305,7 +305,7 @@ bool ElevateAndRegisterChrome(const std::wstring& chrome_exe,
command_line.ParseFromString(exe_path);
exe_path = command_line.program();
}
- if (file_util::PathExists(exe_path)) {
+ if (file_util::PathExists(FilePath::FromWStringHack(exe_path))) {
std::wstring params(L"--");
params.append(installer_util::switches::kRegisterChromeBrowser);
params.append(L"=\"" + chrome_exe + L"\"");