void WebSoupRequestManager::didHandleURIRequest(const IPC::DataReference& requestData, uint64_t contentLength, const String& mimeType, uint64_t requestID) { WebSoupRequestAsyncData* data = m_requestMap.get(requestID); ASSERT(data); GRefPtr<GTask> task = data->releaseTask(); ASSERT(task.get()); WebKitSoupRequestGeneric* request = WEBKIT_SOUP_REQUEST_GENERIC(g_task_get_source_object(task.get())); webkitSoupRequestGenericSetContentLength(request, contentLength ? contentLength : -1); webkitSoupRequestGenericSetContentType(request, !mimeType.isEmpty() ? mimeType.utf8().data() : 0); GInputStream* dataStream; if (!requestData.size()) { // Empty reply, just create and empty GMemoryInputStream. dataStream = g_memory_input_stream_new(); m_requestMap.remove(requestID); } else if (requestData.size() == contentLength) { // We don't expect more data, so we can just create a GMemoryInputStream with all the data. dataStream = g_memory_input_stream_new_from_data(g_memdup(requestData.data(), requestData.size()), contentLength, g_free); m_requestMap.remove(requestID); } else { // We expect more data chunks from the UI process. dataStream = webkitSoupRequestInputStreamNew(contentLength); data->stream = dataStream; webkitSoupRequestInputStreamAddData(WEBKIT_SOUP_REQUEST_INPUT_STREAM(dataStream), requestData.data(), requestData.size()); } g_task_return_pointer(task.get(), dataStream, g_object_unref); }
void CustomProtocolManagerImpl::didReceiveResponse(uint64_t customProtocolID, const WebCore::ResourceResponse& response) { WebSoupRequestAsyncData* data = m_customProtocolMap.get(customProtocolID); ASSERT(data); ASSERT(data->task); WebKitSoupRequestGeneric* request = WEBKIT_SOUP_REQUEST_GENERIC(g_task_get_source_object(data->task)); webkitSoupRequestGenericSetContentLength(request, response.expectedContentLength() ? response.expectedContentLength() : -1); webkitSoupRequestGenericSetContentType(request, !response.mimeType().isEmpty() ? response.mimeType().utf8().data() : 0); }