Chromium Code Reviews| Index: webkit/fileapi/sandbox_mount_point_provider_unittest.cc |
| diff --git a/webkit/fileapi/sandbox_mount_point_provider_unittest.cc b/webkit/fileapi/sandbox_mount_point_provider_unittest.cc |
| index abdd2feb5e9d28f3407e7ad443b3ee8c3cf7c2a4..6f6d56e76ce0ba448ba1609d10159ba528bc855b 100644 |
| --- a/webkit/fileapi/sandbox_mount_point_provider_unittest.cc |
| +++ b/webkit/fileapi/sandbox_mount_point_provider_unittest.cc |
| @@ -15,11 +15,22 @@ |
| #include "googleurl/src/gurl.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "webkit/fileapi/file_system_mount_point_provider.h" |
| +#include "webkit/fileapi/file_system_url.h" |
| #include "webkit/fileapi/file_system_util.h" |
| #include "webkit/fileapi/mock_file_system_options.h" |
| namespace fileapi { |
| +namespace { |
| + |
| +FileSystemURL CreateFileSystemURL(const char* path) { |
| + const GURL kOrigin("http://foo/"); |
| + return FileSystemURL::CreateForTest( |
| + kOrigin, kFileSystemTypeTemporary, FilePath::FromUTF8Unsafe(path)); |
| +} |
| + |
| +} // namespace |
| + |
| class SandboxMountPointProviderOriginEnumeratorTest : public testing::Test { |
| public: |
| virtual void SetUp() { |
| @@ -104,4 +115,76 @@ TEST_F(SandboxMountPointProviderOriginEnumeratorTest, EnumerateOrigins) { |
| EXPECT_EQ(persistent_size, persistent_actual_size); |
| } |
| +TEST(SandboxMountPointProviderTest, AccessPermissions) { |
| + MessageLoop message_loop_; |
| + SandboxMountPointProvider provider( |
| + NULL, base::MessageLoopProxy::current(), FilePath(), |
| + CreateAllowFileAccessOptions()); |
| + |
| + // Any access should be allowed in sandbox directory. |
| + EXPECT_EQ(FILE_PERMISSION_ALWAYS_ALLOW, |
| + provider.GetPermissionPolicy(CreateFileSystemURL("foo"), |
| + kReadFilePermissions)); |
| + EXPECT_EQ(FILE_PERMISSION_ALWAYS_ALLOW, |
| + provider.GetPermissionPolicy(CreateFileSystemURL("foo"), |
| + kWriteFilePermissions)); |
| + EXPECT_EQ(FILE_PERMISSION_ALWAYS_ALLOW, |
| + provider.GetPermissionPolicy(CreateFileSystemURL("foo"), |
| + kCreateFilePermissions)); |
| + |
| + // Access to a path with parent references ('..') should be disallowed. |
| + EXPECT_EQ(FILE_PERMISSION_ALWAYS_DENY, |
| + provider.GetPermissionPolicy(CreateFileSystemURL("a/../b"), |
| + kReadFilePermissions)); |
| + |
| + // Access from non-allowed scheme should be disallowed. |
| + EXPECT_EQ(FILE_PERMISSION_ALWAYS_DENY, |
| + provider.GetPermissionPolicy( |
| + FileSystemURL::CreateForTest( |
| + GURL("unknown://bar"), kFileSystemTypeTemporary, |
| + FilePath::FromUTF8Unsafe("foo")), |
| + kReadFilePermissions)); |
| + |
| + // Access for non-sandbox type should be disallowed. |
| + EXPECT_EQ(FILE_PERMISSION_ALWAYS_DENY, |
| + provider.GetPermissionPolicy( |
| + FileSystemURL::CreateForTest( |
| + GURL("http://foo/"), kFileSystemTypeTest, |
| + FilePath::FromUTF8Unsafe("foo")), |
| + kReadFilePermissions)); |
| + |
| + // Create access with restricted name should be disallowed. |
| + EXPECT_EQ(FILE_PERMISSION_ALWAYS_DENY, |
| + provider.GetPermissionPolicy(CreateFileSystemURL(".."), |
| + kCreateFilePermissions)); |
| + EXPECT_EQ(FILE_PERMISSION_ALWAYS_DENY, |
| + provider.GetPermissionPolicy(CreateFileSystemURL("."), |
| + kCreateFilePermissions)); |
| + |
| + // Similar but safe cases. |
| + EXPECT_EQ(FILE_PERMISSION_ALWAYS_ALLOW, |
| + provider.GetPermissionPolicy(CreateFileSystemURL(" ."), |
| + kCreateFilePermissions)); |
| + EXPECT_EQ(FILE_PERMISSION_ALWAYS_ALLOW, |
| + provider.GetPermissionPolicy(CreateFileSystemURL(". "), |
| + kCreateFilePermissions)); |
| + EXPECT_EQ(FILE_PERMISSION_ALWAYS_ALLOW, |
| + provider.GetPermissionPolicy(CreateFileSystemURL(" .."), |
| + kCreateFilePermissions)); |
| + EXPECT_EQ(FILE_PERMISSION_ALWAYS_ALLOW, |
| + provider.GetPermissionPolicy(CreateFileSystemURL(".. "), |
| + kCreateFilePermissions)); |
| + EXPECT_EQ(FILE_PERMISSION_ALWAYS_ALLOW, |
| + provider.GetPermissionPolicy(CreateFileSystemURL("b."), |
| + kCreateFilePermissions)); |
| + EXPECT_EQ(FILE_PERMISSION_ALWAYS_ALLOW, |
| + provider.GetPermissionPolicy(CreateFileSystemURL(".b"), |
| + kCreateFilePermissions)); |
| + |
| + // A path that looks like a drive letter. |
| + EXPECT_EQ(FILE_PERMISSION_ALWAYS_ALLOW, |
| + provider.GetPermissionPolicy(CreateFileSystemURL("c:"), |
| + kCreateFilePermissions)); |
|
ericu
2013/02/13 01:45:56
Missing: test for modifying the root directory.
kinuko
2013/02/13 03:36:30
Done.
|
| +} |
| + |
| } // namespace fileapi |