Index: content/browser/child_process_security_policy_unittest.cc |
diff --git a/content/browser/child_process_security_policy_unittest.cc b/content/browser/child_process_security_policy_unittest.cc |
index 35a044a491afae61a6f4a5655183c1cdd9986aee..b914eac549a8af013ad76a0f742fb5d9aa307a48 100644 |
--- a/content/browser/child_process_security_policy_unittest.cc |
+++ b/content/browser/child_process_security_policy_unittest.cc |
@@ -13,7 +13,10 @@ |
#include "content/test/test_content_browser_client.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "url/gurl.h" |
+#include "webkit/browser/fileapi/file_permission_policy.h" |
+#include "webkit/browser/fileapi/file_system_url.h" |
#include "webkit/browser/fileapi/isolated_context.h" |
+#include "webkit/common/fileapi/file_system_types.h" |
namespace content { |
namespace { |
@@ -91,6 +94,7 @@ class ChildProcessSecurityPolicyTest : public testing::Test { |
ContentBrowserClient* old_browser_client_; |
}; |
+ |
TEST_F(ChildProcessSecurityPolicyTest, IsWebSafeSchemeTest) { |
ChildProcessSecurityPolicyImpl* p = |
ChildProcessSecurityPolicyImpl::GetInstance(); |
@@ -362,28 +366,120 @@ TEST_F(ChildProcessSecurityPolicyTest, FileSystemGrantsTest) { |
fileapi::IsolatedContext::GetInstance()->RevokeFileSystem(copy_into_id); |
} |
-TEST_F(ChildProcessSecurityPolicyTest, CanReadFiles) { |
+TEST_F(ChildProcessSecurityPolicyTest, FilePermissionGrantingAndRevoking) { |
ChildProcessSecurityPolicyImpl* p = |
ChildProcessSecurityPolicyImpl::GetInstance(); |
+ p->RegisterFileSystemPermissionPolicy( |
+ fileapi::kFileSystemTypeTest, |
+ fileapi::FILE_PERMISSION_USE_FILE_PERMISSION); |
+ |
p->Add(kRendererID); |
+ base::FilePath file(TEST_PATH("/dir/testfile")); |
+ file = file.NormalizePathSeparators(); |
+ fileapi::FileSystemURL url = fileapi::FileSystemURL::CreateForTest( |
+ GURL("http://foo/"), fileapi::kFileSystemTypeTest, file); |
- EXPECT_FALSE(p->CanReadFile(kRendererID, |
- base::FilePath(TEST_PATH("/etc/passwd")))); |
- p->GrantReadFile(kRendererID, base::FilePath(TEST_PATH("/etc/passwd"))); |
- EXPECT_TRUE(p->CanReadFile(kRendererID, |
- base::FilePath(TEST_PATH("/etc/passwd")))); |
- EXPECT_FALSE(p->CanReadFile(kRendererID, |
- base::FilePath(TEST_PATH("/etc/shadow")))); |
+ // Test initially having no permissions. |
+ EXPECT_FALSE(p->CanReadFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanWriteFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanCreateFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanCreateWriteFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanReadFileSystemFile(kRendererID, url)); |
+ EXPECT_FALSE(p->CanWriteFileSystemFile(kRendererID, url)); |
+ EXPECT_FALSE(p->CanCreateFileSystemFile(kRendererID, url)); |
+ EXPECT_FALSE(p->CanCreateWriteFileSystemFile(kRendererID, url)); |
+ |
+ // Testing every combination of permissions granting and revoking. |
+ p->GrantReadFile(kRendererID, file); |
+ EXPECT_TRUE(p->CanReadFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanWriteFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanCreateFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanCreateWriteFile(kRendererID, file)); |
+ EXPECT_TRUE(p->CanReadFileSystemFile(kRendererID, url)); |
+ EXPECT_FALSE(p->CanWriteFileSystemFile(kRendererID, url)); |
+ EXPECT_FALSE(p->CanCreateFileSystemFile(kRendererID, url)); |
+ EXPECT_FALSE(p->CanCreateWriteFileSystemFile(kRendererID, url)); |
+ p->RevokeAllPermissionsForFile(kRendererID, file); |
+ EXPECT_FALSE(p->CanReadFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanWriteFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanCreateFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanCreateWriteFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanReadFileSystemFile(kRendererID, url)); |
+ EXPECT_FALSE(p->CanWriteFileSystemFile(kRendererID, url)); |
+ EXPECT_FALSE(p->CanCreateFileSystemFile(kRendererID, url)); |
+ EXPECT_FALSE(p->CanCreateWriteFileSystemFile(kRendererID, url)); |
+ |
+ p->GrantCreateReadWriteFile(kRendererID, file); |
+ EXPECT_TRUE(p->CanReadFile(kRendererID, file)); |
+ EXPECT_TRUE(p->CanWriteFile(kRendererID, file)); |
+ EXPECT_TRUE(p->CanCreateFile(kRendererID, file)); |
+ EXPECT_TRUE(p->CanCreateWriteFile(kRendererID, file)); |
+ EXPECT_TRUE(p->CanReadFileSystemFile(kRendererID, url)); |
+ EXPECT_TRUE(p->CanWriteFileSystemFile(kRendererID, url)); |
+ EXPECT_TRUE(p->CanCreateFileSystemFile(kRendererID, url)); |
+ EXPECT_TRUE(p->CanCreateWriteFileSystemFile(kRendererID, url)); |
+ p->RevokeAllPermissionsForFile(kRendererID, file); |
+ EXPECT_FALSE(p->CanReadFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanWriteFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanCreateFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanCreateWriteFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanReadFileSystemFile(kRendererID, url)); |
+ EXPECT_FALSE(p->CanWriteFileSystemFile(kRendererID, url)); |
+ EXPECT_FALSE(p->CanCreateFileSystemFile(kRendererID, url)); |
+ EXPECT_FALSE(p->CanCreateWriteFileSystemFile(kRendererID, url)); |
+ |
+ p->GrantCreateWriteFile(kRendererID, file); |
+ EXPECT_FALSE(p->CanReadFile(kRendererID, file)); |
+ EXPECT_TRUE(p->CanWriteFile(kRendererID, file)); |
+ EXPECT_TRUE(p->CanCreateFile(kRendererID, file)); |
+ EXPECT_TRUE(p->CanCreateWriteFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanReadFileSystemFile(kRendererID, url)); |
+ EXPECT_TRUE(p->CanWriteFileSystemFile(kRendererID, url)); |
+ EXPECT_TRUE(p->CanCreateFileSystemFile(kRendererID, url)); |
+ EXPECT_TRUE(p->CanCreateWriteFileSystemFile(kRendererID, url)); |
+ p->RevokeAllPermissionsForFile(kRendererID, file); |
+ EXPECT_FALSE(p->CanReadFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanWriteFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanCreateFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanCreateWriteFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanReadFileSystemFile(kRendererID, url)); |
+ EXPECT_FALSE(p->CanWriteFileSystemFile(kRendererID, url)); |
+ EXPECT_FALSE(p->CanCreateFileSystemFile(kRendererID, url)); |
+ EXPECT_FALSE(p->CanCreateWriteFileSystemFile(kRendererID, url)); |
+ // Test revoke permissions on renderer ID removal. |
+ p->GrantCreateReadWriteFile(kRendererID, file); |
+ EXPECT_TRUE(p->CanReadFile(kRendererID, file)); |
+ EXPECT_TRUE(p->CanWriteFile(kRendererID, file)); |
+ EXPECT_TRUE(p->CanCreateFile(kRendererID, file)); |
+ EXPECT_TRUE(p->CanCreateWriteFile(kRendererID, file)); |
+ EXPECT_TRUE(p->CanReadFileSystemFile(kRendererID, url)); |
+ EXPECT_TRUE(p->CanWriteFileSystemFile(kRendererID, url)); |
+ EXPECT_TRUE(p->CanCreateFileSystemFile(kRendererID, url)); |
+ EXPECT_TRUE(p->CanCreateWriteFileSystemFile(kRendererID, url)); |
p->Remove(kRendererID); |
- p->Add(kRendererID); |
+ EXPECT_FALSE(p->CanReadFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanWriteFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanCreateFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanCreateWriteFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanReadFileSystemFile(kRendererID, url)); |
+ EXPECT_FALSE(p->CanWriteFileSystemFile(kRendererID, url)); |
+ EXPECT_FALSE(p->CanCreateFileSystemFile(kRendererID, url)); |
+ EXPECT_FALSE(p->CanCreateWriteFileSystemFile(kRendererID, url)); |
- EXPECT_FALSE(p->CanReadFile(kRendererID, |
- base::FilePath(TEST_PATH("/etc/passwd")))); |
- EXPECT_FALSE(p->CanReadFile(kRendererID, |
- base::FilePath(TEST_PATH("/etc/shadow")))); |
+ // Test having no permissions upon re-adding same renderer ID. |
+ p->Add(kRendererID); |
+ EXPECT_FALSE(p->CanReadFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanWriteFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanCreateFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanCreateWriteFile(kRendererID, file)); |
+ EXPECT_FALSE(p->CanReadFileSystemFile(kRendererID, url)); |
+ EXPECT_FALSE(p->CanWriteFileSystemFile(kRendererID, url)); |
+ EXPECT_FALSE(p->CanCreateFileSystemFile(kRendererID, url)); |
+ EXPECT_FALSE(p->CanCreateWriteFileSystemFile(kRendererID, url)); |
+ // Cleanup. |
p->Remove(kRendererID); |
} |