// http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#hyperlink-auditing void PingLoader::sendPing(Frame* frame, const KURL& pingURL, const KURL& destinationURL) { ResourceRequest request(pingURL); #if PLATFORM(BLACKBERRY) request.setTargetType(ResourceRequest::TargetIsSubresource); #endif request.setHTTPMethod("POST"); request.setHTTPContentType("text/ping"); request.setHTTPBody(FormData::create("PING")); request.setHTTPHeaderField("Cache-Control", "max-age=0"); frame->loader()->addExtraFieldsToSubresourceRequest(request); SecurityOrigin* sourceOrigin = frame->document()->securityOrigin(); RefPtr<SecurityOrigin> pingOrigin = SecurityOrigin::create(pingURL); FrameLoader::addHTTPOriginIfNeeded(request, sourceOrigin->toString()); request.setHTTPHeaderField("Ping-To", destinationURL); if (!SecurityPolicy::shouldHideReferrer(pingURL, frame->loader()->outgoingReferrer())) { request.setHTTPHeaderField("Ping-From", frame->document()->url()); if (!sourceOrigin->isSameSchemeHostPort(pingOrigin.get())) { String referrer = SecurityPolicy::generateReferrerHeader(frame->document()->referrerPolicy(), pingURL, frame->loader()->outgoingReferrer()); if (!referrer.isEmpty()) request.setHTTPReferrer(referrer); } } OwnPtr<PingLoader> pingLoader = adoptPtr(new PingLoader(frame, request)); // Leak the ping loader, since it will kill itself as soon as it receives a response. PingLoader* leakedPingLoader = pingLoader.leakPtr(); UNUSED_PARAM(leakedPingLoader); }