Changeset 241005 in webkit


Ignore:
Timestamp:
Feb 5, 2019 5:02:44 PM (5 years ago)
Author:
Truitt Savell
Message:

Unreviewed, rolling out r240984.

Revision casued two API timeouts

Reverted changeset:

"Stop using blobRegistry in NetworkProcess"
https://bugs.webkit.org/show_bug.cgi?id=194027
https://trac.webkit.org/changeset/240984

Location:
trunk/Source
Files:
27 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r240994 r241005  
     12019-02-05  Truitt Savell  <tsavell@apple.com>
     2
     3        Unreviewed, rolling out r240984.
     4
     5        Revision casued two API timeouts
     6
     7        Reverted changeset:
     8
     9        "Stop using blobRegistry in NetworkProcess"
     10        https://bugs.webkit.org/show_bug.cgi?id=194027
     11        https://trac.webkit.org/changeset/240984
     12
    1132019-02-05  Keith Rollin  <krollin@apple.com>
    214
  • trunk/Source/WebCore/platform/network/BlobRegistryImpl.h

    r240984 r241005  
    5757    void writeBlobToFilePath(const URL& blobURL, const String& path, Function<void(bool success)>&& completionHandler);
    5858
     59private:
    5960    void appendStorageItems(BlobData*, const BlobDataItemList&, long long offset, long long length);
    6061
     
    7879    bool populateBlobsForFileWriting(const Vector<String>& blobURLs, Vector<BlobForFileWriting>&);
    7980
    80 private:
    8181    HashMap<String, RefPtr<BlobData>> m_blobs;
    8282};
  • trunk/Source/WebCore/platform/network/FormData.cpp

    r240984 r241005  
    312312}
    313313
    314 static void appendBlobResolved(BlobRegistry& blobRegistry, FormData& formData, const URL& url)
    315 {
    316     if (!blobRegistry.isBlobRegistryImpl()) {
     314static void appendBlobResolved(FormData* formData, const URL& url)
     315{
     316    if (!blobRegistry().isBlobRegistryImpl()) {
    317317        LOG_ERROR("Tried to resolve a blob without a usable registry");
    318318        return;
    319319    }
    320320
    321     auto* blobData = static_cast<BlobRegistryImpl&>(blobRegistry).getBlobDataFromURL(url);
     321    BlobData* blobData = static_cast<BlobRegistryImpl&>(blobRegistry()).getBlobDataFromURL(url);
    322322    if (!blobData) {
    323323        LOG_ERROR("Could not get blob data from a registry");
     
    328328        if (blobItem.type() == BlobDataItem::Type::Data) {
    329329            ASSERT(blobItem.data().data());
    330             formData.appendData(blobItem.data().data()->data() + static_cast<int>(blobItem.offset()), static_cast<int>(blobItem.length()));
     330            formData->appendData(blobItem.data().data()->data() + static_cast<int>(blobItem.offset()), static_cast<int>(blobItem.length()));
    331331        } else if (blobItem.type() == BlobDataItem::Type::File)
    332             formData.appendFileRange(blobItem.file()->path(), blobItem.offset(), blobItem.length(), blobItem.file()->expectedModificationTime());
     332            formData->appendFileRange(blobItem.file()->path(), blobItem.offset(), blobItem.length(), blobItem.file()->expectedModificationTime());
    333333        else
    334334            ASSERT_NOT_REACHED();
     
    336336}
    337337
    338 Ref<FormData> FormData::resolveBlobReferences(BlobRegistry& blobRegistry)
     338Ref<FormData> FormData::resolveBlobReferences()
    339339{
    340340    // First check if any blobs needs to be resolved, or we can take the fast path.
     
    362362                newFormData->appendFileRange(fileData.filename, fileData.fileStart, fileData.fileLength, fileData.expectedFileModificationTime, fileData.shouldGenerateFile);
    363363            }, [&] (const FormDataElement::EncodedBlobData& blobData) {
    364                 appendBlobResolved(blobRegistry, newFormData.get(), blobData.url);
     364                appendBlobResolved(newFormData.ptr(), blobData.url);
    365365            }
    366366        );
  • trunk/Source/WebCore/platform/network/FormData.h

    r240984 r241005  
    3030namespace WebCore {
    3131
    32 class BlobRegistry;
    3332class DOMFormData;
    3433class Document;
     
    228227    // Resolve all blob references so we only have file and data.
    229228    // If the FormData has no blob references to resolve, this is returned.
    230     WEBCORE_EXPORT Ref<FormData> resolveBlobReferences(BlobRegistry&);
     229    Ref<FormData> resolveBlobReferences();
    231230
    232231    bool isEmpty() const { return m_elements.isEmpty(); }
  • trunk/Source/WebCore/platform/network/cf/FormDataStreamCFNet.cpp

    r240984 r241005  
    3131
    3232#include "BlobData.h"
    33 #include "BlobRegistry.h"
    3433#include "FormData.h"
    3534#include <sys/stat.h>
     
    374373RetainPtr<CFReadStreamRef> createHTTPBodyCFReadStream(FormData& formData)
    375374{
    376     auto resolvedFormData = formData.resolveBlobReferences(blobRegistry());
     375    auto resolvedFormData = formData.resolveBlobReferences();
    377376
    378377    // Precompute the content length so CFNetwork doesn't use chunked mode.
  • trunk/Source/WebCore/platform/network/curl/CurlFormDataStream.cpp

    r240984 r241005  
    3535#if USE(CURL)
    3636
    37 #include "BlobRegistry.h"
    3837#include "CurlContext.h"
    3938#include "Logging.h"
     
    5251
    5352    // Resolve the blob elements so the formData can correctly report it's size.
    54     m_formData = m_formData->resolveBlobReferences(blobRegistry());
     53    m_formData = m_formData->resolveBlobReferences();
    5554}
    5655
  • trunk/Source/WebKit/ChangeLog

    r241002 r241005  
     12019-02-05  Truitt Savell  <tsavell@apple.com>
     2
     3        Unreviewed, rolling out r240984.
     4
     5        Revision casued two API timeouts
     6
     7        Reverted changeset:
     8
     9        "Stop using blobRegistry in NetworkProcess"
     10        https://bugs.webkit.org/show_bug.cgi?id=194027
     11        https://trac.webkit.org/changeset/240984
     12
    1132019-02-05  Youenn Fablet  <youenn@apple.com>
    214
  • trunk/Source/WebKit/NetworkProcess/Downloads/DownloadManager.cpp

    r240990 r241005  
    2828
    2929#include "Download.h"
    30 #include "NetworkConnectionToWebProcess.h"
     30#include "NetworkBlobRegistry.h"
    3131#include "NetworkLoad.h"
    3232#include "NetworkSession.h"
     
    5555    parameters.clientCredentialPolicy = ClientCredentialPolicy::MayAskClientForCredentials;
    5656    if (request.url().protocolIsBlob() && connection)
    57         parameters.blobFileReferences = connection->filesInBlob(request.url());
     57        parameters.blobFileReferences = NetworkBlobRegistry::singleton().filesInBlob(*connection, request.url());
    5858    parameters.storedCredentialsPolicy = sessionID.isEphemeral() ? StoredCredentialsPolicy::DoNotUse : StoredCredentialsPolicy::Use;
    5959
    60     m_pendingDownloads.add(downloadID, std::make_unique<PendingDownload>(m_client.parentProcessConnectionForDownloads(), WTFMove(parameters), downloadID, *networkSession, connection ? &connection->blobRegistry() : nullptr, suggestedName));
     60    m_pendingDownloads.add(downloadID, std::make_unique<PendingDownload>(m_client.parentProcessConnectionForDownloads(), WTFMove(parameters), downloadID, *networkSession, suggestedName));
    6161}
    6262
  • trunk/Source/WebKit/NetworkProcess/Downloads/PendingDownload.cpp

    r240984 r241005  
    3737using namespace WebCore;
    3838
    39 PendingDownload::PendingDownload(IPC::Connection* parentProcessConnection, NetworkLoadParameters&& parameters, DownloadID downloadID, NetworkSession& networkSession, WebCore::BlobRegistryImpl* blobRegistry, const String& suggestedName)
    40     : m_networkLoad(std::make_unique<NetworkLoad>(*this, blobRegistry, WTFMove(parameters), networkSession))
     39PendingDownload::PendingDownload(IPC::Connection* parentProcessConnection, NetworkLoadParameters&& parameters, DownloadID downloadID, NetworkSession& networkSession, const String& suggestedName)
     40    : m_networkLoad(std::make_unique<NetworkLoad>(*this, WTFMove(parameters), networkSession))
    4141    , m_parentProcessConnection(parentProcessConnection)
    4242{
  • trunk/Source/WebKit/NetworkProcess/Downloads/PendingDownload.h

    r240984 r241005  
    3535
    3636namespace WebCore {
    37 class BlobRegistryImpl;
    3837class ResourceResponse;
    3938}
     
    5049    WTF_MAKE_FAST_ALLOCATED;
    5150public:
    52     PendingDownload(IPC::Connection*, NetworkLoadParameters&&, DownloadID, NetworkSession&, WebCore::BlobRegistryImpl*, const String& suggestedName);
     51    PendingDownload(IPC::Connection*, NetworkLoadParameters&&, DownloadID, NetworkSession&, const String& suggestedName);
    5352    PendingDownload(IPC::Connection*, std::unique_ptr<NetworkLoad>&&, ResponseCompletionHandler&&, DownloadID, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
    5453
  • trunk/Source/WebKit/NetworkProcess/FileAPI/NetworkBlobRegistry.cpp

    r240984 r241005  
    3838using namespace WebCore;
    3939
    40 NetworkBlobRegistry::NetworkBlobRegistry() = default;
    41 NetworkBlobRegistry::~NetworkBlobRegistry() = default;
     40NetworkBlobRegistry& NetworkBlobRegistry::singleton()
     41{
     42    ASSERT(RunLoop::isMain());
     43    static NeverDestroyed<NetworkBlobRegistry> registry;
     44    return registry;
     45}
     46
     47NetworkBlobRegistry::NetworkBlobRegistry()
     48{
     49}
    4250
    4351void NetworkBlobRegistry::registerFileBlobURL(NetworkConnectionToWebProcess& connection, const URL& url, const String& path, RefPtr<SandboxExtension>&& sandboxExtension, const String& contentType)
    4452{
    45     m_blobRegistry.registerFileBlobURL(url, BlobDataFileReferenceWithSandboxExtension::create(path, WTFMove(sandboxExtension)), contentType);
     53    blobRegistry().registerFileBlobURL(url, BlobDataFileReferenceWithSandboxExtension::create(path, WTFMove(sandboxExtension)), contentType);
    4654
    4755    ASSERT(!m_blobsForConnection.get(&connection).contains(url));
     
    5462void NetworkBlobRegistry::registerBlobURL(NetworkConnectionToWebProcess& connection, const URL& url, Vector<WebCore::BlobPart>&& blobParts, const String& contentType)
    5563{
    56     m_blobRegistry.registerBlobURL(url, WTFMove(blobParts), contentType);
     64    blobRegistry().registerBlobURL(url, WTFMove(blobParts), contentType);
    5765
    5866    ASSERT(!m_blobsForConnection.get(&connection).contains(url));
     
    7381    }
    7482
    75     m_blobRegistry.registerBlobURL(url, srcURL);
     83    blobRegistry().registerBlobURL(url, srcURL);
    7684
    7785    ASSERT(shouldBypassConnectionCheck || mapIterator->value.contains(srcURL));
     
    8189void NetworkBlobRegistry::registerBlobURLOptionallyFileBacked(NetworkConnectionToWebProcess& connection, const URL& url, const URL& srcURL, const String& fileBackedPath, const String& contentType)
    8290{
    83     m_blobRegistry.registerBlobURLOptionallyFileBacked(url, srcURL, BlobDataFileReferenceWithSandboxExtension::create(fileBackedPath, nullptr), contentType);
     91    blobRegistry().registerBlobURLOptionallyFileBacked(url, srcURL, BlobDataFileReferenceWithSandboxExtension::create(fileBackedPath, nullptr), contentType);
    8492
    8593    ASSERT(!m_blobsForConnection.get(&connection).contains(url));
     
    97105        return;
    98106
    99     m_blobRegistry.registerBlobURLForSlice(url, srcURL, start, end);
     107    blobRegistry().registerBlobURLForSlice(url, srcURL, start, end);
    100108
    101109    ASSERT(mapIterator->value.contains(srcURL));
     
    110118        return;
    111119
    112     m_blobRegistry.unregisterBlobURL(url);
     120    blobRegistry().unregisterBlobURL(url);
    113121
    114122    mapIterator->value.remove(url);
     
    120128        return 0;
    121129
    122     return m_blobRegistry.blobSize(url);
     130    return blobRegistry().blobSize(url);
    123131}
    124132
    125133void NetworkBlobRegistry::writeBlobsToTemporaryFiles(const Vector<String>& blobURLs, CompletionHandler<void(Vector<String>&&)>&& completionHandler)
    126134{
    127     m_blobRegistry.writeBlobsToTemporaryFiles(blobURLs, WTFMove(completionHandler));
     135    blobRegistry().writeBlobsToTemporaryFiles(blobURLs, WTFMove(completionHandler));
    128136}
    129137
    130138void NetworkBlobRegistry::writeBlobToFilePath(const URL& blobURL, const String& path, CompletionHandler<void(bool success)>&& completionHandler)
    131139{
    132     if (!m_blobRegistry.isBlobRegistryImpl()) {
     140    if (!blobRegistry().isBlobRegistryImpl()) {
    133141        completionHandler(false);
    134142        ASSERT_NOT_REACHED();
     
    140148        file->prepareForFileAccess();
    141149
    142     m_blobRegistry.writeBlobToFilePath(blobURL, path, [blobFiles = WTFMove(blobFiles), completionHandler = WTFMove(completionHandler)] (bool success) mutable {
     150    static_cast<BlobRegistryImpl&>(blobRegistry()).writeBlobToFilePath(blobURL, path, [blobFiles = WTFMove(blobFiles), completionHandler = WTFMove(completionHandler)] (bool success) mutable {
    143151        for (auto& file : blobFiles)
    144152            file->revokeFileAccess();
     
    154162    HashSet<URL>& blobsForConnection = m_blobsForConnection.find(&connection)->value;
    155163    for (HashSet<URL>::iterator iter = blobsForConnection.begin(), end = blobsForConnection.end(); iter != end; ++iter)
    156         m_blobRegistry.unregisterBlobURL(*iter);
     164        blobRegistry().unregisterBlobURL(*iter);
    157165
    158166    m_blobsForConnection.remove(&connection);
     
    169177Vector<RefPtr<BlobDataFileReference>> NetworkBlobRegistry::filesInBlob(const URL& url)
    170178{
    171     ASSERT(m_blobRegistry.isBlobRegistryImpl());
    172     BlobData* blobData = m_blobRegistry.getBlobDataFromURL(url);
     179    ASSERT(blobRegistry().isBlobRegistryImpl());
     180    BlobData* blobData = static_cast<BlobRegistryImpl&>(blobRegistry()).getBlobDataFromURL(url);
    173181    if (!blobData)
    174182        return { };
  • trunk/Source/WebKit/NetworkProcess/FileAPI/NetworkBlobRegistry.h

    r240984 r241005  
    2626#pragma once
    2727
    28 #include <WebCore/BlobRegistryImpl.h>
    2928#include <wtf/Function.h>
    3029#include <wtf/HashMap.h>
     
    4645public:
    4746    NetworkBlobRegistry();
    48     ~NetworkBlobRegistry();
     47    static NetworkBlobRegistry& singleton();
    4948
    5049    void registerFileBlobURL(NetworkConnectionToWebProcess&, const URL&, const String& path, RefPtr<SandboxExtension>&&, const String& contentType);
     
    6261    Vector<RefPtr<WebCore::BlobDataFileReference>> filesInBlob(NetworkConnectionToWebProcess&, const URL&);
    6362    Vector<RefPtr<WebCore::BlobDataFileReference>> filesInBlob(const URL&);
    64    
    65     WebCore::BlobRegistryImpl& blobRegistry() { return m_blobRegistry; }
    6663
    6764private:
     65    ~NetworkBlobRegistry();
     66
    6867    typedef HashMap<NetworkConnectionToWebProcess*, HashSet<URL>> BlobForConnectionMap;
    6968    BlobForConnectionMap m_blobsForConnection;
    70     WebCore::BlobRegistryImpl m_blobRegistry;
    7169};
    7270
  • trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp

    r240984 r241005  
    2727#include "NetworkConnectionToWebProcess.h"
    2828
    29 #include "BlobDataFileReferenceWithSandboxExtension.h"
    3029#include "CacheStorageEngineConnectionMessages.h"
    3130#include "DataReference.h"
     31#include "NetworkBlobRegistry.h"
    3232#include "NetworkCache.h"
    3333#include "NetworkMDNSRegisterMessages.h"
     
    250250    stopAllNetworkActivityTracking();
    251251
    252     m_networkProcess->networkBlobRegistry().connectionToWebProcessDidClose(*this);
     252    NetworkBlobRegistry::singleton().connectionToWebProcessDidClose(*this);
    253253    m_networkProcess->removeNetworkConnectionToWebProcess(*this);
    254254
     
    312312}
    313313
    314 Vector<RefPtr<WebCore::BlobDataFileReference>> NetworkConnectionToWebProcess::resolveBlobReferences(const NetworkResourceLoadParameters& parameters)
    315 {
    316     Vector<RefPtr<WebCore::BlobDataFileReference>> files;
    317     if (auto* body = parameters.request.httpBody()) {
    318         for (auto& element : body->elements()) {
    319             if (auto* blobData = WTF::get_if<FormDataElement::EncodedBlobData>(element.data))
    320                 files.appendVector(m_networkProcess->networkBlobRegistry().filesInBlob(*this, blobData->url));
    321         }
    322         const_cast<WebCore::ResourceRequest&>(parameters.request).setHTTPBody(body->resolveBlobReferences(m_networkProcess->networkBlobRegistry().blobRegistry()));
    323     }
    324 
    325     return files;
    326 }
    327 
    328314void NetworkConnectionToWebProcess::scheduleResourceLoad(NetworkResourceLoadParameters&& loadParameters)
    329315{
     
    357343
    358344    // PingLoad manages its own lifetime, deleting itself when its purpose has been fulfilled.
    359     new PingLoad(*this, networkProcess(), WTFMove(loadParameters), WTFMove(completionHandler));
     345    new PingLoad(networkProcess(), WTFMove(loadParameters), WTFMove(completionHandler));
    360346}
    361347
     
    406392void NetworkConnectionToWebProcess::preconnectTo(uint64_t preconnectionIdentifier, NetworkResourceLoadParameters&& parameters)
    407393{
    408     ASSERT(!parameters.request.httpBody());
    409    
    410394#if ENABLE(SERVER_PRECONNECT)
    411395    new PreconnectTask(networkProcess(), WTFMove(parameters), [this, protectedThis = makeRef(*this), identifier = preconnectionIdentifier] (const ResourceError& error) {
     
    510494void NetworkConnectionToWebProcess::registerFileBlobURL(const URL& url, const String& path, SandboxExtension::Handle&& extensionHandle, const String& contentType)
    511495{
    512     m_networkProcess->networkBlobRegistry().registerFileBlobURL(*this, url, path, SandboxExtension::create(WTFMove(extensionHandle)), contentType);
     496    RefPtr<SandboxExtension> extension = SandboxExtension::create(WTFMove(extensionHandle));
     497
     498    NetworkBlobRegistry::singleton().registerFileBlobURL(*this, url, path, WTFMove(extension), contentType);
    513499}
    514500
    515501void NetworkConnectionToWebProcess::registerBlobURL(const URL& url, Vector<BlobPart>&& blobParts, const String& contentType)
    516502{
    517     m_networkProcess->networkBlobRegistry().registerBlobURL(*this, url, WTFMove(blobParts), contentType);
     503    NetworkBlobRegistry::singleton().registerBlobURL(*this, url, WTFMove(blobParts), contentType);
    518504}
    519505
    520506void NetworkConnectionToWebProcess::registerBlobURLFromURL(const URL& url, const URL& srcURL, bool shouldBypassConnectionCheck)
    521507{
    522     m_networkProcess->networkBlobRegistry().registerBlobURL(*this, url, srcURL, shouldBypassConnectionCheck);
     508    NetworkBlobRegistry::singleton().registerBlobURL(*this, url, srcURL, shouldBypassConnectionCheck);
    523509}
    524510
    525511void NetworkConnectionToWebProcess::registerBlobURLOptionallyFileBacked(const URL& url, const URL& srcURL, const String& fileBackedPath, const String& contentType)
    526512{
    527     m_networkProcess->networkBlobRegistry().registerBlobURLOptionallyFileBacked(*this, url, srcURL, fileBackedPath, contentType);
     513    NetworkBlobRegistry::singleton().registerBlobURLOptionallyFileBacked(*this, url, srcURL, fileBackedPath, contentType);
    528514}
    529515
    530516void NetworkConnectionToWebProcess::registerBlobURLForSlice(const URL& url, const URL& srcURL, int64_t start, int64_t end)
    531517{
    532     m_networkProcess->networkBlobRegistry().registerBlobURLForSlice(*this, url, srcURL, start, end);
     518    NetworkBlobRegistry::singleton().registerBlobURLForSlice(*this, url, srcURL, start, end);
    533519}
    534520
    535521void NetworkConnectionToWebProcess::unregisterBlobURL(const URL& url)
    536522{
    537     m_networkProcess->networkBlobRegistry().unregisterBlobURL(*this, url);
     523    NetworkBlobRegistry::singleton().unregisterBlobURL(*this, url);
    538524}
    539525
    540526void NetworkConnectionToWebProcess::blobSize(const URL& url, uint64_t& resultSize)
    541527{
    542     resultSize = m_networkProcess->networkBlobRegistry().blobSize(*this, url);
     528    resultSize = NetworkBlobRegistry::singleton().blobSize(*this, url);
    543529}
    544530
     
    547533    Vector<RefPtr<BlobDataFileReference>> fileReferences;
    548534    for (auto& url : blobURLs)
    549         fileReferences.appendVector(m_networkProcess->networkBlobRegistry().filesInBlob(*this, { { }, url }));
     535        fileReferences.appendVector(NetworkBlobRegistry::singleton().filesInBlob(*this, { { }, url }));
    550536
    551537    for (auto& file : fileReferences)
    552538        file->prepareForFileAccess();
    553539
    554     m_networkProcess->networkBlobRegistry().writeBlobsToTemporaryFiles(blobURLs, [fileReferences = WTFMove(fileReferences), completionHandler = WTFMove(completionHandler)](auto&& fileNames) mutable {
     540    NetworkBlobRegistry::singleton().writeBlobsToTemporaryFiles(blobURLs, [fileReferences = WTFMove(fileReferences), completionHandler = WTFMove(completionHandler)](auto&& fileNames) mutable {
    555541        for (auto& file : fileReferences)
    556542            file->revokeFileAccess();
    557543        completionHandler(WTFMove(fileNames));
    558544    });
    559 }
    560 
    561 Vector<RefPtr<WebCore::BlobDataFileReference>> NetworkConnectionToWebProcess::filesInBlob(const URL& url)
    562 {
    563     return m_networkProcess->networkBlobRegistry().filesInBlob(*this, url);
    564 }
    565 
    566 WebCore::BlobRegistryImpl& NetworkConnectionToWebProcess::blobRegistry()
    567 {
    568     return m_networkProcess->networkBlobRegistry().blobRegistry();
    569545}
    570546
  • trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h

    r240984 r241005  
    4242namespace WebCore {
    4343class BlobDataFileReference;
    44 class BlobRegistryImpl;
    4544class ResourceError;
    4645class ResourceRequest;
     
    122121    Optional<NetworkActivityTracker> startTrackingResourceLoad(uint64_t pageID, ResourceLoadIdentifier resourceID, bool isMainResource, const PAL::SessionID&);
    123122    void stopTrackingResourceLoad(ResourceLoadIdentifier resourceID, NetworkActivityTracker::CompletionCode);
    124 
    125     WebCore::BlobRegistryImpl& blobRegistry();
    126     Vector<RefPtr<WebCore::BlobDataFileReference>> filesInBlob(const URL&);
    127     Vector<RefPtr<WebCore::BlobDataFileReference>> resolveBlobReferences(const NetworkResourceLoadParameters&);
    128123
    129124private:
  • trunk/Source/WebKit/NetworkProcess/NetworkDataTask.cpp

    r240984 r241005  
    4848Ref<NetworkDataTask> NetworkDataTask::create(NetworkSession& session, NetworkDataTaskClient& client, const NetworkLoadParameters& parameters)
    4949{
    50     ASSERT(!parameters.request.url().protocolIsBlob());
     50    if (parameters.request.url().protocolIsBlob())
     51        return NetworkDataTaskBlob::create(session, client, parameters.request, parameters.contentSniffingPolicy, parameters.blobFileReferences);
     52
    5153#if PLATFORM(COCOA)
    5254    return NetworkDataTaskCocoa::create(session, client, parameters.request, parameters.webFrameID, parameters.webPageID, parameters.storedCredentialsPolicy, parameters.contentSniffingPolicy, parameters.contentEncodingSniffingPolicy, parameters.shouldClearReferrerOnHTTPSToHTTPRedirect, parameters.shouldPreconnectOnly, parameters.isMainFrameNavigation, parameters.networkActivityTracker);
  • trunk/Source/WebKit/NetworkProcess/NetworkDataTaskBlob.cpp

    r240984 r241005  
    6666static const char* const webKitBlobResourceDomain = "WebKitBlobResource";
    6767
    68 NetworkDataTaskBlob::NetworkDataTaskBlob(NetworkSession& session, BlobRegistryImpl& blobRegistry, NetworkDataTaskClient& client, const ResourceRequest& request, ContentSniffingPolicy shouldContentSniff, const Vector<RefPtr<WebCore::BlobDataFileReference>>& fileReferences)
     68NetworkDataTaskBlob::NetworkDataTaskBlob(NetworkSession& session, NetworkDataTaskClient& client, const ResourceRequest& request, ContentSniffingPolicy shouldContentSniff, const Vector<RefPtr<WebCore::BlobDataFileReference>>& fileReferences)
    6969    : NetworkDataTask(session, client, request, StoredCredentialsPolicy::DoNotUse, false, false)
    7070    , m_stream(std::make_unique<AsyncFileStream>(*this))
     
    7575        fileReference->prepareForFileAccess();
    7676
    77     m_blobData = blobRegistry.getBlobDataFromURL(request.url());
     77    m_blobData = static_cast<BlobRegistryImpl&>(blobRegistry()).getBlobDataFromURL(request.url());
    7878
    7979    m_session->registerNetworkDataTask(*this);
  • trunk/Source/WebKit/NetworkProcess/NetworkDataTaskBlob.h

    r240984 r241005  
    4141class BlobData;
    4242class BlobDataItem;
    43 class BlobRegistryImpl;
    4443}
    4544
     
    5049class NetworkDataTaskBlob final : public NetworkDataTask, public WebCore::FileStreamClient {
    5150public:
    52     static Ref<NetworkDataTask> create(NetworkSession& session, WebCore::BlobRegistryImpl& blobRegistry, NetworkDataTaskClient& client, const WebCore::ResourceRequest& request, WebCore::ContentSniffingPolicy shouldContentSniff, const Vector<RefPtr<WebCore::BlobDataFileReference>>& fileReferences)
     51    static Ref<NetworkDataTask> create(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& request, WebCore::ContentSniffingPolicy shouldContentSniff, const Vector<RefPtr<WebCore::BlobDataFileReference>>& fileReferences)
    5352    {
    54         return adoptRef(*new NetworkDataTaskBlob(session, blobRegistry, client, request, shouldContentSniff, fileReferences));
     53        return adoptRef(*new NetworkDataTaskBlob(session, client, request, shouldContentSniff, fileReferences));
    5554    }
    5655
     
    5857
    5958private:
    60     NetworkDataTaskBlob(NetworkSession&, WebCore::BlobRegistryImpl&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, WebCore::ContentSniffingPolicy, const Vector<RefPtr<WebCore::BlobDataFileReference>>&);
     59    NetworkDataTaskBlob(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, WebCore::ContentSniffingPolicy, const Vector<RefPtr<WebCore::BlobDataFileReference>>&);
    6160
    6261    void suspend() override;
  • trunk/Source/WebKit/NetworkProcess/NetworkLoad.cpp

    r240984 r241005  
    5151};
    5252
    53 NetworkLoad::NetworkLoad(NetworkLoadClient& client, BlobRegistryImpl* blobRegistry, NetworkLoadParameters&& parameters, NetworkSession& networkSession)
     53NetworkLoad::NetworkLoad(NetworkLoadClient& client, NetworkLoadParameters&& parameters, NetworkSession& networkSession)
    5454    : m_client(client)
    5555    , m_networkProcess(networkSession.networkProcess())
     
    5858    , m_currentRequest(m_parameters.request)
    5959{
    60     initialize(networkSession, blobRegistry);
    61 }
    62 
    63 void NetworkLoad::initialize(NetworkSession& networkSession, WebCore::BlobRegistryImpl* blobRegistry)
    64 {
    65     if (blobRegistry && m_parameters.request.url().protocolIsBlob())
    66         m_task = NetworkDataTaskBlob::create(networkSession, *blobRegistry, *this, m_parameters.request, m_parameters.contentSniffingPolicy, m_parameters.blobFileReferences);
    67     else
    68         m_task = NetworkDataTask::create(networkSession, *this, m_parameters);
    69 
     60    initialize(networkSession);
     61}
     62
     63void NetworkLoad::initialize(NetworkSession& networkSession)
     64{
     65    m_task = NetworkDataTask::create(networkSession, *this, m_parameters);
    7066    if (!m_parameters.defersLoading)
    7167        m_task->resume();
  • trunk/Source/WebKit/NetworkProcess/NetworkLoad.h

    r240984 r241005  
    3434#include <wtf/text/WTFString.h>
    3535
    36 namespace WebCore {
    37 class BlobRegistryImpl;
    38 }
    39 
    4036namespace WebKit {
    4137
     
    4541    WTF_MAKE_FAST_ALLOCATED;
    4642public:
    47     NetworkLoad(NetworkLoadClient&, WebCore::BlobRegistryImpl*, NetworkLoadParameters&&, NetworkSession&);
     43    NetworkLoad(NetworkLoadClient&, NetworkLoadParameters&&, NetworkSession&);
    4844    ~NetworkLoad();
    4945
     
    7066
    7167private:
    72     void initialize(NetworkSession&, WebCore::BlobRegistryImpl*);
     68    void initialize(NetworkSession&);
    7369
    7470    // NetworkDataTaskClient
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp

    r240984 r241005  
    3838#endif
    3939#include "Logging.h"
     40#include "NetworkBlobRegistry.h"
    4041#include "NetworkConnectionToWebProcess.h"
    4142#include "NetworkContentRuleListManagerMessages.h"
     
    150151#endif
    151152
    152     NetworkStateNotifier::singleton().addListener([weakThis = makeWeakPtr(*this)](bool isOnLine) {
    153         if (!weakThis)
    154             return;
    155         for (auto& webProcessConnection : weakThis->m_webProcessConnections)
     153    NetworkStateNotifier::singleton().addListener([this](bool isOnLine) {
     154        auto webProcessConnections = m_webProcessConnections;
     155        for (auto& webProcessConnection : webProcessConnections)
    156156            webProcessConnection->setOnLineState(isOnLine);
    157157    });
     
    187187void NetworkProcess::removeNetworkConnectionToWebProcess(NetworkConnectionToWebProcess& connection)
    188188{
    189     auto count = m_webProcessConnections.removeAllMatching([&] (const auto& c) {
    190         return c.ptr() == &connection;
    191     });
    192     ASSERT_UNUSED(count, count == 1);
     189    size_t vectorIndex = m_webProcessConnections.find(&connection);
     190    ASSERT(vectorIndex != notFound);
     191
     192    m_webProcessConnections.remove(vectorIndex);
    193193}
    194194
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.h

    r240984 r241005  
    2929#include "CacheModel.h"
    3030#include "DownloadManager.h"
    31 #include "NetworkBlobRegistry.h"
    3231#include "NetworkContentRuleListManager.h"
    3332#include "NetworkHTTPSUpgradeChecker.h"
     
    293292    void requestCacheStorageSpace(PAL::SessionID, const WebCore::ClientOrigin&, uint64_t quota, uint64_t currentSize, uint64_t spaceRequired, CompletionHandler<void(Optional<uint64_t>)>&&);
    294293
    295     NetworkBlobRegistry& networkBlobRegistry() { return m_networkBlobRegistry; }
    296 
    297294private:
    298295    void platformInitializeNetworkProcess(const NetworkProcessCreationParameters&);
     
    426423
    427424    // Connections to WebProcesses.
    428     Vector<Ref<NetworkConnectionToWebProcess>> m_webProcessConnections;
     425    Vector<RefPtr<NetworkConnectionToWebProcess>> m_webProcessConnections;
    429426
    430427    String m_diskCacheDirectory;
     
    449446    HashMap<PAL::SessionID, std::unique_ptr<WebCore::NetworkStorageSession>> m_networkStorageSessions;
    450447    mutable std::unique_ptr<WebCore::NetworkStorageSession> m_defaultNetworkStorageSession;
    451     NetworkBlobRegistry m_networkBlobRegistry;
    452448
    453449#if PLATFORM(COCOA)
  • trunk/Source/WebKit/NetworkProcess/NetworkProcessPlatformStrategies.cpp

    r240984 r241005  
    2727#include "NetworkProcessPlatformStrategies.h"
    2828
    29 #include <WebCore/BlobRegistry.h>
     29#include <WebCore/BlobRegistryImpl.h>
    3030#include <wtf/NeverDestroyed.h>
    3131
     
    5151BlobRegistry* NetworkProcessPlatformStrategies::createBlobRegistry()
    5252{
    53     using namespace WebCore;
    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(); }
    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; }
    64     };
    65     static NeverDestroyed<EmptyBlobRegistry> blobRegistry;
    66     return &blobRegistry.get();
     53    return new BlobRegistryImpl;
    6754}
    6855
  • trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp

    r240984 r241005  
    3030#include "FormDataReference.h"
    3131#include "Logging.h"
     32#include "NetworkBlobRegistry.h"
    3233#include "NetworkCache.h"
    3334#include "NetworkConnectionToWebProcess.h"
     
    9293    : m_parameters { WTFMove(parameters) }
    9394    , m_connection { connection }
    94     , m_fileReferences(connection.resolveBlobReferences(m_parameters))
    9595    , m_defersLoading { parameters.defersLoading }
    9696    , m_isAllowedToAskUserForCredentials { m_parameters.clientCredentialPolicy == ClientCredentialPolicy::MayAskClientForCredentials }
     
    103103    //        Once bug 116233 is resolved, this ASSERT can just be "m_webPageID && m_webFrameID"
    104104    ASSERT((m_parameters.webPageID && m_parameters.webFrameID) || m_parameters.clientCredentialPolicy == ClientCredentialPolicy::CannotAskClientForCredentials);
     105
     106    if (originalRequest().httpBody()) {
     107        for (const auto& element : originalRequest().httpBody()->elements()) {
     108            if (auto* blobData = WTF::get_if<FormDataElement::EncodedBlobData>(element.data))
     109                m_fileReferences.appendVector(NetworkBlobRegistry::singleton().filesInBlob(connection, blobData->url));
     110        }
     111    }
    105112
    106113    if (synchronousReply || parameters.shouldRestrictHTTPResponseAccess) {
     
    122129    ASSERT(!m_networkLoad);
    123130    ASSERT(!isSynchronous() || !m_synchronousLoadData->delayedReply);
    124     ASSERT(m_fileReferences.isEmpty());
    125131    if (m_responseCompletionHandler)
    126132        m_responseCompletionHandler(PolicyAction::Ignore);
     
    277283
    278284    if (request.url().protocolIsBlob())
    279         parameters.blobFileReferences = m_connection->filesInBlob(originalRequest().url());
     285        parameters.blobFileReferences = NetworkBlobRegistry::singleton().filesInBlob(m_connection, originalRequest().url());
    280286
    281287    auto* networkSession = m_connection->networkProcess().networkSession(parameters.sessionID);
     
    293299
    294300    parameters.request = WTFMove(request);
    295     m_networkLoad = std::make_unique<NetworkLoad>(*this, &m_connection->blobRegistry(), WTFMove(parameters), *networkSession);
     301    m_networkLoad = std::make_unique<NetworkLoad>(*this, WTFMove(parameters), *networkSession);
    296302
    297303    RELEASE_LOG_IF_ALLOWED("startNetworkLoad: (pageID = %" PRIu64 ", frameID = %" PRIu64 ", resourceID = %" PRIu64 ", description = %{public}s)", m_parameters.webPageID, m_parameters.webFrameID, m_parameters.identifier, m_networkLoad->description().utf8().data());
  • trunk/Source/WebKit/NetworkProcess/PingLoad.cpp

    r240984 r241005  
    3030#include "AuthenticationManager.h"
    3131#include "Logging.h"
    32 #include "NetworkConnectionToWebProcess.h"
    3332#include "NetworkLoadChecker.h"
    3433#include "NetworkProcess.h"
     
    4140using namespace WebCore;
    4241
    43 PingLoad::PingLoad(NetworkConnectionToWebProcess& connection, NetworkProcess& networkProcess, NetworkResourceLoadParameters&& parameters, CompletionHandler<void(const ResourceError&, const ResourceResponse&)>&& completionHandler)
     42PingLoad::PingLoad(NetworkProcess& networkProcess, NetworkResourceLoadParameters&& parameters, CompletionHandler<void(const ResourceError&, const ResourceResponse&)>&& completionHandler)
    4443    : m_parameters(WTFMove(parameters))
    4544    , m_completionHandler(WTFMove(completionHandler))
    4645    , m_timeoutTimer(*this, &PingLoad::timeoutTimerFired)
    4746    , m_networkLoadChecker(makeUniqueRef<NetworkLoadChecker>(networkProcess, FetchOptions { m_parameters.options}, m_parameters.sessionID, m_parameters.webPageID, m_parameters.webFrameID, WTFMove(m_parameters.originalRequestHeaders), URL { m_parameters.request.url() }, m_parameters.sourceOrigin.copyRef(), m_parameters.preflightPolicy, m_parameters.request.httpReferrer()))
    48     , m_blobFiles(connection.resolveBlobReferences(m_parameters))
    4947{
    50     for (auto& file : m_blobFiles) {
    51         if (file)
    52             file->prepareForFileAccess();
    53     }
    54 
    5548    m_networkLoadChecker->enableContentExtensionsCheck();
    5649    if (m_parameters.cspResponseHeaders)
     
    8679        m_task->clearClient();
    8780        m_task->cancel();
    88     }
    89     for (auto& file : m_blobFiles) {
    90         if (file)
    91             file->revokeFileAccess();
    9281    }
    9382}
  • trunk/Source/WebKit/NetworkProcess/PingLoad.h

    r240984 r241005  
    4141class PingLoad final : public CanMakeWeakPtr<PingLoad>, private NetworkDataTaskClient {
    4242public:
    43     PingLoad(NetworkConnectionToWebProcess&, NetworkProcess&, NetworkResourceLoadParameters&&, CompletionHandler<void(const WebCore::ResourceError&, const WebCore::ResourceResponse&)>&&);
     43    PingLoad(NetworkProcess&, NetworkResourceLoadParameters&&, CompletionHandler<void(const WebCore::ResourceError&, const WebCore::ResourceResponse&)>&&);
    4444   
    4545private:
     
    6767    WebCore::Timer m_timeoutTimer;
    6868    UniqueRef<NetworkLoadChecker> m_networkLoadChecker;
    69     Vector<RefPtr<WebCore::BlobDataFileReference>> m_blobFiles;
    7069};
    7170
  • trunk/Source/WebKit/NetworkProcess/PreconnectTask.cpp

    r240984 r241005  
    5454
    5555    ASSERT(parameters.shouldPreconnectOnly == PreconnectOnly::Yes);
    56     m_networkLoad = std::make_unique<NetworkLoad>(*this, nullptr, WTFMove(parameters), *networkSession);
     56    m_networkLoad = std::make_unique<NetworkLoad>(*this, WTFMove(parameters), *networkSession);
    5757
    5858    m_timeoutTimer.startOneShot(60000_s);
  • trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp

    r240984 r241005  
    6161    parameters.contentEncodingSniffingPolicy = ContentEncodingSniffingPolicy::Sniff;
    6262    parameters.request = m_originalRequest;
    63     m_networkLoad = std::make_unique<NetworkLoad>(*this, nullptr, WTFMove(parameters), *cache.networkProcess().networkSession(PAL::SessionID::defaultSessionID()));
     63    m_networkLoad = std::make_unique<NetworkLoad>(*this, WTFMove(parameters), *cache.networkProcess().networkSession(PAL::SessionID::defaultSessionID()));
    6464}
    6565
Note: See TracChangeset for help on using the changeset viewer.