| OLD | NEW | 
|---|
| 1 // Copyright (c) 2017 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2017 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 "chrome/browser/win/jumplist_file_util.h" | 5 #include "chrome/browser/win/jumplist_file_util.h" | 
| 6 | 6 | 
| 7 #include <windows.h> | 7 #include <windows.h> | 
| 8 | 8 | 
| 9 #include "base/files/file_enumerator.h" | 9 #include "base/files/file_enumerator.h" | 
| 10 #include "base/files/file_util.h" | 10 #include "base/files/file_util.h" | 
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 82 | 82 | 
| 83   ::RemoveDirectory(path.value().c_str()); | 83   ::RemoveDirectory(path.value().c_str()); | 
| 84 } | 84 } | 
| 85 | 85 | 
| 86 void DeleteDirectoryContentAndLogRuntime(const base::FilePath& path, | 86 void DeleteDirectoryContentAndLogRuntime(const base::FilePath& path, | 
| 87                                          int max_file_deleted) { | 87                                          int max_file_deleted) { | 
| 88   SCOPED_UMA_HISTOGRAM_TIMER("WinJumplist.DeleteDirectoryContentDuration"); | 88   SCOPED_UMA_HISTOGRAM_TIMER("WinJumplist.DeleteDirectoryContentDuration"); | 
| 89 | 89 | 
| 90   DeleteDirectoryContent(path, kFileDeleteLimit); | 90   DeleteDirectoryContent(path, kFileDeleteLimit); | 
| 91 } | 91 } | 
|  | 92 | 
|  | 93 bool FilesExceedLimitInDir(const base::FilePath& path, int max_files) { | 
|  | 94   int count = 0; | 
|  | 95   base::FileEnumerator file_iter(path, false, base::FileEnumerator::FILES); | 
|  | 96   while (!file_iter.Next().empty()) { | 
|  | 97     if (++count > max_files) | 
|  | 98       return true; | 
|  | 99   } | 
|  | 100   return false; | 
|  | 101 } | 
|  | 102 | 
|  | 103 void DeleteNonCachedFiles(const base::FilePath& path, | 
|  | 104                           const base::flat_set<base::FilePath>& cached_files) { | 
|  | 105   base::FileEnumerator traversal(path, false, base::FileEnumerator::FILES); | 
|  | 106 | 
|  | 107   for (base::FilePath current = traversal.Next(); !current.empty(); | 
|  | 108        current = traversal.Next()) { | 
|  | 109     if (cached_files.find(current) != cached_files.end()) | 
|  | 110       continue; | 
|  | 111 | 
|  | 112     // Try to clear the read-only bit if we find it. | 
|  | 113     base::FileEnumerator::FileInfo info = traversal.GetInfo(); | 
|  | 114     if (info.find_data().dwFileAttributes & FILE_ATTRIBUTE_READONLY) { | 
|  | 115       SetFileAttributes( | 
|  | 116           current.value().c_str(), | 
|  | 117           info.find_data().dwFileAttributes & ~FILE_ATTRIBUTE_READONLY); | 
|  | 118     } | 
|  | 119 | 
|  | 120     ::DeleteFile(current.value().c_str()); | 
|  | 121   } | 
|  | 122 } | 
| OLD | NEW | 
|---|