Index: webkit/fileapi/isolated_context_unittest.cc |
diff --git a/webkit/fileapi/isolated_context_unittest.cc b/webkit/fileapi/isolated_context_unittest.cc |
index bf36df91886856386c6e26d624e20cf96de290e0..4cb7a84d2e426115988db160e6fe132d8382dc9f 100644 |
--- a/webkit/fileapi/isolated_context_unittest.cc |
+++ b/webkit/fileapi/isolated_context_unittest.cc |
@@ -7,6 +7,7 @@ |
#include "base/basictypes.h" |
#include "base/logging.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+#include "webkit/fileapi/file_system_url.h" |
#include "webkit/fileapi/isolated_context.h" |
#define FPL(x) FILE_PATH_LITERAL(x) |
@@ -189,7 +190,7 @@ TEST_F(IsolatedContextTest, CrackWithRelativePaths) { |
.AppendASCII(names_[i]).Append(relatives[j].path); |
std::string cracked_id; |
FilePath cracked_path; |
- FileSystemType cracked_type; |
+ FileSystemType cracked_type; |
if (!relatives[j].valid) { |
ASSERT_FALSE(isolated_context()->CrackVirtualPath( |
virtual_path, &cracked_id, &cracked_type, &cracked_path)); |
@@ -206,6 +207,51 @@ TEST_F(IsolatedContextTest, CrackWithRelativePaths) { |
} |
} |
+TEST_F(IsolatedContextTest, CrackURLWithRelativePaths) { |
+ const struct { |
+ FilePath::StringType path; |
+ bool valid; |
+ } relatives[] = { |
+ { FPL("foo"), true }, |
+ { FPL("foo/bar"), true }, |
+ { FPL(".."), false }, |
+ { FPL("foo/.."), false }, |
+ { FPL("foo/../bar"), false }, |
+#if defined(FILE_PATH_USES_WIN_SEPARATORS) |
+# define SHOULD_FAIL_WITH_WIN_SEPARATORS false |
+#else |
+# define SHOULD_FAIL_WITH_WIN_SEPARATORS true |
+#endif |
+ { FPL("foo\\..\\baz"), SHOULD_FAIL_WITH_WIN_SEPARATORS }, |
+ { FPL("foo/..\\baz"), SHOULD_FAIL_WITH_WIN_SEPARATORS }, |
+ }; |
+ |
+ for (size_t i = 0; i < arraysize(kTestPaths); ++i) { |
+ for (size_t j = 0; j < ARRAYSIZE_UNSAFE(relatives); ++j) { |
+ SCOPED_TRACE(testing::Message() << "Testing " |
+ << kTestPaths[i].value() << " " << relatives[j].path); |
+ FilePath virtual_path = isolated_context()->CreateVirtualRootPath(id_) |
+ .AppendASCII(names_[i]).Append(relatives[j].path); |
+ |
+ FileSystemURL cracked = isolated_context()->CreateCrackedFileSystemURL( |
+ GURL("http://chromium.org"), kFileSystemTypeIsolated, virtual_path); |
+ |
+ ASSERT_EQ(relatives[j].valid, cracked.is_valid()); |
+ |
+ if (!relatives[j].valid) |
+ continue; |
+ ASSERT_EQ(GURL("http://chromium.org"), cracked.origin()); |
+ ASSERT_EQ(kTestPaths[i].Append(relatives[j].path) |
+ .NormalizePathSeparators().value(), |
+ cracked.path().value()); |
+ ASSERT_EQ(virtual_path.NormalizePathSeparators(), cracked.virtual_path()); |
+ ASSERT_EQ(id_, cracked.filesystem_id()); |
+ ASSERT_EQ(kFileSystemTypeDragged, cracked.type()); |
+ ASSERT_EQ(kFileSystemTypeIsolated, cracked.mount_type()); |
+ } |
+ } |
+} |
+ |
TEST_F(IsolatedContextTest, TestWithVirtualRoot) { |
std::string cracked_id; |
FilePath cracked_path; |
@@ -227,4 +273,32 @@ TEST_F(IsolatedContextTest, TestWithVirtualRoot) { |
virtual_path, &cracked_id, NULL, &cracked_path)); |
} |
+TEST_F(IsolatedContextTest, CanHandleURL) { |
+ const GURL test_origin("http://chromium.org"); |
+ const FilePath test_path(FPL("/mount")); |
+ |
+ // Should handle isolated file system. |
+ EXPECT_TRUE(isolated_context()->HandlesFileSystemMountType( |
+ fileapi::kFileSystemTypeIsolated)); |
+ |
+ // Shouldn't handle the rest. |
+ EXPECT_FALSE(isolated_context()->HandlesFileSystemMountType( |
+ fileapi::kFileSystemTypeExternal)); |
+ EXPECT_FALSE(isolated_context()->HandlesFileSystemMountType( |
+ fileapi::kFileSystemTypeTemporary)); |
+ EXPECT_FALSE(isolated_context()->HandlesFileSystemMountType( |
+ fileapi::kFileSystemTypePersistent)); |
+ EXPECT_FALSE(isolated_context()->HandlesFileSystemMountType( |
+ fileapi::kFileSystemTypeTest)); |
+ // Not even if it's isolated subtype. |
+ EXPECT_FALSE(isolated_context()->HandlesFileSystemMountType( |
+ fileapi::kFileSystemTypeNativeLocal)); |
+ EXPECT_FALSE(isolated_context()->HandlesFileSystemMountType( |
+ fileapi::kFileSystemTypeDragged)); |
+ EXPECT_FALSE(isolated_context()->HandlesFileSystemMountType( |
+ fileapi::kFileSystemTypeNativeMedia)); |
+ EXPECT_FALSE(isolated_context()->HandlesFileSystemMountType( |
+ fileapi::kFileSystemTypeDeviceMedia)); |
+} |
+ |
} // namespace fileapi |