void Loader::Host::didReceiveData(SubresourceLoader* loader, const char* data, int size) { RefPtr<Host> protector(this); Request* request = m_requestsLoading.get(loader); if (!request) return; CachedResource* resource = request->cachedResource(); ASSERT(!resource->isCacheValidator()); if (resource->errorOccurred()) return; if (resource->response().httpStatusCode() / 100 == 4) { // Treat a 4xx response like a network error for all resources but images (which will ignore the error and continue to load for // legacy compatibility). resource->httpStatusCodeError(); return; } // Set the data. if (request->isMultipart()) { // The loader delivers the data in a multipart section all at once, send eof. // The resource data will change as the next part is loaded, so we need to make a copy. RefPtr<SharedBuffer> copiedData = SharedBuffer::create(data, size); resource->data(copiedData.release(), true); } else if (request->isIncremental()) resource->data(loader->resourceData(), false); }