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 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 base::PLATFORM_FILE_ASYNC | | 42 base::PLATFORM_FILE_ASYNC | |
43 base::PLATFORM_FILE_WRITE_ATTRIBUTES; | 43 base::PLATFORM_FILE_WRITE_ATTRIBUTES; |
44 | 44 |
45 const int kCreateFilePermissions = | 45 const int kCreateFilePermissions = |
46 base::PLATFORM_FILE_CREATE; | 46 base::PLATFORM_FILE_CREATE; |
47 | 47 |
48 const int kEnumerateDirectoryPermissions = | 48 const int kEnumerateDirectoryPermissions = |
49 kReadFilePermissions | | 49 kReadFilePermissions | |
50 base::PLATFORM_FILE_ENUMERATE; | 50 base::PLATFORM_FILE_ENUMERATE; |
51 | 51 |
52 const int kReadWriteFilePermissions = | 52 // TODO(tommycli): These flag sets need some work to make more obvious. |
53 base::PLATFORM_FILE_OPEN | | 53 // Why for instance, does Create|Write != Create|Write? http://crbug.com/263150 |
54 base::PLATFORM_FILE_CREATE | | 54 const int kCreateReadWriteFilePermissions = |
| 55 kReadFilePermissions | |
| 56 kWriteFilePermissions | |
| 57 kCreateFilePermissions | |
55 base::PLATFORM_FILE_OPEN_ALWAYS | | 58 base::PLATFORM_FILE_OPEN_ALWAYS | |
56 base::PLATFORM_FILE_CREATE_ALWAYS | | 59 base::PLATFORM_FILE_CREATE_ALWAYS | |
57 base::PLATFORM_FILE_OPEN_TRUNCATED | | 60 base::PLATFORM_FILE_OPEN_TRUNCATED; |
58 base::PLATFORM_FILE_READ | | |
59 base::PLATFORM_FILE_WRITE | | |
60 base::PLATFORM_FILE_EXCLUSIVE_READ | | |
61 base::PLATFORM_FILE_EXCLUSIVE_WRITE | | |
62 base::PLATFORM_FILE_ASYNC | | |
63 base::PLATFORM_FILE_WRITE_ATTRIBUTES; | |
64 | 61 |
65 const int kCreateWriteFilePermissions = | 62 const int kCreateWriteFilePermissions = |
66 base::PLATFORM_FILE_CREATE | | 63 kWriteFilePermissions | |
67 base::PLATFORM_FILE_CREATE_ALWAYS | | 64 kCreateFilePermissions | |
68 base::PLATFORM_FILE_OPEN | | 65 base::PLATFORM_FILE_OPEN_ALWAYS | |
69 base::PLATFORM_FILE_OPEN_ALWAYS | | 66 base::PLATFORM_FILE_CREATE_ALWAYS | |
70 base::PLATFORM_FILE_OPEN_TRUNCATED | | 67 base::PLATFORM_FILE_OPEN_TRUNCATED; |
71 base::PLATFORM_FILE_WRITE | | |
72 base::PLATFORM_FILE_WRITE_ATTRIBUTES | | |
73 base::PLATFORM_FILE_ASYNC; | |
74 // need EXCLUSIVE_WRITE in this mix? | |
75 | 68 |
76 } // namespace | 69 } // namespace |
77 | 70 |
78 // The SecurityState class is used to maintain per-child process security state | 71 // The SecurityState class is used to maintain per-child process security state |
79 // information. | 72 // information. |
80 class ChildProcessSecurityPolicyImpl::SecurityState { | 73 class ChildProcessSecurityPolicyImpl::SecurityState { |
81 public: | 74 public: |
82 SecurityState() | 75 SecurityState() |
83 : enabled_bindings_(0), | 76 : enabled_bindings_(0), |
84 can_read_raw_cookies_(false) { } | 77 can_read_raw_cookies_(false) { } |
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
427 } | 420 } |
428 } | 421 } |
429 | 422 |
430 void ChildProcessSecurityPolicyImpl::GrantReadFile(int child_id, | 423 void ChildProcessSecurityPolicyImpl::GrantReadFile(int child_id, |
431 const base::FilePath& file) { | 424 const base::FilePath& file) { |
432 GrantPermissionsForFile(child_id, file, kReadFilePermissions); | 425 GrantPermissionsForFile(child_id, file, kReadFilePermissions); |
433 } | 426 } |
434 | 427 |
435 void ChildProcessSecurityPolicyImpl::GrantCreateReadWriteFile( | 428 void ChildProcessSecurityPolicyImpl::GrantCreateReadWriteFile( |
436 int child_id, const base::FilePath& file) { | 429 int child_id, const base::FilePath& file) { |
437 GrantPermissionsForFile(child_id, file, kReadWriteFilePermissions); | 430 GrantPermissionsForFile(child_id, file, kCreateReadWriteFilePermissions); |
438 } | 431 } |
439 | 432 |
440 void ChildProcessSecurityPolicyImpl::GrantCreateWriteFile( | 433 void ChildProcessSecurityPolicyImpl::GrantCreateWriteFile( |
441 int child_id, const base::FilePath& file) { | 434 int child_id, const base::FilePath& file) { |
442 GrantPermissionsForFile(child_id, file, kCreateWriteFilePermissions); | 435 GrantPermissionsForFile(child_id, file, kCreateWriteFilePermissions); |
443 } | 436 } |
444 | 437 |
445 void ChildProcessSecurityPolicyImpl::GrantReadDirectory( | 438 void ChildProcessSecurityPolicyImpl::GrantReadDirectory( |
446 int child_id, const base::FilePath& directory) { | 439 int child_id, const base::FilePath& directory) { |
447 GrantPermissionsForFile(child_id, directory, kEnumerateDirectoryPermissions); | 440 GrantPermissionsForFile(child_id, directory, kEnumerateDirectoryPermissions); |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
602 // allowed to request the URL. | 595 // allowed to request the URL. |
603 return state->second->CanRequestURL(url); | 596 return state->second->CanRequestURL(url); |
604 } | 597 } |
605 } | 598 } |
606 | 599 |
607 bool ChildProcessSecurityPolicyImpl::CanReadFile(int child_id, | 600 bool ChildProcessSecurityPolicyImpl::CanReadFile(int child_id, |
608 const base::FilePath& file) { | 601 const base::FilePath& file) { |
609 return HasPermissionsForFile(child_id, file, kReadFilePermissions); | 602 return HasPermissionsForFile(child_id, file, kReadFilePermissions); |
610 } | 603 } |
611 | 604 |
| 605 bool ChildProcessSecurityPolicyImpl::CanWriteFile(int child_id, |
| 606 const base::FilePath& file) { |
| 607 return HasPermissionsForFile(child_id, file, kWriteFilePermissions); |
| 608 } |
| 609 |
| 610 bool ChildProcessSecurityPolicyImpl::CanCreateFile(int child_id, |
| 611 const base::FilePath& file) { |
| 612 return HasPermissionsForFile(child_id, file, kCreateFilePermissions); |
| 613 } |
| 614 |
| 615 bool ChildProcessSecurityPolicyImpl::CanCreateWriteFile( |
| 616 int child_id, |
| 617 const base::FilePath& file) { |
| 618 return HasPermissionsForFile(child_id, file, kCreateWriteFilePermissions); |
| 619 } |
| 620 |
612 bool ChildProcessSecurityPolicyImpl::CanReadDirectory( | 621 bool ChildProcessSecurityPolicyImpl::CanReadDirectory( |
613 int child_id, const base::FilePath& directory) { | 622 int child_id, const base::FilePath& directory) { |
614 return HasPermissionsForFile(child_id, | 623 return HasPermissionsForFile(child_id, |
615 directory, | 624 directory, |
616 kEnumerateDirectoryPermissions); | 625 kEnumerateDirectoryPermissions); |
617 } | 626 } |
618 | 627 |
619 bool ChildProcessSecurityPolicyImpl::CanReadFileSystem( | 628 bool ChildProcessSecurityPolicyImpl::CanReadFileSystem( |
620 int child_id, const std::string& filesystem_id) { | 629 int child_id, const std::string& filesystem_id) { |
621 return HasPermissionsForFileSystem(child_id, | 630 return HasPermissionsForFileSystem(child_id, |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
691 | 700 |
692 if (found->second & fileapi::FILE_PERMISSION_USE_FILE_PERMISSION) | 701 if (found->second & fileapi::FILE_PERMISSION_USE_FILE_PERMISSION) |
693 return HasPermissionsForFile(child_id, url.path(), permissions); | 702 return HasPermissionsForFile(child_id, url.path(), permissions); |
694 | 703 |
695 if (found->second & fileapi::FILE_PERMISSION_SANDBOX) | 704 if (found->second & fileapi::FILE_PERMISSION_SANDBOX) |
696 return true; | 705 return true; |
697 | 706 |
698 return false; | 707 return false; |
699 } | 708 } |
700 | 709 |
| 710 bool ChildProcessSecurityPolicyImpl::CanReadFileSystemFile( |
| 711 int child_id, |
| 712 const fileapi::FileSystemURL& url) { |
| 713 return HasPermissionsForFileSystemFile(child_id, url, kReadFilePermissions); |
| 714 } |
| 715 |
| 716 bool ChildProcessSecurityPolicyImpl::CanWriteFileSystemFile( |
| 717 int child_id, |
| 718 const fileapi::FileSystemURL& url) { |
| 719 return HasPermissionsForFileSystemFile(child_id, url, kWriteFilePermissions); |
| 720 } |
| 721 |
| 722 bool ChildProcessSecurityPolicyImpl::CanCreateFileSystemFile( |
| 723 int child_id, |
| 724 const fileapi::FileSystemURL& url) { |
| 725 return HasPermissionsForFileSystemFile(child_id, url, kCreateFilePermissions); |
| 726 } |
| 727 |
| 728 bool ChildProcessSecurityPolicyImpl::CanCreateWriteFileSystemFile( |
| 729 int child_id, |
| 730 const fileapi::FileSystemURL& url) { |
| 731 return HasPermissionsForFileSystemFile(child_id, url, |
| 732 kCreateWriteFilePermissions); |
| 733 } |
| 734 |
701 bool ChildProcessSecurityPolicyImpl::HasWebUIBindings(int child_id) { | 735 bool ChildProcessSecurityPolicyImpl::HasWebUIBindings(int child_id) { |
702 base::AutoLock lock(lock_); | 736 base::AutoLock lock(lock_); |
703 | 737 |
704 SecurityStateMap::iterator state = security_state_.find(child_id); | 738 SecurityStateMap::iterator state = security_state_.find(child_id); |
705 if (state == security_state_.end()) | 739 if (state == security_state_.end()) |
706 return false; | 740 return false; |
707 | 741 |
708 return state->second->has_web_ui_bindings(); | 742 return state->second->has_web_ui_bindings(); |
709 } | 743 } |
710 | 744 |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
788 } | 822 } |
789 | 823 |
790 void ChildProcessSecurityPolicyImpl::RegisterFileSystemPermissionPolicy( | 824 void ChildProcessSecurityPolicyImpl::RegisterFileSystemPermissionPolicy( |
791 fileapi::FileSystemType type, | 825 fileapi::FileSystemType type, |
792 int policy) { | 826 int policy) { |
793 base::AutoLock lock(lock_); | 827 base::AutoLock lock(lock_); |
794 file_system_policy_map_[type] = policy; | 828 file_system_policy_map_[type] = policy; |
795 } | 829 } |
796 | 830 |
797 } // namespace content | 831 } // namespace content |
OLD | NEW |