Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(131)

Side by Side Diff: base/files/file_path_watcher_browsertest.cc

Issue 67923002: Fixes for -Wunused-function on Linux, Android and ChromeOS (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "base/files/file_path_watcher.h" 5 #include "base/files/file_path_watcher.h"
6 6
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <windows.h> 8 #include <windows.h>
9 #include <aclapi.h> 9 #include <aclapi.h>
10 #elif defined(OS_POSIX) 10 #elif defined(OS_POSIX)
(...skipping 750 matching lines...) Expand 10 before | Expand all | Expand 10 after
761 } 761 }
762 762
763 #endif // OS_LINUX 763 #endif // OS_LINUX
764 764
765 enum Permission { 765 enum Permission {
766 Read, 766 Read,
767 Write, 767 Write,
768 Execute 768 Execute
769 }; 769 };
770 770
771 #if defined(OS_MACOSX)
771 bool ChangeFilePermissions(const FilePath& path, Permission perm, bool allow) { 772 bool ChangeFilePermissions(const FilePath& path, Permission perm, bool allow) {
772 #if defined(OS_POSIX)
773 struct stat stat_buf; 773 struct stat stat_buf;
774 774
775 if (stat(path.value().c_str(), &stat_buf) != 0) 775 if (stat(path.value().c_str(), &stat_buf) != 0)
776 return false; 776 return false;
777 777
778 mode_t mode = 0; 778 mode_t mode = 0;
779 switch (perm) { 779 switch (perm) {
780 case Read: 780 case Read:
781 mode = S_IRUSR | S_IRGRP | S_IROTH; 781 mode = S_IRUSR | S_IRGRP | S_IROTH;
782 break; 782 break;
783 case Write: 783 case Write:
784 mode = S_IWUSR | S_IWGRP | S_IWOTH; 784 mode = S_IWUSR | S_IWGRP | S_IWOTH;
785 break; 785 break;
786 case Execute: 786 case Execute:
787 mode = S_IXUSR | S_IXGRP | S_IXOTH; 787 mode = S_IXUSR | S_IXGRP | S_IXOTH;
788 break; 788 break;
789 default: 789 default:
790 ADD_FAILURE() << "unknown perm " << perm; 790 ADD_FAILURE() << "unknown perm " << perm;
791 return false; 791 return false;
792 } 792 }
793 if (allow) { 793 if (allow) {
794 stat_buf.st_mode |= mode; 794 stat_buf.st_mode |= mode;
795 } else { 795 } else {
796 stat_buf.st_mode &= ~mode; 796 stat_buf.st_mode &= ~mode;
797 } 797 }
798 return chmod(path.value().c_str(), stat_buf.st_mode) == 0; 798 return chmod(path.value().c_str(), stat_buf.st_mode) == 0;
799
800 #elif defined(OS_WIN)
801 PACL old_dacl;
802 PSECURITY_DESCRIPTOR security_descriptor;
803 if (GetNamedSecurityInfo(const_cast<wchar_t*>(path.value().c_str()),
804 SE_FILE_OBJECT,
805 DACL_SECURITY_INFORMATION, NULL, NULL, &old_dacl,
806 NULL, &security_descriptor) != ERROR_SUCCESS)
807 return false;
808
809 DWORD mode = 0;
810 switch (perm) {
811 case Read:
812 mode = GENERIC_READ;
813 break;
814 case Write:
815 mode = GENERIC_WRITE;
816 break;
817 case Execute:
818 mode = GENERIC_EXECUTE;
819 break;
820 default:
821 ADD_FAILURE() << "unknown perm " << perm;
822 return false;
823 }
824
825 // Deny Read access for the current user.
826 EXPLICIT_ACCESS change;
827 change.grfAccessPermissions = mode;
828 change.grfAccessMode = allow ? GRANT_ACCESS : DENY_ACCESS;
829 change.grfInheritance = 0;
830 change.Trustee.pMultipleTrustee = NULL;
831 change.Trustee.MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
832 change.Trustee.TrusteeForm = TRUSTEE_IS_NAME;
833 change.Trustee.TrusteeType = TRUSTEE_IS_USER;
834 change.Trustee.ptstrName = L"CURRENT_USER";
835
836 PACL new_dacl;
837 if (SetEntriesInAcl(1, &change, old_dacl, &new_dacl) != ERROR_SUCCESS) {
838 LocalFree(security_descriptor);
839 return false;
840 }
841
842 DWORD rc = SetNamedSecurityInfo(const_cast<wchar_t*>(path.value().c_str()),
843 SE_FILE_OBJECT, DACL_SECURITY_INFORMATION,
844 NULL, NULL, new_dacl, NULL);
845 LocalFree(security_descriptor);
846 LocalFree(new_dacl);
847
848 return rc == ERROR_SUCCESS;
849 #else
850 NOTIMPLEMENTED();
851 return false;
852 #endif
Nico 2013/11/10 05:07:09 Can you add BUG=78045 to the cl description?
hans 2013/11/11 19:29:51 Done.
853 } 799 }
800 #endif // defined(OS_MACOSX)
854 801
855 #if defined(OS_MACOSX) 802 #if defined(OS_MACOSX)
856 // Linux implementation of FilePathWatcher doesn't catch attribute changes. 803 // Linux implementation of FilePathWatcher doesn't catch attribute changes.
857 // http://crbug.com/78043 804 // http://crbug.com/78043
858 // Windows implementation of FilePathWatcher catches attribute changes that 805 // Windows implementation of FilePathWatcher catches attribute changes that
859 // don't affect the path being watched. 806 // don't affect the path being watched.
860 // http://crbug.com/78045 807 // http://crbug.com/78045
861 808
862 // Verify that changing attributes on a directory works. 809 // Verify that changing attributes on a directory works.
863 TEST_F(FilePathWatcherTest, DirAttributesChanged) { 810 TEST_F(FilePathWatcherTest, DirAttributesChanged) {
(...skipping 23 matching lines...) Expand all
887 ASSERT_TRUE(ChangeFilePermissions(test_dir1, Execute, false)); 834 ASSERT_TRUE(ChangeFilePermissions(test_dir1, Execute, false));
888 ASSERT_TRUE(WaitForEvents()); 835 ASSERT_TRUE(WaitForEvents());
889 ASSERT_TRUE(ChangeFilePermissions(test_dir1, Execute, true)); 836 ASSERT_TRUE(ChangeFilePermissions(test_dir1, Execute, true));
890 DeleteDelegateOnFileThread(delegate.release()); 837 DeleteDelegateOnFileThread(delegate.release());
891 } 838 }
892 839
893 #endif // OS_MACOSX 840 #endif // OS_MACOSX
894 } // namespace 841 } // namespace
895 842
896 } // namespace base 843 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698