CFURLRequestRef cfURLRequest(const ResourceRequest& request)
{
    CFURLRef url = request.url().createCFURL();
    CFURLRef mainDocumentURL = request.mainDocumentURL().createCFURL();

    CFMutableURLRequestRef cfRequest = CFURLRequestCreateMutable(0, url, (CFURLRequestCachePolicy)request.cachePolicy(), request.timeoutInterval(), mainDocumentURL);

    CFRelease(url);
    CFRelease(mainDocumentURL);

    CFStringRef requestMethod = request.httpMethod().createCFString();
    CFURLRequestSetHTTPRequestMethod(cfRequest, requestMethod);
    CFRelease(requestMethod);

    addHeadersFromHashMap(cfRequest, request.httpHeaderFields());
    setHTTPBody(cfRequest, request.httpBody());
    CFURLRequestSetShouldHandleHTTPCookies(cfRequest, request.allowHTTPCookies());

    return cfRequest;
}