OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/child_process_security_policy_impl.h" | 5 #include "content/browser/child_process_security_policy_impl.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
(...skipping 28 matching lines...) Expand all Loading... |
39 base::PLATFORM_FILE_ASYNC | | 39 base::PLATFORM_FILE_ASYNC | |
40 base::PLATFORM_FILE_WRITE_ATTRIBUTES; | 40 base::PLATFORM_FILE_WRITE_ATTRIBUTES; |
41 | 41 |
42 const int kCreateFilePermissions = | 42 const int kCreateFilePermissions = |
43 base::PLATFORM_FILE_CREATE; | 43 base::PLATFORM_FILE_CREATE; |
44 | 44 |
45 const int kEnumerateDirectoryPermissions = | 45 const int kEnumerateDirectoryPermissions = |
46 kReadFilePermissions | | 46 kReadFilePermissions | |
47 base::PLATFORM_FILE_ENUMERATE; | 47 base::PLATFORM_FILE_ENUMERATE; |
48 | 48 |
| 49 const int kReadWriteFilePermissions = |
| 50 base::PLATFORM_FILE_OPEN | |
| 51 base::PLATFORM_FILE_CREATE | |
| 52 base::PLATFORM_FILE_OPEN_ALWAYS | |
| 53 base::PLATFORM_FILE_CREATE_ALWAYS | |
| 54 base::PLATFORM_FILE_OPEN_TRUNCATED | |
| 55 base::PLATFORM_FILE_READ | |
| 56 base::PLATFORM_FILE_WRITE | |
| 57 base::PLATFORM_FILE_EXCLUSIVE_READ | |
| 58 base::PLATFORM_FILE_EXCLUSIVE_WRITE | |
| 59 base::PLATFORM_FILE_ASYNC | |
| 60 base::PLATFORM_FILE_WRITE_ATTRIBUTES; |
| 61 |
| 62 const int kCreateWriteFilePermissions = |
| 63 base::PLATFORM_FILE_CREATE | |
| 64 base::PLATFORM_FILE_CREATE_ALWAYS | |
| 65 base::PLATFORM_FILE_OPEN | |
| 66 base::PLATFORM_FILE_OPEN_ALWAYS | |
| 67 base::PLATFORM_FILE_OPEN_TRUNCATED | |
| 68 base::PLATFORM_FILE_WRITE | |
| 69 base::PLATFORM_FILE_WRITE_ATTRIBUTES | |
| 70 base::PLATFORM_FILE_ASYNC; |
| 71 // need EXCLUSIVE_WRITE in this mix? |
| 72 |
49 } // namespace | 73 } // namespace |
50 | 74 |
51 // The SecurityState class is used to maintain per-child process security state | 75 // The SecurityState class is used to maintain per-child process security state |
52 // information. | 76 // information. |
53 class ChildProcessSecurityPolicyImpl::SecurityState { | 77 class ChildProcessSecurityPolicyImpl::SecurityState { |
54 public: | 78 public: |
55 SecurityState() | 79 SecurityState() |
56 : enabled_bindings_(0), | 80 : enabled_bindings_(0), |
57 can_read_raw_cookies_(false) { } | 81 can_read_raw_cookies_(false) { } |
58 | 82 |
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
398 if (net::FileURLToFilePath(url, &path)) | 422 if (net::FileURLToFilePath(url, &path)) |
399 state->second->GrantRequestOfSpecificFile(path); | 423 state->second->GrantRequestOfSpecificFile(path); |
400 } | 424 } |
401 } | 425 } |
402 | 426 |
403 void ChildProcessSecurityPolicyImpl::GrantReadFile(int child_id, | 427 void ChildProcessSecurityPolicyImpl::GrantReadFile(int child_id, |
404 const base::FilePath& file) { | 428 const base::FilePath& file) { |
405 GrantPermissionsForFile(child_id, file, kReadFilePermissions); | 429 GrantPermissionsForFile(child_id, file, kReadFilePermissions); |
406 } | 430 } |
407 | 431 |
| 432 void ChildProcessSecurityPolicyImpl::GrantReadWriteFile( |
| 433 int child_id, const base::FilePath& file) { |
| 434 GrantPermissionsForFile(child_id, file, kReadWriteFilePermissions); |
| 435 } |
| 436 |
| 437 void ChildProcessSecurityPolicyImpl::GrantCreateWriteFile( |
| 438 int child_id, const base::FilePath& file) { |
| 439 GrantPermissionsForFile(child_id, file, kCreateWriteFilePermissions); |
| 440 } |
| 441 |
408 void ChildProcessSecurityPolicyImpl::GrantReadDirectory( | 442 void ChildProcessSecurityPolicyImpl::GrantReadDirectory( |
409 int child_id, const base::FilePath& directory) { | 443 int child_id, const base::FilePath& directory) { |
410 GrantPermissionsForFile(child_id, directory, kEnumerateDirectoryPermissions); | 444 GrantPermissionsForFile(child_id, directory, kEnumerateDirectoryPermissions); |
411 } | 445 } |
412 | 446 |
413 void ChildProcessSecurityPolicyImpl::GrantPermissionsForFile( | 447 void ChildProcessSecurityPolicyImpl::GrantPermissionsForFile( |
414 int child_id, const base::FilePath& file, int permissions) { | 448 int child_id, const base::FilePath& file, int permissions) { |
415 base::AutoLock lock(lock_); | 449 base::AutoLock lock(lock_); |
416 | 450 |
417 SecurityStateMap::iterator state = security_state_.find(child_id); | 451 SecurityStateMap::iterator state = security_state_.find(child_id); |
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
686 int permission) { | 720 int permission) { |
687 base::AutoLock lock(lock_); | 721 base::AutoLock lock(lock_); |
688 | 722 |
689 SecurityStateMap::iterator state = security_state_.find(child_id); | 723 SecurityStateMap::iterator state = security_state_.find(child_id); |
690 if (state == security_state_.end()) | 724 if (state == security_state_.end()) |
691 return false; | 725 return false; |
692 return state->second->HasPermissionsForFileSystem(filesystem_id, permission); | 726 return state->second->HasPermissionsForFileSystem(filesystem_id, permission); |
693 } | 727 } |
694 | 728 |
695 } // namespace content | 729 } // namespace content |
OLD | NEW |