| Index: webkit/fileapi/file_system_util_unittest.cc | 
| diff --git a/webkit/fileapi/file_system_util_unittest.cc b/webkit/fileapi/file_system_util_unittest.cc | 
| index 41863ae4c7e736ba66cd509d4addb1db18cc3275..1492bdfea2fe6db6dc652d120ec46db201f1d3d4 100644 | 
| --- a/webkit/fileapi/file_system_util_unittest.cc | 
| +++ b/webkit/fileapi/file_system_util_unittest.cc | 
| @@ -29,7 +29,8 @@ TEST_F(FileSystemUtilTest, ParsePersistent) { | 
| "filesystem:http://chromium.org/persistent/directory/file")); | 
| EXPECT_EQ("http://chromium.org/", origin_url_.spec()); | 
| EXPECT_EQ(kFileSystemTypePersistent, type_); | 
| -  EXPECT_EQ(FILE_PATH_LITERAL("file"), file_path_.BaseName().value()); | 
| +  EXPECT_EQ(FILE_PATH_LITERAL("file"), | 
| +      VirtualPath::BaseName(file_path_).value()); | 
| EXPECT_EQ(FILE_PATH_LITERAL("directory"), file_path_.DirName().value()); | 
| } | 
|  | 
| @@ -38,7 +39,8 @@ TEST_F(FileSystemUtilTest, ParseTemporary) { | 
| "filesystem:http://chromium.org/temporary/directory/file")); | 
| EXPECT_EQ("http://chromium.org/", origin_url_.spec()); | 
| EXPECT_EQ(kFileSystemTypeTemporary, type_); | 
| -  EXPECT_EQ(FILE_PATH_LITERAL("file"), file_path_.BaseName().value()); | 
| +  EXPECT_EQ(FILE_PATH_LITERAL("file"), | 
| +      VirtualPath::BaseName(file_path_).value()); | 
| EXPECT_EQ(FILE_PATH_LITERAL("directory"), file_path_.DirName().value()); | 
| } | 
|  | 
| @@ -47,7 +49,8 @@ TEST_F(FileSystemUtilTest, EnsureFilePathIsRelative) { | 
| "filesystem:http://chromium.org/temporary/////directory/file")); | 
| EXPECT_EQ("http://chromium.org/", origin_url_.spec()); | 
| EXPECT_EQ(kFileSystemTypeTemporary, type_); | 
| -  EXPECT_EQ(FILE_PATH_LITERAL("file"), file_path_.BaseName().value()); | 
| +  EXPECT_EQ(FILE_PATH_LITERAL("file"), | 
| +      VirtualPath::BaseName(file_path_).value()); | 
| EXPECT_EQ(FILE_PATH_LITERAL("directory"), file_path_.DirName().value()); | 
| EXPECT_FALSE(file_path_.IsAbsolute()); | 
| } | 
| @@ -62,7 +65,8 @@ TEST_F(FileSystemUtilTest, RejectBadSchemes) { | 
| TEST_F(FileSystemUtilTest, UnescapePath) { | 
| ASSERT_TRUE(CrackFileSystemURL( | 
| "filesystem:http://chromium.org/persistent/%7Echromium/space%20bar")); | 
| -  EXPECT_EQ(FILE_PATH_LITERAL("space bar"), file_path_.BaseName().value()); | 
| +  EXPECT_EQ(FILE_PATH_LITERAL("space bar"), | 
| +      VirtualPath::BaseName(file_path_).value()); | 
| EXPECT_EQ(FILE_PATH_LITERAL("~chromium"), file_path_.DirName().value()); | 
| } | 
|  | 
| @@ -89,5 +93,69 @@ TEST_F(FileSystemUtilTest, GetPersistentFileSystemRootURI) { | 
| EXPECT_EQ(uri, GetFileSystemRootURI(origin_url, type)); | 
| } | 
|  | 
| +TEST_F(FileSystemUtilTest, VirtualPathBaseName) { | 
| +  struct test_data { | 
| +    const FilePath::StringType path; | 
| +    const FilePath::StringType base_name; | 
| +  } test_cases[] = { | 
| +    { FILE_PATH_LITERAL("foo/bar"), FILE_PATH_LITERAL("bar") }, | 
| +    { FILE_PATH_LITERAL("foo/b:bar"), FILE_PATH_LITERAL("b:bar") }, | 
| +    { FILE_PATH_LITERAL(""), FILE_PATH_LITERAL("") }, | 
| +    { FILE_PATH_LITERAL("/"), FILE_PATH_LITERAL("/") }, | 
| +    { FILE_PATH_LITERAL("foo//////bar"), FILE_PATH_LITERAL("bar") }, | 
| +    { FILE_PATH_LITERAL("foo/bar/"), FILE_PATH_LITERAL("bar") }, | 
| +    { FILE_PATH_LITERAL("foo/bar/////"), FILE_PATH_LITERAL("bar") }, | 
| +    { FILE_PATH_LITERAL("/bar/////"), FILE_PATH_LITERAL("bar") }, | 
| +    { FILE_PATH_LITERAL("bar/////"), FILE_PATH_LITERAL("bar") }, | 
| +    { FILE_PATH_LITERAL("bar/"), FILE_PATH_LITERAL("bar") }, | 
| +    { FILE_PATH_LITERAL("/bar"), FILE_PATH_LITERAL("bar") }, | 
| +    { FILE_PATH_LITERAL("////bar"), FILE_PATH_LITERAL("bar") }, | 
| +    { FILE_PATH_LITERAL("bar"), FILE_PATH_LITERAL("bar") } | 
| +  }; | 
| +  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { | 
| +    FilePath input = FilePath(test_cases[i].path); | 
| +    FilePath base_name = VirtualPath::BaseName(input); | 
| +    EXPECT_EQ(test_cases[i].base_name, base_name.value()); | 
| +  } | 
| +} | 
| + | 
| +TEST_F(FileSystemUtilTest, VirtualPathGetComponents) { | 
| +  struct test_data { | 
| +    const FilePath::StringType path; | 
| +    size_t count; | 
| +    const FilePath::StringType components[3]; | 
| +  } test_cases[] = { | 
| +    { FILE_PATH_LITERAL("foo/bar"), | 
| +      2, | 
| +      { FILE_PATH_LITERAL("foo"), FILE_PATH_LITERAL("bar") } }, | 
| +    { FILE_PATH_LITERAL("foo"), | 
| +      1, | 
| +      { FILE_PATH_LITERAL("foo") } }, | 
| +    { FILE_PATH_LITERAL("foo////bar"), | 
| +      2, | 
| +      { FILE_PATH_LITERAL("foo"), FILE_PATH_LITERAL("bar") } }, | 
| +    { FILE_PATH_LITERAL("foo/c:bar"), | 
| +      2, | 
| +      { FILE_PATH_LITERAL("foo"), FILE_PATH_LITERAL("c:bar") } }, | 
| +    { FILE_PATH_LITERAL("c:foo/bar"), | 
| +      2, | 
| +      { FILE_PATH_LITERAL("c:foo"), FILE_PATH_LITERAL("bar") } }, | 
| +    { FILE_PATH_LITERAL("foo/bar"), | 
| +      2, | 
| +      { FILE_PATH_LITERAL("foo"), FILE_PATH_LITERAL("bar") } }, | 
| +    { FILE_PATH_LITERAL("/foo/bar"), | 
| +      2, | 
| +      { FILE_PATH_LITERAL("foo"), FILE_PATH_LITERAL("bar") } }, | 
| +  }; | 
| +  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { | 
| +    FilePath input = FilePath(test_cases[i].path); | 
| +    std::vector<FilePath::StringType> components; | 
| +    VirtualPath::GetComponents(input, &components); | 
| +    EXPECT_EQ(test_cases[i].count, components.size()); | 
| +    for (size_t j = 0; j < components.size(); ++j) | 
| +      EXPECT_EQ(test_cases[i].components[j], components[j]); | 
| +  } | 
| +} | 
| + | 
| }  // namespace (anonymous) | 
| }  // namespace fileapi | 
|  |