#ifndef ResourceTimingInfo_h
#define ResourceTimingInfo_h
#include "platform/network/ResourceRequest.h"
#include "platform/network/ResourceResponse.h"
#include "wtf/text/AtomicString.h"
namespace WebCore {
class ResourceTimingInfo : public RefCounted<ResourceTimingInfo> {
public:
static PassRefPtr<ResourceTimingInfo> create(const AtomicString& type, const double time)
{
return adoptRef(new ResourceTimingInfo(type, time));
}
double initialTime() const { return m_initialTime; }
void setInitiatorType(const AtomicString& type) { m_type = type; }
const AtomicString& initiatorType() const { return m_type; }
void setLoadFinishTime(double time) { m_loadFinishTime = time; }
double loadFinishTime() const { return m_loadFinishTime; }
void setInitialRequest(const ResourceRequest& request) { m_initialRequest = request; }
const ResourceRequest& initialRequest() const { return m_initialRequest; }
void setFinalResponse(const ResourceResponse& response) { m_finalResponse = response; }
const ResourceResponse& finalResponse() const { return m_finalResponse; }
void addRedirect(const ResourceResponse& redirectResponse) { m_redirectChain.append(redirectResponse); }
const Vector<ResourceResponse>& redirectChain() const { return m_redirectChain; }
void clearLoadTimings()
{
m_finalResponse.setResourceLoadTiming(nullptr);
for (size_t i = 0; i < m_redirectChain.size(); ++i)
m_redirectChain[i].setResourceLoadTiming(nullptr);
}
private:
ResourceTimingInfo(const AtomicString& type, const double time)
: m_type(type)
, m_initialTime(time)
{
}
AtomicString m_type;
double m_initialTime;
double m_loadFinishTime;
ResourceRequest m_initialRequest;
ResourceResponse m_finalResponse;
Vector<ResourceResponse> m_redirectChain;
};
}
#endif