Changeset 185412 in webkit
- Timestamp:
- Jun 10, 2015, 6:00:49 AM (10 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 1 added
- 10 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/CMakeLists.txt
r185358 r185412 172 172 NetworkProcess/cache/NetworkCacheEncoder.cpp 173 173 NetworkProcess/cache/NetworkCacheEntry.cpp 174 NetworkProcess/cache/NetworkCacheFileSystem.cpp 174 175 NetworkProcess/cache/NetworkCacheKey.cpp 175 176 NetworkProcess/cache/NetworkCacheStatistics.cpp -
trunk/Source/WebKit2/ChangeLog
r185410 r185412 1 2015-06-10 Antti Koivisto <antti@apple.com> 2 3 NetworkCache: Delete old cache versions 4 https://bugs.webkit.org/show_bug.cgi?id=145800 5 6 Reviewed by Darin Adler. 7 8 * CMakeLists.txt: 9 * NetworkProcess/cache/NetworkCacheBlobStorage.cpp: 10 (WebKit::NetworkCache::BlobStorage::synchronize): 11 * NetworkProcess/cache/NetworkCacheFileSystem.cpp: Added. 12 (WebKit::NetworkCache::directoryEntryType): 13 (WebKit::NetworkCache::traverseDirectory): 14 15 Pass entry type as callback argument. 16 17 (WebKit::NetworkCache::deleteDirectoryRecursively): 18 19 Add helper. 20 21 (WebKit::NetworkCache::fileTimes): 22 (WebKit::NetworkCache::updateFileModificationTimeIfNeeded): 23 * NetworkProcess/cache/NetworkCacheFileSystem.h: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystemPosix.h. 24 25 Move code to cpp. 26 27 (WebKit::NetworkCache::traverseDirectory): Deleted. 28 (WebKit::NetworkCache::traverseCacheFiles): Deleted. 29 (WebKit::NetworkCache::fileTimes): Deleted. 30 (WebKit::NetworkCache::updateFileModificationTimeIfNeeded): Deleted. 31 * NetworkProcess/cache/NetworkCacheFileSystemPosix.h: Removed. 32 * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm: 33 * NetworkProcess/cache/NetworkCacheStatistics.cpp: 34 (WebKit::NetworkCache::Statistics::bootstrapFromNetworkCache): 35 * NetworkProcess/cache/NetworkCacheStorage.cpp: 36 (WebKit::NetworkCache::makeBlobDirectoryPath): 37 (WebKit::NetworkCache::traverseRecordsFiles): 38 39 Move cache hierarchy aware traversal code here from NetworkCacheFileSystem (for better layering). 40 Rename for clarity. 41 42 (WebKit::NetworkCache::deleteEmptyRecordsDirectories): 43 44 Factor to a function. 45 46 (WebKit::NetworkCache::Storage::Storage): 47 (WebKit::NetworkCache::Storage::synchronize): 48 (WebKit::NetworkCache::Storage::traverse): 49 (WebKit::NetworkCache::Storage::clear): 50 51 Use traverseRecordsFiles for traversal. 52 53 (WebKit::NetworkCache::Storage::shrink): 54 (WebKit::NetworkCache::Storage::deleteOldVersions): 55 56 Delete version subdirectories with version number less than the current version. 57 Remove code for clearing unversioned V1 caches. No one should have them. 58 59 * NetworkProcess/cache/NetworkCacheStorage.h: 60 * UIProcess/API/APIUserContentExtensionStore.cpp: 61 * WebKit2.xcodeproj/project.pbxproj: 62 1 63 2015-06-10 Zan Dobersek <zdobersek@igalia.com> 2 64 -
trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheBlobStorage.cpp
r184449 r185412 30 30 31 31 #include "Logging.h" 32 #include "NetworkCacheFileSystem Posix.h"32 #include "NetworkCacheFileSystem.h" 33 33 #include <WebCore/FileSystem.h> 34 34 #include <fcntl.h> 35 35 #include <sys/mman.h> 36 #include <sys/stat.h> 36 37 #include <wtf/RunLoop.h> 37 38 #include <wtf/SHA1.h> … … 59 60 m_approximateSize = 0; 60 61 auto blobDirectory = blobDirectoryPath(); 61 traverseDirectory(blobDirectory, DT_REG, [this, &blobDirectory](const String& name) { 62 traverseDirectory(blobDirectory, [this, &blobDirectory](const String& name, DirectoryEntryType type) { 63 if (type != DirectoryEntryType::File) 64 return; 62 65 auto path = WebCore::pathByAppendingComponent(blobDirectory, name); 63 66 auto filePath = WebCore::fileSystemRepresentation(path); -
trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystem.h
r185362 r185412 24 24 */ 25 25 26 #ifndef NetworkCacheFileSystem Posix_h27 #define NetworkCacheFileSystem Posix_h26 #ifndef NetworkCacheFileSystem_h 27 #define NetworkCacheFileSystem_h 28 28 29 29 #if ENABLE(NETWORK_CACHE) 30 30 31 31 #include <WebCore/FileSystem.h> 32 #include <dirent.h> 33 #include <sys/stat.h> 34 #include <sys/time.h> 35 #include <wtf/text/CString.h> 36 37 #if USE(SOUP) 38 #include <wtf/gobject/GRefPtr.h> 39 #endif 32 #include <functional> 40 33 41 34 namespace WebKit { 42 35 namespace NetworkCache { 43 36 44 template <typename Function> 45 static void traverseDirectory(const String& path, uint8_t type, const Function& function) 46 { 47 DIR* dir = opendir(WebCore::fileSystemRepresentation(path).data()); 48 if (!dir) 49 return; 50 struct dirent* dp; 51 while ((dp = readdir(dir))) { 52 if (dp->d_type != type) 53 continue; 54 const char* name = dp->d_name; 55 if (!strcmp(name, ".") || !strcmp(name, "..")) 56 continue; 57 function(String(name)); 58 } 59 closedir(dir); 60 } 37 enum class DirectoryEntryType { Directory, File }; 38 void traverseDirectory(const String& path, const std::function<void (const String& fileName, DirectoryEntryType)>&); 61 39 62 template <typename Function> 63 inline void traverseCacheFiles(const String& cachePath, const Function& function) 64 { 65 traverseDirectory(cachePath, DT_DIR, [&cachePath, &function](const String& subdirName) { 66 String partitionPath = WebCore::pathByAppendingComponent(cachePath, subdirName); 67 traverseDirectory(partitionPath, DT_REG, [&function, &partitionPath](const String& fileName) { 68 function(fileName, partitionPath); 69 }); 70 }); 71 } 40 void deleteDirectoryRecursively(const String& path); 72 41 73 42 struct FileTimes { … … 75 44 std::chrono::system_clock::time_point modification; 76 45 }; 77 78 inline FileTimes fileTimes(const String& path) 79 { 80 #if HAVE(STAT_BIRTHTIME) 81 struct stat fileInfo; 82 if (stat(WebCore::fileSystemRepresentation(path).data(), &fileInfo)) 83 return { }; 84 return { std::chrono::system_clock::from_time_t(fileInfo.st_birthtime), std::chrono::system_clock::from_time_t(fileInfo.st_mtime) }; 85 #elif USE(SOUP) 86 // There's no st_birthtime in some operating systems like Linux, so we use xattrs to set/get the creation time. 87 GRefPtr<GFile> file = adoptGRef(g_file_new_for_path(WebCore::fileSystemRepresentation(path).data())); 88 GRefPtr<GFileInfo> fileInfo = adoptGRef(g_file_query_info(file.get(), "xattr::birthtime,time::modified", G_FILE_QUERY_INFO_NONE, nullptr, nullptr)); 89 if (!fileInfo) 90 return { }; 91 const char* birthtimeString = g_file_info_get_attribute_string(fileInfo.get(), "xattr::birthtime"); 92 if (!birthtimeString) 93 return { }; 94 return { std::chrono::system_clock::from_time_t(g_ascii_strtoull(birthtimeString, nullptr, 10)), 95 std::chrono::system_clock::from_time_t(g_file_info_get_attribute_uint64(fileInfo.get(), "time::modified")) }; 96 #endif 97 } 98 99 inline void updateFileModificationTimeIfNeeded(const String& path) 100 { 101 auto times = fileTimes(path); 102 if (times.creation != times.modification) { 103 // Don't update more than once per hour. 104 if (std::chrono::system_clock::now() - times.modification < std::chrono::hours(1)) 105 return; 106 } 107 // This really updates both the access time and the modification time. 108 utimes(WebCore::fileSystemRepresentation(path).data(), 0); 109 } 46 FileTimes fileTimes(const String& path); 47 void updateFileModificationTimeIfNeeded(const String& path); 110 48 111 49 } 112 50 } 113 51 114 #endif // ENABLE(NETWORK_CACHE)52 #endif 115 53 116 #endif // NetworkCacheFileSystemPosix_h54 #endif 117 55 -
trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm
r182856 r185412 29 29 #if ENABLE(NETWORK_CACHE) 30 30 31 #include "NetworkCacheFileSystem Posix.h"31 #include "NetworkCacheFileSystem.h" 32 32 #include <dispatch/dispatch.h> 33 33 #include <mach/vm_param.h> -
trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp
r185366 r185412 29 29 #if ENABLE(NETWORK_CACHE) 30 30 31 #include "NetworkCacheFileSystem Posix.h"31 #include "NetworkCacheFileSystem.h" 32 32 #include <wtf/MainThread.h> 33 33 #include <wtf/gobject/GMainLoopSource.h> -
trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStatistics.cpp
r183467 r185412 31 31 #include "Logging.h" 32 32 #include "NetworkCache.h" 33 #include "NetworkCacheFileSystem Posix.h"33 #include "NetworkCacheFileSystem.h" 34 34 #include "NetworkProcess.h" 35 35 #include <WebCore/DiagnosticLoggingKeys.h> … … 145 145 146 146 Vector<StringCapture> hashes; 147 traverse CacheFiles(networkCachePath, [&hashes](const String& hashString, const String&) {147 traverseRecordsFiles(networkCachePath, [&hashes](const String& hashString, const String&) { 148 148 Key::HashType hash; 149 149 if (!Key::stringToHash(hashString, hash)) -
trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp
r185262 r185412 31 31 #include "Logging.h" 32 32 #include "NetworkCacheCoders.h" 33 #include "NetworkCacheFileSystem Posix.h"33 #include "NetworkCacheFileSystem.h" 34 34 #include "NetworkCacheIOChannel.h" 35 35 #include <wtf/PageBlock.h> … … 100 100 } 101 101 102 void traverseRecordsFiles(const String& recordsPath, const std::function<void (const String&, const String&)>& function) 103 { 104 traverseDirectory(recordsPath, [&recordsPath, &function](const String& subdirName, DirectoryEntryType type) { 105 if (type != DirectoryEntryType::Directory) 106 return; 107 String partitionPath = WebCore::pathByAppendingComponent(recordsPath, subdirName); 108 traverseDirectory(partitionPath, [&function, &partitionPath](const String& fileName, DirectoryEntryType type) { 109 if (type != DirectoryEntryType::File) 110 return; 111 function(fileName, partitionPath); 112 }); 113 }); 114 } 115 116 static void deleteEmptyRecordsDirectories(const String& recordsPath) 117 { 118 traverseDirectory(recordsPath, [&recordsPath](const String& subdirName, DirectoryEntryType type) { 119 if (type != DirectoryEntryType::Directory) 120 return; 121 // Let system figure out if it is really empty. 122 WebCore::deleteEmptyDirectory(WebCore::pathByAppendingComponent(recordsPath, subdirName)); 123 }); 124 } 125 102 126 Storage::Storage(const String& baseDirectoryPath) 103 127 : m_basePath(baseDirectoryPath) … … 151 175 size_t recordsSize = 0; 152 176 unsigned count = 0; 153 traverse CacheFiles(recordsPath(), [&recordFilter, &bodyFilter, &recordsSize, &count](const String& fileName, const String& partitionPath) {177 traverseRecordsFiles(recordsPath(), [&recordFilter, &bodyFilter, &recordsSize, &count](const String& fileName, const String& partitionPath) { 154 178 auto filePath = WebCore::pathByAppendingComponent(partitionPath, fileName); 155 179 … … 665 689 ioQueue().dispatch([this, flags, traverseHandlerPtr] { 666 690 auto& traverseHandler = *traverseHandlerPtr; 667 traverse CacheFiles(recordsPath(), [this, flags, &traverseHandler](const String& fileName, const String& partitionPath) {691 traverseRecordsFiles(recordsPath(), [this, flags, &traverseHandler](const String& fileName, const String& partitionPath) { 668 692 if (fileName.length() != Key::hashStringLength()) 669 693 return; … … 730 754 ioQueue().dispatch([this, modifiedSinceTime, completionHandlerPtr] { 731 755 auto recordsPath = this->recordsPath(); 732 traverseDirectory(recordsPath, DT_DIR, [&recordsPath, modifiedSinceTime](const String& subdirName) { 733 String subdirPath = WebCore::pathByAppendingComponent(recordsPath, subdirName); 734 traverseDirectory(subdirPath, DT_REG, [&subdirPath, modifiedSinceTime](const String& fileName) { 735 auto filePath = WebCore::pathByAppendingComponent(subdirPath, fileName); 736 if (modifiedSinceTime > std::chrono::system_clock::time_point::min()) { 737 auto times = fileTimes(filePath); 738 if (times.modification < modifiedSinceTime) 739 return; 740 } 741 WebCore::deleteFile(filePath); 742 }); 743 WebCore::deleteEmptyDirectory(subdirPath); 744 }); 756 traverseRecordsFiles(recordsPath, [modifiedSinceTime](const String& fileName, const String& partitionPath) { 757 auto filePath = WebCore::pathByAppendingComponent(partitionPath, fileName); 758 if (modifiedSinceTime > std::chrono::system_clock::time_point::min()) { 759 auto times = fileTimes(filePath); 760 if (times.modification < modifiedSinceTime) 761 return; 762 } 763 WebCore::deleteFile(filePath); 764 }); 765 766 deleteEmptyRecordsDirectories(recordsPath); 745 767 746 768 // This cleans unreferences blobs. … … 810 832 backgroundIOQueue().dispatch([this] { 811 833 auto recordsPath = this->recordsPath(); 812 traverse CacheFiles(recordsPath, [this](const String& fileName, const String& partitionPath) {834 traverseRecordsFiles(recordsPath, [this](const String& fileName, const String& partitionPath) { 813 835 if (fileName.length() != Key::hashStringLength()) 814 836 return; … … 830 852 }); 831 853 832 // Let system figure out if they are really empty. 833 traverseDirectory(recordsPath, DT_DIR, [&recordsPath](const String& subdirName) { 834 auto partitionPath = WebCore::pathByAppendingComponent(recordsPath, subdirName); 835 WebCore::deleteEmptyDirectory(partitionPath); 836 }); 854 deleteEmptyRecordsDirectories(recordsPath); 837 855 838 856 RunLoop::main().dispatch([this] { … … 848 866 void Storage::deleteOldVersions() 849 867 { 850 // Delete V1 cache.851 868 backgroundIOQueue().dispatch([this] { 852 869 auto cachePath = basePath(); 853 traverseDirectory(cachePath, DT_DIR, [&cachePath](const String& subdirName) { 854 if (subdirName.startsWith(versionDirectoryPrefix)) 855 return; 856 String partitionPath = WebCore::pathByAppendingComponent(cachePath, subdirName); 857 traverseDirectory(partitionPath, DT_REG, [&partitionPath](const String& fileName) { 858 WebCore::deleteFile(WebCore::pathByAppendingComponent(partitionPath, fileName)); 859 }); 860 WebCore::deleteEmptyDirectory(partitionPath); 861 }); 862 }); 863 // FIXME: Delete V2 cache. 870 traverseDirectory(cachePath, [&cachePath](const String& subdirName, DirectoryEntryType type) { 871 if (type != DirectoryEntryType::Directory) 872 return; 873 if (!subdirName.startsWith(versionDirectoryPrefix)) 874 return; 875 auto versionString = subdirName.substring(strlen(versionDirectoryPrefix)); 876 bool success; 877 unsigned directoryVersion = versionString.toUIntStrict(&success); 878 if (!success) 879 return; 880 if (directoryVersion >= version) 881 return; 882 883 auto oldVersionPath = WebCore::pathByAppendingComponent(cachePath, subdirName); 884 LOG(NetworkCacheStorage, "(NetworkProcess) deleting old cache version, path %s", oldVersionPath.utf8().data()); 885 886 deleteDirectoryRecursively(oldVersionPath); 887 }); 888 }); 864 889 } 865 890 -
trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h
r184898 r185412 159 159 }; 160 160 161 // FIXME: Remove, used by NetworkCacheStatistics only. 162 void traverseRecordsFiles(const String& recordsPath, const std::function<void (const String&, const String&)>&); 163 161 164 } 162 165 } -
trunk/Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp
r184726 r185412 33 33 #include "NetworkCacheDecoder.h" 34 34 #include "NetworkCacheEncoder.h" 35 #include "NetworkCacheFileSystem Posix.h"35 #include "NetworkCacheFileSystem.h" 36 36 #include "SharedMemory.h" 37 37 #include "WebCompiledContentExtension.h" -
trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj
r185331 r185412 1200 1200 7EC4F0FB18E4ACBB008056AF /* NetworkProcessCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7EC4F0F918E4A945008056AF /* NetworkProcessCocoa.mm */; }; 1201 1201 83048AE61ACA45DC0082C832 /* ProcessThrottlerClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 83048AE51ACA45DC0082C832 /* ProcessThrottlerClient.h */; }; 1202 834B250F1A831A8D00CFB150 /* NetworkCacheFileSystem Posix.h in Headers */ = {isa = PBXBuildFile; fileRef = 834B250E1A831A8D00CFB150 /* NetworkCacheFileSystemPosix.h */; };1202 834B250F1A831A8D00CFB150 /* NetworkCacheFileSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 834B250E1A831A8D00CFB150 /* NetworkCacheFileSystem.h */; }; 1203 1203 834B25121A842C8700CFB150 /* NetworkCacheStatistics.h in Headers */ = {isa = PBXBuildFile; fileRef = 834B25101A842C8700CFB150 /* NetworkCacheStatistics.h */; }; 1204 1204 8360349F1ACB34D600626549 /* WebSQLiteDatabaseTracker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8360349D1ACB34D600626549 /* WebSQLiteDatabaseTracker.cpp */; }; … … 1806 1806 E4436ECF1A0D040B00EAD204 /* NetworkCacheStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = E4436EC21A0CFDB200EAD204 /* NetworkCacheStorage.h */; }; 1807 1807 E4436ED01A0D040B00EAD204 /* NetworkCacheStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4436EC31A0CFDB200EAD204 /* NetworkCacheStorage.cpp */; }; 1808 E4697CCD1B25EB8F001B0A6C /* NetworkCacheFileSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4697CCC1B25EB8F001B0A6C /* NetworkCacheFileSystem.cpp */; }; 1808 1809 E47D1E981B0649FB002676A8 /* NetworkCacheData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E47D1E961B062B66002676A8 /* NetworkCacheData.cpp */; }; 1809 1810 E489D28A1A0A2DB80078C06A /* NetworkCacheCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = E489D2831A0A2DB80078C06A /* NetworkCacheCoder.h */; }; … … 3435 3436 7EC4F0F918E4A945008056AF /* NetworkProcessCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = NetworkProcessCocoa.mm; path = NetworkProcess/cocoa/NetworkProcessCocoa.mm; sourceTree = "<group>"; }; 3436 3437 83048AE51ACA45DC0082C832 /* ProcessThrottlerClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProcessThrottlerClient.h; sourceTree = "<group>"; }; 3437 834B250E1A831A8D00CFB150 /* NetworkCacheFileSystem Posix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkCacheFileSystemPosix.h; sourceTree = "<group>"; };3438 834B250E1A831A8D00CFB150 /* NetworkCacheFileSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkCacheFileSystem.h; sourceTree = "<group>"; }; 3438 3439 834B25101A842C8700CFB150 /* NetworkCacheStatistics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkCacheStatistics.h; sourceTree = "<group>"; }; 3439 3440 8360349D1ACB34D600626549 /* WebSQLiteDatabaseTracker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSQLiteDatabaseTracker.cpp; sourceTree = "<group>"; }; … … 4085 4086 E4436EC21A0CFDB200EAD204 /* NetworkCacheStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkCacheStorage.h; sourceTree = "<group>"; }; 4086 4087 E4436EC31A0CFDB200EAD204 /* NetworkCacheStorage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkCacheStorage.cpp; sourceTree = "<group>"; }; 4088 E4697CCC1B25EB8F001B0A6C /* NetworkCacheFileSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkCacheFileSystem.cpp; sourceTree = "<group>"; }; 4087 4089 E47D1E961B062B66002676A8 /* NetworkCacheData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkCacheData.cpp; sourceTree = "<group>"; }; 4088 4090 E489D2831A0A2DB80078C06A /* NetworkCacheCoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkCacheCoder.h; sourceTree = "<group>"; }; … … 7570 7572 E413F59E1AC1AF9D00345360 /* NetworkCacheEntry.cpp */, 7571 7573 E413F59B1AC1ADB600345360 /* NetworkCacheEntry.h */, 7572 834B250E1A831A8D00CFB150 /* NetworkCacheFileSystemPosix.h */, 7574 834B250E1A831A8D00CFB150 /* NetworkCacheFileSystem.h */, 7575 E4697CCC1B25EB8F001B0A6C /* NetworkCacheFileSystem.cpp */, 7573 7576 E42E060B1AA7440D00B11699 /* NetworkCacheIOChannel.h */, 7574 7577 E42E060D1AA750E500B11699 /* NetworkCacheIOChannelCocoa.mm */, … … 7865 7868 E489D2901A0A2DB80078C06A /* NetworkCacheEncoder.h in Headers */, 7866 7869 E413F59D1AC1ADC400345360 /* NetworkCacheEntry.h in Headers */, 7867 834B250F1A831A8D00CFB150 /* NetworkCacheFileSystem Posix.h in Headers */,7870 834B250F1A831A8D00CFB150 /* NetworkCacheFileSystem.h in Headers */, 7868 7871 E42E06101AA7523B00B11699 /* NetworkCacheIOChannel.h in Headers */, 7869 7872 E4436ECE1A0D040B00EAD204 /* NetworkCacheKey.h in Headers */, … … 9677 9680 E489D28D1A0A2DB80078C06A /* NetworkCacheDecoder.cpp in Sources */, 9678 9681 E489D28F1A0A2DB80078C06A /* NetworkCacheEncoder.cpp in Sources */, 9682 E4697CCD1B25EB8F001B0A6C /* NetworkCacheFileSystem.cpp in Sources */, 9679 9683 E413F59F1AC1AF9D00345360 /* NetworkCacheEntry.cpp in Sources */, 9680 9684 E42E060F1AA7523400B11699 /* NetworkCacheIOChannelCocoa.mm in Sources */,
Note:
See TracChangeset
for help on using the changeset viewer.