InspectorResource.h [plain text]
#ifndef InspectorResource_h
#define InspectorResource_h
#include "HTTPHeaderMap.h"
#include "KURL.h"
#include "ScriptObject.h"
#include "ScriptState.h"
#include "ScriptString.h"
#include <wtf/CurrentTime.h>
#include <wtf/OwnPtr.h>
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
#include <wtf/RefPtr.h>
namespace WebCore {
class CachedResource;
class DocumentLoader;
class InspectorFrontend;
class Frame;
class ResourceResponse;
class ResourceRequest;
class InspectorResource : public RefCounted<InspectorResource> {
public:
enum Type {
Doc,
Stylesheet,
Image,
Font,
Script,
XHR,
Media,
Other
};
static PassRefPtr<InspectorResource> create(unsigned long identifier, DocumentLoader* loader, const KURL& requestURL)
{
return adoptRef(new InspectorResource(identifier, loader, requestURL));
}
static PassRefPtr<InspectorResource> createCached(unsigned long identifier, DocumentLoader*, const CachedResource*);
~InspectorResource();
PassRefPtr<InspectorResource> appendRedirect(unsigned long identifier, const KURL& redirectURL);
void updateScriptObject(InspectorFrontend* frontend);
void releaseScriptObject(InspectorFrontend* frontend, bool callRemoveResource);
void updateRequest(const ResourceRequest&);
void updateResponse(const ResourceResponse&);
void setXMLHttpResponseText(const ScriptString& data);
String sourceString() const;
PassRefPtr<SharedBuffer> resourceData(String* textEncodingName) const;
bool isSameLoader(DocumentLoader* loader) const { return loader == m_loader; }
void markMainResource() { m_isMainResource = true; }
unsigned long identifier() const { return m_identifier; }
String requestURL() const { return m_requestURL.string(); }
Frame* frame() const { return m_frame.get(); }
const String& mimeType() const { return m_mimeType; }
const HTTPHeaderMap& requestHeaderFields() const { return m_requestHeaderFields; }
const HTTPHeaderMap& responseHeaderFields() const { return m_responseHeaderFields; }
int responseStatusCode() const { return m_responseStatusCode; }
String requestMethod() const { return m_requestMethod; }
String requestFormData() const { return m_requestFormData; }
void startTiming();
void markResponseReceivedTime();
void markLoadEventTime();
void markDOMContentEventTime();
void endTiming();
void markFailed();
void addLength(int lengthReceived);
private:
enum ChangeType {
NoChange = 0,
RequestChange = 1,
ResponseChange = 2,
TypeChange = 4,
LengthChange = 8,
CompletionChange = 16,
TimingChange = 32,
RedirectsChange = 64
};
class Changes {
public:
Changes() : m_change(NoChange) {}
inline bool hasChange(ChangeType change)
{
return m_change & change || (m_change == NoChange && change == NoChange);
}
inline void set(ChangeType change)
{
m_change = static_cast<ChangeType>(static_cast<unsigned>(m_change) | static_cast<unsigned>(change));
}
inline void clear(ChangeType change)
{
m_change = static_cast<ChangeType>(static_cast<unsigned>(m_change) & ~static_cast<unsigned>(change));
}
inline void setAll() { m_change = static_cast<ChangeType>(127); }
inline void clearAll() { m_change = NoChange; }
private:
ChangeType m_change;
};
InspectorResource(unsigned long identifier, DocumentLoader*, const KURL& requestURL);
Type type() const;
Type cachedResourceType() const;
CachedResource* cachedResource() const;
unsigned long m_identifier;
RefPtr<DocumentLoader> m_loader;
RefPtr<Frame> m_frame;
KURL m_requestURL;
HTTPHeaderMap m_requestHeaderFields;
HTTPHeaderMap m_responseHeaderFields;
String m_mimeType;
String m_suggestedFilename;
long long m_expectedContentLength;
bool m_cached;
bool m_finished;
bool m_failed;
int m_length;
int m_responseStatusCode;
double m_startTime;
double m_responseReceivedTime;
double m_endTime;
double m_loadEventTime;
double m_domContentEventTime;
ScriptString m_xmlHttpResponseText;
Changes m_changes;
bool m_isMainResource;
String m_requestMethod;
String m_requestFormData;
Vector<RefPtr<InspectorResource> > m_redirects;
};
}
#endif // InspectorResource_h