void WebResourceLoader::didReceiveResource(const ShareableResource::Handle& handle, double finishTime) { LOG(Network, "(WebProcess) WebResourceLoader::didReceiveResource for '%s'", m_coreLoader->url().string().utf8().data()); #if USE(QUICK_LOOK) if (QuickLookHandle* quickLookHandle = m_coreLoader->documentLoader()->quickLookHandle()) { RetainPtr<CFDataRef> cfBuffer = handle.tryWrapInCFData(); if (cfBuffer) { if (quickLookHandle->didReceiveData(cfBuffer.get())) { quickLookHandle->didFinishLoading(); return; } } else quickLookHandle->didFail(); } #endif RefPtr<SharedBuffer> buffer = handle.tryWrapInSharedBuffer(); if (!buffer) { LOG_ERROR("Unable to create buffer from ShareableResource sent from the network process."); m_coreLoader->didFail(internalError(m_coreLoader->request().url())); return; } Ref<WebResourceLoader> protect(*this); // Only send data to the didReceiveData callback if it exists. if (buffer->size()) m_coreLoader->didReceiveBuffer(buffer.get(), buffer->size(), DataPayloadWholeResource); if (!m_coreLoader) return; m_coreLoader->didFinishLoading(finishTime); }
void NetworkResourceLoader::sendBuffer(WebCore::SharedBuffer* buffer, int encodedDataLength) { ASSERT(!isSynchronous()); #if PLATFORM(IOS) || (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090) ShareableResource::Handle shareableResourceHandle; NetworkResourceLoader::tryGetShareableHandleFromSharedBuffer(shareableResourceHandle, buffer); if (!shareableResourceHandle.isNull()) { // Since we're delivering this resource by ourselves all at once and don't need anymore data or callbacks from the network layer, abort the loader. abort(); send(Messages::WebResourceLoader::DidReceiveResource(shareableResourceHandle, currentTime())); return; } #endif IPC::SharedBufferDataReference dataReference(buffer); sendAbortingOnFailure(Messages::WebResourceLoader::DidReceiveData(dataReference, encodedDataLength)); }
bool NetworkResourceLoader::sendBufferMaybeAborting(SharedBuffer& buffer, size_t encodedDataLength) { ASSERT(!isSynchronous()); #if PLATFORM(COCOA) ShareableResource::Handle shareableResourceHandle; NetworkResourceLoader::tryGetShareableHandleFromSharedBuffer(shareableResourceHandle, buffer); if (!shareableResourceHandle.isNull()) { send(Messages::WebResourceLoader::DidReceiveResource(shareableResourceHandle, currentTime())); abort(); return false; } #endif IPC::SharedBufferDataReference dataReference(&buffer); return sendAbortingOnFailure(Messages::WebResourceLoader::DidReceiveData(dataReference, encodedDataLength)); }
void NetworkProcessConnection::didCacheResource(const ResourceRequest& request, const ShareableResource::Handle& handle, SessionID sessionID) { CachedResource* resource = MemoryCache::singleton().resourceForRequest(request, sessionID); if (!resource) return; RefPtr<SharedBuffer> buffer = handle.tryWrapInSharedBuffer(); if (!buffer) { LOG_ERROR("Unable to create SharedBuffer from ShareableResource handle for resource url %s", request.url().string().utf8().data()); return; } resource->tryReplaceEncodedData(*buffer); }
void NetworkResourceLoader::didReceiveBuffer(ResourceHandle* handle, PassRefPtr<SharedBuffer> buffer, int encodedDataLength) { ASSERT_UNUSED(handle, handle == m_handle); // FIXME (NetworkProcess): For the memory cache we'll also need to cache the response data here. // Such buffering will need to be thread safe, as this callback is happening on a background thread. m_bytesReceived += buffer->size(); #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 ShareableResource::Handle shareableResourceHandle; tryGetShareableHandleFromSharedBuffer(shareableResourceHandle, buffer.get()); if (!shareableResourceHandle.isNull()) { // Since we're delivering this resource by ourselves all at once, we'll abort the resource handle since we don't need anymore callbacks from ResourceHandle. abortInProgressLoad(); send(Messages::WebResourceLoader::DidReceiveResource(shareableResourceHandle, currentTime())); return; } #endif // __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 CoreIPC::DataReference dataReference(reinterpret_cast<const uint8_t*>(buffer->data()), buffer->size()); sendAbortingOnFailure(Messages::WebResourceLoader::DidReceiveData(dataReference, encodedDataLength)); }
void WebResourceLoader::didReceiveResource(const ShareableResource::Handle& handle, double finishTime) { LOG(Network, "(WebProcess) WebResourceLoader::didReceiveResource for '%s'", m_coreLoader->url().string().utf8().data()); RefPtr<SharedBuffer> buffer = handle.tryWrapInSharedBuffer(); if (!buffer) { LOG_ERROR("Unable to create buffer from ShareableResource sent from the network process."); m_coreLoader->didFail(internalError(m_coreLoader->request().url())); return; } // Only send data to the didReceiveData callback if it exists. if (buffer->size()) m_coreLoader->didReceiveBuffer(buffer.get(), buffer->size(), DataPayloadWholeResource); m_coreLoader->didFinishLoading(finishTime); }
void WebResourceLoader::didReceiveResource(const ShareableResource::Handle& handle, double finishTime) { LOG(Network, "(WebProcess) WebResourceLoader::didReceiveResource for '%s'", m_coreLoader->url().string().latin1().data()); RELEASE_LOG_IF_ALLOWED("WebResourceLoader::didReceiveResource, WebResourceLoader = %p", this); RefPtr<SharedBuffer> buffer = handle.tryWrapInSharedBuffer(); #if USE(QUICK_LOOK) if (QuickLookHandle* quickLookHandle = m_coreLoader->documentLoader()->quickLookHandle()) { if (buffer) { if (quickLookHandle->didReceiveData(buffer->existingCFData())) { quickLookHandle->didFinishLoading(); return; } } else quickLookHandle->didFail(); } #endif if (!buffer) { LOG_ERROR("Unable to create buffer from ShareableResource sent from the network process."); m_coreLoader->didFail(internalError(m_coreLoader->request().url())); return; } Ref<WebResourceLoader> protect(*this); // Only send data to the didReceiveData callback if it exists. if (unsigned bufferSize = buffer->size()) m_coreLoader->didReceiveBuffer(buffer.releaseNonNull(), bufferSize, DataPayloadWholeResource); if (!m_coreLoader) return; m_coreLoader->didFinishLoading(finishTime); }