Changeset 248593 in webkit
- Timestamp:
- Aug 13, 2019 3:06:16 AM (5 years ago)
- Location:
- trunk/Source
- Files:
-
- 1 deleted
- 45 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r248592 r248593 1 2019-08-13 Youenn Fablet <youenn@apple.com> 2 3 Blob registries should be keyed by session IDs 4 https://bugs.webkit.org/show_bug.cgi?id=200567 5 <rdar://problem/54120212> 6 7 Reviewed by Alex Christensen. 8 9 Pass session IDs to all BlobRegistry methods in particular ThreadableLoaderRegistry. 10 The only exception is blobSize which should be dealt with a follow-up patch. 11 blobSize blob registry is retrieved from the connection -> sessionID map in Network Process. 12 Covered by existing tests. 13 14 * Modules/fetch/FetchLoader.cpp: 15 (WebCore::FetchLoader::~FetchLoader): 16 (WebCore::FetchLoader::startLoadingBlobURL): 17 * Modules/fetch/FetchLoader.h: 18 * fileapi/FileReaderLoader.cpp: 19 (WebCore::FileReaderLoader::~FileReaderLoader): 20 (WebCore::FileReaderLoader::start): 21 * fileapi/FileReaderLoader.h: 22 * fileapi/ThreadableBlobRegistry.cpp: 23 (WebCore::ThreadableBlobRegistry::registerFileBlobURL): 24 (WebCore::ThreadableBlobRegistry::registerBlobURL): 25 (WebCore::ThreadableBlobRegistry::registerBlobURLOptionallyFileBacked): 26 * fileapi/ThreadableBlobRegistry.h: 27 * html/PublicURLManager.cpp: 28 * loader/PolicyChecker.cpp: 29 (WebCore::PolicyChecker::extendBlobURLLifetimeIfNecessary const): 30 * platform/network/BlobRegistry.h: 31 * platform/network/BlobRegistryImpl.cpp: 32 (WebCore::createBlobResourceHandle): 33 (WebCore::loadBlobResourceSynchronously): 34 (WebCore::BlobRegistryImpl::filesInBlob const): 35 * platform/network/BlobRegistryImpl.h: 36 * platform/network/FormData.cpp: 37 (WebCore::appendBlobResolved): 38 (WebCore::FormData::resolveBlobReferences): 39 * platform/network/FormData.h: 40 * platform/network/cf/FormDataStreamCFNet.cpp: 41 (WebCore::createHTTPBodyCFReadStream): 42 * platform/network/soup/ResourceRequest.h: 43 * platform/network/soup/ResourceRequestSoup.cpp: 44 (WebCore::ResourceRequest::updateSoupMessageBody const): 45 (WebCore::ResourceRequest::updateSoupMessage const): 46 1 47 2019-08-13 Youenn Fablet <youenn@apple.com> 2 48 -
trunk/Source/WebCore/Modules/fetch/FetchLoader.cpp
r233668 r248593 49 49 { 50 50 if (!m_urlForReading.isEmpty()) 51 ThreadableBlobRegistry::unregisterBlobURL( m_urlForReading);51 ThreadableBlobRegistry::unregisterBlobURL(*m_sessionID, m_urlForReading); 52 52 } 53 53 … … 65 65 } 66 66 67 ThreadableBlobRegistry::registerBlobURL(context.securityOrigin(), m_urlForReading, blobURL); 67 m_sessionID = context.sessionID(); 68 ThreadableBlobRegistry::registerBlobURL(*m_sessionID, context.securityOrigin(), m_urlForReading, blobURL); 68 69 69 70 ResourceRequest request(m_urlForReading); -
trunk/Source/WebCore/Modules/fetch/FetchLoader.h
r238771 r248593 68 68 bool m_isStarted { false }; 69 69 URL m_urlForReading; 70 Optional<PAL::SessionID> m_sessionID; 70 71 }; 71 72 -
trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp
r248527 r248593 3570 3570 } 3571 3571 3572 void SerializedScriptValue::writeBlobsToDiskForIndexedDB(PAL::SessionID , CompletionHandler<void(IDBValue&&)>&& completionHandler)3572 void SerializedScriptValue::writeBlobsToDiskForIndexedDB(PAL::SessionID sessionID, CompletionHandler<void(IDBValue&&)>&& completionHandler) 3573 3573 { 3574 3574 ASSERT(isMainThread()); 3575 3575 ASSERT(hasBlobURLs()); 3576 3576 3577 // FIXME: Get the right blob registry from the given sessionID. 3578 blobRegistry().writeBlobsToTemporaryFiles(m_blobURLs, [completionHandler = WTFMove(completionHandler), this, protectedThis = makeRef(*this)] (auto&& blobFilePaths) mutable { 3577 blobRegistry().writeBlobsToTemporaryFiles(sessionID, m_blobURLs, [completionHandler = WTFMove(completionHandler), this, protectedThis = makeRef(*this)] (auto&& blobFilePaths) mutable { 3579 3578 ASSERT(isMainThread()); 3580 3579 … … 3587 3586 3588 3587 ASSERT(m_blobURLs.size() == blobFilePaths.size()); 3589 3588 3590 3589 completionHandler({ *this, m_blobURLs, blobFilePaths }); 3591 3590 }); -
trunk/Source/WebCore/fileapi/Blob.cpp
r248538 r248593 59 59 { 60 60 ASSERT(&blob.registry() == this); 61 ThreadableBlobRegistry::registerBlobURL(context.se curityOrigin(), publicURL, static_cast<Blob&>(blob).url());62 } 63 64 void BlobURLRegistry::unregisterURL(ScriptExecutionContext& , const URL& url)65 { 66 ThreadableBlobRegistry::unregisterBlobURL( url);61 ThreadableBlobRegistry::registerBlobURL(context.sessionID(), context.securityOrigin(), publicURL, static_cast<Blob&>(blob).url()); 62 } 63 64 void BlobURLRegistry::unregisterURL(ScriptExecutionContext& context, const URL& url) 65 { 66 ThreadableBlobRegistry::unregisterBlobURL(context.sessionID(), url); 67 67 } 68 68 … … 85 85 { 86 86 m_internalURL = BlobURL::createInternalURL(); 87 ThreadableBlobRegistry::registerBlobURL(m_ internalURL, { }, { });87 ThreadableBlobRegistry::registerBlobURL(m_sessionID, m_internalURL, { }, { }); 88 88 } 89 89 … … 102 102 } 103 103 104 ThreadableBlobRegistry::registerBlobURL(m_ internalURL, builder.finalize(), m_type);104 ThreadableBlobRegistry::registerBlobURL(m_sessionID, m_internalURL, builder.finalize(), m_type); 105 105 } 106 106 … … 116 116 blobParts.append(BlobPart(WTFMove(data))); 117 117 m_internalURL = BlobURL::createInternalURL(); 118 ThreadableBlobRegistry::registerBlobURL(m_ internalURL, WTFMove(blobParts), contentType);118 ThreadableBlobRegistry::registerBlobURL(m_sessionID, m_internalURL, WTFMove(blobParts), contentType); 119 119 } 120 120 … … 127 127 blobParts.append(BlobPart(WTFMove(data))); 128 128 m_internalURL = BlobURL::createInternalURL(); 129 ThreadableBlobRegistry::registerBlobURL(m_ internalURL, WTFMove(blobParts), contentType);129 ThreadableBlobRegistry::registerBlobURL(m_sessionID, m_internalURL, WTFMove(blobParts), contentType); 130 130 } 131 131 … … 136 136 , m_size(blob.size()) 137 137 { 138 ThreadableBlobRegistry::registerBlobURL(m_ internalURL, { BlobPart(blob.url()) } , m_type);138 ThreadableBlobRegistry::registerBlobURL(m_sessionID, m_internalURL, { BlobPart(blob.url()) } , m_type); 139 139 } 140 140 … … 146 146 m_internalURL = BlobURL::createInternalURL(); 147 147 if (fileBackedPath.isEmpty()) 148 ThreadableBlobRegistry::registerBlobURL( nullptr, m_internalURL, srcURL);148 ThreadableBlobRegistry::registerBlobURL(m_sessionID, nullptr, m_internalURL, srcURL); 149 149 else 150 ThreadableBlobRegistry::registerBlobURLOptionallyFileBacked(m_ internalURL, srcURL, fileBackedPath, m_type);150 ThreadableBlobRegistry::registerBlobURLOptionallyFileBacked(m_sessionID, m_internalURL, srcURL, fileBackedPath, m_type); 151 151 } 152 152 … … 157 157 { 158 158 m_internalURL = BlobURL::createInternalURL(); 159 ThreadableBlobRegistry::registerBlobURLForSlice(m_ internalURL, srcURL, start, end);159 ThreadableBlobRegistry::registerBlobURLForSlice(m_sessionID, m_internalURL, srcURL, start, end); 160 160 } 161 161 162 162 Blob::~Blob() 163 163 { 164 ThreadableBlobRegistry::unregisterBlobURL(m_ internalURL);164 ThreadableBlobRegistry::unregisterBlobURL(m_sessionID, m_internalURL); 165 165 } 166 166 -
trunk/Source/WebCore/fileapi/File.cpp
r248538 r248593 54 54 55 55 auto internalURL = BlobURL::createInternalURL(); 56 ThreadableBlobRegistry::registerFileBlobURL( internalURL, path, type);56 ThreadableBlobRegistry::registerFileBlobURL(sessionID, internalURL, path, type); 57 57 58 58 return adoptRef(*new File(sessionID, WTFMove(internalURL), WTFMove(type), String { path }, WTFMove(name))); -
trunk/Source/WebCore/fileapi/FileReaderLoader.cpp
r239535 r248593 69 69 terminate(); 70 70 if (!m_urlForReading.isEmpty()) 71 ThreadableBlobRegistry::unregisterBlobURL( m_urlForReading);71 ThreadableBlobRegistry::unregisterBlobURL(*m_sessionID, m_urlForReading); 72 72 } 73 73 … … 82 82 return; 83 83 } 84 ThreadableBlobRegistry::registerBlobURL(scriptExecutionContext->securityOrigin(), m_urlForReading, blob.url()); 84 m_sessionID = scriptExecutionContext->sessionID(); 85 ThreadableBlobRegistry::registerBlobURL(*m_sessionID, scriptExecutionContext->securityOrigin(), m_urlForReading, blob.url()); 85 86 86 87 // Construct and load the request. -
trunk/Source/WebCore/fileapi/FileReaderLoader.h
r246964 r248593 36 36 #include "TextEncoding.h" 37 37 #include "ThreadableLoaderClient.h" 38 #include <pal/SessionID.h> 38 39 #include <wtf/Forward.h> 39 40 #include <wtf/text/WTFString.h> … … 103 104 104 105 URL m_urlForReading; 106 Optional<PAL::SessionID> m_sessionID; 105 107 RefPtr<ThreadableLoader> m_loader; 106 108 -
trunk/Source/WebCore/fileapi/ThreadableBlobRegistry.cpp
r236101 r248593 65 65 } 66 66 67 static void postToMainThread(CrossThreadTask&& task)67 void ThreadableBlobRegistry::registerFileBlobURL(PAL::SessionID sessionID, const URL& url, const String& path, const String& contentType) 68 68 { 69 static std::once_flag onceFlag; 70 static CrossThreadQueue<CrossThreadTask>* queue; 71 std::call_once(onceFlag, [] { 72 queue = new CrossThreadQueue<CrossThreadTask>; 73 }); 69 if (isMainThread()) { 70 blobRegistry().registerFileBlobURL(sessionID, url, BlobDataFileReference::create(path), contentType); 71 return; 72 } 74 73 75 queue->append(WTFMove(task)); 76 77 callOnMainThread([] { 78 auto task = queue->tryGetMessage(); 79 ASSERT(task); 80 task->performTask(); 74 callOnMainThread([sessionID, url = url.isolatedCopy(), path = path.isolatedCopy(), contentType = contentType.isolatedCopy()] { 75 blobRegistry().registerFileBlobURL(sessionID, url, BlobDataFileReference::create(path), contentType); 81 76 }); 82 77 } 83 78 84 void ThreadableBlobRegistry::register FileBlobURL(const URL& url, const String& path, const String& contentType)79 void ThreadableBlobRegistry::registerBlobURL(PAL::SessionID sessionID, const URL& url, Vector<BlobPart>&& blobParts, const String& contentType) 85 80 { 86 if (isMainThread()) 87 blobRegistry().registerFileBlobURL(url, BlobDataFileReference::create(path), contentType); 88 else { 89 callOnMainThread([url = url.isolatedCopy(), path = path.isolatedCopy(), contentType = contentType.isolatedCopy()] { 90 blobRegistry().registerFileBlobURL(url, BlobDataFileReference::create(path), contentType); 91 }); 81 if (isMainThread()) { 82 blobRegistry().registerBlobURL(sessionID, url, WTFMove(blobParts), contentType); 83 return; 92 84 } 85 for (auto& part : blobParts) 86 part.detachFromCurrentThread(); 87 callOnMainThread([sessionID, url = url.isolatedCopy(), blobParts = WTFMove(blobParts), contentType = contentType.isolatedCopy()]() mutable { 88 blobRegistry().registerBlobURL(sessionID, url, WTFMove(blobParts), contentType); 89 }); 93 90 } 94 91 95 void ThreadableBlobRegistry::registerBlobURL(const URL& url, Vector<BlobPart>&& blobParts, const String& contentType) 96 { 97 if (isMainThread()) 98 blobRegistry().registerBlobURL(url, WTFMove(blobParts), contentType); 99 else { 100 for (auto& part : blobParts) 101 part.detachFromCurrentThread(); 102 callOnMainThread([url = url.isolatedCopy(), blobParts = WTFMove(blobParts), contentType = contentType.isolatedCopy()]() mutable { 103 blobRegistry().registerBlobURL(url, WTFMove(blobParts), contentType); 104 }); 105 } 106 } 107 108 void ThreadableBlobRegistry::registerBlobURL(SecurityOrigin* origin, const URL& url, const URL& srcURL) 92 void ThreadableBlobRegistry::registerBlobURL(PAL::SessionID sessionID, SecurityOrigin* origin, const URL& url, const URL& srcURL) 109 93 { 110 94 // If the blob URL contains null origin, as in the context with unique security origin or file URL, save the mapping between url and origin so that the origin can be retrived when doing security origin check. … … 112 96 originMap()->add(url.string(), origin); 113 97 114 if (isMainThread()) 115 blobRegistry().registerBlobURL(url, srcURL); 116 else { 117 callOnMainThread([url = url.isolatedCopy(), srcURL = srcURL.isolatedCopy()] { 118 blobRegistry().registerBlobURL(url, srcURL); 119 }); 98 if (isMainThread()) { 99 blobRegistry().registerBlobURL(sessionID, url, srcURL); 100 return; 120 101 } 102 103 callOnMainThread([sessionID, url = url.isolatedCopy(), srcURL = srcURL.isolatedCopy()] { 104 blobRegistry().registerBlobURL(sessionID, url, srcURL); 105 }); 121 106 } 122 107 123 void ThreadableBlobRegistry::registerBlobURLOptionallyFileBacked( const URL& url, const URL& srcURL, const String& fileBackedPath, const String& contentType)108 void ThreadableBlobRegistry::registerBlobURLOptionallyFileBacked(PAL::SessionID sessionID, const URL& url, const URL& srcURL, const String& fileBackedPath, const String& contentType) 124 109 { 125 if (isMainThread()) 126 blobRegistry().registerBlobURLOptionallyFileBacked(url, srcURL, BlobDataFileReference::create(fileBackedPath), contentType); 127 else 128 postToMainThread(createCrossThreadTask(ThreadableBlobRegistry::registerBlobURLOptionallyFileBacked, url, srcURL, fileBackedPath, contentType)); 110 if (isMainThread()) { 111 blobRegistry().registerBlobURLOptionallyFileBacked(sessionID, url, srcURL, BlobDataFileReference::create(fileBackedPath), contentType); 112 return; 113 } 114 callOnMainThread([sessionID, url = url.isolatedCopy(), srcURL = srcURL.isolatedCopy(), fileBackedPath = fileBackedPath.isolatedCopy(), contentType = contentType.isolatedCopy()] { 115 blobRegistry().registerBlobURLOptionallyFileBacked(sessionID, url, srcURL, BlobDataFileReference::create(fileBackedPath), contentType); 116 }); 129 117 } 130 118 131 void ThreadableBlobRegistry::registerBlobURLForSlice( const URL& newURL, const URL& srcURL, long long start, long long end)119 void ThreadableBlobRegistry::registerBlobURLForSlice(PAL::SessionID sessionID, const URL& newURL, const URL& srcURL, long long start, long long end) 132 120 { 133 if (isMainThread()) 134 blobRegistry().registerBlobURLForSlice(newURL, srcURL, start, end); 135 else { 136 callOnMainThread([newURL = newURL.isolatedCopy(), srcURL = srcURL.isolatedCopy(), start, end] { 137 blobRegistry().registerBlobURLForSlice(newURL, srcURL, start, end); 138 }); 121 if (isMainThread()) { 122 blobRegistry().registerBlobURLForSlice(sessionID, newURL, srcURL, start, end); 123 return; 139 124 } 125 126 callOnMainThread([sessionID, newURL = newURL.isolatedCopy(), srcURL = srcURL.isolatedCopy(), start, end] { 127 blobRegistry().registerBlobURLForSlice(sessionID, newURL, srcURL, start, end); 128 }); 140 129 } 141 130 142 131 unsigned long long ThreadableBlobRegistry::blobSize(const URL& url) 143 132 { 133 if (isMainThread()) 134 return blobRegistry().blobSize(url); 135 144 136 unsigned long long resultSize; 145 if (isMainThread()) 137 BinarySemaphore semaphore; 138 callOnMainThread([url = url.isolatedCopy(), &semaphore, &resultSize] { 146 139 resultSize = blobRegistry().blobSize(url); 147 else { 148 BinarySemaphore semaphore; 149 callOnMainThread([url = url.isolatedCopy(), &semaphore, &resultSize] { 150 resultSize = blobRegistry().blobSize(url); 151 semaphore.signal(); 152 }); 153 semaphore.wait(); 154 } 140 semaphore.signal(); 141 }); 142 semaphore.wait(); 155 143 return resultSize; 156 144 } 157 145 158 void ThreadableBlobRegistry::unregisterBlobURL( const URL& url)146 void ThreadableBlobRegistry::unregisterBlobURL(PAL::SessionID sessionID, const URL& url) 159 147 { 160 148 if (BlobURL::getOrigin(url) == "null") 161 149 originMap()->remove(url.string()); 162 150 163 if (isMainThread()) 164 blobRegistry().unregisterBlobURL(url); 165 else { 166 callOnMainThread([url = url.isolatedCopy()] { 167 blobRegistry().unregisterBlobURL(url); 168 }); 151 if (isMainThread()) { 152 blobRegistry().unregisterBlobURL(sessionID, url); 153 return; 169 154 } 155 callOnMainThread([sessionID, url = url.isolatedCopy()] { 156 blobRegistry().unregisterBlobURL(sessionID, url); 157 }); 170 158 } 171 159 -
trunk/Source/WebCore/fileapi/ThreadableBlobRegistry.h
r238771 r248593 41 41 class ThreadableBlobRegistry { 42 42 public: 43 static void registerFileBlobURL( const URL&, const String& path, const String& contentType);44 static void registerBlobURL( const URL&, Vector<BlobPart>&& blobParts, const String& contentType);45 static void registerBlobURL( SecurityOrigin*, const URL&, const URL& srcURL);46 static void registerBlobURLOptionallyFileBacked( const URL&, const URL& srcURL, const String& fileBackedPath, const String& contentType);47 static void registerBlobURLForSlice( const URL& newURL, const URL& srcURL, long long start, long long end);48 static void unregisterBlobURL( const URL&);43 static void registerFileBlobURL(PAL::SessionID, const URL&, const String& path, const String& contentType); 44 static void registerBlobURL(PAL::SessionID, const URL&, Vector<BlobPart>&& blobParts, const String& contentType); 45 static void registerBlobURL(PAL::SessionID, SecurityOrigin*, const URL&, const URL& srcURL); 46 static void registerBlobURLOptionallyFileBacked(PAL::SessionID, const URL&, const URL& srcURL, const String& fileBackedPath, const String& contentType); 47 static void registerBlobURLForSlice(PAL::SessionID, const URL& newURL, const URL& srcURL, long long start, long long end); 48 static void unregisterBlobURL(PAL::SessionID, const URL&); 49 49 50 50 static unsigned long long blobSize(const URL&); -
trunk/Source/WebCore/html/PublicURLManager.cpp
r248473 r248593 27 27 #include "config.h" 28 28 #include "PublicURLManager.h" 29 30 #include "URLRegistry.h" 29 31 #include <wtf/URL.h> 30 #include "URLRegistry.h"31 32 #include <wtf/text/StringHash.h> 32 33 -
trunk/Source/WebCore/loader/PolicyChecker.cpp
r241842 r248593 107 107 // Create a new temporary blobURL in case this one gets revoked during the asynchronous navigation policy decision. 108 108 URL temporaryBlobURL = BlobURL::createPublicURL(&m_frame.document()->securityOrigin()); 109 blobRegistry().registerBlobURL(temporaryBlobURL, request.url()); 109 auto sessionID = m_frame.document()->sessionID(); 110 blobRegistry().registerBlobURL(sessionID, temporaryBlobURL, request.url()); 110 111 request.setURL(temporaryBlobURL); 111 return CompletionHandler<void()>([ temporaryBlobURL = WTFMove(temporaryBlobURL)] {112 blobRegistry().unregisterBlobURL( temporaryBlobURL);112 return CompletionHandler<void()>([sessionID, temporaryBlobURL = WTFMove(temporaryBlobURL)] { 113 blobRegistry().unregisterBlobURL(sessionID, temporaryBlobURL); 113 114 }); 114 115 } -
trunk/Source/WebCore/platform/network/BlobRegistry.h
r238771 r248593 32 32 #pragma once 33 33 34 #include <pal/SessionID.h> 34 35 #include <wtf/Forward.h> 35 36 … … 39 40 class BlobPart; 40 41 class BlobRegistry; 42 class BlobRegistryImpl; 41 43 42 44 WEBCORE_EXPORT BlobRegistry& blobRegistry(); … … 47 49 48 50 // Registers a blob URL referring to the specified file. 49 virtual void registerFileBlobURL( const URL&, Ref<BlobDataFileReference>&&, const String& contentType) = 0;51 virtual void registerFileBlobURL(PAL::SessionID, const URL&, Ref<BlobDataFileReference>&&, const String& contentType) = 0; 50 52 51 53 // Registers a blob URL referring to the specified blob data. 52 virtual void registerBlobURL( const URL&, Vector<BlobPart>&&, const String& contentType) = 0;54 virtual void registerBlobURL(PAL::SessionID, const URL&, Vector<BlobPart>&&, const String& contentType) = 0; 53 55 54 56 // Registers a new blob URL referring to the blob data identified by the specified srcURL. 55 virtual void registerBlobURL( const URL&, const URL& srcURL) = 0;57 virtual void registerBlobURL(PAL::SessionID, const URL&, const URL& srcURL) = 0; 56 58 57 59 // Registers a new blob URL referring to the blob data identified by the specified srcURL or, if none found, referring to the file found at the given path. 58 virtual void registerBlobURLOptionallyFileBacked( const URL&, const URL& srcURL, RefPtr<BlobDataFileReference>&&, const String& contentType) = 0;60 virtual void registerBlobURLOptionallyFileBacked(PAL::SessionID, const URL&, const URL& srcURL, RefPtr<BlobDataFileReference>&&, const String& contentType) = 0; 59 61 60 62 // Negative start and end values select from the end. 61 virtual void registerBlobURLForSlice( const URL&, const URL& srcURL, long long start, long long end) = 0;63 virtual void registerBlobURLForSlice(PAL::SessionID, const URL&, const URL& srcURL, long long start, long long end) = 0; 62 64 63 virtual void unregisterBlobURL( const URL&) = 0;65 virtual void unregisterBlobURL(PAL::SessionID, const URL&) = 0; 64 66 65 67 virtual unsigned long long blobSize(const URL&) = 0; 66 68 67 virtual void writeBlobsToTemporaryFiles( const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&& filePaths)>&&) = 0;69 virtual void writeBlobsToTemporaryFiles(PAL::SessionID, const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&& filePaths)>&&) = 0; 68 70 69 virtual bool isBlobRegistryImpl() const { return false; }71 virtual BlobRegistryImpl* blobRegistryImpl() { return nullptr; } 70 72 71 73 protected: -
trunk/Source/WebCore/platform/network/BlobRegistryImpl.cpp
r243163 r248593 55 55 static Ref<ResourceHandle> createBlobResourceHandle(const ResourceRequest& request, ResourceHandleClient* client) 56 56 { 57 return static_cast<BlobRegistryImpl&>(blobRegistry()).createResourceHandle(request, client);57 return blobRegistry().blobRegistryImpl()->createResourceHandle(request, client); 58 58 } 59 59 60 60 static void loadBlobResourceSynchronously(NetworkingContext*, const ResourceRequest& request, StoredCredentialsPolicy, ResourceError& error, ResourceResponse& response, Vector<char>& data) 61 61 { 62 BlobData* blobData = static_cast<BlobRegistryImpl&>(blobRegistry()).getBlobDataFromURL(request.url());62 auto* blobData = blobRegistry().blobRegistryImpl()->getBlobDataFromURL(request.url()); 63 63 BlobResourceHandle::loadResourceSynchronously(blobData, request, error, response, data); 64 64 } … … 344 344 } 345 345 346 Vector<RefPtr<BlobDataFileReference>> BlobRegistryImpl::filesInBlob(const URL& url) const 347 { 348 auto* blobData = getBlobDataFromURL(url); 349 if (!blobData) 350 return { }; 351 352 Vector<RefPtr<BlobDataFileReference>> result; 353 for (const BlobDataItem& item : blobData->items()) { 354 if (item.type() == BlobDataItem::Type::File) 355 result.append(item.file()); 356 } 357 358 return result; 359 } 360 346 361 } // namespace WebCore -
trunk/Source/WebCore/platform/network/BlobRegistryImpl.h
r241008 r248593 47 47 48 48 // BlobRegistryImpl is not thread-safe. It should only be called from main thread. 49 class WEBCORE_EXPORT BlobRegistryImpl final : public BlobRegistry{49 class WEBCORE_EXPORT BlobRegistryImpl { 50 50 WTF_MAKE_FAST_ALLOCATED; 51 51 public: … … 59 59 void appendStorageItems(BlobData*, const BlobDataItemList&, long long offset, long long length); 60 60 61 void registerFileBlobURL(const URL&, Ref<BlobDataFileReference>&&, const String& contentType) override; 62 void registerBlobURL(const URL&, Vector<BlobPart>&&, const String& contentType) override; 63 void registerBlobURL(const URL&, const URL& srcURL) override; 64 void registerBlobURLOptionallyFileBacked(const URL&, const URL& srcURL, RefPtr<BlobDataFileReference>&&, const String& contentType) override; 65 void registerBlobURLForSlice(const URL&, const URL& srcURL, long long start, long long end) override; 66 void unregisterBlobURL(const URL&) override; 67 bool isBlobRegistryImpl() const override { return true; } 61 void registerFileBlobURL(const URL&, Ref<BlobDataFileReference>&&, const String& contentType); 62 void registerBlobURL(const URL&, Vector<BlobPart>&&, const String& contentType); 63 void registerBlobURL(const URL&, const URL& srcURL); 64 void registerBlobURLOptionallyFileBacked(const URL&, const URL& srcURL, RefPtr<BlobDataFileReference>&&, const String& contentType); 65 void registerBlobURLForSlice(const URL&, const URL& srcURL, long long start, long long end); 66 void unregisterBlobURL(const URL&); 68 67 69 unsigned long long blobSize(const URL&) override;68 unsigned long long blobSize(const URL&); 70 69 71 void writeBlobsToTemporaryFiles(const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&& filePaths)>&&) override;70 void writeBlobsToTemporaryFiles(const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&& filePaths)>&&); 72 71 73 72 struct BlobForFileWriting { … … 77 76 78 77 bool populateBlobsForFileWriting(const Vector<String>& blobURLs, Vector<BlobForFileWriting>&); 78 Vector<RefPtr<BlobDataFileReference>> filesInBlob(const URL&) const; 79 79 80 80 private: -
trunk/Source/WebCore/platform/network/FormData.cpp
r248139 r248593 287 287 } 288 288 289 static void appendBlobResolved(BlobRegistry &blobRegistry, FormData& formData, const URL& url)290 { 291 if (!blobRegistry .isBlobRegistryImpl()) {289 static void appendBlobResolved(BlobRegistryImpl* blobRegistry, FormData& formData, const URL& url) 290 { 291 if (!blobRegistry) { 292 292 LOG_ERROR("Tried to resolve a blob without a usable registry"); 293 293 return; 294 294 } 295 295 296 auto* blobData = static_cast<BlobRegistryImpl&>(blobRegistry).getBlobDataFromURL(url);296 auto* blobData = blobRegistry->getBlobDataFromURL(url); 297 297 if (!blobData) { 298 298 LOG_ERROR("Could not get blob data from a registry"); … … 311 311 } 312 312 313 Ref<FormData> FormData::resolveBlobReferences(BlobRegistry &blobRegistry)313 Ref<FormData> FormData::resolveBlobReferences(BlobRegistryImpl* blobRegistry) 314 314 { 315 315 // First check if any blobs needs to be resolved, or we can take the fast path. -
trunk/Source/WebCore/platform/network/FormData.h
r248139 r248593 30 30 namespace WebCore { 31 31 32 class BlobRegistry ;32 class BlobRegistryImpl; 33 33 class DOMFormData; 34 34 class File; … … 220 220 // Resolve all blob references so we only have file and data. 221 221 // If the FormData has no blob references to resolve, this is returned. 222 WEBCORE_EXPORT Ref<FormData> resolveBlobReferences(BlobRegistry &);222 WEBCORE_EXPORT Ref<FormData> resolveBlobReferences(BlobRegistryImpl*); 223 223 224 224 WEBCORE_EXPORT FormDataForUpload prepareForUpload(); -
trunk/Source/WebCore/platform/network/cf/FormDataStreamCFNet.cpp
r248139 r248593 373 373 RetainPtr<CFReadStreamRef> createHTTPBodyCFReadStream(FormData& formData) 374 374 { 375 auto resolvedFormData = formData.resolveBlobReferences(blobRegistry() );375 auto resolvedFormData = formData.resolveBlobReferences(blobRegistry().blobRegistryImpl()); 376 376 auto dataForUpload = resolvedFormData->prepareForUpload(); 377 377 -
trunk/Source/WebCore/platform/network/curl/CurlFormDataStream.cpp
r242842 r248593 52 52 53 53 // Resolve the blob elements so the formData can correctly report it's size. 54 m_formData = m_formData->resolveBlobReferences(blobRegistry() );54 m_formData = m_formData->resolveBlobReferences(blobRegistry().blobRegistryImpl()); 55 55 } 56 56 -
trunk/Source/WebCore/platform/network/soup/ResourceRequest.h
r246677 r248593 33 33 34 34 namespace WebCore { 35 36 class BlobRegistryImpl; 35 37 36 38 class ResourceRequest : public ResourceRequestBase { … … 88 90 void updateSoupMessageHeaders(SoupMessageHeaders*) const; 89 91 void updateFromSoupMessageHeaders(SoupMessageHeaders*); 90 void updateSoupMessage(SoupMessage* ) const;92 void updateSoupMessage(SoupMessage*, BlobRegistryImpl&) const; 91 93 void updateFromSoupMessage(SoupMessage*); 92 94 void updateSoupRequest(SoupRequest*) const; … … 112 114 113 115 void updateSoupMessageMembers(SoupMessage*) const; 114 void updateSoupMessageBody(SoupMessage* ) const;116 void updateSoupMessageBody(SoupMessage*, BlobRegistryImpl&) const; 115 117 void doUpdatePlatformRequest() { } 116 118 void doUpdateResourceRequest() { } -
trunk/Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp
r246102 r248593 69 69 } 70 70 71 void ResourceRequest::updateSoupMessageBody(SoupMessage* soupMessage ) const71 void ResourceRequest::updateSoupMessageBody(SoupMessage* soupMessage, BlobRegistryImpl& blobRegistry) const 72 72 { 73 73 auto* formData = httpBody(); … … 93 93 } 94 94 }, [&] (const FormDataElement::EncodedBlobData& blob) { 95 if (auto* blobData = static_cast<BlobRegistryImpl&>(blobRegistry()).getBlobDataFromURL(blob.url)) {95 if (auto* blobData = blobRegistry.getBlobDataFromURL(blob.url)) { 96 96 for (const auto& item : blobData->items()) 97 97 bodySize += appendEncodedBlobItemToSoupMessageBody(soupMessage, item); … … 141 141 } 142 142 143 void ResourceRequest::updateSoupMessage(SoupMessage* soupMessage ) const143 void ResourceRequest::updateSoupMessage(SoupMessage* soupMessage, BlobRegistryImpl& blobRegistry) const 144 144 { 145 145 g_object_set(soupMessage, SOUP_MESSAGE_METHOD, httpMethod().ascii().data(), NULL); … … 149 149 150 150 updateSoupMessageMembers(soupMessage); 151 updateSoupMessageBody(soupMessage );151 updateSoupMessageBody(soupMessage, blobRegistry); 152 152 } 153 153 -
trunk/Source/WebKit/ChangeLog
r248592 r248593 1 2019-08-13 Youenn Fablet <youenn@apple.com> 2 3 Blob registries should be keyed by session IDs 4 https://bugs.webkit.org/show_bug.cgi?id=200567 5 <rdar://problem/54120212> 6 7 Reviewed by Alex Christensen. 8 9 Move blob registry to NetworkSession so that it is partitioned by session ID. 10 In case session ID is not given through IPC, use the connection as key to get the network session. 11 This is used for blobSize. 12 13 * NetworkProcess/Downloads/DownloadManager.cpp: 14 (WebKit::DownloadManager::startDownload): 15 * NetworkProcess/Downloads/DownloadManager.h: 16 * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp: 17 * NetworkProcess/FileAPI/NetworkBlobRegistry.h: Removed. 18 * NetworkProcess/NetworkConnectionToWebProcess.cpp: 19 (WebKit::NetworkConnectionToWebProcess::didClose): 20 (WebKit::NetworkConnectionToWebProcess::resolveBlobReferences): 21 (WebKit::NetworkConnectionToWebProcess::registerFileBlobURL): 22 (WebKit::NetworkConnectionToWebProcess::registerBlobURL): 23 (WebKit::NetworkConnectionToWebProcess::registerBlobURLFromURL): 24 (WebKit::NetworkConnectionToWebProcess::registerBlobURLOptionallyFileBacked): 25 (WebKit::NetworkConnectionToWebProcess::registerBlobURLForSlice): 26 (WebKit::NetworkConnectionToWebProcess::unregisterBlobURL): 27 (WebKit::NetworkConnectionToWebProcess::blobSize): 28 (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles): 29 (WebKit::NetworkConnectionToWebProcess::filesInBlob): 30 * NetworkProcess/NetworkConnectionToWebProcess.h: 31 * NetworkProcess/NetworkConnectionToWebProcess.messages.in: 32 * NetworkProcess/NetworkProcess.cpp: 33 (WebKit::NetworkProcess::blobRegistry): 34 * NetworkProcess/NetworkProcess.h: 35 * NetworkProcess/NetworkProcessPlatformStrategies.cpp: 36 (WebKit::NetworkProcessPlatformStrategies::createBlobRegistry): 37 * NetworkProcess/NetworkResourceLoader.cpp: 38 (WebKit::NetworkResourceLoader::startNetworkLoad): 39 * NetworkProcess/NetworkSession.h: 40 (WebKit::NetworkSession::blobRegistry): 41 * NetworkProcess/soup/NetworkDataTaskSoup.cpp: 42 (WebKit::NetworkDataTaskSoup::createRequest): 43 * NetworkProcess/soup/NetworkSessionSoup.cpp: 44 (WebKit::NetworkSessionSoup::createWebSocketTask): 45 * Sources.txt: 46 * WebKit.xcodeproj/project.pbxproj: 47 * WebProcess/FileAPI/BlobRegistryProxy.cpp: 48 (WebKit::BlobRegistryProxy::registerFileBlobURL): 49 (WebKit::BlobRegistryProxy::registerBlobURL): 50 (WebKit::BlobRegistryProxy::registerBlobURLOptionallyFileBacked): 51 (WebKit::BlobRegistryProxy::unregisterBlobURL): 52 (WebKit::BlobRegistryProxy::registerBlobURLForSlice): 53 (WebKit::BlobRegistryProxy::writeBlobsToTemporaryFiles): 54 * WebProcess/FileAPI/BlobRegistryProxy.h: 55 * WebProcess/Network/NetworkProcessConnection.cpp: 56 (WebKit::NetworkProcessConnection::writeBlobsToTemporaryFiles): 57 * WebProcess/Network/NetworkProcessConnection.h: 58 1 59 2019-08-13 Youenn Fablet <youenn@apple.com> 2 60 -
trunk/Source/WebKit/NetworkProcess/Downloads/DownloadManager.cpp
r243110 r248593 28 28 29 29 #include "Download.h" 30 #include "NetworkBlobRegistry.h"31 30 #include "NetworkConnectionToWebProcess.h" 32 31 #include "NetworkLoad.h" … … 56 55 parameters.clientCredentialPolicy = ClientCredentialPolicy::MayAskClientForCredentials; 57 56 if (request.url().protocolIsBlob()) 58 parameters.blobFileReferences = client().network BlobRegistry().filesInBlob(request.url());57 parameters.blobFileReferences = client().networkSession(sessionID)->blobRegistry().filesInBlob(request.url()); 59 58 parameters.storedCredentialsPolicy = sessionID.isEphemeral() ? StoredCredentialsPolicy::DoNotUse : StoredCredentialsPolicy::Use; 60 59 61 m_pendingDownloads.add(downloadID, std::make_unique<PendingDownload>(m_client.parentProcessConnectionForDownloads(), WTFMove(parameters), downloadID, *networkSession, &client().network BlobRegistry().blobRegistry(), suggestedName));60 m_pendingDownloads.add(downloadID, std::make_unique<PendingDownload>(m_client.parentProcessConnectionForDownloads(), WTFMove(parameters), downloadID, *networkSession, &client().networkSession(sessionID)->blobRegistry(), suggestedName)); 62 61 } 63 62 -
trunk/Source/WebKit/NetworkProcess/Downloads/DownloadManager.h
r243110 r248593 56 56 class AuthenticationManager; 57 57 class Download; 58 class NetworkBlobRegistry;59 58 class NetworkConnectionToWebProcess; 60 59 class NetworkLoad; … … 76 75 virtual void pendingDownloadCanceled(DownloadID) = 0; 77 76 virtual NetworkSession* networkSession(const PAL::SessionID&) const = 0; 78 virtual NetworkBlobRegistry& networkBlobRegistry() = 0;79 77 virtual void ref() const = 0; 80 78 virtual void deref() const = 0; -
trunk/Source/WebKit/NetworkProcess/FileAPI/NetworkBlobRegistry.cpp
r241008 r248593 167 167 } 168 168 169 Vector<RefPtr<BlobDataFileReference>> NetworkBlobRegistry::filesInBlob(const URL& url)170 {171 ASSERT(m_blobRegistry.isBlobRegistryImpl());172 BlobData* blobData = m_blobRegistry.getBlobDataFromURL(url);173 if (!blobData)174 return { };175 176 Vector<RefPtr<BlobDataFileReference>> result;177 for (const BlobDataItem& item : blobData->items()) {178 if (item.type() == BlobDataItem::Type::File)179 result.append(item.file());180 }181 182 return result;183 169 } 184 185 } -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp
r247905 r248593 302 302 m_networkProcess->webProcessWasDisconnected(connection); 303 303 304 m_networkProcess->networkBlobRegistry().connectionToWebProcessDidClose(*this);305 304 m_networkProcess->removeNetworkConnectionToWebProcess(*this); 306 305 … … 375 374 Vector<RefPtr<WebCore::BlobDataFileReference>> NetworkConnectionToWebProcess::resolveBlobReferences(const NetworkResourceLoadParameters& parameters) 376 375 { 376 auto* session = networkProcess().networkSession(parameters.sessionID); 377 if (!session) 378 return { }; 379 380 auto& blobRegistry = session->blobRegistry(); 381 377 382 Vector<RefPtr<WebCore::BlobDataFileReference>> files; 378 383 if (auto* body = parameters.request.httpBody()) { 379 384 for (auto& element : body->elements()) { 380 385 if (auto* blobData = WTF::get_if<FormDataElement::EncodedBlobData>(element.data)) 381 files.appendVector( m_networkProcess->networkBlobRegistry().filesInBlob(*this,blobData->url));386 files.appendVector(blobRegistry.filesInBlob(blobData->url)); 382 387 } 383 const_cast<WebCore::ResourceRequest&>(parameters.request).setHTTPBody(body->resolveBlobReferences( m_networkProcess->networkBlobRegistry().blobRegistry()));388 const_cast<WebCore::ResourceRequest&>(parameters.request).setHTTPBody(body->resolveBlobReferences(&blobRegistry)); 384 389 } 385 390 … … 569 574 } 570 575 571 void NetworkConnectionToWebProcess::registerFileBlobURL(const URL& url, const String& path, SandboxExtension::Handle&& extensionHandle, const String& contentType) 572 { 573 m_networkProcess->networkBlobRegistry().registerFileBlobURL(*this, url, path, SandboxExtension::create(WTFMove(extensionHandle)), contentType); 574 } 575 576 void NetworkConnectionToWebProcess::registerBlobURL(const URL& url, Vector<BlobPart>&& blobParts, const String& contentType) 577 { 578 m_networkProcess->networkBlobRegistry().registerBlobURL(*this, url, WTFMove(blobParts), contentType); 579 } 580 581 void NetworkConnectionToWebProcess::registerBlobURLFromURL(const URL& url, const URL& srcURL, bool shouldBypassConnectionCheck) 582 { 583 m_networkProcess->networkBlobRegistry().registerBlobURL(*this, url, srcURL, shouldBypassConnectionCheck); 584 } 585 586 void NetworkConnectionToWebProcess::registerBlobURLOptionallyFileBacked(const URL& url, const URL& srcURL, const String& fileBackedPath, const String& contentType) 587 { 588 m_networkProcess->networkBlobRegistry().registerBlobURLOptionallyFileBacked(*this, url, srcURL, fileBackedPath, contentType); 589 } 590 591 void NetworkConnectionToWebProcess::registerBlobURLForSlice(const URL& url, const URL& srcURL, int64_t start, int64_t end) 592 { 593 m_networkProcess->networkBlobRegistry().registerBlobURLForSlice(*this, url, srcURL, start, end); 594 } 595 596 void NetworkConnectionToWebProcess::unregisterBlobURL(const URL& url) 597 { 598 m_networkProcess->networkBlobRegistry().unregisterBlobURL(*this, url); 576 void NetworkConnectionToWebProcess::registerFileBlobURL(PAL::SessionID sessionID, const URL& url, const String& path, SandboxExtension::Handle&& extensionHandle, const String& contentType) 577 { 578 auto* session = networkProcess().networkSession(sessionID); 579 if (!session) 580 return; 581 582 session->blobRegistry().registerFileBlobURL(url, BlobDataFileReferenceWithSandboxExtension::create(path, SandboxExtension::create(WTFMove(extensionHandle))), contentType); 583 } 584 585 void NetworkConnectionToWebProcess::registerBlobURL(PAL::SessionID sessionID, const URL& url, Vector<BlobPart>&& blobParts, const String& contentType) 586 { 587 auto* session = networkProcess().networkSession(sessionID); 588 if (!session) 589 return; 590 591 session->blobRegistry().registerBlobURL(url, WTFMove(blobParts), contentType); 592 } 593 594 void NetworkConnectionToWebProcess::registerBlobURLFromURL(PAL::SessionID sessionID, const URL& url, const URL& srcURL) 595 { 596 auto* session = networkProcess().networkSession(sessionID); 597 if (!session) 598 return; 599 600 session->blobRegistry().registerBlobURL(url, srcURL); 601 } 602 603 void NetworkConnectionToWebProcess::registerBlobURLOptionallyFileBacked(PAL::SessionID sessionID, const URL& url, const URL& srcURL, const String& fileBackedPath, const String& contentType) 604 { 605 auto* session = networkProcess().networkSession(sessionID); 606 if (!session) 607 return; 608 609 session->blobRegistry().registerBlobURLOptionallyFileBacked(url, srcURL, BlobDataFileReferenceWithSandboxExtension::create(fileBackedPath, nullptr), contentType); 610 } 611 612 void NetworkConnectionToWebProcess::registerBlobURLForSlice(PAL::SessionID sessionID, const URL& url, const URL& srcURL, int64_t start, int64_t end) 613 { 614 auto* session = networkProcess().networkSession(sessionID); 615 if (!session) 616 return; 617 618 session->blobRegistry().registerBlobURLForSlice(url, srcURL, start, end); 619 } 620 621 void NetworkConnectionToWebProcess::unregisterBlobURL(PAL::SessionID sessionID, const URL& url) 622 { 623 auto* session = networkProcess().networkSession(sessionID); 624 if (!session) 625 return; 626 627 session->blobRegistry().unregisterBlobURL(url); 599 628 } 600 629 601 630 void NetworkConnectionToWebProcess::blobSize(const URL& url, CompletionHandler<void(uint64_t)>&& completionHandler) 602 631 { 603 completionHandler(m_networkProcess->networkBlobRegistry().blobSize(*this, url)); 604 } 605 606 void NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles(const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&&)>&& completionHandler) 607 { 632 auto* blobRegistry = networkProcess().blobRegistry(*this); 633 if (!blobRegistry) 634 return; 635 636 completionHandler(blobRegistry->blobSize(url)); 637 } 638 639 void NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles(PAL::SessionID sessionID, const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&&)>&& completionHandler) 640 { 641 auto* session = networkProcess().networkSession(sessionID); 642 if (!session) 643 return; 644 608 645 Vector<RefPtr<BlobDataFileReference>> fileReferences; 609 646 for (auto& url : blobURLs) 610 fileReferences.appendVector( m_networkProcess->networkBlobRegistry().filesInBlob(*this,{ { }, url }));647 fileReferences.appendVector(session->blobRegistry().filesInBlob({ { }, url })); 611 648 612 649 for (auto& file : fileReferences) 613 650 file->prepareForFileAccess(); 614 651 615 m_networkProcess->networkBlobRegistry().writeBlobsToTemporaryFiles(blobURLs, [fileReferences = WTFMove(fileReferences), completionHandler = WTFMove(completionHandler)](auto&& fileNames) mutable {652 session->blobRegistry().writeBlobsToTemporaryFiles(blobURLs, [fileReferences = WTFMove(fileReferences), completionHandler = WTFMove(completionHandler)](auto&& fileNames) mutable { 616 653 for (auto& file : fileReferences) 617 654 file->revokeFileAccess(); 618 655 completionHandler(WTFMove(fileNames)); 619 656 }); 620 }621 622 Vector<RefPtr<WebCore::BlobDataFileReference>> NetworkConnectionToWebProcess::filesInBlob(const URL& url)623 {624 return m_networkProcess->networkBlobRegistry().filesInBlob(*this, url);625 }626 627 WebCore::BlobRegistryImpl& NetworkConnectionToWebProcess::blobRegistry()628 {629 return m_networkProcess->networkBlobRegistry().blobRegistry();630 657 } 631 658 -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h
r247822 r248593 139 139 void stopTrackingResourceLoad(ResourceLoadIdentifier resourceID, NetworkActivityTracker::CompletionCode); 140 140 141 WebCore::BlobRegistryImpl& blobRegistry();142 Vector<RefPtr<WebCore::BlobDataFileReference>> filesInBlob(const URL&);143 141 Vector<RefPtr<WebCore::BlobDataFileReference>> resolveBlobReferences(const NetworkResourceLoadParameters&); 144 142 … … 184 182 void deleteCookie(PAL::SessionID, const URL&, const String& cookieName); 185 183 186 void registerFileBlobURL( const URL&, const String& path, SandboxExtension::Handle&&, const String& contentType);187 void registerBlobURL( const URL&, Vector<WebCore::BlobPart>&&, const String& contentType);188 void registerBlobURLFromURL( const URL&, const URL& srcURL, bool shouldBypassConnectionCheck);189 void registerBlobURLOptionallyFileBacked( const URL&, const URL& srcURL, const String& fileBackedPath, const String& contentType);190 void registerBlobURLForSlice( const URL&, const URL& srcURL, int64_t start, int64_t end);184 void registerFileBlobURL(PAL::SessionID, const URL&, const String& path, SandboxExtension::Handle&&, const String& contentType); 185 void registerBlobURL(PAL::SessionID, const URL&, Vector<WebCore::BlobPart>&&, const String& contentType); 186 void registerBlobURLFromURL(PAL::SessionID, const URL&, const URL& srcURL); 187 void registerBlobURLOptionallyFileBacked(PAL::SessionID, const URL&, const URL& srcURL, const String& fileBackedPath, const String& contentType); 188 void registerBlobURLForSlice(PAL::SessionID, const URL&, const URL& srcURL, int64_t start, int64_t end); 191 189 void blobSize(const URL&, CompletionHandler<void(uint64_t)>&&); 192 void unregisterBlobURL( const URL&);193 void writeBlobsToTemporaryFiles( const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&&)>&&);190 void unregisterBlobURL(PAL::SessionID, const URL&); 191 void writeBlobsToTemporaryFiles(PAL::SessionID, const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&&)>&&); 194 192 195 193 void setCaptureExtraNetworkLoadMetricsEnabled(bool); -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in
r247822 r248593 42 42 DeleteCookie(PAL::SessionID sessionID, URL url, String cookieName) 43 43 44 RegisterFileBlobURL( URL url, String path, WebKit::SandboxExtension::Handle extensionHandle, String contentType)45 RegisterBlobURL( URL url, Vector<WebCore::BlobPart> blobParts, String contentType)46 RegisterBlobURLFromURL( URL url, URL srcURL, bool shouldBypassConnectionCheck)47 RegisterBlobURLOptionallyFileBacked( URL url, URL srcURL, String fileBackedPath, String contentType)48 RegisterBlobURLForSlice( URL url, URL srcURL, int64_t start, int64_t end)49 UnregisterBlobURL( URL url)44 RegisterFileBlobURL(PAL::SessionID sessionID, URL url, String path, WebKit::SandboxExtension::Handle extensionHandle, String contentType) 45 RegisterBlobURL(PAL::SessionID sessionID, URL url, Vector<WebCore::BlobPart> blobParts, String contentType) 46 RegisterBlobURLFromURL(PAL::SessionID sessionID, URL url, URL srcURL) 47 RegisterBlobURLOptionallyFileBacked(PAL::SessionID sessionID, URL url, URL srcURL, String fileBackedPath, String contentType) 48 RegisterBlobURLForSlice(PAL::SessionID sessionID, URL url, URL srcURL, int64_t start, int64_t end) 49 UnregisterBlobURL(PAL::SessionID sessionID, URL url) 50 50 BlobSize(URL url) -> (uint64_t resultSize) Synchronous 51 WriteBlobsToTemporaryFiles( Vector<String> blobURLs) -> (Vector<String> fileNames) Async51 WriteBlobsToTemporaryFiles(PAL::SessionID sessionID, Vector<String> blobURLs) -> (Vector<String> fileNames) Async 52 52 53 53 SetCaptureExtraNetworkLoadMetricsEnabled(bool enabled) -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp
r248526 r248593 613 613 } 614 614 615 BlobRegistryImpl* NetworkProcess::blobRegistry(NetworkConnectionToWebProcess& connection) 616 { 617 // FIXME: Deprecate this method and use sessionID -> NetworkSession -> blob registry. 618 auto* session = networkSessionByConnection(connection.connection()); 619 return session ? &session->blobRegistry() : nullptr; 620 } 621 615 622 #if ENABLE(RESOURCE_LOAD_STATISTICS) 616 623 void NetworkProcess::dumpResourceLoadStatistics(PAL::SessionID sessionID, CompletionHandler<void(String)>&& completionHandler) -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.h
r248526 r248593 30 30 #include "DownloadManager.h" 31 31 #include "LocalStorageDatabaseTracker.h" 32 #include "NetworkBlobRegistry.h"33 32 #include "NetworkContentRuleListManager.h" 34 33 #include "NetworkHTTPSUpgradeChecker.h" … … 328 327 void requestStorageSpace(PAL::SessionID, const WebCore::ClientOrigin&, uint64_t quota, uint64_t currentSize, uint64_t spaceRequired, CompletionHandler<void(Optional<uint64_t>)>&&); 329 328 330 NetworkBlobRegistry& networkBlobRegistry() override { return m_networkBlobRegistry; }329 WebCore::BlobRegistryImpl* blobRegistry(NetworkConnectionToWebProcess&); 331 330 332 331 void storeAdClickAttribution(PAL::SessionID, WebCore::AdClickAttribution&&); … … 499 498 HashMap<PAL::SessionID, std::unique_ptr<WebCore::NetworkStorageSession>> m_networkStorageSessions; 500 499 mutable std::unique_ptr<WebCore::NetworkStorageSession> m_defaultNetworkStorageSession; 501 NetworkBlobRegistry m_networkBlobRegistry;502 500 503 501 #if PLATFORM(COCOA) -
trunk/Source/WebKit/NetworkProcess/NetworkProcessPlatformStrategies.cpp
r241008 r248593 53 53 using namespace WebCore; 54 54 class EmptyBlobRegistry : public WebCore::BlobRegistry { 55 void registerFileBlobURL( const URL&, Ref<BlobDataFileReference>&&, const String& contentType) final { ASSERT_NOT_REACHED(); }56 void registerBlobURL( const URL&, Vector<BlobPart>&&, const String& contentType) final { ASSERT_NOT_REACHED(); }57 void registerBlobURL( const URL&, const URL& srcURL) final { ASSERT_NOT_REACHED(); }58 void registerBlobURLOptionallyFileBacked( const URL&, const URL& srcURL, RefPtr<BlobDataFileReference>&&, const String& contentType) final { ASSERT_NOT_REACHED(); }59 void registerBlobURLForSlice( const URL&, const URL& srcURL, long long start, long long end) final { ASSERT_NOT_REACHED(); }60 void unregisterBlobURL( const URL&) final { ASSERT_NOT_REACHED(); }55 void registerFileBlobURL(PAL::SessionID, const URL&, Ref<BlobDataFileReference>&&, const String& contentType) final { ASSERT_NOT_REACHED(); } 56 void registerBlobURL(PAL::SessionID, const URL&, Vector<BlobPart>&&, const String& contentType) final { ASSERT_NOT_REACHED(); } 57 void registerBlobURL(PAL::SessionID, const URL&, const URL& srcURL) final { ASSERT_NOT_REACHED(); } 58 void registerBlobURLOptionallyFileBacked(PAL::SessionID, const URL&, const URL& srcURL, RefPtr<BlobDataFileReference>&&, const String& contentType) final { ASSERT_NOT_REACHED(); } 59 void registerBlobURLForSlice(PAL::SessionID, const URL&, const URL& srcURL, long long start, long long end) final { ASSERT_NOT_REACHED(); } 60 void unregisterBlobURL(PAL::SessionID, const URL&) final { ASSERT_NOT_REACHED(); } 61 61 unsigned long long blobSize(const URL&) final { ASSERT_NOT_REACHED(); return 0; } 62 void writeBlobsToTemporaryFiles(const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&& filePaths)>&&) final { ASSERT_NOT_REACHED(); } 63 bool isBlobRegistryImpl() const { return false; } 62 void writeBlobsToTemporaryFiles(PAL::SessionID, const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&& filePaths)>&&) final { ASSERT_NOT_REACHED(); } 64 63 }; 65 64 static NeverDestroyed<EmptyBlobRegistry> blobRegistry; -
trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp
r248540 r248593 302 302 parameters.storedCredentialsPolicy = m_networkLoadChecker->storedCredentialsPolicy(); 303 303 304 if (request.url().protocolIsBlob())305 parameters.blobFileReferences = m_connection->filesInBlob(originalRequest().url());306 307 304 auto* networkSession = m_connection->networkProcess().networkSession(parameters.sessionID); 308 305 if (!networkSession && parameters.sessionID.isEphemeral()) { … … 318 315 } 319 316 317 if (request.url().protocolIsBlob()) 318 parameters.blobFileReferences = networkSession->blobRegistry().filesInBlob(originalRequest().url()); 319 320 320 parameters.request = WTFMove(request); 321 m_networkLoad = std::make_unique<NetworkLoad>(*this, & m_connection->blobRegistry(), WTFMove(parameters), *networkSession);321 m_networkLoad = std::make_unique<NetworkLoad>(*this, &networkSession->blobRegistry(), WTFMove(parameters), *networkSession); 322 322 323 323 RELEASE_LOG_IF_ALLOWED("startNetworkLoad: (pageID = %" PRIu64 ", frameID = %" PRIu64 ", resourceID = %" PRIu64 ", description = %{public}s)", m_parameters.webPageID.toUInt64(), m_parameters.webFrameID, m_parameters.identifier, m_networkLoad->description().utf8().data()); -
trunk/Source/WebKit/NetworkProcess/NetworkSession.h
r248144 r248593 30 30 #include "WebResourceLoadStatisticsStore.h" 31 31 #include <WebCore/AdClickAttribution.h> 32 #include <WebCore/BlobRegistryImpl.h> 32 33 #include <WebCore/RegistrableDomain.h> 33 34 #include <pal/SessionID.h> … … 115 116 virtual void addWebSocketTask(WebSocketTask&) { } 116 117 118 WebCore::BlobRegistryImpl& blobRegistry() { return m_blobRegistry; } 119 117 120 protected: 118 121 NetworkSession(NetworkProcess&, const NetworkSessionCreationParameters&); … … 144 147 #endif 145 148 RefPtr<NetworkCache::Cache> m_cache; 149 WebCore::BlobRegistryImpl m_blobRegistry; 146 150 }; 147 151 -
trunk/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp
r247856 r248593 135 135 unsigned messageFlags = SOUP_MESSAGE_NO_REDIRECT; 136 136 137 m_currentRequest.updateSoupMessage(soupMessage.get() );137 m_currentRequest.updateSoupMessage(soupMessage.get(), m_session->blobRegistry()); 138 138 if (m_shouldContentSniff == ContentSniffingPolicy::DoNotSniffContent) 139 139 soup_message_disable_feature(soupMessage.get(), SOUP_TYPE_CONTENT_SNIFFER); -
trunk/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.cpp
r248010 r248593 122 122 123 123 GRefPtr<SoupMessage> soupMessage = adoptGRef(soup_message_new_from_uri(SOUP_METHOD_GET, soupURI.get())); 124 request.updateSoupMessage(soupMessage.get() );124 request.updateSoupMessage(soupMessage.get(), blobRegistry()); 125 125 if (request.url().protocolIs("wss")) 126 126 g_signal_connect(soupMessage.get(), "network-event", G_CALLBACK(webSocketMessageNetworkEventCallback), nullptr); -
trunk/Source/WebKit/Sources.txt
r248422 r248593 57 57 NetworkProcess/Downloads/DownloadMonitor.cpp 58 58 NetworkProcess/Downloads/PendingDownload.cpp 59 60 NetworkProcess/FileAPI/NetworkBlobRegistry.cpp61 59 62 60 NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp -
trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj
r248592 r248593 1318 1318 A102A7081EC0EEE900D81D82 /* com.macromedia.Flash Player ESR.plugin.sb in Copy Plug-in Sandbox Profiles */ = {isa = PBXBuildFile; fileRef = 7A5E39491D5BD8A700B4B7CE /* com.macromedia.Flash Player ESR.plugin.sb */; }; 1319 1319 A1046EA12079263100F0C5D8 /* WKPDFView.h in Headers */ = {isa = PBXBuildFile; fileRef = A1046E9F2079263100F0C5D8 /* WKPDFView.h */; }; 1320 A105D0D1212734B20034F6C7 /* NetworkBlobRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = A105D0D0212734B10034F6C7 /* NetworkBlobRegistry.h */; };1321 1320 A115DC72191D82DA00DA8072 /* _WKWebViewPrintFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = A115DC6E191D82AB00DA8072 /* _WKWebViewPrintFormatter.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1322 1321 A118A9EF1907AD6F00F7C92B /* QuickLookDocumentData.h in Headers */ = {isa = PBXBuildFile; fileRef = A118A9ED1907AD6F00F7C92B /* QuickLookDocumentData.h */; }; … … 3988 3987 A1046E9F2079263100F0C5D8 /* WKPDFView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = WKPDFView.h; path = ios/WKPDFView.h; sourceTree = "<group>"; }; 3989 3988 A1046EA02079263100F0C5D8 /* WKPDFView.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = WKPDFView.mm; path = ios/WKPDFView.mm; sourceTree = "<group>"; }; 3990 A105D0D0212734B10034F6C7 /* NetworkBlobRegistry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkBlobRegistry.h; sourceTree = "<group>"; };3991 3989 A115DC6D191D82AB00DA8072 /* _WKWebViewPrintFormatter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKWebViewPrintFormatter.mm; sourceTree = "<group>"; }; 3992 3990 A115DC6E191D82AB00DA8072 /* _WKWebViewPrintFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKWebViewPrintFormatter.h; sourceTree = "<group>"; }; … … 4622 4620 E170876916D6CA6900F99226 /* BlobRegistryProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BlobRegistryProxy.cpp; path = WebProcess/FileAPI/BlobRegistryProxy.cpp; sourceTree = "<group>"; }; 4623 4621 E170876A16D6CA6900F99226 /* BlobRegistryProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BlobRegistryProxy.h; path = WebProcess/FileAPI/BlobRegistryProxy.h; sourceTree = "<group>"; }; 4624 E1798C7716E6818800240139 /* NetworkBlobRegistry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkBlobRegistry.cpp; sourceTree = "<group>"; };4625 4622 E17AE2C116B9C139001C42F1 /* com.apple.WebKit.NetworkProcess.sb.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = com.apple.WebKit.NetworkProcess.sb.in; sourceTree = "<group>"; }; 4626 4623 E17AE2C216B9C63A001C42F1 /* com.apple.WebKit.NetworkProcess.sb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = com.apple.WebKit.NetworkProcess.sb; path = DerivedSources/WebKit2/com.apple.WebKit.NetworkProcess.sb; sourceTree = BUILT_PRODUCTS_DIR; }; … … 6668 6665 5C1426F11C23F81700D41183 /* Downloads */, 6669 6666 BC82837C16B45DA500A278FE /* EntryPoint */, 6670 E1798C7616E6815500240139 /* FileAPI */,6671 6667 939288E021404DF000EBBA33 /* IndexedDB */, 6672 6668 2DA944BB188511DD00ED86DB /* ios */, … … 9026 9022 ); 9027 9023 name = FileAPI; 9028 sourceTree = "<group>";9029 };9030 E1798C7616E6815500240139 /* FileAPI */ = {9031 isa = PBXGroup;9032 children = (9033 E1798C7716E6818800240139 /* NetworkBlobRegistry.cpp */,9034 A105D0D0212734B10034F6C7 /* NetworkBlobRegistry.h */,9035 );9036 path = FileAPI;9037 9024 sourceTree = "<group>"; 9038 9025 }; … … 9484 9471 1AA5889211EE70400061B882 /* NetscapePluginStream.h in Headers */, 9485 9472 535BCB922069C49C00CCCE02 /* NetworkActivityTracker.h in Headers */, 9486 A105D0D1212734B20034F6C7 /* NetworkBlobRegistry.h in Headers */,9487 9473 E4436ECC1A0D040B00EAD204 /* NetworkCache.h in Headers */, 9488 9474 E49D40D71AD3FB170066B7B9 /* NetworkCacheBlobStorage.h in Headers */, -
trunk/Source/WebKit/WebProcess/FileAPI/BlobRegistryProxy.cpp
r238771 r248593 37 37 using namespace WebCore; 38 38 39 void BlobRegistryProxy::registerFileBlobURL( const URL& url, Ref<BlobDataFileReference>&& file, const String& contentType)39 void BlobRegistryProxy::registerFileBlobURL(PAL::SessionID sessionID, const URL& url, Ref<BlobDataFileReference>&& file, const String& contentType) 40 40 { 41 41 SandboxExtension::Handle extensionHandle; … … 45 45 SandboxExtension::createHandle(file->path(), SandboxExtension::Type::ReadOnly, extensionHandle); 46 46 47 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::RegisterFileBlobURL( url, file->path(), extensionHandle, contentType), 0);47 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::RegisterFileBlobURL(sessionID, url, file->path(), extensionHandle, contentType), 0); 48 48 } 49 49 50 void BlobRegistryProxy::registerBlobURL( const URL& url, Vector<BlobPart>&& blobParts, const String& contentType)50 void BlobRegistryProxy::registerBlobURL(PAL::SessionID sessionID, const URL& url, Vector<BlobPart>&& blobParts, const String& contentType) 51 51 { 52 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::RegisterBlobURL( url, blobParts, contentType), 0);52 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::RegisterBlobURL(sessionID, url, blobParts, contentType), 0); 53 53 } 54 54 55 void BlobRegistryProxy::registerBlobURL( const URL& url, const URL& srcURL)55 void BlobRegistryProxy::registerBlobURL(PAL::SessionID sessionID, const URL& url, const URL& srcURL) 56 56 { 57 bool shouldBypassConnectionCheck = false; 58 #if ENABLE(SERVICE_WORKER) 59 shouldBypassConnectionCheck = SWContextManager::singleton().connection(); 60 #endif 61 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::RegisterBlobURLFromURL { url, srcURL, shouldBypassConnectionCheck }, 0); 57 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::RegisterBlobURLFromURL { sessionID, url, srcURL }, 0); 62 58 } 63 59 64 void BlobRegistryProxy::registerBlobURLOptionallyFileBacked( const URL& url, const URL& srcURL, RefPtr<WebCore::BlobDataFileReference>&& file, const String& contentType)60 void BlobRegistryProxy::registerBlobURLOptionallyFileBacked(PAL::SessionID sessionID, const URL& url, const URL& srcURL, RefPtr<WebCore::BlobDataFileReference>&& file, const String& contentType) 65 61 { 66 62 ASSERT(file); 67 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::RegisterBlobURLOptionallyFileBacked( url, srcURL, file->path(), contentType), 0);63 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::RegisterBlobURLOptionallyFileBacked(sessionID, url, srcURL, file->path(), contentType), 0); 68 64 } 69 65 70 void BlobRegistryProxy::unregisterBlobURL( const URL& url)66 void BlobRegistryProxy::unregisterBlobURL(PAL::SessionID sessionID, const URL& url) 71 67 { 72 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::UnregisterBlobURL( url), 0);68 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::UnregisterBlobURL(sessionID, url), 0); 73 69 } 74 70 75 void BlobRegistryProxy::registerBlobURLForSlice( const URL& url, const URL& srcURL, long long start, long long end)71 void BlobRegistryProxy::registerBlobURLForSlice(PAL::SessionID sessionID, const URL& url, const URL& srcURL, long long start, long long end) 76 72 { 77 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::RegisterBlobURLForSlice( url, srcURL, start, end), 0);73 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::RegisterBlobURLForSlice(sessionID, url, srcURL, start, end), 0); 78 74 } 79 75 … … 86 82 } 87 83 88 void BlobRegistryProxy::writeBlobsToTemporaryFiles( const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&& filePaths)>&& completionHandler)84 void BlobRegistryProxy::writeBlobsToTemporaryFiles(PAL::SessionID sessionID, const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&& filePaths)>&& completionHandler) 89 85 { 90 WebProcess::singleton().ensureNetworkProcessConnection().writeBlobsToTemporaryFiles( blobURLs, WTFMove(completionHandler));86 WebProcess::singleton().ensureNetworkProcessConnection().writeBlobsToTemporaryFiles(sessionID, blobURLs, WTFMove(completionHandler)); 91 87 } 92 88 -
trunk/Source/WebKit/WebProcess/FileAPI/BlobRegistryProxy.h
r238771 r248593 32 32 class BlobRegistryProxy final : public WebCore::BlobRegistry { 33 33 public: 34 void registerFileBlobURL( const URL&, Ref<WebCore::BlobDataFileReference>&&, const String& contentType) override;35 void registerBlobURL( const URL&, Vector<WebCore::BlobPart>&&, const String& contentType) override;36 void registerBlobURL( const URL&, const URL& srcURL) override;37 void registerBlobURLOptionallyFileBacked( const URL&, const URL& srcURL, RefPtr<WebCore::BlobDataFileReference>&&, const String& contentType) override;38 void unregisterBlobURL( const URL&) override;39 void registerBlobURLForSlice( const URL&, const URL& srcURL, long long start, long long end) override;40 unsigned long long blobSize(const URL&) override;41 void writeBlobsToTemporaryFiles( const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&& filePaths)>&&) override;34 void registerFileBlobURL(PAL::SessionID, const URL&, Ref<WebCore::BlobDataFileReference>&&, const String& contentType) final; 35 void registerBlobURL(PAL::SessionID, const URL&, Vector<WebCore::BlobPart>&&, const String& contentType) final; 36 void registerBlobURL(PAL::SessionID, const URL&, const URL& srcURL) final; 37 void registerBlobURLOptionallyFileBacked(PAL::SessionID, const URL&, const URL& srcURL, RefPtr<WebCore::BlobDataFileReference>&&, const String& contentType) final; 38 void unregisterBlobURL(PAL::SessionID, const URL&) final; 39 void registerBlobURLForSlice(PAL::SessionID, const URL&, const URL& srcURL, long long start, long long end) final; 40 unsigned long long blobSize(const URL&) final; 41 void writeBlobsToTemporaryFiles(PAL::SessionID, const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&& filePaths)>&&) final; 42 42 }; 43 43 -
trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp
r246939 r248593 212 212 } 213 213 214 void NetworkProcessConnection::writeBlobsToTemporaryFiles( const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&& filePaths)>&& completionHandler)215 { 216 WebProcess::singleton().ensureNetworkProcessConnection().connection().sendWithAsyncReply(Messages::NetworkConnectionToWebProcess::WriteBlobsToTemporaryFiles( blobURLs), WTFMove(completionHandler));214 void NetworkProcessConnection::writeBlobsToTemporaryFiles(PAL::SessionID sessionID, const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&& filePaths)>&& completionHandler) 215 { 216 WebProcess::singleton().ensureNetworkProcessConnection().connection().sendWithAsyncReply(Messages::NetworkConnectionToWebProcess::WriteBlobsToTemporaryFiles(sessionID, blobURLs), WTFMove(completionHandler)); 217 217 } 218 218 -
trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.h
r245913 r248593 66 66 void didReceiveNetworkProcessConnectionMessage(IPC::Connection&, IPC::Decoder&); 67 67 68 void writeBlobsToTemporaryFiles( const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&& filePaths)>&&);68 void writeBlobsToTemporaryFiles(PAL::SessionID, const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&& filePaths)>&&); 69 69 70 70 #if ENABLE(INDEXED_DATABASE) -
trunk/Source/WebKitLegacy/mac/ChangeLog
r248533 r248593 1 2019-08-13 Youenn Fablet <youenn@apple.com> 2 3 Blob registries should be keyed by session IDs 4 https://bugs.webkit.org/show_bug.cgi?id=200567 5 6 Reviewed by Alex Christensen. 7 8 * WebCoreSupport/WebPlatformStrategies.mm: 9 (WebPlatformStrategies::createBlobRegistry): 10 Ignore sessionID parameter for WK1. 11 1 12 2019-08-12 Chris Dumez <cdumez@apple.com> 2 13 -
trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebPlatformStrategies.mm
r241749 r248593 63 63 } 64 64 65 class WebBlobRegistry final : public BlobRegistry { 66 private: 67 void registerFileBlobURL(PAL::SessionID, const URL& url, Ref<BlobDataFileReference>&& reference, const String& contentType) final { m_blobRegistry.registerFileBlobURL(url, WTFMove(reference), contentType); } 68 void registerBlobURL(PAL::SessionID, const URL& url, Vector<BlobPart>&& parts, const String& contentType) final { m_blobRegistry.registerBlobURL(url, WTFMove(parts), contentType); } 69 void registerBlobURL(PAL::SessionID, const URL& url, const URL& srcURL) final { m_blobRegistry.registerBlobURL(url, srcURL); } 70 void registerBlobURLOptionallyFileBacked(PAL::SessionID, const URL& url, const URL& srcURL, RefPtr<BlobDataFileReference>&& reference, const String& contentType) final { m_blobRegistry.registerBlobURLOptionallyFileBacked(url, srcURL, WTFMove(reference), contentType); } 71 void registerBlobURLForSlice(PAL::SessionID, const URL& url, const URL& srcURL, long long start, long long end) final { m_blobRegistry.registerBlobURLForSlice(url, srcURL, start, end); } 72 void unregisterBlobURL(PAL::SessionID, const URL& url) final { m_blobRegistry.unregisterBlobURL(url); } 73 unsigned long long blobSize(const URL& url) final { return m_blobRegistry.blobSize(url); } 74 void writeBlobsToTemporaryFiles(PAL::SessionID, const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&& filePaths)>&& completionHandler) final { m_blobRegistry.writeBlobsToTemporaryFiles(blobURLs, WTFMove(completionHandler)); } 75 76 BlobRegistryImpl* blobRegistryImpl() final { return &m_blobRegistry; } 77 78 BlobRegistryImpl m_blobRegistry; 79 }; 80 65 81 BlobRegistry* WebPlatformStrategies::createBlobRegistry() 66 82 { 67 return new Web Core::BlobRegistryImpl;83 return new WebBlobRegistry; 68 84 } 69 85 -
trunk/Source/WebKitLegacy/win/ChangeLog
r248526 r248593 1 2019-08-13 Youenn Fablet <youenn@apple.com> 2 3 Blob registries should be keyed by session IDs 4 https://bugs.webkit.org/show_bug.cgi?id=200567 5 <rdar://problem/54120212> 6 7 Reviewed by Alex Christensen. 8 9 * WebCoreSupport/WebPlatformStrategies.cpp: 10 (WebPlatformStrategies::createBlobRegistry): 11 1 12 2019-08-12 Youenn Fablet <youenn@apple.com> 2 13 -
trunk/Source/WebKitLegacy/win/WebCoreSupport/WebPlatformStrategies.cpp
r240014 r248593 28 28 #include "WebFrameNetworkingContext.h" 29 29 #include "WebResourceLoadScheduler.h" 30 #include <WebCore/BlobRegistry.h> 30 31 #include <WebCore/BlobRegistryImpl.h> 31 32 #include <WebCore/FrameLoader.h> … … 60 61 } 61 62 63 class WebBlobRegistry final : public BlobRegistry { 64 private: 65 void registerFileBlobURL(PAL::SessionID, const URL& url, Ref<BlobDataFileReference>&& reference, const String& contentType) final { m_blobRegistry.registerFileBlobURL(url, WTFMove(reference), contentType); } 66 void registerBlobURL(PAL::SessionID, const URL& url, Vector<BlobPart>&& parts, const String& contentType) final { m_blobRegistry.registerBlobURL(url, WTFMove(parts), contentType); } 67 void registerBlobURL(PAL::SessionID, const URL& url, const URL& srcURL) final { m_blobRegistry.registerBlobURL(url, srcURL); } 68 void registerBlobURLOptionallyFileBacked(PAL::SessionID, const URL& url, const URL& srcURL, RefPtr<BlobDataFileReference>&& reference, const String& contentType) final { m_blobRegistry.registerBlobURLOptionallyFileBacked(url, srcURL, WTFMove(reference), contentType); } 69 void registerBlobURLForSlice(PAL::SessionID, const URL& url, const URL& srcURL, long long start, long long end) final { m_blobRegistry.registerBlobURLForSlice(url, srcURL, start, end); } 70 void unregisterBlobURL(PAL::SessionID, const URL& url) final { m_blobRegistry.unregisterBlobURL(url); } 71 unsigned long long blobSize(const URL& url) final { return m_blobRegistry.blobSize(url); } 72 void writeBlobsToTemporaryFiles(PAL::SessionID, const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&& filePaths)>&& completionHandler) final { m_blobRegistry.writeBlobsToTemporaryFiles(blobURLs, WTFMove(completionHandler)); } 73 74 BlobRegistryImpl* blobRegistryImpl() final { return &m_blobRegistry; } 75 76 BlobRegistryImpl m_blobRegistry; 77 }; 78 62 79 BlobRegistry* WebPlatformStrategies::createBlobRegistry() 63 80 { 64 return new BlobRegistryImpl;81 return new WebBlobRegistry; 65 82 }
Note: See TracChangeset
for help on using the changeset viewer.