15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/PingLoader.h" 3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 355d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/FetchInitiatorTypeNames.h" 3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Document.h" 3709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/fetch/FetchContext.h" 38d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/frame/LocalFrame.h" 3953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InspectorInstrumentation.h" 40f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "core/inspector/InspectorTraceEvents.h" 4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/FrameLoader.h" 421fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch#include "core/loader/FrameLoaderClient.h" 4353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/UniqueIdentifier.h" 4409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/page/Page.h" 4519cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)#include "platform/exported/WrappedResourceRequest.h" 4609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/network/ResourceError.h" 47bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "platform/network/ResourceRequest.h" 48bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "platform/network/ResourceResponse.h" 4951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/weborigin/SecurityOrigin.h" 5051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/weborigin/SecurityPolicy.h" 5183750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch#include "public/platform/Platform.h" 5283750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch#include "public/platform/WebURLLoader.h" 53197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "public/platform/WebURLRequest.h" 5409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "public/platform/WebURLResponse.h" 55591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/OwnPtr.h" 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 57c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 59d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void PingLoader::loadImage(LocalFrame* frame, const KURL& url) 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame->document()->securityOrigin()->canDisplay(url)) { 6293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) FrameLoader::reportLocalLoadFailed(frame, url.string()); 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ResourceRequest request(url); 67197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch request.setRequestContext(blink::WebURLRequest::RequestContextPing); 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) request.setHTTPHeaderField("Cache-Control", "max-age=0"); 6909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) frame->loader().fetchContext().addAdditionalRequestHeaders(frame->document(), request, FetchSubresource); 705d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) frame->loader().fetchContext().setFirstPartyForCookies(request); 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) FetchInitiatorInfo initiatorInfo; 7309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) initiatorInfo.name = FetchInitiatorTypeNames::ping; 7409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) PingLoader::start(frame, request, initiatorInfo); 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#hyperlink-auditing 78d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void PingLoader::sendLinkAuditPing(LocalFrame* frame, const KURL& pingURL, const KURL& destinationURL) 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ResourceRequest request(pingURL); 81197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch request.setRequestContext(blink::WebURLRequest::RequestContextPing); 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) request.setHTTPMethod("POST"); 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) request.setHTTPContentType("text/ping"); 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) request.setHTTPBody(FormData::create("PING")); 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) request.setHTTPHeaderField("Cache-Control", "max-age=0"); 8609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) frame->loader().fetchContext().addAdditionalRequestHeaders(frame->document(), request, FetchSubresource); 875d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) frame->loader().fetchContext().setFirstPartyForCookies(request); 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RefPtr<SecurityOrigin> pingOrigin = SecurityOrigin::create(pingURL); 9009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // addAdditionalRequestHeaders() will have added a referrer for same origin requests, 9109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // but the spec omits the referrer for same origin. 9209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (frame->document()->securityOrigin()->isSameSchemeHostPort(pingOrigin.get())) 9309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) request.clearHTTPReferrer(); 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) request.setHTTPHeaderField("Ping-To", AtomicString(destinationURL.string())); 9609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 9709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // Ping-From follows the same rules as the default referrer beahavior for subresource requests. 9809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // FIXME: Should Ping-From obey ReferrerPolicy? 9909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!SecurityPolicy::shouldHideReferrer(pingURL, frame->document()->url().string())) 10009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) request.setHTTPHeaderField("Ping-From", AtomicString(frame->document()->url().string())); 10109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 10209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) FetchInitiatorInfo initiatorInfo; 10309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) initiatorInfo.name = FetchInitiatorTypeNames::ping; 10409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) PingLoader::start(frame, request, initiatorInfo); 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 107d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void PingLoader::sendViolationReport(LocalFrame* frame, const KURL& reportURL, PassRefPtr<FormData> report, ViolationReportType type) 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ResourceRequest request(reportURL); 110197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch request.setRequestContext(blink::WebURLRequest::RequestContextPing); 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) request.setHTTPMethod("POST"); 112e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch request.setHTTPContentType(type == ContentSecurityPolicyViolationReport ? "application/csp-report" : "application/json"); 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) request.setHTTPBody(report); 11409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) frame->loader().fetchContext().addAdditionalRequestHeaders(frame->document(), request, FetchSubresource); 1155d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) frame->loader().fetchContext().setFirstPartyForCookies(request); 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) FetchInitiatorInfo initiatorInfo; 11809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) initiatorInfo.name = FetchInitiatorTypeNames::violationreport; 11909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) PingLoader::start(frame, request, initiatorInfo, SecurityOrigin::create(reportURL)->isSameSchemeHostPort(frame->document()->securityOrigin()) ? AllowStoredCredentials : DoNotAllowStoredCredentials); 12009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 12109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 122d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void PingLoader::start(LocalFrame* frame, ResourceRequest& request, const FetchInitiatorInfo& initiatorInfo, StoredCredentials credentialsAllowed) 12309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 124197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!frame->loader().mixedContentChecker()->canRunInsecureContent(frame->document()->securityOrigin(), request.url())) 125197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return; 126197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 12709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) OwnPtr<PingLoader> pingLoader = adoptPtr(new PingLoader(frame, request, initiatorInfo, credentialsAllowed)); 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Leak the ping loader, since it will kill itself as soon as it receives a response. 130f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu PingLoader* leakedPingLoader ALLOW_UNUSED = pingLoader.leakPtr(); 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 133d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)PingLoader::PingLoader(LocalFrame* frame, ResourceRequest& request, const FetchInitiatorInfo& initiatorInfo, StoredCredentials credentialsAllowed) 13409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) : PageLifecycleObserver(frame->page()) 13509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) , m_timeout(this, &PingLoader::timeout) 13609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) , m_url(request.url()) 13709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) , m_identifier(createUniqueIdentifier()) 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 139f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame->loader().client()->didDispatchPingLoader(request.url()); 1401fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch 1417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "ResourceSendRequest", "data", InspectorSendRequestEvent::data(m_identifier, frame, request)); 1427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.stack"), "CallStack", "stack", InspectorCallStackEvent::currentCallStack()); 1437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // FIXME(361045): remove InspectorInstrumentation calls once DevTools Timeline migrates to tracing. 1447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci InspectorInstrumentation::willSendRequest(frame, m_identifier, frame->loader().documentLoader(), request, ResourceResponse(), initiatorInfo); 1457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 14651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_loader = adoptPtr(blink::Platform::current()->createURLLoader()); 14783750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch ASSERT(m_loader); 14851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) blink::WrappedResourceRequest wrappedRequest(request); 14983750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch wrappedRequest.setAllowStoredCredentials(credentialsAllowed == AllowStoredCredentials); 15083750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch m_loader->loadAsynchronously(wrappedRequest, this); 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If the server never responds, FrameLoader won't be able to cancel this load and 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // we'll sit here waiting forever. Set a very generous timeout, just in case. 154d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) m_timeout.startOneShot(60000, FROM_HERE); 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PingLoader::~PingLoader() 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15983750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch if (m_loader) 16083750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch m_loader->cancel(); 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid PingLoader::didReceiveResponse(blink::WebURLLoader*, const blink::WebURLResponse& response) 16409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 165f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu if (Page* page = this->page()) { 166f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "ResourceFinish", "data", InspectorResourceFinishEvent::data(m_identifier, 0, true)); 1677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci const ResourceResponse& resourceResponse = response.toResourceResponse(); 1687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci InspectorInstrumentation::didReceiveResourceResponse(page->deprecatedLocalMainFrame(), m_identifier, 0, resourceResponse, 0); 1695d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) InspectorInstrumentation::didFailLoading(page->deprecatedLocalMainFrame(), m_identifier, ResourceError::cancelledError(m_url)); 170f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu } 17109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) delete this; 17209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 17309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 174d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void PingLoader::didReceiveData(blink::WebURLLoader*, const char*, int, int) 17509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 176f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu if (Page* page = this->page()) { 177f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "ResourceFinish", "data", InspectorResourceFinishEvent::data(m_identifier, 0, true)); 1785d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) InspectorInstrumentation::didFailLoading(page->deprecatedLocalMainFrame(), m_identifier, ResourceError::cancelledError(m_url)); 179f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu } 18009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) delete this; 18109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 18209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 18309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void PingLoader::didFinishLoading(blink::WebURLLoader*, double, int64_t) 18409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 185f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu if (Page* page = this->page()) { 186f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "ResourceFinish", "data", InspectorResourceFinishEvent::data(m_identifier, 0, true)); 1875d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) InspectorInstrumentation::didFailLoading(page->deprecatedLocalMainFrame(), m_identifier, ResourceError::cancelledError(m_url)); 188f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu } 18909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) delete this; 19009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 19109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 19209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void PingLoader::didFail(blink::WebURLLoader*, const blink::WebURLError& resourceError) 19309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 194f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu if (Page* page = this->page()) { 195f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "ResourceFinish", "data", InspectorResourceFinishEvent::data(m_identifier, 0, true)); 1965d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) InspectorInstrumentation::didFailLoading(page->deprecatedLocalMainFrame(), m_identifier, ResourceError(resourceError)); 197f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu } 19809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) delete this; 19909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 20009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 20109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void PingLoader::timeout(Timer<PingLoader>*) 20209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 203f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu if (Page* page = this->page()) { 204f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "ResourceFinish", "data", InspectorResourceFinishEvent::data(m_identifier, 0, true)); 2055d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) InspectorInstrumentation::didFailLoading(page->deprecatedLocalMainFrame(), m_identifier, ResourceError::cancelledError(m_url)); 206f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu } 20709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) delete this; 20809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 20909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 211