Chromium Code Reviews| 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 e6473e9278911ea37ec6614e3c499cf6f9079f51..3344934f10773eeb28926d1bbaf4cce37ef17b3b 100644 |
| --- a/content/browser/child_process_security_policy_unittest.cc |
| +++ b/content/browser/child_process_security_policy_unittest.cc |
| @@ -13,6 +13,9 @@ |
| #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/common/fileapi/file_system_types.h" |
| namespace content { |
| namespace { |
| @@ -90,6 +93,83 @@ class ChildProcessSecurityPolicyTest : public testing::Test { |
| ContentBrowserClient* old_browser_client_; |
| }; |
| +class PermissionsSet { |
| + public: |
| + PermissionsSet() |
| + : can_read(false), |
|
vandebo (ex-Chrome)
2013/07/22 21:33:41
I find this class strange because the grants are c
tommycli
2013/07/23 15:30:22
Done. I tried expanding the lines to do it the inl
|
| + can_write(false), |
| + can_create(false), |
| + can_create_write(false) { |
| + } |
| + |
| + PermissionsSet& EnableRead() { |
| + can_read = true; |
| + return *this; |
| + } |
| + |
| + PermissionsSet& EnableWrite() { |
| + can_write = true; |
| + return *this; |
| + } |
| + |
| + PermissionsSet& EnableCreate() { |
| + can_create = true; |
| + return *this; |
| + } |
| + |
| + PermissionsSet& EnableCreateWrite() { |
| + can_create_write = true; |
| + return *this; |
| + } |
| + |
| + bool operator==(const PermissionsSet& o) const { |
| + return can_read == o.can_read && |
| + can_write == o.can_write && |
| + can_create == o.can_create && |
| + can_create_write == o.can_create_write; |
| + } |
| + |
| +private: |
| + bool can_read; |
| + bool can_write; |
| + bool can_create; |
| + bool can_create_write; |
| +}; |
| + |
| +PermissionsSet GetAllPermissions(ChildProcessSecurityPolicyImpl* p, |
| + int child_id, const base::FilePath& file) { |
| + PermissionsSet permissions; |
| + |
| + if (p->CanReadFile(child_id, file)) |
| + permissions.EnableRead(); |
| + if (p->CanWriteFile(child_id, file)) |
| + permissions.EnableWrite(); |
| + if (p->CanCreateFile(child_id, file)) |
| + permissions.EnableCreate(); |
| + if (p->CanCreateWriteFile(child_id, file)) |
| + permissions.EnableCreateWrite(); |
| + |
| + return permissions; |
| +} |
| + |
| +PermissionsSet GetAllPermissionsForURL( |
| + ChildProcessSecurityPolicyImpl* p, |
| + int child_id, |
| + const fileapi::FileSystemURL& url) { |
| + PermissionsSet permissions; |
| + |
| + if (p->CanReadFileSystemFile(child_id, url)) |
| + permissions.EnableRead(); |
| + if (p->CanWriteFileSystemFile(child_id, url)) |
| + permissions.EnableWrite(); |
| + if (p->CanCreateFileSystemFile(child_id, url)) |
| + permissions.EnableCreate(); |
| + if (p->CanCreateWriteFileSystemFile(child_id, url)) |
| + permissions.EnableCreateWrite(); |
| + |
| + return permissions; |
| +} |
| + |
| TEST_F(ChildProcessSecurityPolicyTest, IsWebSafeSchemeTest) { |
| ChildProcessSecurityPolicyImpl* p = |
| ChildProcessSecurityPolicyImpl::GetInstance(); |
| @@ -278,28 +358,68 @@ TEST_F(ChildProcessSecurityPolicyTest, SpecificFile) { |
| p->Remove(kRendererID); |
| } |
| -TEST_F(ChildProcessSecurityPolicyTest, CanReadFiles) { |
| +TEST_F(ChildProcessSecurityPolicyTest, PermissionGrantingAndRevoking) { |
| ChildProcessSecurityPolicyImpl* p = |
| ChildProcessSecurityPolicyImpl::GetInstance(); |
| + p->RegisterFileSystemPermissionPolicy( |
| + fileapi::kFileSystemTypeTest, |
| + fileapi::FILE_PERMISSION_USE_FILE_PERMISSION); |
| + |
| p->Add(kRendererID); |
| + base::FilePath file(TEST_PATH("/dir/testfile")); |
| + 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")))); |
| + PermissionsSet all_denied; |
| + // Test initially having no permissions. |
| + EXPECT_EQ(all_denied, GetAllPermissions(p, kRendererID, file)); |
| + EXPECT_EQ(all_denied, GetAllPermissionsForURL(p, kRendererID, url)); |
| + |
| + // Testing every combination of permissions granting and revoking. |
| + PermissionsSet read_only; |
| + read_only.EnableRead(); |
| + p->GrantReadFile(kRendererID, file); |
| + EXPECT_EQ(read_only, GetAllPermissions(p, kRendererID, file)); |
| + EXPECT_EQ(read_only, GetAllPermissionsForURL(p, kRendererID, url)); |
| + p->RevokeAllPermissionsForFile(kRendererID, file); |
| + EXPECT_EQ(all_denied, GetAllPermissions(p, kRendererID, file)); |
| + EXPECT_EQ(all_denied, GetAllPermissionsForURL(p, kRendererID, url)); |
| + |
| + PermissionsSet create_read_write; |
| + create_read_write.EnableRead().EnableWrite().EnableCreate() |
| + .EnableCreateWrite(); |
| + p->GrantCreateReadWriteFile(kRendererID, file); |
| + EXPECT_EQ(create_read_write, GetAllPermissions(p, kRendererID, file)); |
| + EXPECT_EQ(create_read_write, GetAllPermissionsForURL(p, kRendererID, url)); |
| + p->RevokeAllPermissionsForFile(kRendererID, file); |
| + EXPECT_EQ(all_denied, GetAllPermissions(p, kRendererID, file)); |
| + EXPECT_EQ(all_denied, GetAllPermissionsForURL(p, kRendererID, url)); |
| + |
| + PermissionsSet create_write; |
| + create_write.EnableCreate().EnableWrite().EnableCreateWrite(); |
| + p->GrantCreateWriteFile(kRendererID, file); |
| + EXPECT_EQ(create_write, GetAllPermissions(p, kRendererID, file)); |
| + EXPECT_EQ(create_write, GetAllPermissionsForURL(p, kRendererID, url)); |
| + p->RevokeAllPermissionsForFile(kRendererID, file); |
| + EXPECT_EQ(all_denied, GetAllPermissions(p, kRendererID, file)); |
| + EXPECT_EQ(all_denied, GetAllPermissionsForURL(p, kRendererID, url)); |
| + |
| + // Test revoke permissions on renderer ID removal. |
| + p->GrantCreateReadWriteFile(kRendererID, file); |
| + EXPECT_EQ(create_read_write, GetAllPermissions(p, kRendererID, file)); |
| + EXPECT_EQ(create_read_write, GetAllPermissionsForURL(p, kRendererID, url)); |
| p->Remove(kRendererID); |
| - p->Add(kRendererID); |
| + EXPECT_EQ(all_denied, GetAllPermissions(p, kRendererID, file)); |
| + EXPECT_EQ(all_denied, GetAllPermissionsForURL(p, 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_EQ(all_denied, GetAllPermissions(p, kRendererID, file)); |
| + EXPECT_EQ(all_denied, GetAllPermissionsForURL(p, kRendererID, url)); |
| + // Cleanup. |
| p->Remove(kRendererID); |
| } |