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 const int kCreateReadWriteFilePermissions = |
53 base::PLATFORM_FILE_OPEN | | 53 kReadFilePermissions | |
54 base::PLATFORM_FILE_CREATE | | 54 kWriteFilePermissions | |
| 55 kCreateFilePermissions | |
55 base::PLATFORM_FILE_OPEN_ALWAYS | | 56 base::PLATFORM_FILE_OPEN_ALWAYS | |
56 base::PLATFORM_FILE_CREATE_ALWAYS | | 57 base::PLATFORM_FILE_CREATE_ALWAYS | |
57 base::PLATFORM_FILE_OPEN_TRUNCATED | | 58 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 | 59 |
65 const int kCreateWriteFilePermissions = | 60 const int kCreateWriteFilePermissions = |
66 base::PLATFORM_FILE_CREATE | | 61 kWriteFilePermissions | |
67 base::PLATFORM_FILE_CREATE_ALWAYS | | 62 kCreateFilePermissions | |
68 base::PLATFORM_FILE_OPEN | | 63 base::PLATFORM_FILE_OPEN_ALWAYS | |
69 base::PLATFORM_FILE_OPEN_ALWAYS | | 64 base::PLATFORM_FILE_CREATE_ALWAYS | |
70 base::PLATFORM_FILE_OPEN_TRUNCATED | | 65 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 | 66 |
76 } // namespace | 67 } // namespace |
77 | 68 |
78 // The SecurityState class is used to maintain per-child process security state | 69 // The SecurityState class is used to maintain per-child process security state |
79 // information. | 70 // information. |
80 class ChildProcessSecurityPolicyImpl::SecurityState { | 71 class ChildProcessSecurityPolicyImpl::SecurityState { |
81 public: | 72 public: |
82 SecurityState() | 73 SecurityState() |
83 : enabled_bindings_(0), | 74 : enabled_bindings_(0), |
84 can_read_raw_cookies_(false) { } | 75 can_read_raw_cookies_(false) { } |
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
427 } | 418 } |
428 } | 419 } |
429 | 420 |
430 void ChildProcessSecurityPolicyImpl::GrantReadFile(int child_id, | 421 void ChildProcessSecurityPolicyImpl::GrantReadFile(int child_id, |
431 const base::FilePath& file) { | 422 const base::FilePath& file) { |
432 GrantPermissionsForFile(child_id, file, kReadFilePermissions); | 423 GrantPermissionsForFile(child_id, file, kReadFilePermissions); |
433 } | 424 } |
434 | 425 |
435 void ChildProcessSecurityPolicyImpl::GrantCreateReadWriteFile( | 426 void ChildProcessSecurityPolicyImpl::GrantCreateReadWriteFile( |
436 int child_id, const base::FilePath& file) { | 427 int child_id, const base::FilePath& file) { |
437 GrantPermissionsForFile(child_id, file, kReadWriteFilePermissions); | 428 GrantPermissionsForFile(child_id, file, kCreateReadWriteFilePermissions); |
438 } | 429 } |
439 | 430 |
440 void ChildProcessSecurityPolicyImpl::GrantCreateWriteFile( | 431 void ChildProcessSecurityPolicyImpl::GrantCreateWriteFile( |
441 int child_id, const base::FilePath& file) { | 432 int child_id, const base::FilePath& file) { |
442 GrantPermissionsForFile(child_id, file, kCreateWriteFilePermissions); | 433 GrantPermissionsForFile(child_id, file, kCreateWriteFilePermissions); |
443 } | 434 } |
444 | 435 |
445 void ChildProcessSecurityPolicyImpl::GrantReadDirectory( | 436 void ChildProcessSecurityPolicyImpl::GrantReadDirectory( |
446 int child_id, const base::FilePath& directory) { | 437 int child_id, const base::FilePath& directory) { |
447 GrantPermissionsForFile(child_id, directory, kEnumerateDirectoryPermissions); | 438 GrantPermissionsForFile(child_id, directory, kEnumerateDirectoryPermissions); |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
594 // allowed to request the URL. | 585 // allowed to request the URL. |
595 return state->second->CanRequestURL(url); | 586 return state->second->CanRequestURL(url); |
596 } | 587 } |
597 } | 588 } |
598 | 589 |
599 bool ChildProcessSecurityPolicyImpl::CanReadFile(int child_id, | 590 bool ChildProcessSecurityPolicyImpl::CanReadFile(int child_id, |
600 const base::FilePath& file) { | 591 const base::FilePath& file) { |
601 return HasPermissionsForFile(child_id, file, kReadFilePermissions); | 592 return HasPermissionsForFile(child_id, file, kReadFilePermissions); |
602 } | 593 } |
603 | 594 |
| 595 bool ChildProcessSecurityPolicyImpl::CanWriteFile(int child_id, |
| 596 const base::FilePath& file) { |
| 597 return HasPermissionsForFile(child_id, file, kWriteFilePermissions); |
| 598 } |
| 599 |
| 600 bool ChildProcessSecurityPolicyImpl::CanCreateFile(int child_id, |
| 601 const base::FilePath& file) { |
| 602 return HasPermissionsForFile(child_id, file, kCreateFilePermissions); |
| 603 } |
| 604 |
| 605 bool ChildProcessSecurityPolicyImpl::CanCreateWriteFile( |
| 606 int child_id, |
| 607 const base::FilePath& file) { |
| 608 return HasPermissionsForFile(child_id, file, kCreateWriteFilePermissions); |
| 609 } |
| 610 |
604 bool ChildProcessSecurityPolicyImpl::CanReadDirectory( | 611 bool ChildProcessSecurityPolicyImpl::CanReadDirectory( |
605 int child_id, const base::FilePath& directory) { | 612 int child_id, const base::FilePath& directory) { |
606 return HasPermissionsForFile(child_id, | 613 return HasPermissionsForFile(child_id, |
607 directory, | 614 directory, |
608 kEnumerateDirectoryPermissions); | 615 kEnumerateDirectoryPermissions); |
609 } | 616 } |
610 | 617 |
611 bool ChildProcessSecurityPolicyImpl::CanReadFileSystem( | 618 bool ChildProcessSecurityPolicyImpl::CanReadFileSystem( |
612 int child_id, const std::string& filesystem_id) { | 619 int child_id, const std::string& filesystem_id) { |
613 return HasPermissionsForFileSystem(child_id, | 620 return HasPermissionsForFileSystem(child_id, |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
674 | 681 |
675 if (found->second & fileapi::FILE_PERMISSION_USE_FILE_PERMISSION) | 682 if (found->second & fileapi::FILE_PERMISSION_USE_FILE_PERMISSION) |
676 return HasPermissionsForFile(child_id, url.path(), permissions); | 683 return HasPermissionsForFile(child_id, url.path(), permissions); |
677 | 684 |
678 if (found->second & fileapi::FILE_PERMISSION_SANDBOX) | 685 if (found->second & fileapi::FILE_PERMISSION_SANDBOX) |
679 return true; | 686 return true; |
680 | 687 |
681 return false; | 688 return false; |
682 } | 689 } |
683 | 690 |
| 691 bool ChildProcessSecurityPolicyImpl::CanReadFileSystemFile( |
| 692 int child_id, |
| 693 const fileapi::FileSystemURL& url) { |
| 694 return HasPermissionsForFileSystemFile(child_id, url, kReadFilePermissions); |
| 695 } |
| 696 |
| 697 bool ChildProcessSecurityPolicyImpl::CanWriteFileSystemFile( |
| 698 int child_id, |
| 699 const fileapi::FileSystemURL& url) { |
| 700 return HasPermissionsForFileSystemFile(child_id, url, kWriteFilePermissions); |
| 701 } |
| 702 |
| 703 bool ChildProcessSecurityPolicyImpl::CanCreateFileSystemFile( |
| 704 int child_id, |
| 705 const fileapi::FileSystemURL& url) { |
| 706 return HasPermissionsForFileSystemFile(child_id, url, kCreateFilePermissions); |
| 707 } |
| 708 |
| 709 bool ChildProcessSecurityPolicyImpl::CanCreateWriteFileSystemFile( |
| 710 int child_id, |
| 711 const fileapi::FileSystemURL& url) { |
| 712 return HasPermissionsForFileSystemFile(child_id, url, |
| 713 kCreateWriteFilePermissions); |
| 714 } |
| 715 |
684 bool ChildProcessSecurityPolicyImpl::HasWebUIBindings(int child_id) { | 716 bool ChildProcessSecurityPolicyImpl::HasWebUIBindings(int child_id) { |
685 base::AutoLock lock(lock_); | 717 base::AutoLock lock(lock_); |
686 | 718 |
687 SecurityStateMap::iterator state = security_state_.find(child_id); | 719 SecurityStateMap::iterator state = security_state_.find(child_id); |
688 if (state == security_state_.end()) | 720 if (state == security_state_.end()) |
689 return false; | 721 return false; |
690 | 722 |
691 return state->second->has_web_ui_bindings(); | 723 return state->second->has_web_ui_bindings(); |
692 } | 724 } |
693 | 725 |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
771 } | 803 } |
772 | 804 |
773 void ChildProcessSecurityPolicyImpl::RegisterFileSystemPermissionPolicy( | 805 void ChildProcessSecurityPolicyImpl::RegisterFileSystemPermissionPolicy( |
774 fileapi::FileSystemType type, | 806 fileapi::FileSystemType type, |
775 int policy) { | 807 int policy) { |
776 base::AutoLock lock(lock_); | 808 base::AutoLock lock(lock_); |
777 file_system_policy_map_[type] = policy; | 809 file_system_policy_map_[type] = policy; |
778 } | 810 } |
779 | 811 |
780 } // namespace content | 812 } // namespace content |
OLD | NEW |