Index: content/browser/renderer_host/pepper/pepper_security_helper.cc |
diff --git a/content/browser/renderer_host/pepper/pepper_security_helper.cc b/content/browser/renderer_host/pepper/pepper_security_helper.cc |
index 5402823f01e56f68d815fc2a3bd1238e2518f07f..5816ce4831f3c1921ea1367038e38949818cbb7a 100644 |
--- a/content/browser/renderer_host/pepper/pepper_security_helper.cc |
+++ b/content/browser/renderer_host/pepper/pepper_security_helper.cc |
@@ -10,8 +10,18 @@ |
namespace content { |
-bool CanOpenWithPepperFlags(int pp_open_flags, int child_id, |
- const base::FilePath& file) { |
+namespace { |
+ |
+template <typename CanRead, typename CanWrite, |
+ typename CanCreate, typename CanCreateWrite, |
+ typename FileID> |
+bool CanOpenFileWithPepperFlags(CanRead can_read, |
+ CanWrite can_write, |
+ CanCreate can_create, |
+ CanCreateWrite can_create_write, |
+ int pp_open_flags, |
+ int child_id, |
+ const FileID& file) { |
ChildProcessSecurityPolicyImpl* policy = |
ChildProcessSecurityPolicyImpl::GetInstance(); |
@@ -22,33 +32,53 @@ bool CanOpenWithPepperFlags(int pp_open_flags, int child_id, |
bool pp_exclusive = !!(pp_open_flags & PP_FILEOPENFLAG_EXCLUSIVE); |
bool pp_append = !!(pp_open_flags & PP_FILEOPENFLAG_APPEND); |
- if (pp_read && !policy->CanReadFile(child_id, file)) |
+ if (pp_read && !(policy->*can_read)(child_id, file)) |
return false; |
- if (pp_write && !policy->CanWriteFile(child_id, file)) |
+ if (pp_write && !(policy->*can_write)(child_id, file)) |
return false; |
- if (pp_append) { |
- // Given ChildSecurityPolicyImpl's current definition of permissions, |
- // APPEND is never supported. |
+ // TODO(tommycli): Maybe tighten up required permission. crbug.com/284792 |
+ if (pp_append && !(policy->*can_create_write)(child_id, file)) |
return false; |
- } |
if (pp_truncate && !pp_write) |
return false; |
if (pp_create) { |
if (pp_exclusive) { |
- return policy->CanCreateFile(child_id, file); |
+ return (policy->*can_create)(child_id, file); |
} else { |
// Asks for too much, but this is the only grant that allows overwrite. |
- return policy->CanCreateWriteFile(child_id, file); |
+ return (policy->*can_create_write)(child_id, file); |
} |
} else if (pp_truncate) { |
- return policy->CanCreateWriteFile(child_id, file); |
+ return (policy->*can_create_write)(child_id, file); |
} |
return true; |
} |
+} |
+ |
+bool CanOpenWithPepperFlags(int pp_open_flags, int child_id, |
+ const base::FilePath& file) { |
+ return CanOpenFileWithPepperFlags( |
+ &ChildProcessSecurityPolicyImpl::CanReadFile, |
+ &ChildProcessSecurityPolicyImpl::CanWriteFile, |
+ &ChildProcessSecurityPolicyImpl::CanCreateFile, |
+ &ChildProcessSecurityPolicyImpl::CanCreateWriteFile, |
+ pp_open_flags, child_id, file); |
+} |
+ |
+bool CanOpenFileSystemURLWithPepperFlags(int pp_open_flags, int child_id, |
+ const fileapi::FileSystemURL& url) { |
+ return CanOpenFileWithPepperFlags( |
+ &ChildProcessSecurityPolicyImpl::CanReadFileSystemFile, |
+ &ChildProcessSecurityPolicyImpl::CanWriteFileSystemFile, |
+ &ChildProcessSecurityPolicyImpl::CanCreateFileSystemFile, |
+ &ChildProcessSecurityPolicyImpl::CanCreateWriteFileSystemFile, |
+ pp_open_flags, child_id, url); |
+} |
+ |
} // namespace content |