From cdb70a70ad4c6076fff85effeb61cfaef2bac429 Mon Sep 17 00:00:00 2001
From: "estade@chromium.org"
 <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>
Date: Thu, 15 Oct 2009 01:59:15 +0000
Subject: [PATCH] Remove some deprecated file_util wstring functions.

death to the wstring

TEST=trybots
BUG=none

Review URL: http://codereview.chromium.org/276016

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@29078 0039d316-1c4b-4281-b951-d872f2087c98
---
 base/file_util.cc                             |  14 --
 base/file_util.h                              |   8 --
 chrome/browser/first_run_win.cc               |   2 +-
 chrome/browser/importer/firefox2_importer.cc  |   2 +-
 chrome/browser/importer/firefox3_importer.cc  |   6 +-
 chrome/browser/importer/importer_unittest.cc  |   6 +-
 chrome/browser/jumplist.cc                    |   5 +-
 .../printing/printing_layout_uitest.cc        |   3 +-
 .../navigation_controller_unittest.cc         |   2 +-
 chrome/common/chrome_plugin_util.cc           |   2 +-
 chrome/installer/setup/install.cc             |  13 +-
 chrome/installer/setup/setup_main.cc          |   7 +-
 chrome/installer/util/copy_tree_work_item.cc  |  53 ++++----
 chrome/installer/util/copy_tree_work_item.h   |  14 +-
 .../util/copy_tree_work_item_unittest.cc      |   8 +-
 .../util/delete_after_reboot_helper.cc        |   2 +-
 .../installer/util/delete_tree_work_item.cc   |  19 ++-
 chrome/installer/util/delete_tree_work_item.h |  12 +-
 chrome/installer/util/move_tree_work_item.cc  |  31 +++--
 chrome/installer/util/move_tree_work_item.h   |   8 +-
 chrome/installer/util/shell_util.cc           |   4 +-
 .../chrome_mini_installer.cc                  |  17 +--
 .../mini_installer_test_util.cc               |  12 +-
 .../mini_installer_test/run_all_unittests.cc  |  16 +--
 chrome/tools/crash_service/main.cc            |  15 +--
 net/tools/crash_cache/crash_cache.cc          |   2 +-
 skia/ext/vector_canvas_unittest.cc            | 127 +++++++++---------
 tools/memory_watcher/memory_watcher.cc        |   3 +-
 .../default_plugin/plugin_database_handler.cc |   2 +-
 .../test_shell/image_decoder_unittest.cc      |  85 ++++++------
 .../tools/test_shell/image_decoder_unittest.h |  26 ++--
 .../BMPImageDecoder_unittest.cpp              |   2 +-
 .../ICOImageDecoder_unittest.cpp              |   8 +-
 .../XBMImageDecoder_unittest.cpp              |   2 +-
 34 files changed, 266 insertions(+), 272 deletions(-)

diff --git a/base/file_util.cc b/base/file_util.cc
index d3a989b5140a5..a39d1ebcf4dde 100644
--- a/base/file_util.cc
+++ b/base/file_util.cc
@@ -322,10 +322,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));
 }
@@ -345,9 +341,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));
 }
@@ -389,16 +382,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 37634b97a51fc..af08d4f949d62 100644
--- a/base/file_util.h
+++ b/base/file_util.h
@@ -133,8 +133,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
@@ -145,8 +143,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.
@@ -164,16 +160,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 d3295144c08ef..756049e035266 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 c529e394b9c1c..794d97e971095 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 10d28550690b8..c347b0c6e52b7 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 b6ef1f6d1f49a..e6d09af66cae1 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 69c2a9cd7a3d1..3dd2c55317239 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 a5de41a4c09aa..c3bfb6bf84fbd 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 9dc51d4a88679..fc31c75270259 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 809e4e6a336f4..4643a87377165 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 1bc816496f011..ce211fd1abbec 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 3b5377d0819eb..f20e307651beb 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 ffb3d34cb3f0b..2200799086ae8 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 9fa1d96d7a462..b899324f5b3d1 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 c8cae21ec5ec8..bc187e6170afe 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 a54acb3232852..1bc322ce9b7da 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 8e5610a3b9f94..3102485c946da 100644
--- a/chrome/installer/util/delete_tree_work_item.cc
+++ b/chrome/installer/util/delete_tree_work_item.cc
@@ -7,11 +7,11 @@
 #include "chrome/installer/util/delete_tree_work_item.h"
 
 DeleteTreeWorkItem::~DeleteTreeWorkItem() {
-  std::wstring tmp_dir = file_util::GetDirectoryFromPath(backup_path_);
+  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_);
+  tmp_dir = key_backup_path_.DirName();
   if (file_util::PathExists(tmp_dir)) {
     file_util::Delete(tmp_dir, true);
   }
@@ -30,8 +30,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 +40,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 +58,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 cf7b4be2147a0..b5bcb50c8a4b5 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 b90665e5e711f..45c03b2ff2987 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 95964fb279170..cfa86c47fd33f 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 86e588b38f1bd..8e00ba21c91e7 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 75fab2d87b4ce..3c50b46a77c07 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)
@@ -403,15 +403,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",
@@ -452,7 +453,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"";
@@ -485,7 +486,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);
@@ -504,7 +505,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 9c511d1d6046e..3593f106e2040 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 767ead2fc63e5..9f2dc9f2b3323 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 d6a1a20f7aebe..cf6bab97e8fb9 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/net/tools/crash_cache/crash_cache.cc b/net/tools/crash_cache/crash_cache.cc
index 36c64e27637d2..dd562479b97c3 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 59c6d0b6be67f..2d5d72838842a 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 0d05fcb5238ba..a240b92e8e2a9 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 9e909399c5da4..c597d5abc8b9e 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 0c73ebdecb06a..87af6dfb39594 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 4b1a5d999cfd7..760ac2ca86136 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 bc3c6814cdfe1..aa99023af71af 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 0203ddf3e88cf..95c5b1541ba20 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 0f3423810890e..a84b8ce444156 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 {
-- 
GitLab