summaryrefslogtreecommitdiffstats
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
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
-rw-r--r--base/file_util.cc14
-rw-r--r--base/file_util.h8
-rw-r--r--chrome/browser/first_run_win.cc2
-rw-r--r--chrome/browser/importer/firefox2_importer.cc2
-rw-r--r--chrome/browser/importer/firefox3_importer.cc6
-rw-r--r--chrome/browser/importer/importer_unittest.cc6
-rw-r--r--chrome/browser/jumplist.cc5
-rw-r--r--chrome/browser/printing/printing_layout_uitest.cc3
-rw-r--r--chrome/browser/tab_contents/navigation_controller_unittest.cc2
-rw-r--r--chrome/common/chrome_plugin_util.cc2
-rw-r--r--chrome/installer/setup/install.cc13
-rw-r--r--chrome/installer/setup/setup_main.cc7
-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
-rw-r--r--chrome/test/mini_installer_test/chrome_mini_installer.cc17
-rw-r--r--chrome/test/mini_installer_test/mini_installer_test_util.cc12
-rw-r--r--chrome/test/mini_installer_test/run_all_unittests.cc16
-rw-r--r--chrome/tools/crash_service/main.cc15
-rw-r--r--chrome_frame/chrome_launcher.cc9
-rw-r--r--chrome_frame/chrome_launcher.h6
-rw-r--r--chrome_frame/chrome_tab.cc8
-rw-r--r--chrome_frame/test/perf/chrome_frame_perftest.cc6
-rw-r--r--chrome_frame/test_utils.cc13
-rw-r--r--chrome_frame/test_utils.h4
-rw-r--r--net/tools/crash_cache/crash_cache.cc2
-rw-r--r--skia/ext/vector_canvas_unittest.cc127
-rw-r--r--tools/memory_watcher/memory_watcher.cc3
-rw-r--r--webkit/default_plugin/plugin_database_handler.cc2
-rw-r--r--webkit/tools/test_shell/image_decoder_unittest.cc85
-rw-r--r--webkit/tools/test_shell/image_decoder_unittest.h26
-rw-r--r--webkit/tools/webcore_unit_tests/BMPImageDecoder_unittest.cpp2
-rw-r--r--webkit/tools/webcore_unit_tests/ICOImageDecoder_unittest.cpp8
-rw-r--r--webkit/tools/webcore_unit_tests/XBMImageDecoder_unittest.cpp2
40 files changed, 300 insertions, 296 deletions
diff --git a/base/file_util.cc b/base/file_util.cc
index 9976d88..4cde773 100644
--- a/base/file_util.cc
+++ b/base/file_util.cc
@@ -317,10 +317,6 @@ bool ContentsEqual(const std::wstring& filename1,
return ContentsEqual(FilePath::FromWStringHack(filename1),
FilePath::FromWStringHack(filename2));
}
-bool CopyFile(const std::wstring& from_path, const std::wstring& to_path) {
- return CopyFile(FilePath::FromWStringHack(from_path),
- FilePath::FromWStringHack(to_path));
-}
bool CreateDirectory(const std::wstring& full_path) {
return CreateDirectory(FilePath::FromWStringHack(full_path));
}
@@ -340,9 +336,6 @@ bool CreateNewTempDirectory(const std::wstring& prefix,
bool Delete(const std::wstring& path, bool recursive) {
return Delete(FilePath::FromWStringHack(path), recursive);
}
-bool DirectoryExists(const std::wstring& path) {
- return DirectoryExists(FilePath::FromWStringHack(path));
-}
bool EndsWithSeparator(std::wstring* path) {
return EndsWithSeparator(FilePath::FromWStringHack(*path));
}
@@ -384,16 +377,9 @@ bool GetTempDir(std::wstring* path_str) {
*path_str = path.ToWStringHack();
return true;
}
-bool Move(const std::wstring& from_path, const std::wstring& to_path) {
- return Move(FilePath::FromWStringHack(from_path),
- FilePath::FromWStringHack(to_path));
-}
FILE* OpenFile(const std::wstring& filename, const char* mode) {
return OpenFile(FilePath::FromWStringHack(filename), mode);
}
-bool PathExists(const std::wstring& path) {
- return PathExists(FilePath::FromWStringHack(path));
-}
int ReadFile(const std::wstring& filename, char* data, int size) {
return ReadFile(FilePath::FromWStringHack(filename), data, size);
}
diff --git a/base/file_util.h b/base/file_util.h
index 93fdd4e..9a590a4 100644
--- a/base/file_util.h
+++ b/base/file_util.h
@@ -128,8 +128,6 @@ bool Delete(const std::wstring& path, bool recursive);
// on different volumes, this will attempt to copy and delete. Returns
// true for success.
bool Move(const FilePath& from_path, const FilePath& to_path);
-// Deprecated temporary compatibility function.
-bool Move(const std::wstring& from_path, const std::wstring& to_path);
// Renames file |from_path| to |to_path|. Both paths must be on the same
// volume, or the function will fail. Destination file will be created
@@ -140,8 +138,6 @@ bool ReplaceFile(const FilePath& from_path, const FilePath& to_path);
// Copies a single file. Use CopyDirectory to copy directories.
bool CopyFile(const FilePath& from_path, const FilePath& to_path);
-// Deprecated temporary compatibility function.
-bool CopyFile(const std::wstring& from_path, const std::wstring& to_path);
// Copies the given path, and optionally all subdirectories and their contents
// as well.
@@ -159,16 +155,12 @@ bool CopyDirectory(const std::wstring& from_path, const std::wstring& to_path,
// Returns true if the given path exists on the local filesystem,
// false otherwise.
bool PathExists(const FilePath& path);
-// Deprecated temporary compatibility function.
-bool PathExists(const std::wstring& path);
// Returns true if the given path is writable by the user, false otherwise.
bool PathIsWritable(const FilePath& path);
// Returns true if the given path exists and is a directory, false otherwise.
bool DirectoryExists(const FilePath& path);
-// Deprecated temporary compatibility function.
-bool DirectoryExists(const std::wstring& path);
#if defined(OS_WIN)
// Gets the creation time of the given file (expressed in the local timezone),
diff --git a/chrome/browser/first_run_win.cc b/chrome/browser/first_run_win.cc
index d329514..756049e 100644
--- a/chrome/browser/first_run_win.cc
+++ b/chrome/browser/first_run_win.cc
@@ -311,7 +311,7 @@ bool Upgrade::SwapNewChromeExeIfPresent() {
std::wstring new_chrome_exe;
if (!GetNewerChromeFile(&new_chrome_exe))
return false;
- if (!file_util::PathExists(new_chrome_exe))
+ if (!file_util::PathExists(FilePath::FromWStringHack(new_chrome_exe)))
return false;
std::wstring curr_chrome_exe;
if (!PathService::Get(base::FILE_EXE, &curr_chrome_exe))
diff --git a/chrome/browser/importer/firefox2_importer.cc b/chrome/browser/importer/firefox2_importer.cc
index c529e39..794d97e 100644
--- a/chrome/browser/importer/firefox2_importer.cc
+++ b/chrome/browser/importer/firefox2_importer.cc
@@ -291,7 +291,7 @@ void Firefox2Importer::ImportPasswords() {
// exist, we try to find its older version.
std::wstring file = source_path_;
file_util::AppendToPath(&file, L"signons2.txt");
- if (!file_util::PathExists(file)) {
+ if (!file_util::PathExists(FilePath::FromWStringHack(file))) {
file = source_path_;
file_util::AppendToPath(&file, L"signons.txt");
}
diff --git a/chrome/browser/importer/firefox3_importer.cc b/chrome/browser/importer/firefox3_importer.cc
index 10d2855..c347b0c 100644
--- a/chrome/browser/importer/firefox3_importer.cc
+++ b/chrome/browser/importer/firefox3_importer.cc
@@ -68,7 +68,7 @@ void Firefox3Importer::StartImport(ProfileInfo profile_info,
void Firefox3Importer::ImportHistory() {
std::wstring file = source_path_;
file_util::AppendToPath(&file, L"places.sqlite");
- if (!file_util::PathExists(file))
+ if (!file_util::PathExists(FilePath::FromWStringHack(file)))
return;
sqlite3* sqlite;
@@ -116,7 +116,7 @@ void Firefox3Importer::ImportHistory() {
void Firefox3Importer::ImportBookmarks() {
std::wstring file = source_path_;
file_util::AppendToPath(&file, L"places.sqlite");
- if (!file_util::PathExists(file))
+ if (!file_util::PathExists(FilePath::FromWStringHack(file)))
return;
sqlite3* sqlite;
@@ -314,7 +314,7 @@ void Firefox3Importer::GetSearchEnginesXMLFiles(
std::vector<std::wstring>* files) {
std::wstring file = source_path_;
file_util::AppendToPath(&file, L"search.sqlite");
- if (!file_util::PathExists(file))
+ if (!file_util::PathExists(FilePath::FromWStringHack(file)))
return;
sqlite3* sqlite;
diff --git a/chrome/browser/importer/importer_unittest.cc b/chrome/browser/importer/importer_unittest.cc
index b6ef1f6..e6d09af6 100644
--- a/chrome/browser/importer/importer_unittest.cc
+++ b/chrome/browser/importer/importer_unittest.cc
@@ -49,7 +49,7 @@ class ImporterTest : public testing::Test {
virtual void TearDown() {
// Deletes the profile and cleans up the profile directory.
ASSERT_TRUE(file_util::Delete(test_path_, true));
- ASSERT_FALSE(file_util::PathExists(test_path_));
+ ASSERT_FALSE(file_util::PathExists(FilePath::FromWStringHack(test_path_)));
}
void Firefox3xImporterTest(std::wstring profile_dir,
@@ -70,7 +70,7 @@ class ImporterTest : public testing::Test {
if (import_search_plugins) {
ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_path));
file_util::AppendToPath(&data_path, L"firefox3_searchplugins");
- if (!file_util::PathExists(data_path)) {
+ if (!file_util::PathExists(FilePath::FromWStringHack(data_path))) {
// TODO(maruel): Create search test data that we can open source!
LOG(ERROR) << L"Missing internal test data";
return;
@@ -646,7 +646,7 @@ TEST_F(ImporterTest, Firefox2Importer) {
CreateDirectory(search_engine_path.c_str(), NULL);
ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_path));
file_util::AppendToPath(&data_path, L"firefox2_searchplugins");
- if (!file_util::PathExists(data_path)) {
+ if (!file_util::PathExists(FilePath::FromWStringHack(data_path))) {
// TODO(maruel): Create test data that we can open source!
LOG(ERROR) << L"Missing internal test data";
return;
diff --git a/chrome/browser/jumplist.cc b/chrome/browser/jumplist.cc
index 69c2a9c..3dd2c55 100644
--- a/chrome/browser/jumplist.cc
+++ b/chrome/browser/jumplist.cc
@@ -486,9 +486,10 @@ void JumpListUpdateTask::Run() {
// icon directory, and create a new directory which contains new JumpList
// icon files.
std::wstring icon_dir_old(icon_dir_ + L"Old");
- if (file_util::PathExists(icon_dir_old))
+ if (file_util::PathExists(FilePath::FromWStringHack(icon_dir_old)))
file_util::Delete(icon_dir_old, true);
- file_util::Move(icon_dir_, icon_dir_old);
+ file_util::Move(FilePath::FromWStringHack(icon_dir_),
+ FilePath::FromWStringHack(icon_dir_old));
file_util::CreateDirectory(icon_dir_);
// Create temporary icon files for shortcuts in the "Most Visited" category.
diff --git a/chrome/browser/printing/printing_layout_uitest.cc b/chrome/browser/printing/printing_layout_uitest.cc
index a5de41a..c3bfb6b 100644
--- a/chrome/browser/printing/printing_layout_uitest.cc
+++ b/chrome/browser/printing/printing_layout_uitest.cc
@@ -73,7 +73,8 @@ class PrintingLayoutTest : public PrintingTest<UITest> {
FilePath png(verification_file + L".png");
// Looks for Cleartype override.
- if (file_util::PathExists(verification_file + L"_cleartype.png") &&
+ if (file_util::PathExists(
+ FilePath::FromWStringHack(verification_file + L"_cleartype.png")) &&
IsClearTypeEnabled()) {
png = FilePath(verification_file + L"_cleartype.png");
}
diff --git a/chrome/browser/tab_contents/navigation_controller_unittest.cc b/chrome/browser/tab_contents/navigation_controller_unittest.cc
index 9dc51d4..fc31c75 100644
--- a/chrome/browser/tab_contents/navigation_controller_unittest.cc
+++ b/chrome/browser/tab_contents/navigation_controller_unittest.cc
@@ -88,7 +88,7 @@ class NavigationControllerHistoryTest : public NavigationControllerTest {
NavigationControllerTest::TearDown();
ASSERT_TRUE(file_util::Delete(test_dir_, true));
- ASSERT_FALSE(file_util::PathExists(test_dir_));
+ ASSERT_FALSE(file_util::PathExists(FilePath::FromWStringHack(test_dir_)));
}
// Deletes the current profile manager and creates a new one. Indirectly this
diff --git a/chrome/common/chrome_plugin_util.cc b/chrome/common/chrome_plugin_util.cc
index 809e4e6..4643a87 100644
--- a/chrome/common/chrome_plugin_util.cc
+++ b/chrome/common/chrome_plugin_util.cc
@@ -131,7 +131,7 @@ CPError CPB_GetCommandLineArgumentsCommon(const char* url,
if (!user_data_dir.empty()) {
// Make sure user_data_dir is an absolute path.
if (file_util::AbsolutePath(&user_data_dir) &&
- file_util::PathExists(user_data_dir)) {
+ file_util::PathExists(FilePath::FromWStringHack(user_data_dir))) {
// TODO(evanm): use CommandLine APIs instead of this.
arguments_w += std::wstring(L"--") + ASCIIToWide(switches::kUserDataDir) +
L"=\"" + user_data_dir + L"\" ";
diff --git a/chrome/installer/setup/install.cc b/chrome/installer/setup/install.cc
index 1bc8164..ce211fd1 100644
--- a/chrome/installer/setup/install.cc
+++ b/chrome/installer/setup/install.cc
@@ -157,12 +157,13 @@ void AddUninstallShortcutWorkItems(HKEY reg_root,
// only on the first install of Chrome.
void CopyPreferenceFileForFirstRun(bool system_level,
const std::wstring& prefs_source_path) {
- std::wstring prefs_dest_path(
+ FilePath prefs_dest_path = FilePath::FromWStringHack(
installer::GetChromeInstallPath(system_level));
- file_util::AppendToPath(&prefs_dest_path,
- installer_util::kDefaultMasterPrefs);
- if (!file_util::CopyFile(prefs_source_path, prefs_dest_path))
+ prefs_dest_path = prefs_dest_path.Append(installer_util::kDefaultMasterPrefs);
+ if (!file_util::CopyFile(FilePath::FromWStringHack(prefs_source_path),
+ prefs_dest_path)) {
LOG(INFO) << "Failed to copy master preferences.";
+ }
}
// This method creates Chrome shortcuts in Start->Programs for all users or
@@ -304,7 +305,7 @@ bool DoPostInstallTasks(HKEY reg_root,
BrowserDistribution* dist = BrowserDistribution::GetDistribution();
std::wstring version_key = dist->GetVersionKey();
- if (file_util::PathExists(new_chrome_exe)) {
+ if (file_util::PathExists(FilePath::FromWStringHack(new_chrome_exe))) {
// Looks like this was in use update. So make sure we update the 'opv' key
// with the current version that is active and 'cmd' key with the rename
// command to run.
@@ -492,7 +493,7 @@ bool InstallNewVersion(const std::wstring& exe_path,
installer_util::kChromeNewExe);
BrowserDistribution* dist = BrowserDistribution::GetDistribution();
RegKey chrome_key(reg_root, dist->GetVersionKey().c_str(), KEY_READ);
- if (file_util::PathExists(new_chrome_exe))
+ if (file_util::PathExists(FilePath::FromWStringHack(new_chrome_exe)))
chrome_key.ReadValue(google_update::kRegOldVersionField, current_version);
if (current_version->empty())
chrome_key.ReadValue(google_update::kRegVersionField, current_version);
diff --git a/chrome/installer/setup/setup_main.cc b/chrome/installer/setup/setup_main.cc
index 3b5377d..f20e307 100644
--- a/chrome/installer/setup/setup_main.cc
+++ b/chrome/installer/setup/setup_main.cc
@@ -67,7 +67,7 @@ DWORD UnPackArchive(const std::wstring& archive, bool system_install,
// Check if this is differential update and if it is, patch it to the
// installer archive that should already be on the machine. We assume
// it is a differential installer if chrome.7z is not found.
- if (!file_util::PathExists(uncompressed_archive)) {
+ if (!file_util::PathExists(FilePath::FromWStringHack(uncompressed_archive))) {
incremental_install = true;
LOG(INFO) << "Differential patch found. Applying to existing archive.";
if (!installed_version) {
@@ -163,10 +163,11 @@ bool CheckPreInstallConditions(const installer::Version* installed_version,
// either does not exist or can be deleted (i.e. is not locked by some other
// process).
if (!installed_version) {
- std::wstring install_path(installer::GetChromeInstallPath(system_install));
+ FilePath install_path = FilePath::FromWStringHack(
+ installer::GetChromeInstallPath(system_install));
if (file_util::PathExists(install_path) &&
!file_util::Delete(install_path, true)) {
- LOG(ERROR) << "Installation directory " << install_path
+ LOG(ERROR) << "Installation directory " << install_path.value()
<< " exists and can not be deleted.";
status = installer_util::INSTALL_DIR_IN_USE;
int str_id = IDS_INSTALL_DIR_IN_USE_BASE;
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"\"");
diff --git a/chrome/test/mini_installer_test/chrome_mini_installer.cc b/chrome/test/mini_installer_test/chrome_mini_installer.cc
index 79eb1d7..6c16075 100644
--- a/chrome/test/mini_installer_test/chrome_mini_installer.cc
+++ b/chrome/test/mini_installer_test/chrome_mini_installer.cc
@@ -112,7 +112,7 @@ void ChromeMiniInstaller::InstallMiniInstaller(bool over_install,
printf("\nChrome will be installed at %ls level\n", install_type_.c_str());
printf("\nWill proceed with the test only if this path exists: %ls\n\n",
path.c_str());
- ASSERT_TRUE(file_util::PathExists(path));
+ ASSERT_TRUE(file_util::PathExists(FilePath::FromWStringHack(path)));
LaunchInstaller(path, exe_name.c_str());
BrowserDistribution* dist = BrowserDistribution::GetDistribution();
ASSERT_TRUE(CheckRegistryKey(dist->GetVersionKey()));
@@ -230,7 +230,7 @@ void ChromeMiniInstaller::UnInstall() {
CleanChromeInstall();
return;
}
- ASSERT_TRUE(file_util::PathExists(uninstall_path));
+ ASSERT_TRUE(file_util::PathExists(FilePath::FromWStringHack(uninstall_path)));
std::wstring uninstall_args = L"\"" + uninstall_path +
L"\"" + L" --uninstall --force-uninstall";
if (install_type_ == mini_installer_constants::kSystemInstall)
@@ -402,15 +402,16 @@ void ChromeMiniInstaller::FindChromeShortcut() {
path = GetStartMenuShortcutPath();
file_util::AppendToPath(&path, mini_installer_constants::kChromeBuildType);
// Verify if path exists.
- if (file_util::PathExists(path)) {
+ if (file_util::PathExists(FilePath::FromWStringHack(path))) {
return_val = true;
uninstall_lnk = path;
file_util::AppendToPath(&path,
mini_installer_constants::kChromeLaunchShortcut);
file_util::AppendToPath(&uninstall_lnk,
mini_installer_constants::kChromeUninstallShortcut);
- ASSERT_TRUE(file_util::PathExists(path));
- ASSERT_TRUE(file_util::PathExists(uninstall_lnk));
+ ASSERT_TRUE(file_util::PathExists(FilePath::FromWStringHack(path)));
+ ASSERT_TRUE(file_util::PathExists(
+ FilePath::FromWStringHack(uninstall_lnk)));
}
if (return_val)
printf("Chrome shortcuts found are:\n%ls\n%ls\n\n",
@@ -451,7 +452,7 @@ std::wstring ChromeMiniInstaller::GetUninstallPath() {
file_util::AppendToPath(&path, installer_util::kInstallerDir);
file_util::AppendToPath(&path,
mini_installer_constants::kChromeSetupExecutable);
- if (!file_util::PathExists(path)) {
+ if (!file_util::PathExists(FilePath::FromWStringHack(path))) {
printf("This uninstall path is not correct %ls. Will not proceed further",
path.c_str());
return L"";
@@ -484,7 +485,7 @@ HKEY ChromeMiniInstaller::GetRootRegistryKey() {
// Launches the chrome installer and waits for it to end.
void ChromeMiniInstaller::LaunchInstaller(const std::wstring& path,
const wchar_t* process_name) {
- ASSERT_TRUE(file_util::PathExists(path));
+ ASSERT_TRUE(file_util::PathExists(FilePath::FromWStringHack(path)));
if (install_type_ == mini_installer_constants::kSystemInstall) {
std::wstring launch_args = L" -system-level";
base::LaunchApp(L"\"" + path + L"\"" + launch_args, false, false, NULL);
@@ -503,7 +504,7 @@ bool ChromeMiniInstaller::GetChromeLaunchPath(std::wstring* launch_path) {
file_util::AppendToPath(&path, mini_installer_constants::kChromeAppDir);
file_util::AppendToPath(&path, installer_util::kChromeExe);
launch_path->assign(path);
- return(file_util::PathExists(path));
+ return(file_util::PathExists(FilePath::FromWStringHack(path)));
}
// Launch Chrome to see if it works after overinstall. Then close it.
diff --git a/chrome/test/mini_installer_test/mini_installer_test_util.cc b/chrome/test/mini_installer_test/mini_installer_test_util.cc
index 9c511d1..3593f10 100644
--- a/chrome/test/mini_installer_test/mini_installer_test_util.cc
+++ b/chrome/test/mini_installer_test/mini_installer_test_util.cc
@@ -117,14 +117,14 @@ bool MiniInstallerTestUtil::GetInstaller(const wchar_t* pattern,
++builds_list_size;
} else {
file_util::AppendToPath(path, exe_list.at(0).name_.c_str());
- if (!file_util::PathExists(*path)) {
+ if (!file_util::PathExists(FilePath::FromWStringHack(*path))) {
++builds_list_size;
} else {
break;
}
}
}
- return (file_util::PathExists(path->c_str()));
+ return file_util::PathExists(FilePath::FromWStringHack(*path));
}
// This method will get the latest installer filename from the directory.
@@ -202,7 +202,7 @@ bool MiniInstallerTestUtil::GetPreviousFullInstaller(
&directory_list))
return false;
file_util::AppendToPath(previous, directory_list.at(0).name_);
- return (file_util::PathExists(previous->c_str()));
+ return file_util::PathExists(FilePath::FromWStringHack(*previous));
}
bool MiniInstallerTestUtil::GetStandaloneInstallerFileName(
@@ -210,9 +210,9 @@ bool MiniInstallerTestUtil::GetStandaloneInstallerFileName(
std::wstring standalone_installer(
mini_installer_constants::kChromeStandAloneInstallerLocation);
standalone_installer.append(L"*.exe");
- return (GetLatestFile(standalone_installer.c_str(),
- mini_installer_constants::kUntaggedInstallerPattern,
- file_name));
+ return GetLatestFile(standalone_installer.c_str(),
+ mini_installer_constants::kUntaggedInstallerPattern,
+ file_name);
}
bool MiniInstallerTestUtil::GetStandaloneVersion(
diff --git a/chrome/test/mini_installer_test/run_all_unittests.cc b/chrome/test/mini_installer_test/run_all_unittests.cc
index 767ead2..9f2dc9f 100644
--- a/chrome/test/mini_installer_test/run_all_unittests.cc
+++ b/chrome/test/mini_installer_test/run_all_unittests.cc
@@ -15,22 +15,20 @@ void BackUpProfile() {
exit(1);
}
ChromeMiniInstaller installer(mini_installer_constants::kUserInstall);
- std::wstring path = installer.GetChromeInstallDirectoryLocation();
- file_util::AppendToPath(&path, mini_installer_constants::kChromeAppDir);
- file_util::UpOneDirectory(&path);
- std::wstring backup_path = path;
+ FilePath path =
+ FilePath::FromWStringHack(installer.GetChromeInstallDirectoryLocation());
+ path = path.Append(mini_installer_constants::kChromeAppDir).DirName();
+ FilePath backup_path = path;
// Will hold User Data path that needs to be backed-up.
- file_util::AppendToPath(&path,
- mini_installer_constants::kChromeUserDataDir);
+ path = path.Append(mini_installer_constants::kChromeUserDataDir);
// Will hold new backup path to save the profile.
- file_util::AppendToPath(&backup_path,
- mini_installer_constants::kChromeUserDataBackupDir);
+ backup_path = path.Append(mini_installer_constants::kChromeUserDataBackupDir);
// Will check if User Data profile is available.
if (file_util::PathExists(path)) {
// Will check if User Data is already backed up.
// If yes, will delete and create new one.
if (file_util::PathExists(backup_path))
- file_util::Delete(backup_path.c_str(), true);
+ file_util::Delete(backup_path, true);
file_util::CopyDirectory(path, backup_path, true);
} else {
printf("Chrome is not installed. Will not take any backup\n");
diff --git a/chrome/tools/crash_service/main.cc b/chrome/tools/crash_service/main.cc
index d6a1a20..cf6bab9 100644
--- a/chrome/tools/crash_service/main.cc
+++ b/chrome/tools/crash_service/main.cc
@@ -17,11 +17,11 @@ namespace {
const wchar_t kStandardLogFile[] = L"operation_log.txt";
-bool GetCrashServiceDirectory(std::wstring* dir) {
- std::wstring temp_dir;
+bool GetCrashServiceDirectory(FilePath* dir) {
+ FilePath temp_dir;
if (!file_util::GetTempDir(&temp_dir))
return false;
- file_util::AppendToPath(&temp_dir, L"chrome_crashes");
+ temp_dir = temp_dir.Append(L"chrome_crashes");
if (!file_util::PathExists(temp_dir)) {
if (!file_util::CreateDirectory(temp_dir))
return false;
@@ -40,19 +40,18 @@ int __stdcall wWinMain(HINSTANCE instance, HINSTANCE, wchar_t* cmd_line,
CommandLine::Init(0, NULL);
// We use/create a directory under the user's temp folder, for logging.
- std::wstring operating_dir;
+ FilePath operating_dir;
GetCrashServiceDirectory(&operating_dir);
- std::wstring log_file(operating_dir);
- file_util::AppendToPath(&log_file, kStandardLogFile);
+ FilePath log_file = operating_dir.Append(kStandardLogFile);
// Logging to a file with pid, tid and timestamp.
- logging::InitLogging(log_file.c_str(), logging::LOG_ONLY_TO_FILE,
+ logging::InitLogging(log_file.value().c_str(), logging::LOG_ONLY_TO_FILE,
logging::LOCK_LOG_FILE, logging::APPEND_TO_OLD_LOG_FILE);
logging::SetLogItems(true, true, true, false);
LOG(INFO) << "session start. cmdline is [" << cmd_line << "]";
- CrashService crash_service(operating_dir);
+ CrashService crash_service(operating_dir.ToWStringHack());
if (!crash_service.Initialize(::GetCommandLineW()))
return 1;
diff --git a/chrome_frame/chrome_launcher.cc b/chrome_frame/chrome_launcher.cc
index f742a28..b9af23d 100644
--- a/chrome_frame/chrome_launcher.cc
+++ b/chrome_frame/chrome_launcher.cc
@@ -90,10 +90,10 @@ bool SanitizeAndLaunchChrome(const wchar_t* command_line) {
return base::LaunchApp(sanitized.command_line_string(), false, false, NULL);
}
-std::wstring GetChromeExecutablePath() {
- std::wstring cur_path;
+FilePath GetChromeExecutablePath() {
+ FilePath cur_path;
PathService::Get(base::DIR_MODULE, &cur_path);
- file_util::AppendToPath(&cur_path, chrome::kBrowserProcessExecutableName);
+ cur_path = cur_path.Append(chrome::kBrowserProcessExecutableName);
// The installation model for Chrome places the DLLs in a versioned
// sub-folder one down from the Chrome executable. If we fail to find
@@ -101,8 +101,7 @@ std::wstring GetChromeExecutablePath() {
// instead.
if (!file_util::PathExists(cur_path)) {
PathService::Get(base::DIR_MODULE, &cur_path);
- file_util::UpOneDirectory(&cur_path);
- file_util::AppendToPath(&cur_path, chrome::kBrowserProcessExecutableName);
+ cur_path = cur_path.DirName().Append(chrome::kBrowserProcessExecutableName);
}
return cur_path;
diff --git a/chrome_frame/chrome_launcher.h b/chrome_frame/chrome_launcher.h
index 7c2aea9..86dc03f 100644
--- a/chrome_frame/chrome_launcher.h
+++ b/chrome_frame/chrome_launcher.h
@@ -7,6 +7,8 @@
#include <string>
+#include "base/file_path.h"
+
class CommandLine;
namespace chrome_launcher {
@@ -30,12 +32,12 @@ CommandLine* CreateLaunchCommandLine();
void SanitizeCommandLine(const CommandLine& original, CommandLine* sanitized);
// Given a command-line without an initial program part, launch our associated
-// chrome.exe with a sanitized version of that command line. Returns true iff
+// chrome.exe with a sanitized version of that command line. Returns true iff
// successful.
bool SanitizeAndLaunchChrome(const wchar_t* command_line);
// Returns the full path to the Chrome executable.
-std::wstring GetChromeExecutablePath();
+FilePath GetChromeExecutablePath();
// The type of the CfLaunchChrome entrypoint exported from this DLL.
typedef int (__stdcall *CfLaunchChromeProc)();
diff --git a/chrome_frame/chrome_tab.cc b/chrome_frame/chrome_tab.cc
index 923d957d8..601ef06 100644
--- a/chrome_frame/chrome_tab.cc
+++ b/chrome_frame/chrome_tab.cc
@@ -61,10 +61,10 @@ class ChromeTabModule
}
if (SUCCEEDED(hr)) {
- std::wstring app_path(
- chrome_launcher::GetChromeExecutablePath());
- app_path = file_util::GetDirectoryFromPath(app_path);
- hr = registrar->AddReplacement(L"CHROME_APPPATH", app_path.c_str());
+ FilePath app_path =
+ chrome_launcher::GetChromeExecutablePath().DirName();
+ hr = registrar->AddReplacement(L"CHROME_APPPATH",
+ app_path.value().c_str());
DCHECK(SUCCEEDED(hr));
}
diff --git a/chrome_frame/test/perf/chrome_frame_perftest.cc b/chrome_frame/test/perf/chrome_frame_perftest.cc
index 79bbd7b..c896fa4 100644
--- a/chrome_frame/test/perf/chrome_frame_perftest.cc
+++ b/chrome_frame/test/perf/chrome_frame_perftest.cc
@@ -621,7 +621,8 @@ class ChromeFrameMemoryTest : public ChromeFramePerfTestBase {
file_util::AppendToPath(&chrome_exe_test_path,
chrome::kBrowserProcessExecutableName);
- if (!file_util::PathExists(chrome_exe_test_path)) {
+ if (!file_util::PathExists(
+ FilePath::FromWStringHack(chrome_exe_test_path))) {
file_util::UpOneDirectory(&chrome_exe_path);
chrome_exe_test_path = chrome_exe_path;
@@ -629,7 +630,8 @@ class ChromeFrameMemoryTest : public ChromeFramePerfTestBase {
chrome::kBrowserProcessExecutableName);
}
- EXPECT_TRUE(file_util::PathExists(chrome_exe_test_path));
+ EXPECT_TRUE(
+ file_util::PathExists(FilePath::FromWStringHack(chrome_exe_test_path)));
return chrome_exe_path;
}
diff --git a/chrome_frame/test_utils.cc b/chrome_frame/test_utils.cc
index 2d47c71..abfdbee 100644
--- a/chrome_frame/test_utils.cc
+++ b/chrome_frame/test_utils.cc
@@ -15,17 +15,18 @@
// Statics
-std::wstring ScopedChromeFrameRegistrar::GetChromeFrameBuildPath() {
- std::wstring build_path;
+FilePath ScopedChromeFrameRegistrar::GetChromeFrameBuildPath() {
+ FilePath build_path;
PathService::Get(chrome::DIR_APP, &build_path);
- file_util::AppendToPath(&build_path, L"servers\\npchrome_tab.dll");
+ build_path = build_path.Append(L"servers").
+ Append(L"npchrome_tab.dll");
file_util::PathExists(build_path);
return build_path;
}
void ScopedChromeFrameRegistrar::RegisterDefaults() {
- std::wstring dll_path_ = GetChromeFrameBuildPath();
- RegisterAtPath(dll_path_);
+ FilePath dll_path = GetChromeFrameBuildPath();
+ RegisterAtPath(dll_path.value());
}
void ScopedChromeFrameRegistrar::RegisterAtPath(
@@ -56,7 +57,7 @@ void ScopedChromeFrameRegistrar::RegisterAtPath(
// Non-statics
ScopedChromeFrameRegistrar::ScopedChromeFrameRegistrar() {
- original_dll_path_ = GetChromeFrameBuildPath();
+ original_dll_path_ = GetChromeFrameBuildPath().ToWStringHack();
RegisterChromeFrameAtPath(original_dll_path_);
}
diff --git a/chrome_frame/test_utils.h b/chrome_frame/test_utils.h
index fb470a0..85f5cc5 100644
--- a/chrome_frame/test_utils.h
+++ b/chrome_frame/test_utils.h
@@ -7,6 +7,8 @@
#include <string>
+#include "base/file_path.h"
+
// Helper class used to register different chrome frame DLLs while running
// tests. At construction, this registers the DLL found in the build path.
// At destruction, again registers the DLL found in the build path if another
@@ -24,7 +26,7 @@ class ScopedChromeFrameRegistrar {
std::wstring GetChromeFrameDllPath() const;
- static std::wstring GetChromeFrameBuildPath();
+ static FilePath GetChromeFrameBuildPath();
static void RegisterAtPath(const std::wstring& path);
static void RegisterDefaults();
diff --git a/net/tools/crash_cache/crash_cache.cc b/net/tools/crash_cache/crash_cache.cc
index 36c64e2..dd56247 100644
--- a/net/tools/crash_cache/crash_cache.cc
+++ b/net/tools/crash_cache/crash_cache.cc
@@ -111,7 +111,7 @@ bool CreateTargetFolder(const std::wstring& path, RankCrashes action,
*full_path = path;
file_util::AppendToPath(full_path, folders[action]);
- if (file_util::PathExists(*full_path))
+ if (file_util::PathExists(FilePath::FromWStringHack(*full_path)))
return false;
return file_util::CreateDirectory(*full_path);
diff --git a/skia/ext/vector_canvas_unittest.cc b/skia/ext/vector_canvas_unittest.cc
index 59c6d0b..2d5d728 100644
--- a/skia/ext/vector_canvas_unittest.cc
+++ b/skia/ext/vector_canvas_unittest.cc
@@ -84,7 +84,7 @@ class Bitmap {
class Image {
public:
// Creates the image from the given filename on disk.
- Image(const std::wstring& filename) : ignore_alpha_(true) {
+ explicit Image(const FilePath& filename) : ignore_alpha_(true) {
Vector<char> compressed;
ReadFileToVector(filename, &compressed);
EXPECT_TRUE(compressed.size());
@@ -123,7 +123,7 @@ class Image {
int row_length() const { return row_length_; }
// Save the image to a png file. Used to create the initial test files.
- void SaveToFile(const std::wstring& filename) {
+ void SaveToFile(const FilePath& filename) {
std::vector<unsigned char> compressed;
ASSERT_TRUE(gfx::PNGCodec::Encode(&*data_.begin(),
gfx::PNGCodec::FORMAT_BGRA,
@@ -229,18 +229,17 @@ class ImageTest : public testing::Test {
const testing::TestInfo& test_info =
*testing::UnitTest::GetInstance()->current_test_info();
PathService::Get(base::DIR_SOURCE_ROOT, &test_dir_);
- file_util::AppendToPath(&test_dir_, L"skia");
- file_util::AppendToPath(&test_dir_, L"ext");
- file_util::AppendToPath(&test_dir_, L"data");
- file_util::AppendToPath(&test_dir_,
- ASCIIToWide(test_info.test_case_name()));
- file_util::AppendToPath(&test_dir_, ASCIIToWide(test_info.name()));
+ test_dir_ = test_dir_.AppendASCII("skia").
+ AppendASCII("ext").
+ AppendASCII("data").
+ AppendASCII(test_info.test_case_name()).
+ AppendASCII(test_info.name());
// Hack for a quick lowercase. We assume all the tests names are ASCII.
- std::string tmp(WideToASCII(test_dir_));
+ std::string tmp(WideToASCII(test_dir_.ToWStringHack()));
for (size_t i = 0; i < tmp.size(); ++i)
tmp[i] = ToLowerASCII(tmp[i]);
- test_dir_ = ASCIIToWide(tmp);
+ test_dir_ = FilePath::FromWStringHack(ASCIIToWide(tmp));
if (action_ == GENERATE) {
// Make sure the directory exist.
@@ -249,16 +248,18 @@ class ImageTest : public testing::Test {
}
// Returns the fully qualified path of a data file.
- std::wstring test_file(const std::wstring& filename) const {
+ FilePath test_file(const FilePath::StringType& filename) const {
// Hack for a quick lowercase. We assume all the test data file names are
// ASCII.
- std::string tmp(WideToASCII(filename));
+#if defined(OS_WIN)
+ std::string tmp = WideToASCII(filename);
+#else
+ std::string tmp(filename);
+#endif
for (size_t i = 0; i < tmp.size(); ++i)
tmp[i] = ToLowerASCII(tmp[i]);
- std::wstring path(test_dir_);
- file_util::AppendToPath(&path, ASCIIToWide(tmp));
- return path;
+ return test_dir_.AppendASCII(tmp);
}
// Compares or saves the bitmap currently loaded in the context, depending on
@@ -266,8 +267,8 @@ class ImageTest : public testing::Test {
// 100] on failure. The return value is the percentage of difference between
// the image in the file and the image in the canvas.
double ProcessCanvas(const skia::PlatformCanvas& canvas,
- std::wstring filename) const {
- filename += L".png";
+ FilePath::StringType filename) const {
+ filename = filename + FILE_PATH_LITERAL(".png");
switch (action_) {
case GENERATE:
SaveImage(canvas, filename);
@@ -285,7 +286,7 @@ class ImageTest : public testing::Test {
// Compares the bitmap currently loaded in the context with the file. Returns
// the percentage of pixel difference between both images, between 0 and 100.
double CompareImage(const skia::PlatformCanvas& canvas,
- const std::wstring& filename) const {
+ const FilePath::StringType& filename) const {
Image image1(canvas);
Image image2(test_file(filename));
double diff = image1.PercentageDifferent(image2);
@@ -294,14 +295,14 @@ class ImageTest : public testing::Test {
// Saves the bitmap currently loaded in the context into the file.
void SaveImage(const skia::PlatformCanvas& canvas,
- const std::wstring& filename) const {
+ const FilePath::StringType& filename) const {
Image(canvas).SaveToFile(test_file(filename));
}
ProcessAction action_;
// Path to directory used to contain the test data.
- std::wstring test_dir_;
+ FilePath test_dir_;
DISALLOW_COPY_AND_ASSIGN(ImageTest);
};
@@ -328,7 +329,7 @@ void Premultiply(SkBitmap bitmap) {
}
}
-void LoadPngFileToSkBitmap(const std::wstring& filename,
+void LoadPngFileToSkBitmap(const FilePath& filename,
SkBitmap* bitmap,
bool is_opaque) {
Vector<char> compressed;
@@ -397,7 +398,7 @@ class VectorCanvasTest : public ImageTest {
// Compares both canvas and returns the pixel difference in percentage between
// both images. 0 on success and ]0, 100] on failure.
- double ProcessImage(const std::wstring& filename) {
+ double ProcessImage(const FilePath::StringType& filename) {
std::wstring number(StringPrintf(L"%02d_", number_++));
double diff1 = parent::ProcessCanvas(*vcanvas_, number + L"vc_" + filename);
double diff2 = parent::ProcessCanvas(*pcanvas_, number + L"pc_" + filename);
@@ -460,20 +461,20 @@ TEST_F(VectorCanvasTest, Uninitialized) {
// PlatformCanvas default initialization is almost white 0x01FFFEFD (invalid
// Skia color) in both Debug and Release. See magicTransparencyColor in
// platform_device.cc
- EXPECT_EQ(0., ProcessImage(L"empty"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("empty")));
}
TEST_F(VectorCanvasTest, BasicDrawing) {
EXPECT_EQ(Image(*vcanvas_).PercentageDifferent(Image(*pcanvas_)), 0.)
<< L"clean";
- EXPECT_EQ(0., ProcessImage(L"clean"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("clean")));
// Clear white.
{
vcanvas_->drawARGB(255, 255, 255, 255, SkXfermode::kSrc_Mode);
pcanvas_->drawARGB(255, 255, 255, 255, SkXfermode::kSrc_Mode);
}
- EXPECT_EQ(0., ProcessImage(L"drawARGB"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("drawARGB")));
// Diagonal line top-left to bottom-right.
{
@@ -482,7 +483,7 @@ TEST_F(VectorCanvasTest, BasicDrawing) {
vcanvas_->drawLine(10, 10, 90, 90, paint);
pcanvas_->drawLine(10, 10, 90, 90, paint);
}
- EXPECT_EQ(0., ProcessImage(L"drawLine_black"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("drawLine_black")));
// Rect.
{
@@ -491,7 +492,7 @@ TEST_F(VectorCanvasTest, BasicDrawing) {
vcanvas_->drawRectCoords(25, 25, 75, 75, paint);
pcanvas_->drawRectCoords(25, 25, 75, 75, paint);
}
- EXPECT_EQ(0., ProcessImage(L"drawRect_green"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("drawRect_green")));
// A single-point rect doesn't leave any mark.
{
@@ -500,7 +501,7 @@ TEST_F(VectorCanvasTest, BasicDrawing) {
vcanvas_->drawRectCoords(5, 5, 5, 5, paint);
pcanvas_->drawRectCoords(5, 5, 5, 5, paint);
}
- EXPECT_EQ(0., ProcessImage(L"drawRect_noop"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("drawRect_noop")));
// Rect.
{
@@ -509,14 +510,14 @@ TEST_F(VectorCanvasTest, BasicDrawing) {
vcanvas_->drawRectCoords(75, 50, 80, 55, paint);
pcanvas_->drawRectCoords(75, 50, 80, 55, paint);
}
- EXPECT_EQ(0., ProcessImage(L"drawRect_noop"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("drawRect_noop")));
// Empty again
{
vcanvas_->drawPaint(SkPaint());
pcanvas_->drawPaint(SkPaint());
}
- EXPECT_EQ(0., ProcessImage(L"drawPaint_black"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("drawPaint_black")));
// Horizontal line left to right.
{
@@ -525,7 +526,7 @@ TEST_F(VectorCanvasTest, BasicDrawing) {
vcanvas_->drawLine(10, 20, 90, 20, paint);
pcanvas_->drawLine(10, 20, 90, 20, paint);
}
- EXPECT_EQ(0., ProcessImage(L"drawLine_left_to_right"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("drawLine_left_to_right")));
// Vertical line downward.
{
@@ -534,7 +535,7 @@ TEST_F(VectorCanvasTest, BasicDrawing) {
vcanvas_->drawLine(30, 10, 30, 90, paint);
pcanvas_->drawLine(30, 10, 30, 90, paint);
}
- EXPECT_EQ(0., ProcessImage(L"drawLine_red"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("drawLine_red")));
}
TEST_F(VectorCanvasTest, Circles) {
@@ -552,7 +553,7 @@ TEST_F(VectorCanvasTest, Circles) {
vcanvas_->drawPath(path, paint);
pcanvas_->drawPath(path, paint);
}
- EXPECT_EQ(0., ProcessImage(L"circle_stroke"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("circle_stroke")));
// Filled Circle.
{
@@ -563,7 +564,7 @@ TEST_F(VectorCanvasTest, Circles) {
vcanvas_->drawPath(path, paint);
pcanvas_->drawPath(path, paint);
}
- EXPECT_EQ(0., ProcessImage(L"circle_fill"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("circle_fill")));
// Stroked Circle over.
{
@@ -575,7 +576,7 @@ TEST_F(VectorCanvasTest, Circles) {
vcanvas_->drawPath(path, paint);
pcanvas_->drawPath(path, paint);
}
- EXPECT_EQ(0., ProcessImage(L"circle_over_strike"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("circle_over_strike")));
// Stroke and Fill Circle.
{
@@ -587,7 +588,7 @@ TEST_F(VectorCanvasTest, Circles) {
vcanvas_->drawPath(path, paint);
pcanvas_->drawPath(path, paint);
}
- EXPECT_EQ(0., ProcessImage(L"circle_stroke_and_fill"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("circle_stroke_and_fill")));
// Line + Quad + Cubic.
{
@@ -606,7 +607,7 @@ TEST_F(VectorCanvasTest, Circles) {
vcanvas_->drawPath(path, paint);
pcanvas_->drawPath(path, paint);
}
- EXPECT_EQ(0., ProcessImage(L"mixed_stroke"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("mixed_stroke")));
}
TEST_F(VectorCanvasTest, LineOrientation) {
@@ -625,7 +626,7 @@ TEST_F(VectorCanvasTest, LineOrientation) {
vcanvas_->drawLine(90, 30, 10, 30, paint);
pcanvas_->drawLine(90, 30, 10, 30, paint);
}
- EXPECT_EQ(0., ProcessImage(L"horizontal"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("horizontal")));
// Vertical lines.
{
@@ -638,7 +639,7 @@ TEST_F(VectorCanvasTest, LineOrientation) {
vcanvas_->drawLine(30, 90, 30, 10, paint);
pcanvas_->drawLine(30, 90, 30, 10, paint);
}
- EXPECT_EQ(0., ProcessImage(L"vertical"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("vertical")));
// Try again with a 180 degres rotation.
vcanvas_->rotate(180);
@@ -653,7 +654,7 @@ TEST_F(VectorCanvasTest, LineOrientation) {
vcanvas_->drawLine(-90, -35, -10, -35, paint);
pcanvas_->drawLine(-90, -35, -10, -35, paint);
}
- EXPECT_EQ(0., ProcessImage(L"horizontal_180"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("horizontal_180")));
// Vertical lines (rotated).
{
@@ -664,7 +665,7 @@ TEST_F(VectorCanvasTest, LineOrientation) {
vcanvas_->drawLine(-35, -90, -35, -10, paint);
pcanvas_->drawLine(-35, -90, -35, -10, paint);
}
- EXPECT_EQ(0., ProcessImage(L"vertical_180"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("vertical_180")));
}
TEST_F(VectorCanvasTest, PathOrientation) {
@@ -687,7 +688,7 @@ TEST_F(VectorCanvasTest, PathOrientation) {
vcanvas_->drawPath(path, paint);
pcanvas_->drawPath(path, paint);
}
- EXPECT_EQ(0., ProcessImage(L"drawPath_ltr"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("drawPath_ltr")));
// Horizontal lines.
{
@@ -704,7 +705,7 @@ TEST_F(VectorCanvasTest, PathOrientation) {
vcanvas_->drawPath(path, paint);
pcanvas_->drawPath(path, paint);
}
- EXPECT_EQ(0., ProcessImage(L"drawPath_rtl"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("drawPath_rtl")));
}
TEST_F(VectorCanvasTest, DiagonalLines) {
@@ -713,7 +714,7 @@ TEST_F(VectorCanvasTest, DiagonalLines) {
vcanvas_->drawLine(10, 10, 90, 90, paint);
pcanvas_->drawLine(10, 10, 90, 90, paint);
- EXPECT_EQ(0., ProcessImage(L"nw-se"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("nw-se")));
// Starting here, there is NO WAY to make them agree. At least verify that the
// output doesn't change across versions. This test is disabled. See bug
@@ -722,15 +723,15 @@ TEST_F(VectorCanvasTest, DiagonalLines) {
vcanvas_->drawLine(10, 95, 90, 15, paint);
pcanvas_->drawLine(10, 95, 90, 15, paint);
- EXPECT_EQ(0., ProcessImage(L"sw-ne"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("sw-ne")));
vcanvas_->drawLine(90, 10, 10, 90, paint);
pcanvas_->drawLine(90, 10, 10, 90, paint);
- EXPECT_EQ(0., ProcessImage(L"ne-sw"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("ne-sw")));
vcanvas_->drawLine(95, 90, 15, 10, paint);
pcanvas_->drawLine(95, 90, 15, 10, paint);
- EXPECT_EQ(0., ProcessImage(L"se-nw"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("se-nw")));
}
TEST_F(VectorCanvasTest, PathEffects) {
@@ -746,7 +747,7 @@ TEST_F(VectorCanvasTest, PathEffects) {
vcanvas_->drawLine(10, 10, 90, 10, paint);
pcanvas_->drawLine(10, 10, 90, 10, paint);
}
- EXPECT_EQ(0., ProcessImage(L"dash_line"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("dash_line")));
// Starting here, there is NO WAY to make them agree. At least verify that the
@@ -770,7 +771,7 @@ TEST_F(VectorCanvasTest, PathEffects) {
vcanvas_->drawPath(path, paint);
pcanvas_->drawPath(path, paint);
}
- EXPECT_EQ(0., ProcessImage(L"dash_path"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("dash_path")));
{
SkPaint paint;
@@ -784,7 +785,7 @@ TEST_F(VectorCanvasTest, PathEffects) {
vcanvas_->drawRectCoords(20, 20, 30, 30, paint);
pcanvas_->drawRectCoords(20, 20, 30, 30, paint);
}
- EXPECT_EQ(0., ProcessImage(L"dash_rect"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("dash_rect")));
// This thing looks like it has been drawn by a 3 years old kid. I haven't
// filed a bug on this since I guess nobody is expecting this to look nice.
@@ -801,7 +802,7 @@ TEST_F(VectorCanvasTest, PathEffects) {
path.addCircle(50, 75, 10);
vcanvas_->drawPath(path, paint);
pcanvas_->drawPath(path, paint);
- EXPECT_EQ(0., ProcessImage(L"circle"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("circle")));
}
}
@@ -811,7 +812,7 @@ TEST_F(VectorCanvasTest, Bitmaps) {
LoadPngFileToSkBitmap(test_file(L"bitmap_opaque.png"), &bitmap, true);
vcanvas_->drawBitmap(bitmap, 13, 3, NULL);
pcanvas_->drawBitmap(bitmap, 13, 3, NULL);
- EXPECT_EQ(0., ProcessImage(L"opaque"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("opaque")));
}
{
@@ -819,7 +820,7 @@ TEST_F(VectorCanvasTest, Bitmaps) {
LoadPngFileToSkBitmap(test_file(L"bitmap_alpha.png"), &bitmap, false);
vcanvas_->drawBitmap(bitmap, 5, 15, NULL);
pcanvas_->drawBitmap(bitmap, 5, 15, NULL);
- EXPECT_EQ(0., ProcessImage(L"alpha"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("alpha")));
}
}
@@ -837,7 +838,7 @@ TEST_F(VectorCanvasTest, ClippingRect) {
vcanvas_->drawBitmap(bitmap, 13, 3, NULL);
pcanvas_->drawBitmap(bitmap, 13, 3, NULL);
- EXPECT_EQ(0., ProcessImage(L"rect"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("rect")));
}
TEST_F(VectorCanvasTest, ClippingPath) {
@@ -851,7 +852,7 @@ TEST_F(VectorCanvasTest, ClippingPath) {
vcanvas_->drawBitmap(bitmap, 14, 3, NULL);
pcanvas_->drawBitmap(bitmap, 14, 3, NULL);
- EXPECT_EQ(0., ProcessImage(L"path"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("path")));
}
TEST_F(VectorCanvasTest, ClippingCombined) {
@@ -873,7 +874,7 @@ TEST_F(VectorCanvasTest, ClippingCombined) {
vcanvas_->drawBitmap(bitmap, 15, 3, NULL);
pcanvas_->drawBitmap(bitmap, 15, 3, NULL);
- EXPECT_EQ(0., ProcessImage(L"combined"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("combined")));
}
TEST_F(VectorCanvasTest, ClippingIntersect) {
@@ -895,7 +896,7 @@ TEST_F(VectorCanvasTest, ClippingIntersect) {
vcanvas_->drawBitmap(bitmap, 15, 3, NULL);
pcanvas_->drawBitmap(bitmap, 15, 3, NULL);
- EXPECT_EQ(0., ProcessImage(L"intersect"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("intersect")));
}
TEST_F(VectorCanvasTest, ClippingClean) {
@@ -914,7 +915,7 @@ TEST_F(VectorCanvasTest, ClippingClean) {
vcanvas_->drawBitmap(bitmap, 15, 3, NULL);
pcanvas_->drawBitmap(bitmap, 15, 3, NULL);
- EXPECT_EQ(0., ProcessImage(L"clipped"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("clipped")));
vcanvas_->clipRegion(old_region, SkRegion::kReplace_Op);
pcanvas_->clipRegion(old_region, SkRegion::kReplace_Op);
}
@@ -922,7 +923,7 @@ TEST_F(VectorCanvasTest, ClippingClean) {
// Verify that the clipping region has been fixed back.
vcanvas_->drawBitmap(bitmap, 55, 3, NULL);
pcanvas_->drawBitmap(bitmap, 55, 3, NULL);
- EXPECT_EQ(0., ProcessImage(L"unclipped"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("unclipped")));
}
}
@@ -935,14 +936,14 @@ TEST_F(VectorCanvasTest, DISABLED_Matrix) {
pcanvas_->translate(15, 3);
vcanvas_->drawBitmap(bitmap, 0, 0, NULL);
pcanvas_->drawBitmap(bitmap, 0, 0, NULL);
- EXPECT_EQ(0., ProcessImage(L"translate1"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("translate1")));
}
{
vcanvas_->translate(-30, -23);
pcanvas_->translate(-30, -23);
vcanvas_->drawBitmap(bitmap, 0, 0, NULL);
pcanvas_->drawBitmap(bitmap, 0, 0, NULL);
- EXPECT_EQ(0., ProcessImage(L"translate2"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("translate2")));
}
vcanvas_->resetMatrix();
pcanvas_->resetMatrix();
@@ -957,7 +958,7 @@ TEST_F(VectorCanvasTest, DISABLED_Matrix) {
pcanvas_->scale(SkDoubleToScalar(1.9), SkDoubleToScalar(1.5));
vcanvas_->drawBitmap(bitmap, 1, 1, NULL);
pcanvas_->drawBitmap(bitmap, 1, 1, NULL);
- EXPECT_EQ(0., ProcessImage(L"scale"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("scale")));
}
vcanvas_->resetMatrix();
pcanvas_->resetMatrix();
@@ -967,7 +968,7 @@ TEST_F(VectorCanvasTest, DISABLED_Matrix) {
pcanvas_->rotate(67);
vcanvas_->drawBitmap(bitmap, 20, -50, NULL);
pcanvas_->drawBitmap(bitmap, 20, -50, NULL);
- EXPECT_EQ(0., ProcessImage(L"rotate"));
+ EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("rotate")));
}
}
diff --git a/tools/memory_watcher/memory_watcher.cc b/tools/memory_watcher/memory_watcher.cc
index 0d05fcb..a240b92 100644
--- a/tools/memory_watcher/memory_watcher.cc
+++ b/tools/memory_watcher/memory_watcher.cc
@@ -82,7 +82,8 @@ void MemoryWatcher::CloseLogFile() {
file_ = NULL;
std::wstring tmp_name = ASCIIToWide(file_name_);
tmp_name += L".tmp";
- file_util::Move(tmp_name, ASCIIToWide(file_name_));
+ file_util::Move(FilePath::FromWStringHack(tmp_name),
+ FilePath::FromWStringHack(ASCIIToWide(file_name_)));
}
}
diff --git a/webkit/default_plugin/plugin_database_handler.cc b/webkit/default_plugin/plugin_database_handler.cc
index 9e90939..c597d5a 100644
--- a/webkit/default_plugin/plugin_database_handler.cc
+++ b/webkit/default_plugin/plugin_database_handler.cc
@@ -49,7 +49,7 @@ bool PluginDatabaseHandler::DownloadPluginsFileIfNeeded(
plugins_file_ += L"\\chrome_plugins_file.xml";
bool initiate_download = false;
- if (!file_util::PathExists(plugins_file_)) {
+ if (!file_util::PathExists(FilePath::FromWStringHack(plugins_file_))) {
initiate_download = true;
} else {
SYSTEMTIME creation_system_time = {0};
diff --git a/webkit/tools/test_shell/image_decoder_unittest.cc b/webkit/tools/test_shell/image_decoder_unittest.cc
index 0c73ebd..87af6df 100644
--- a/webkit/tools/test_shell/image_decoder_unittest.cc
+++ b/webkit/tools/test_shell/image_decoder_unittest.cc
@@ -6,6 +6,7 @@
#include "webkit/tools/test_shell/image_decoder_unittest.h"
+#include "base/file_path.h"
#include "base/file_util.h"
#include "base/md5.h"
#include "base/path_service.h"
@@ -19,7 +20,7 @@ namespace {
// Determine if we should test with file specified by |path| based
// on |file_selection| and the |threshold| for the file size.
-bool ShouldSkipFile(const std::wstring& path,
+bool ShouldSkipFile(const FilePath& path,
ImageDecoderTestFileSelection file_selection,
const int64 threshold) {
if (file_selection == TEST_ALL)
@@ -32,16 +33,17 @@ bool ShouldSkipFile(const std::wstring& path,
} // anonymous namespace
-void ReadFileToVector(const std::wstring& path, Vector<char>* contents) {
+void ReadFileToVector(const FilePath& path, Vector<char>* contents) {
std::string contents_str;
file_util::ReadFileToString(path, &contents_str);
contents->resize(contents_str.size());
memcpy(&contents->first(), contents_str.data(), contents_str.size());
}
-std::wstring GetMD5SumPath(const std::wstring& path) {
- static const std::wstring kDecodedDataExtension(L".md5sum");
- return path + kDecodedDataExtension;
+FilePath GetMD5SumPath(const FilePath& path) {
+ static const FilePath::StringType kDecodedDataExtension(
+ FILE_PATH_LITERAL(".md5sum"));
+ return FilePath(path.value() + kDecodedDataExtension);
}
#ifdef CALCULATE_MD5_SUMS
@@ -63,18 +65,19 @@ void SaveMD5Sum(const std::wstring& path, WebCore::RGBA32Buffer* buffer) {
}
#else
void VerifyImage(WebCore::ImageDecoder* decoder,
- const std::wstring& path,
- const std::wstring& md5_sum_path,
+ const FilePath& path,
+ const FilePath& md5_sum_path,
size_t frame_index) {
// Make sure decoding can complete successfully.
- EXPECT_TRUE(decoder->isSizeAvailable()) << path;
- EXPECT_GE(decoder->frameCount(), frame_index) << path;
+ EXPECT_TRUE(decoder->isSizeAvailable()) << path.value();
+ EXPECT_GE(decoder->frameCount(), frame_index) << path.value();
WebCore::RGBA32Buffer* image_buffer =
decoder->frameBufferAtIndex(frame_index);
- ASSERT_NE(static_cast<WebCore::RGBA32Buffer*>(NULL), image_buffer) << path;
+ ASSERT_NE(static_cast<WebCore::RGBA32Buffer*>(NULL), image_buffer) <<
+ path.value();
EXPECT_EQ(WebCore::RGBA32Buffer::FrameComplete, image_buffer->status()) <<
- path;
- EXPECT_FALSE(decoder->failed()) << path;
+ path.value();
+ EXPECT_FALSE(decoder->failed()) << path.value();
// Calculate MD5 sum.
MD5Digest actual_digest;
@@ -90,36 +93,39 @@ void VerifyImage(WebCore::ImageDecoder* decoder,
std::string file_bytes;
file_util::ReadFileToString(md5_sum_path, &file_bytes);
MD5Digest expected_digest;
- ASSERT_EQ(sizeof expected_digest, file_bytes.size()) << path;
+ ASSERT_EQ(sizeof expected_digest, file_bytes.size()) << path.value();
memcpy(&expected_digest, file_bytes.data(), sizeof expected_digest);
// Verify that the sums are the same.
EXPECT_EQ(0, memcmp(&expected_digest, &actual_digest, sizeof(MD5Digest))) <<
- path;
+ path.value();
}
#endif
void ImageDecoderTest::SetUp() {
FilePath data_dir;
ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &data_dir));
- data_dir_ = data_dir.ToWStringHack();
- file_util::AppendToPath(&data_dir_, L"webkit");
- file_util::AppendToPath(&data_dir_, L"data");
- file_util::AppendToPath(&data_dir_, format_ + L"_decoder");
- ASSERT_TRUE(file_util::PathExists(data_dir_)) << data_dir_;
+ data_dir_ = data_dir.AppendASCII("webkit").
+ AppendASCII("data").
+ AppendASCII(format_ + "_decoder");
+ ASSERT_TRUE(file_util::PathExists(data_dir_)) << data_dir_.value();
}
-std::vector<std::wstring> ImageDecoderTest::GetImageFiles() const {
- std::wstring pattern = L"*." + format_;
+std::vector<FilePath> ImageDecoderTest::GetImageFiles() const {
+#if defined(OS_WIN)
+ std::wstring pattern = ASCIIToWide("*." + format_);
+#else
+ std::string pattern = "*." + format_;
+#endif
- file_util::FileEnumerator enumerator(FilePath::FromWStringHack(data_dir_),
+ file_util::FileEnumerator enumerator(data_dir_,
false,
file_util::FileEnumerator::FILES);
- std::vector<std::wstring> image_files;
- std::wstring next_file_name;
- while ((next_file_name = enumerator.Next().ToWStringHack()) != L"") {
- if (!MatchPattern(next_file_name, pattern)) {
+ std::vector<FilePath> image_files;
+ FilePath next_file_name;
+ while (!(next_file_name = enumerator.Next()).empty()) {
+ if (!MatchPattern(next_file_name.value(), pattern)) {
continue;
}
image_files.push_back(next_file_name);
@@ -128,15 +134,16 @@ std::vector<std::wstring> ImageDecoderTest::GetImageFiles() const {
return image_files;
}
-bool ImageDecoderTest::ShouldImageFail(const std::wstring& path) const {
- static const std::wstring kBadSuffix(L".bad.");
- return (path.length() > (kBadSuffix.length() + format_.length()) &&
- !path.compare(path.length() - format_.length() - kBadSuffix.length(),
- kBadSuffix.length(), kBadSuffix));
+bool ImageDecoderTest::ShouldImageFail(const FilePath& path) const {
+ static const FilePath::StringType kBadSuffix(FILE_PATH_LITERAL(".bad."));
+ return (path.value().length() > (kBadSuffix.length() + format_.length()) &&
+ !path.value().compare(path.value().length() - format_.length() -
+ kBadSuffix.length(),
+ kBadSuffix.length(), kBadSuffix));
}
WebCore::ImageDecoder* ImageDecoderTest::SetupDecoder(
- const std::wstring& path,
+ const FilePath& path,
bool split_at_random) const {
Vector<char> image_contents;
ReadFileToVector(path, &image_contents);
@@ -154,7 +161,7 @@ WebCore::ImageDecoder* ImageDecoderTest::SetupDecoder(
// Make sure the image decoder doesn't fail when we ask for the frame buffer
// for this partial image.
decoder->setData(shared_contents.get(), false);
- EXPECT_FALSE(decoder->failed()) << path;
+ EXPECT_FALSE(decoder->failed()) << path.value();
// NOTE: We can't check that frame 0 is non-NULL, because if this is an ICO
// and we haven't yet supplied enough data to read the directory, there is
// no framecount and thus no first frame.
@@ -175,8 +182,8 @@ WebCore::ImageDecoder* ImageDecoderTest::SetupDecoder(
void ImageDecoderTest::TestDecoding(
ImageDecoderTestFileSelection file_selection,
const int64 threshold) const {
- const std::vector<std::wstring> image_files(GetImageFiles());
- for (std::vector<std::wstring>::const_iterator i(image_files.begin());
+ const std::vector<FilePath> image_files(GetImageFiles());
+ for (std::vector<FilePath>::const_iterator i = image_files.begin();
i != image_files.end(); ++i) {
if (ShouldSkipFile(*i, file_selection, threshold))
continue;
@@ -189,9 +196,9 @@ void ImageDecoderTest::TestDecoding(
decoder->frameBufferAtIndex(0);
if (image_buffer) {
EXPECT_NE(image_buffer->status(),
- WebCore::RGBA32Buffer::FrameComplete) << (*i);
+ WebCore::RGBA32Buffer::FrameComplete) << i->value();
}
- EXPECT_TRUE(decoder->failed()) << (*i);
+ EXPECT_TRUE(decoder->failed()) << i->value();
continue;
}
@@ -212,8 +219,8 @@ void ImageDecoderTest::TestChunkedDecoding(
const Time today = Time::Now().LocalMidnight();
srand(static_cast<unsigned int>(today.ToInternalValue()));
- const std::vector<std::wstring> image_files(GetImageFiles());
- for (std::vector<std::wstring>::const_iterator i(image_files.begin());
+ const std::vector<FilePath> image_files(GetImageFiles());
+ for (std::vector<FilePath>::const_iterator i = image_files.begin();
i != image_files.end(); ++i) {
if (ShouldSkipFile(*i, file_selection, threshold))
continue;
diff --git a/webkit/tools/test_shell/image_decoder_unittest.h b/webkit/tools/test_shell/image_decoder_unittest.h
index 4b1a5d9..760ac2c 100644
--- a/webkit/tools/test_shell/image_decoder_unittest.h
+++ b/webkit/tools/test_shell/image_decoder_unittest.h
@@ -5,6 +5,7 @@
#ifndef WEBKIT_TOOLS_TEST_SHELL_IMAGE_DECODER_UNITTEST_H_
#define WEBKIT_TOOLS_TEST_SHELL_IMAGE_DECODER_UNITTEST_H_
+#include <string>
#include <vector>
#include "Vector.h"
@@ -13,6 +14,7 @@
#undef LOG
#include "base/basictypes.h"
+#include "base/file_path.h"
#include "testing/gtest/include/gtest/gtest.h"
// If CALCULATE_MD5_SUMS is not defined, then this test decodes a handful of
@@ -36,40 +38,40 @@ enum ImageDecoderTestFileSelection {
};
// Reads the contents of the specified file into the specified vector.
-void ReadFileToVector(const std::wstring& path, Vector<char>* contents);
+void ReadFileToVector(const FilePath& path, Vector<char>* contents);
// Returns the path the decoded data is saved at.
-std::wstring GetMD5SumPath(const std::wstring& path);
+FilePath GetMD5SumPath(const FilePath& path);
#ifdef CALCULATE_MD5_SUMS
// Saves the MD5 sum to the specified file.
-void SaveMD5Sum(const std::wstring& path, WebCore::RGBA32Buffer* buffer);
+void SaveMD5Sum(const FilePath& path, WebCore::RGBA32Buffer* buffer);
#else
// Verifies the image. |path| identifies the path the image was loaded from.
// |frame_index| indicates which index from the decoder we should examine.
void VerifyImage(WebCore::ImageDecoder* decoder,
- const std::wstring& path,
- const std::wstring& md5_sum_path,
+ const FilePath& path,
+ const FilePath& md5_sum_path,
size_t frame_index);
#endif
class ImageDecoderTest : public testing::Test {
public:
- explicit ImageDecoderTest(const std::wstring& format) : format_(format) { }
+ explicit ImageDecoderTest(const std::string& format) : format_(format) { }
protected:
virtual void SetUp();
// Returns the vector of image files for testing.
- std::vector<std::wstring> GetImageFiles() const;
+ std::vector<FilePath> GetImageFiles() const;
// Returns true if the image is bogus and should not be successfully decoded.
- bool ShouldImageFail(const std::wstring& path) const;
+ bool ShouldImageFail(const FilePath& path) const;
// Creates and returns an ImageDecoder for the file at the given |path|. If
// |split_at_random| is true, also verifies that breaking the data supplied to
// the decoder into two random pieces does not cause problems.
- WebCore::ImageDecoder* SetupDecoder(const std::wstring& path,
+ WebCore::ImageDecoder* SetupDecoder(const FilePath& path,
bool split_at_random) const;
// Verifies each of the test image files is decoded correctly and matches the
@@ -99,14 +101,14 @@ class ImageDecoderTest : public testing::Test {
virtual WebCore::ImageDecoder* CreateDecoder() const = 0;
// The format to be decoded, like "bmp" or "ico".
- std::wstring format_;
+ std::string format_;
protected:
// Path to the test files.
- std::wstring data_dir_;
+ FilePath data_dir_;
private:
- DISALLOW_EVIL_CONSTRUCTORS(ImageDecoderTest);
+ DISALLOW_COPY_AND_ASSIGN(ImageDecoderTest);
};
#endif // WEBKIT_TOOLS_TEST_SHELL_IMAGE_DECODER_UNITTEST_H_
diff --git a/webkit/tools/webcore_unit_tests/BMPImageDecoder_unittest.cpp b/webkit/tools/webcore_unit_tests/BMPImageDecoder_unittest.cpp
index bc3c681..aa99023a 100644
--- a/webkit/tools/webcore_unit_tests/BMPImageDecoder_unittest.cpp
+++ b/webkit/tools/webcore_unit_tests/BMPImageDecoder_unittest.cpp
@@ -34,7 +34,7 @@
class BMPImageDecoderTest : public ImageDecoderTest {
public:
- BMPImageDecoderTest() : ImageDecoderTest(L"bmp") { }
+ BMPImageDecoderTest() : ImageDecoderTest("bmp") { }
protected:
virtual WebCore::ImageDecoder* CreateDecoder() const {
diff --git a/webkit/tools/webcore_unit_tests/ICOImageDecoder_unittest.cpp b/webkit/tools/webcore_unit_tests/ICOImageDecoder_unittest.cpp
index 0203ddf..95c5b15 100644
--- a/webkit/tools/webcore_unit_tests/ICOImageDecoder_unittest.cpp
+++ b/webkit/tools/webcore_unit_tests/ICOImageDecoder_unittest.cpp
@@ -37,7 +37,7 @@
class ICOImageDecoderTest : public ImageDecoderTest {
public:
- ICOImageDecoderTest() : ImageDecoderTest(L"ico") { }
+ ICOImageDecoderTest() : ImageDecoderTest("ico") { }
protected:
virtual WebCore::ImageDecoder* CreateDecoder() const {
@@ -59,13 +59,13 @@ TEST_F(ICOImageDecoderTest, FaviconSize) {
// Test that the decoder decodes multiple sizes of icons which have them.
// Load an icon that has both favicon-size and larger entries.
- std::wstring multisize_icon_path(data_dir_);
- file_util::AppendToPath(&multisize_icon_path, L"yahoo.ico");
+ FilePath multisize_icon_path(data_dir_.AppendASCII("yahoo.ico"));
scoped_ptr<WebCore::ImageDecoder> decoder(SetupDecoder(multisize_icon_path,
false));
// Verify the decoding.
- const std::wstring md5_sum_path(GetMD5SumPath(multisize_icon_path) + L"2");
+ const FilePath md5_sum_path(
+ GetMD5SumPath(multisize_icon_path).value() + FILE_PATH_LITERAL("2"));
static const int kDesiredFrameIndex = 3;
#ifdef CALCULATE_MD5_SUMS
SaveMD5Sum(md5_sum_path, decoder->frameBufferAtIndex(kDesiredFrameIndex));
diff --git a/webkit/tools/webcore_unit_tests/XBMImageDecoder_unittest.cpp b/webkit/tools/webcore_unit_tests/XBMImageDecoder_unittest.cpp
index 0f34238..a84b8ce 100644
--- a/webkit/tools/webcore_unit_tests/XBMImageDecoder_unittest.cpp
+++ b/webkit/tools/webcore_unit_tests/XBMImageDecoder_unittest.cpp
@@ -34,7 +34,7 @@
class XBMImageDecoderTest : public ImageDecoderTest {
public:
- XBMImageDecoderTest() : ImageDecoderTest(L"xbm") { }
+ XBMImageDecoderTest() : ImageDecoderTest("xbm") { }
protected:
virtual WebCore::ImageDecoder* CreateDecoder() const {