Changeset 181020 in webkit
- Timestamp:
- Mar 4, 2015 1:35:11 PM (9 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 4 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r181004 r181020 1 2015-03-04 Antti Koivisto <antti@apple.com> 2 3 Factor platform I/O out from NetworkCacheStorage 4 https://bugs.webkit.org/show_bug.cgi?id=142279 5 6 Reviewed by Chris Dumez. 7 8 * NetworkProcess/cache/NetworkCacheData.h: Added. 9 * NetworkProcess/cache/NetworkCacheDataCocoa.mm: Added. 10 11 NetworkCacheStorage::Data -> NetworkCacheData 12 Move to files of its own. 13 14 * NetworkProcess/cache/NetworkCacheIOChannel.h: Added. 15 * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm: Added. 16 17 Add abstraction for dispatch IO channels. 18 1 19 2015-03-04 Joseph Pecoraro <pecoraro@apple.com> 2 20 -
trunk/Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp
r180949 r181020 94 94 if (partition.isEmpty()) 95 95 partition = ASCIILiteral("No partition"); 96 return NetworkCacheKey(request.httpMethod(), partition, request.url().string());96 return { request.httpMethod(), partition, request.url().string() }; 97 97 } 98 98 … … 121 121 122 122 auto timeStamp = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()); 123 NetworkCache Storage::Data header(encoder.buffer(), encoder.bufferSize());124 NetworkCache Storage::Data body;123 NetworkCacheData header(encoder.buffer(), encoder.bufferSize()); 124 NetworkCacheData body; 125 125 if (responseData) 126 body = NetworkCacheStorage::Data(reinterpret_cast<const uint8_t*>(responseData->data()), responseData->size());127 128 return NetworkCacheStorage::Entry{ makeCacheKey(request), timeStamp, header, body };126 body = { reinterpret_cast<const uint8_t*>(responseData->data()), responseData->size() }; 127 128 return { makeCacheKey(request), timeStamp, header, body }; 129 129 } 130 130 … … 344 344 auto storageEntry = encodeStorageEntry(originalRequest, response, WTF::move(responseData)); 345 345 346 m_storage->store(storageEntry, [completionHandler](bool success, const NetworkCache Storage::Data& bodyData) {346 m_storage->store(storageEntry, [completionHandler](bool success, const NetworkCacheData& bodyData) { 347 347 MappedBody mappedBody; 348 348 #if ENABLE(SHAREABLE_RESOURCE) … … 368 368 auto updateEntry = encodeStorageEntry(originalRequest, response, entry.buffer); 369 369 370 m_storage->update(updateEntry, entry.storageEntry, [](bool success, const NetworkCache Storage::Data&) {370 m_storage->update(updateEntry, entry.storageEntry, [](bool success, const NetworkCacheData&) { 371 371 LOG(NetworkCache, "(NetworkProcess) updated, success=%d", success); 372 372 }); -
trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h
r180949 r181020 29 29 #if ENABLE(NETWORK_CACHE) 30 30 31 #include "NetworkCacheData.h" 31 32 #include "NetworkCacheKey.h" 32 33 #include <wtf/BloomFilter.h> … … 47 48 namespace WebKit { 48 49 49 #if PLATFORM(COCOA)50 template <typename T> class DispatchPtr;51 template <typename T> DispatchPtr<T> adoptDispatch(T dispatchObject);52 53 // FIXME: Use OSObjectPtr instead when it works with dispatch_data_t on all platforms.54 template<typename T> class DispatchPtr {55 public:56 DispatchPtr()57 : m_ptr(nullptr)58 {59 }60 DispatchPtr(T ptr)61 : m_ptr(ptr)62 {63 if (m_ptr)64 dispatch_retain(m_ptr);65 }66 DispatchPtr(const DispatchPtr& other)67 : m_ptr(other.m_ptr)68 {69 if (m_ptr)70 dispatch_retain(m_ptr);71 }72 ~DispatchPtr()73 {74 if (m_ptr)75 dispatch_release(m_ptr);76 }77 78 DispatchPtr& operator=(const DispatchPtr& other)79 {80 auto copy = other;81 std::swap(m_ptr, copy.m_ptr);82 return *this;83 }84 85 T get() const { return m_ptr; }86 explicit operator bool() const { return m_ptr; }87 88 friend DispatchPtr adoptDispatch<T>(T);89 90 private:91 struct Adopt { };92 DispatchPtr(Adopt, T data)93 : m_ptr(data)94 {95 }96 97 T m_ptr;98 };99 100 template <typename T> DispatchPtr<T> adoptDispatch(T dispatchObject)101 {102 return DispatchPtr<T>(typename DispatchPtr<T>::Adopt { }, dispatchObject);103 }104 #endif105 106 50 class NetworkCacheStorage { 107 51 WTF_MAKE_NONCOPYABLE(NetworkCacheStorage); … … 109 53 static std::unique_ptr<NetworkCacheStorage> open(const String& cachePath); 110 54 111 class Data {112 public:113 Data() { }114 Data(const uint8_t*, size_t);115 116 enum class Backing { Buffer, Map };117 #if PLATFORM(COCOA)118 explicit Data(DispatchPtr<dispatch_data_t>, Backing = Backing::Buffer);119 #endif120 bool isNull() const;121 122 const uint8_t* data() const;123 size_t size() const { return m_size; }124 bool isMap() const { return m_isMap; }125 126 #if PLATFORM(COCOA)127 dispatch_data_t dispatchData() const { return m_dispatchData.get(); }128 #endif129 private:130 #if PLATFORM(COCOA)131 mutable DispatchPtr<dispatch_data_t> m_dispatchData;132 #endif133 mutable const uint8_t* m_data { nullptr };134 size_t m_size { 0 };135 bool m_isMap { false };136 };137 138 55 struct Entry { 139 56 NetworkCacheKey key; 140 57 std::chrono::milliseconds timeStamp; 141 Data header;142 Data body;58 NetworkCacheData header; 59 NetworkCacheData body; 143 60 }; 144 61 // This may call completion handler synchronously on failure. … … 146 63 void retrieve(const NetworkCacheKey&, unsigned priority, RetrieveCompletionHandler&&); 147 64 148 typedef std::function<void (bool success, const Data& mappedBody)> StoreCompletionHandler;65 typedef std::function<void (bool success, const NetworkCacheData& mappedBody)> StoreCompletionHandler; 149 66 void store(const Entry&, StoreCompletionHandler&&); 150 67 void update(const Entry& updateEntry, const Entry& existingEntry, StoreCompletionHandler&&); -
trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStorageCocoa.mm
r180949 r181020 32 32 #include "NetworkCacheCoders.h" 33 33 #include "NetworkCacheFileSystemPosix.h" 34 #include "NetworkCacheIOChannel.h" 34 35 #include <dispatch/dispatch.h> 35 36 #include <mach/vm_param.h> … … 49 50 static const char networkCacheSubdirectory[] = "WebKitCache"; 50 51 static const char versionDirectoryPrefix[] = "Version "; 51 52 NetworkCacheStorage::Data::Data(const uint8_t* data, size_t size)53 : m_dispatchData(adoptDispatch(dispatch_data_create(data, size, nullptr, DISPATCH_DATA_DESTRUCTOR_DEFAULT)))54 , m_size(size)55 {56 }57 58 NetworkCacheStorage::Data::Data(DispatchPtr<dispatch_data_t> dispatchData, Backing backing)59 {60 if (!dispatchData)61 return;62 const void* data;63 m_dispatchData = adoptDispatch(dispatch_data_create_map(dispatchData.get(), &data, &m_size));64 m_data = static_cast<const uint8_t*>(data);65 m_isMap = m_size && backing == Backing::Map;66 }67 68 const uint8_t* NetworkCacheStorage::Data::data() const69 {70 if (!m_data) {71 const void* data;72 size_t size;73 m_dispatchData = adoptDispatch(dispatch_data_create_map(m_dispatchData.get(), &data, &size));74 ASSERT(size == m_size);75 m_data = static_cast<const uint8_t*>(data);76 }77 return m_data;78 }79 80 bool NetworkCacheStorage::Data::isNull() const81 {82 return !m_dispatchData;83 }84 52 85 53 std::unique_ptr<NetworkCacheStorage> NetworkCacheStorage::open(const String& cachePath) … … 151 119 } 152 120 153 enum class FileOpenType { Read, Write, Create }; 154 static DispatchPtr<dispatch_io_t> openFile(const String& fileName, const String& directoryPath, FileOpenType type, int& fd) 155 { 156 int oflag; 157 mode_t mode; 158 159 switch (type) { 160 case FileOpenType::Create: 161 oflag = O_RDWR | O_CREAT | O_TRUNC | O_NONBLOCK; 162 mode = S_IRUSR | S_IWUSR; 121 static Ref<NetworkCacheIOChannel> openFileForKey(const NetworkCacheKey& key, NetworkCacheIOChannel::Type type, const String& cachePath) 122 { 123 auto directoryPath = directoryPathForKey(key, cachePath); 124 auto filePath = WebCore::pathByAppendingComponent(directoryPath, fileNameForKey(key)); 125 if (type == NetworkCacheIOChannel::Type::Create) 163 126 WebCore::makeAllDirectories(directoryPath); 164 break; 165 case FileOpenType::Write: 166 oflag = O_WRONLY | O_NONBLOCK; 167 mode = S_IRUSR | S_IWUSR; 168 break; 169 case FileOpenType::Read: 170 oflag = O_RDONLY | O_NONBLOCK; 171 mode = 0; 172 } 173 174 CString path = WebCore::fileSystemRepresentation(WebCore::pathByAppendingComponent(directoryPath, fileName)); 175 fd = ::open(path.data(), oflag, mode); 176 177 LOG(NetworkCacheStorage, "(NetworkProcess) opening %s type=%d", path.data(), type); 178 179 auto channel = adoptDispatch(dispatch_io_create(DISPATCH_IO_RANDOM, fd, dispatch_get_main_queue(), [fd, type](int error) { 180 close(fd); 181 if (error) 182 LOG(NetworkCacheStorage, "(NetworkProcess) error creating io channel %d", error); 183 })); 184 185 ASSERT(channel); 186 dispatch_io_set_low_water(channel.get(), std::numeric_limits<size_t>::max()); 187 188 return channel; 189 } 190 191 static DispatchPtr<dispatch_io_t> openFileForKey(const NetworkCacheKey& key, FileOpenType type, const String& cachePath, int& fd) 192 { 193 return openFile(fileNameForKey(key), directoryPathForKey(key, cachePath), type, fd); 127 return NetworkCacheIOChannel::open(filePath, type); 194 128 } 195 129 … … 221 155 }; 222 156 223 static bool decodeEntryMetaData(EntryMetaData& metaData, dispatch_data_tfileData)157 static bool decodeEntryMetaData(EntryMetaData& metaData, const NetworkCacheData& fileData) 224 158 { 225 159 bool success = false; 226 dispatch_data_apply(fileData , [&metaData, &success](dispatch_data_t, size_t, const void* data, size_t size) {160 dispatch_data_apply(fileData.dispatchData(), [&metaData, &success](dispatch_data_t, size_t, const void* data, size_t size) { 227 161 NetworkCacheDecoder decoder(reinterpret_cast<const uint8_t*>(data), size); 228 162 if (!decoder.decode(metaData.cacheStorageVersion)) … … 261 195 } 262 196 263 static bool decodeEntryHeader( dispatch_data_t fileData, EntryMetaData& metaData, NetworkCacheStorage::Data& data)197 static bool decodeEntryHeader(const NetworkCacheData& fileData, EntryMetaData& metaData, NetworkCacheData& data) 264 198 { 265 199 if (!decodeEntryMetaData(metaData, fileData)) … … 270 204 return false; 271 205 272 auto headerData = adoptDispatch(dispatch_data_create_subrange(fileData , metaData.headerOffset, metaData.headerSize));206 auto headerData = adoptDispatch(dispatch_data_create_subrange(fileData.dispatchData(), metaData.headerOffset, metaData.headerSize)); 273 207 if (metaData.headerChecksum != hashData(headerData.get())) { 274 208 LOG(NetworkCacheStorage, "(NetworkProcess) header checksum mismatch"); 275 209 return false; 276 210 } 277 data = NetworkCacheStorage::Data{ headerData };211 data = { headerData }; 278 212 return true; 279 213 } 280 214 281 static std::unique_ptr<NetworkCacheStorage::Entry> decodeEntry( dispatch_data_tfileData, int fd, const NetworkCacheKey& key)215 static std::unique_ptr<NetworkCacheStorage::Entry> decodeEntry(const NetworkCacheData& fileData, int fd, const NetworkCacheKey& key) 282 216 { 283 217 EntryMetaData metaData; 284 NetworkCache Storage::Data headerData;218 NetworkCacheData headerData; 285 219 if (!decodeEntryHeader(fileData, metaData, headerData)) 286 220 return nullptr; … … 288 222 if (metaData.key != key) 289 223 return nullptr; 290 if (metaData.bodyOffset + metaData.bodySize != dispatch_data_get_size(fileData))224 if (metaData.bodyOffset + metaData.bodySize != fileData.size()) 291 225 return nullptr; 292 226 … … 306 240 metaData.timeStamp, 307 241 headerData, 308 NetworkCacheStorage::Data { bodyData, NetworkCacheStorage::Data::Backing::Map }242 { bodyData, NetworkCacheData::Backing::Map } 309 243 }); 310 244 } … … 327 261 } 328 262 329 static DispatchPtr<dispatch_data_t>encodeEntryHeader(const NetworkCacheStorage::Entry& entry)263 static NetworkCacheData encodeEntryHeader(const NetworkCacheStorage::Entry& entry) 330 264 { 331 265 EntryMetaData metaData(entry.key); … … 339 273 auto headerData = adoptDispatch(dispatch_data_create_concat(encodedMetaData.get(), entry.header.dispatchData())); 340 274 if (!entry.body.size()) 341 return headerData;275 return { headerData }; 342 276 343 277 size_t headerSize = dispatch_data_get_size(headerData.get()); … … 345 279 Vector<uint8_t, 4096> filler(dataOffset - headerSize, 0); 346 280 auto alignmentData = adoptDispatch(dispatch_data_create(filler.data(), filler.size(), nullptr, DISPATCH_DATA_DESTRUCTOR_DEFAULT)); 347 return adoptDispatch(dispatch_data_create_concat(headerData.get(), alignmentData.get()));281 return { adoptDispatch(dispatch_data_create_concat(headerData.get(), alignmentData.get())) }; 348 282 } 349 283 … … 371 305 StringCapture cachePathCapture(m_directoryPath); 372 306 dispatch_async(m_ioQueue.get(), [this, &read, cachePathCapture] { 373 int fd; 374 auto channel = openFileForKey(read.key, FileOpenType::Read, cachePathCapture.string(), fd); 375 376 bool didCallCompletionHandler = false; 377 dispatch_io_read(channel.get(), 0, std::numeric_limits<size_t>::max(), dispatch_get_main_queue(), [this, fd, &read, didCallCompletionHandler](bool done, dispatch_data_t fileData, int error) mutable { 378 if (done) { 379 if (error) 307 auto channel = openFileForKey(read.key, NetworkCacheIOChannel::Type::Read, cachePathCapture.string()); 308 int fd = channel->fileDescriptor(); 309 310 channel->read(0, std::numeric_limits<size_t>::max(), [this, &read, fd](NetworkCacheData& fileData, int error) { 311 if (error) { 312 removeEntry(read.key); 313 read.completionHandler(nullptr); 314 } else { 315 auto entry = decodeEntry(fileData, fd, read.key); 316 bool success = read.completionHandler(WTF::move(entry)); 317 if (!success) 380 318 removeEntry(read.key); 381 382 if (!didCallCompletionHandler)383 read.completionHandler(nullptr);384 385 ASSERT(m_activeReadOperations.contains(&read));386 m_activeReadOperations.remove(&read);387 dispatchPendingReadOperations();388 return;389 319 } 390 ASSERT(!didCallCompletionHandler); // We are requesting maximum sized chunk so we should never get called more than once with data. 391 392 auto entry = decodeEntry(fileData, fd, read.key); 393 bool success = read.completionHandler(WTF::move(entry)); 394 didCallCompletionHandler = true; 395 if (!success) 396 removeEntry(read.key); 320 321 ASSERT(m_activeReadOperations.contains(&read)); 322 m_activeReadOperations.remove(&read); 323 dispatchPendingReadOperations(); 324 325 LOG(NetworkCacheStorage, "(NetworkProcess) read complete error=%d", error); 397 326 }); 398 327 }); … … 466 395 467 396 if (!m_maximumSize) { 468 completionHandler(false, Data());397 completionHandler(false, { }); 469 398 return; 470 399 } … … 485 414 486 415 if (!m_maximumSize) { 487 completionHandler(false, Data());416 completionHandler(false, { }); 488 417 return; 489 418 } … … 501 430 auto semaphore = adoptDispatch(dispatch_semaphore_create(0)); 502 431 traverseCacheFiles(cachePath, [this, &semaphore, &traverseHandler](const String& fileName, const String& partitionPath) { 503 int fd;504 auto channel = openFile(fileName, partitionPath, FileOpenType::Read, fd);432 auto filePath = WebCore::pathByAppendingComponent(partitionPath, fileName); 433 auto channel = NetworkCacheIOChannel::open(filePath, NetworkCacheIOChannel::Type::Read); 505 434 const size_t headerReadSize = 16 << 10; 506 dispatch_io_read(channel.get(), 0, headerReadSize, dispatch_get_main_queue(), [this, fd, &semaphore, &traverseHandler](bool done, dispatch_data_tfileData, int) {435 channel->read(0, headerReadSize, [this, &semaphore, &traverseHandler](NetworkCacheData& fileData, int) { 507 436 EntryMetaData metaData; 508 NetworkCache Storage::Data headerData;437 NetworkCacheData headerData; 509 438 if (decodeEntryHeader(fileData, metaData, headerData)) { 510 Entry entry { metaData.key, metaData.timeStamp, headerData, Data()};439 Entry entry { metaData.key, metaData.timeStamp, headerData, { } }; 511 440 traverseHandler(&entry); 512 441 } 513 if (done) 514 dispatch_semaphore_signal(semaphore.get()); 442 dispatch_semaphore_signal(semaphore.get()); 515 443 }); 516 444 dispatch_semaphore_wait(semaphore.get(), DISPATCH_TIME_FOREVER); … … 556 484 dispatch_async(m_backgroundIOQueue.get(), [this, &write, cachePathCapture] { 557 485 auto encodedHeader = encodeEntryHeader(write.entry); 558 auto writeData = adoptDispatch(dispatch_data_create_concat(encodedHeader.get(), write.entry.body.dispatchData())); 559 560 size_t bodyOffset = dispatch_data_get_size(encodedHeader.get()); 561 562 int fd; 563 auto channel = openFileForKey(write.entry.key, FileOpenType::Create, cachePathCapture.string(), fd); 564 dispatch_io_write(channel.get(), 0, writeData.get(), dispatch_get_main_queue(), [this, &write, fd, bodyOffset](bool done, dispatch_data_t, int error) { 565 ASSERT_UNUSED(done, done); 486 auto headerAndBodyData = adoptDispatch(dispatch_data_create_concat(encodedHeader.dispatchData(), write.entry.body.dispatchData())); 487 488 NetworkCacheData writeData(headerAndBodyData); 489 490 auto channel = openFileForKey(write.entry.key, NetworkCacheIOChannel::Type::Create, cachePathCapture.string()); 491 int fd = channel->fileDescriptor(); 492 size_t bodyOffset = encodedHeader.size(); 493 494 channel->write(0, writeData, [this, &write, bodyOffset, fd](int error) { 566 495 LOG(NetworkCacheStorage, "(NetworkProcess) write complete error=%d", error); 567 496 if (error) { … … 577 506 auto bodyMap = shouldMapBody ? mapFile(fd, bodyOffset, bodySize) : nullptr; 578 507 579 Data bodyData(bodyMap,Data::Backing::Map);508 NetworkCacheData bodyData(bodyMap, NetworkCacheData::Backing::Map); 580 509 write.completionHandler(!error, bodyData); 581 510 … … 602 531 auto existingHeaderData = encodeEntryHeader(write.existingEntry.value()); 603 532 604 bool pageRoundedHeaderSizeChanged = dispatch_data_get_size(headerData.get()) != dispatch_data_get_size(existingHeaderData.get());533 bool pageRoundedHeaderSizeChanged = headerData.size() != existingHeaderData.size(); 605 534 if (pageRoundedHeaderSizeChanged) { 606 535 LOG(NetworkCacheStorage, "(NetworkProcess) page-rounded header size changed, storing full entry"); … … 611 540 } 612 541 613 int fd; 614 auto channel = openFileForKey(write.entry.key, FileOpenType::Write, cachePathCapture.string(), fd); 615 dispatch_io_write(channel.get(), 0, headerData.get(), dispatch_get_main_queue(), [this, &write](bool done, dispatch_data_t, int error) { 616 ASSERT_UNUSED(done, done); 542 auto channel = openFileForKey(write.entry.key, NetworkCacheIOChannel::Type::Write, cachePathCapture.string()); 543 channel->write(0, headerData, [this, &write](int error) { 617 544 LOG(NetworkCacheStorage, "(NetworkProcess) update complete error=%d", error); 618 545 … … 620 547 removeEntry(write.entry.key); 621 548 622 write.completionHandler(!error, Data());549 write.completionHandler(!error, { }); 623 550 624 551 ASSERT(m_activeWriteOperations.contains(&write)); -
trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj
r180837 r181020 1754 1754 E1EE53E311F8CFC000CCBEE4 /* InjectedBundlePageEditorClient.h in Headers */ = {isa = PBXBuildFile; fileRef = E1EE53DC11F8CF9F00CCBEE4 /* InjectedBundlePageEditorClient.h */; }; 1755 1755 E1EE53E711F8CFFB00CCBEE4 /* InjectedBundlePageEditorClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E1EE53E611F8CFFB00CCBEE4 /* InjectedBundlePageEditorClient.cpp */; }; 1756 E42E060F1AA7523400B11699 /* NetworkCacheIOChannelCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = E42E060D1AA750E500B11699 /* NetworkCacheIOChannelCocoa.mm */; }; 1757 E42E06101AA7523B00B11699 /* NetworkCacheIOChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = E42E060B1AA7440D00B11699 /* NetworkCacheIOChannel.h */; }; 1758 E42E06121AA75ABD00B11699 /* NetworkCacheData.h in Headers */ = {isa = PBXBuildFile; fileRef = E42E06111AA75ABD00B11699 /* NetworkCacheData.h */; }; 1759 E42E06141AA75B7000B11699 /* NetworkCacheDataCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = E42E06131AA75B7000B11699 /* NetworkCacheDataCocoa.mm */; }; 1756 1760 E4436ECA1A0D03FA00EAD204 /* NetworkCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4436EBE1A0CFDB200EAD204 /* NetworkCache.cpp */; }; 1757 1761 E4436ECC1A0D040B00EAD204 /* NetworkCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E4436EBF1A0CFDB200EAD204 /* NetworkCache.h */; }; … … 3986 3990 E1FEF39A190F76F300731658 /* com.apple.WebKit.Databases.sb.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = com.apple.WebKit.Databases.sb.in; sourceTree = "<group>"; }; 3987 3991 E1FEF39C190F791C00731658 /* DatabaseProcessIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DatabaseProcessIOS.mm; sourceTree = "<group>"; }; 3992 E42E060B1AA7440D00B11699 /* NetworkCacheIOChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkCacheIOChannel.h; sourceTree = "<group>"; }; 3993 E42E060D1AA750E500B11699 /* NetworkCacheIOChannelCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = NetworkCacheIOChannelCocoa.mm; sourceTree = "<group>"; }; 3994 E42E06111AA75ABD00B11699 /* NetworkCacheData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkCacheData.h; sourceTree = "<group>"; }; 3995 E42E06131AA75B7000B11699 /* NetworkCacheDataCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = NetworkCacheDataCocoa.mm; sourceTree = "<group>"; }; 3988 3996 E4436EBE1A0CFDB200EAD204 /* NetworkCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkCache.cpp; sourceTree = "<group>"; }; 3989 3997 E4436EBF1A0CFDB200EAD204 /* NetworkCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkCache.h; sourceTree = "<group>"; }; … … 7418 7426 E489D2841A0A2DB80078C06A /* NetworkCacheCoders.cpp */, 7419 7427 E489D2851A0A2DB80078C06A /* NetworkCacheCoders.h */, 7428 E42E06111AA75ABD00B11699 /* NetworkCacheData.h */, 7429 E42E06131AA75B7000B11699 /* NetworkCacheDataCocoa.mm */, 7420 7430 E489D2861A0A2DB80078C06A /* NetworkCacheDecoder.cpp */, 7421 7431 E489D2871A0A2DB80078C06A /* NetworkCacheDecoder.h */, … … 7423 7433 E489D2891A0A2DB80078C06A /* NetworkCacheEncoder.h */, 7424 7434 834B250E1A831A8D00CFB150 /* NetworkCacheFileSystemPosix.h */, 7435 E42E060B1AA7440D00B11699 /* NetworkCacheIOChannel.h */, 7436 E42E060D1AA750E500B11699 /* NetworkCacheIOChannelCocoa.mm */, 7425 7437 E4436EC01A0CFDB200EAD204 /* NetworkCacheKey.cpp */, 7426 7438 E4436EC11A0CFDB200EAD204 /* NetworkCacheKey.h */, … … 7537 7549 7C89D2B61A6B0DD9003A5FDE /* WKUserContentControllerPrivate.h in Headers */, 7538 7550 7CE4D2071A46776100C7F152 /* APILegacyContextHistoryClient.h in Headers */, 7551 E42E06121AA75ABD00B11699 /* NetworkCacheData.h in Headers */, 7539 7552 1A2464F31891E45100234C5B /* APILoaderClient.h in Headers */, 7540 7553 7CD3A4831A5D02FA009623B8 /* APINavigation.h in Headers */, … … 7850 7863 51654EFE184EF33F007DC837 /* UniqueIDBDatabaseBackingStoreSQLite.h in Headers */, 7851 7864 515E773418402D510007203F /* UniqueIDBDatabaseIdentifier.h in Headers */, 7865 E42E06101AA7523B00B11699 /* NetworkCacheIOChannel.h in Headers */, 7852 7866 1A64245E12DE29A100CAAE2C /* UpdateInfo.h in Headers */, 7853 7867 1AC1336818565B5700F3EC05 /* UserData.h in Headers */, … … 9608 9622 1ZZ417EF12C00D87002BE67B /* TextCheckerCompletion.cpp in Sources */, 9609 9623 2DA944AD1884E9BA00ED86DB /* TextCheckerIOS.mm in Sources */, 9624 E42E06141AA75B7000B11699 /* NetworkCacheDataCocoa.mm in Sources */, 9610 9625 1AA417EF12C00D87002BE67B /* TextCheckerMac.mm in Sources */, 9611 9626 1AAF263814687C39004A1E8A /* TiledCoreAnimationDrawingArea.mm in Sources */, … … 9855 9870 0FCB4E4918BBE044000FCFC9 /* WKActionSheet.mm in Sources */, 9856 9871 0FCB4E4B18BBE044000FCFC9 /* WKActionSheetAssistant.mm in Sources */, 9872 E42E060F1AA7523400B11699 /* NetworkCacheIOChannelCocoa.mm in Sources */, 9857 9873 C5FA1ED418E1062200B3F402 /* WKAirPlayRoutePicker.mm in Sources */, 9858 9874 512E34E4130B4D0500ABD19A /* WKApplicationCacheManager.cpp in Sources */,
Note: See TracChangeset
for help on using the changeset viewer.