18abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)/*
28abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * Copyright (C) 2013 Google Inc. All rights reserved.
38abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) *
48abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
58abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * modification, are permitted provided that the following conditions are
68abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * met:
78abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) *
88abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) *     * Redistributions of source code must retain the above copyright
98abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * notice, this list of conditions and the following disclaimer.
108abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) *     * Redistributions in binary form must reproduce the above
118abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer
128abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * in the documentation and/or other materials provided with the
138abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * distribution.
148abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) *     * Neither the name of Google Inc. nor the names of its
158abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * contributors may be used to endorse or promote products derived from
168abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * this software without specific prior written permission.
178abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) *
188abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
198abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
208abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
218abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
228abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
238abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
248abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
258abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
268abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
278abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
288abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
298abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) */
308abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
318abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#include "config.h"
328abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#include "core/loader/FrameFetchContext.h"
338abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
3409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/dom/Document.h"
357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/frame/FrameConsole.h"
36d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/frame/LocalFrame.h"
378abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#include "core/inspector/InspectorInstrumentation.h"
38f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "core/inspector/InspectorTraceEvents.h"
398abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#include "core/loader/DocumentLoader.h"
408abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#include "core/loader/FrameLoader.h"
418abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#include "core/loader/FrameLoaderClient.h"
428abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#include "core/loader/ProgressTracker.h"
438abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#include "core/page/Page.h"
4409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/frame/Settings.h"
4551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/weborigin/SecurityPolicy.h"
468abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
47c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
488abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
49d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)FrameFetchContext::FrameFetchContext(LocalFrame* frame)
508abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    : m_frame(frame)
518abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles){
528abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)}
538abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
548abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)void FrameFetchContext::reportLocalLoadFailed(const KURL& url)
558abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles){
568abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    FrameLoader::reportLocalLoadFailed(m_frame, url.elidedString());
578abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)}
588abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
5909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void FrameFetchContext::addAdditionalRequestHeaders(Document* document, ResourceRequest& request, FetchResourceType type)
608abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles){
6109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool isMainResource = type == FetchMainResource;
628abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    if (!isMainResource) {
638abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        String outgoingReferrer;
647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        ReferrerPolicy referrerPolicy;
658abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        String outgoingOrigin;
668abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        if (request.httpReferrer().isNull()) {
6709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            outgoingReferrer = document->outgoingReferrer();
687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci            referrerPolicy = document->referrerPolicy();
6909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            outgoingOrigin = document->outgoingOrigin();
708abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        } else {
718abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)            outgoingReferrer = request.httpReferrer();
727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci            referrerPolicy = request.referrerPolicy();
738abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)            outgoingOrigin = SecurityOrigin::createFromString(outgoingReferrer)->toString();
748abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        }
758abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        outgoingReferrer = SecurityPolicy::generateReferrerHeader(referrerPolicy, request.url(), outgoingReferrer);
778abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        if (outgoingReferrer.isEmpty())
788abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)            request.clearHTTPReferrer();
797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        else
807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci            request.setHTTPReferrer(Referrer(outgoingReferrer, referrerPolicy));
818abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
82197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        request.addHTTPOriginIfNeeded(AtomicString(outgoingOrigin));
838abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    }
848abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
8509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    // The remaining modifications are only necessary for HTTP and HTTPS.
8609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    if (!request.url().isEmpty() && !request.url().protocolIsInHTTPFamily())
8709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return;
8809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
8909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    m_frame->loader().applyUserAgent(request);
908abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)}
918abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
925d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void FrameFetchContext::setFirstPartyForCookies(ResourceRequest& request)
935d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles){
945d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    if (m_frame->tree().top()->isLocalFrame())
955d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)        request.setFirstPartyForCookies(toLocalFrame(m_frame->tree().top())->document()->firstPartyForCookies());
965d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)}
975d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)
9809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)CachePolicy FrameFetchContext::cachePolicy(Document* document) const
998abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles){
10009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    if (document && document->loadEventFinished())
10109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return CachePolicyVerify;
1028abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
10309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    FrameLoadType loadType = m_frame->loader().loadType();
10409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    if (loadType == FrameLoadTypeReloadFromOrigin)
1058abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        return CachePolicyReload;
10609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
107f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    Frame* parentFrame = m_frame->tree().parent();
108f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    if (parentFrame && parentFrame->isLocalFrame()) {
109f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)        CachePolicy parentCachePolicy = toLocalFrame(parentFrame)->loader().fetchContext().cachePolicy(toLocalFrame(parentFrame)->document());
11009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        if (parentCachePolicy != CachePolicyVerify)
11109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            return parentCachePolicy;
11209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
11309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
11409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    if (loadType == FrameLoadTypeReload)
11509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return CachePolicyRevalidate;
11609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
11709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    DocumentLoader* loader = document ? document->loader() : 0;
11809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    if (loader && loader->request().cachePolicy() == ReturnCacheDataElseLoad)
11909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return CachePolicyHistoryBuffer;
1208abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    return CachePolicyVerify;
1218abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
1228abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)}
1238abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
1248abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)// FIXME(http://crbug.com/274173):
1258abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)// |loader| can be null if the resource is loaded from imported document.
1268abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)// This means inspector, which uses DocumentLoader as an grouping entity,
1278abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)// cannot see imported documents.
1288abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)inline DocumentLoader* FrameFetchContext::ensureLoader(DocumentLoader* loader)
1298abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles){
13009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    return loader ? loader : m_frame->loader().documentLoader();
1318abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)}
1328abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
13307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochvoid FrameFetchContext::dispatchDidChangeResourcePriority(unsigned long identifier, ResourceLoadPriority loadPriority, int intraPriorityValue)
1348abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles){
13507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    m_frame->loader().client()->dispatchDidChangeResourcePriority(identifier, loadPriority, intraPriorityValue);
1368abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)}
1378abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
1388abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)void FrameFetchContext::dispatchWillSendRequest(DocumentLoader* loader, unsigned long identifier, ResourceRequest& request, const ResourceResponse& redirectResponse, const FetchInitiatorInfo& initiatorInfo)
1398abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles){
140f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    m_frame->loader().applyUserAgent(request);
141f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    m_frame->loader().client()->dispatchWillSendRequest(loader, identifier, request, redirectResponse);
142f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "ResourceSendRequest", "data", InspectorSendRequestEvent::data(identifier, m_frame, request));
143323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.stack"), "CallStack", "stack", InspectorCallStackEvent::currentCallStack());
144f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    // FIXME(361045): remove InspectorInstrumentation calls once DevTools Timeline migrates to tracing.
1458abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    InspectorInstrumentation::willSendRequest(m_frame, identifier, ensureLoader(loader), request, redirectResponse, initiatorInfo);
1468abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)}
1478abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
1488abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)void FrameFetchContext::dispatchDidLoadResourceFromMemoryCache(const ResourceRequest& request, const ResourceResponse& response)
1498abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles){
150f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    m_frame->loader().client()->dispatchDidLoadResourceFromMemoryCache(request, response);
1518abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)}
1528abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
1538abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)void FrameFetchContext::dispatchDidReceiveResponse(DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r, ResourceLoader* resourceLoader)
1548abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles){
15507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    m_frame->loader().progress().incrementProgress(identifier, r);
156f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    m_frame->loader().client()->dispatchDidReceiveResponse(loader, identifier, r);
157f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "ResourceReceiveResponse", "data", InspectorReceiveResponseEvent::data(identifier, m_frame, r));
158f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    // FIXME(361045): remove InspectorInstrumentation calls once DevTools Timeline migrates to tracing.
1597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    DocumentLoader* documentLoader = ensureLoader(loader);
1607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    InspectorInstrumentation::didReceiveResourceResponse(m_frame, identifier, documentLoader, r, resourceLoader);
1617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    // It is essential that inspector gets resource response BEFORE console.
1627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    m_frame->console().reportResourceResponseReceived(documentLoader, identifier, r);
1638abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)}
1648abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
1658abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)void FrameFetchContext::dispatchDidReceiveData(DocumentLoader*, unsigned long identifier, const char* data, int dataLength, int encodedDataLength)
1668abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles){
16707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    m_frame->loader().progress().incrementProgress(identifier, data, dataLength);
168f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "ResourceReceivedData", "data", InspectorReceiveDataEvent::data(identifier, m_frame, encodedDataLength));
169f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    // FIXME(361045): remove InspectorInstrumentation calls once DevTools Timeline migrates to tracing.
1708abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    InspectorInstrumentation::didReceiveData(m_frame, identifier, data, dataLength, encodedDataLength);
1718abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)}
1728abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
173a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)void FrameFetchContext::dispatchDidDownloadData(DocumentLoader*, unsigned long identifier, int dataLength, int encodedDataLength)
174a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){
17507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    m_frame->loader().progress().incrementProgress(identifier, 0, dataLength);
176f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "ResourceReceivedData", "data", InspectorReceiveDataEvent::data(identifier, m_frame, encodedDataLength));
177f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    // FIXME(361045): remove InspectorInstrumentation calls once DevTools Timeline migrates to tracing.
178a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    InspectorInstrumentation::didReceiveData(m_frame, identifier, 0, dataLength, encodedDataLength);
179a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)}
180a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
18109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void FrameFetchContext::dispatchDidFinishLoading(DocumentLoader* loader, unsigned long identifier, double finishTime, int64_t encodedDataLength)
1828abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles){
18307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    m_frame->loader().progress().completeProgress(identifier);
184f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    m_frame->loader().client()->dispatchDidFinishLoading(loader, identifier);
1858abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
186f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "ResourceFinish", "data", InspectorResourceFinishEvent::data(identifier, finishTime, false));
187f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    // FIXME(361045): remove InspectorInstrumentation calls once DevTools Timeline migrates to tracing.
18809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    InspectorInstrumentation::didFinishLoading(m_frame, identifier, ensureLoader(loader), finishTime, encodedDataLength);
1898abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)}
1908abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
1918abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)void FrameFetchContext::dispatchDidFail(DocumentLoader* loader, unsigned long identifier, const ResourceError& error)
1928abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles){
19307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    m_frame->loader().progress().completeProgress(identifier);
194f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "ResourceFinish", "data", InspectorResourceFinishEvent::data(identifier, 0, true));
195f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    // FIXME(361045): remove InspectorInstrumentation calls once DevTools Timeline migrates to tracing.
19609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    InspectorInstrumentation::didFailLoading(m_frame, identifier, error);
1978abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)}
1988abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
199a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)void FrameFetchContext::sendRemainingDelegateMessages(DocumentLoader* loader, unsigned long identifier, const ResourceResponse& response, int dataLength)
2008abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles){
2018abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    if (!response.isNull())
2028abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        dispatchDidReceiveResponse(ensureLoader(loader), identifier, response);
2038abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
2048abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    if (dataLength > 0)
205a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        dispatchDidReceiveData(ensureLoader(loader), identifier, 0, dataLength, 0);
2068abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
20709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    dispatchDidFinishLoading(ensureLoader(loader), identifier, 0, 0);
2088abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)}
2098abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
2107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid FrameFetchContext::trace(Visitor* visitor)
2117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{
2127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    visitor->trace(m_frame);
2137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    FetchContext::trace(visitor);
2147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}
2157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
216c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
217