summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/inspector/InspectorResourceAgent.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/inspector/InspectorResourceAgent.cpp')
-rw-r--r--Source/WebCore/inspector/InspectorResourceAgent.cpp123
1 files changed, 96 insertions, 27 deletions
diff --git a/Source/WebCore/inspector/InspectorResourceAgent.cpp b/Source/WebCore/inspector/InspectorResourceAgent.cpp
index 1e2c16d..f200702 100644
--- a/Source/WebCore/inspector/InspectorResourceAgent.cpp
+++ b/Source/WebCore/inspector/InspectorResourceAgent.cpp
@@ -34,21 +34,24 @@
#if ENABLE(INSPECTOR)
#include "Base64.h"
-#include "MemoryCache.h"
#include "CachedResource.h"
#include "CachedResourceLoader.h"
#include "Document.h"
#include "DocumentLoader.h"
+#include "EventsCollector.h"
#include "Frame.h"
#include "FrameLoader.h"
#include "HTMLFrameOwnerElement.h"
#include "HTMLNames.h"
#include "HTTPHeaderMap.h"
#include "InspectorFrontend.h"
+#include "InspectorFrontendChannel.h"
+#include "InspectorFrontendProxy.h"
#include "InspectorState.h"
#include "InspectorValues.h"
#include "InstrumentingAgents.h"
#include "KURL.h"
+#include "MemoryCache.h"
#include "Page.h"
#include "ProgressTracker.h"
#include "ResourceError.h"
@@ -74,14 +77,36 @@ static const char resourceAgentEnabled[] = "resourceAgentEnabled";
static const char extraRequestHeaders[] = "extraRequestHeaders";
}
+namespace ResourceType {
+static const char document[] = "Document";
+static const char stylesheet[] = "Stylesheet";
+static const char image[] = "Image";
+static const char font[] = "Font";
+static const char script[] = "Script";
+static const char xhr[] = "XHR";
+static const char websocket[] = "WebSocket";
+static const char other[] = "Other";
+}
+
void InspectorResourceAgent::setFrontend(InspectorFrontend* frontend)
{
m_frontend = frontend->network();
+ if (backgroundEventsCollectionEnabled()) {
+ // Insert Message Proxy in receiver chain.
+ InspectorFrontendChannel* client = m_frontend->getInspectorFrontendChannel();
+ m_inspectorFrontendProxy->setInspectorFrontendChannel(client);
+ m_frontend->setInspectorFrontendChannel(m_inspectorFrontendProxy.get());
+ m_eventsCollector->sendCollectedEvents(client);
+ }
}
void InspectorResourceAgent::clearFrontend()
{
- m_frontend = 0;
+ if (backgroundEventsCollectionEnabled()) {
+ m_inspectorFrontendProxy->setInspectorFrontendChannel(0);
+ m_frontend = m_mockFrontend.get();
+ } else
+ m_frontend = 0;
disable(0);
}
@@ -94,7 +119,7 @@ void InspectorResourceAgent::restore()
void InspectorResourceAgent::resourceContent(ErrorString* errorString, Frame* frame, const KURL& url, String* result)
{
if (!frame) {
- *errorString = "No frame to get resource content for.";
+ *errorString = "No frame to get resource content for";
return;
}
@@ -108,7 +133,7 @@ void InspectorResourceAgent::resourceContent(ErrorString* errorString, Frame* fr
*result = encoding.decode(buffer->data(), buffer->size());
return;
}
- *errorString = "No resource with given URL found.";
+ *errorString = "No resource with given URL found";
}
void InspectorResourceAgent::resourceContentBase64(ErrorString* errorString, Frame* frame, const KURL& url, String* result)
@@ -117,7 +142,7 @@ void InspectorResourceAgent::resourceContentBase64(ErrorString* errorString, Fra
RefPtr<SharedBuffer> data = InspectorResourceAgent::resourceData(frame, url, &textEncodingName);
if (!data) {
*result = String();
- *errorString = "No resource with given URL found.";
+ *errorString = "No resource with given URL found";
return;
}
@@ -204,13 +229,12 @@ static PassRefPtr<InspectorObject> buildObjectForResourceRequest(const ResourceR
static PassRefPtr<InspectorObject> buildObjectForResourceResponse(const ResourceResponse& response)
{
- RefPtr<InspectorObject> responseObject = InspectorObject::create();
if (response.isNull())
- return responseObject;
+ return 0;
+ RefPtr<InspectorObject> responseObject = InspectorObject::create();
responseObject->setNumber("status", response.resourceLoadInfo() ? response.resourceLoadInfo()->httpStatusCode : response.httpStatusCode());
responseObject->setString("statusText", response.resourceLoadInfo() ? response.resourceLoadInfo()->httpStatusText : response.httpStatusText());
- responseObject->setObject("headers", buildObjectForHeaders(response.resourceLoadInfo() ? response.resourceLoadInfo()->responseHeaders : response.httpHeaderFields()));
responseObject->setString("mimeType", response.mimeType());
responseObject->setBoolean("connectionReused", response.connectionReused());
@@ -219,8 +243,16 @@ static PassRefPtr<InspectorObject> buildObjectForResourceResponse(const Resource
if (response.resourceLoadTiming())
responseObject->setObject("timing", buildObjectForTiming(*response.resourceLoadTiming()));
- if (response.resourceLoadInfo())
+ if (response.resourceLoadInfo()) {
+ responseObject->setObject("headers", buildObjectForHeaders(response.resourceLoadInfo()->responseHeaders));
+ if (!response.resourceLoadInfo()->responseHeadersText.isEmpty())
+ responseObject->setString("headersText", response.resourceLoadInfo()->responseHeadersText);
+
responseObject->setObject("requestHeaders", buildObjectForHeaders(response.resourceLoadInfo()->requestHeaders));
+ if (!response.resourceLoadInfo()->requestHeadersText.isEmpty())
+ responseObject->setString("requestHeadersText", response.resourceLoadInfo()->requestHeadersText);
+ } else
+ responseObject->setObject("headers", buildObjectForHeaders(response.httpHeaderFields()));
return responseObject;
}
@@ -236,21 +268,21 @@ static String cachedResourceTypeString(const CachedResource& cachedResource)
{
switch (cachedResource.type()) {
case CachedResource::ImageResource:
- return "Image";
+ return ResourceType::image;
case CachedResource::FontResource:
- return "Font";
+ return ResourceType::font;
case CachedResource::CSSStyleSheet:
// Fall through.
#if ENABLE(XSLT)
case CachedResource::XSLStyleSheet:
#endif
- return "Stylesheet";
+ return ResourceType::stylesheet;
case CachedResource::Script:
- return "Script";
+ return ResourceType::script;
default:
break;
}
- return "Other";
+ return ResourceType::other;
}
static PassRefPtr<InspectorObject> buildObjectForCachedResource(const CachedResource& cachedResource)
@@ -259,12 +291,18 @@ static PassRefPtr<InspectorObject> buildObjectForCachedResource(const CachedReso
resourceObject->setString("url", cachedResource.url());
resourceObject->setString("type", cachedResourceTypeString(cachedResource));
resourceObject->setNumber("bodySize", cachedResource.encodedSize());
- resourceObject->setObject("response", buildObjectForResourceResponse(cachedResource.response()));
+ RefPtr<InspectorObject> resourceResponse = buildObjectForResourceResponse(cachedResource.response());
+ if (resourceResponse)
+ resourceObject->setObject("response", resourceResponse);
return resourceObject;
}
InspectorResourceAgent::~InspectorResourceAgent()
{
+ if (m_state->getBoolean(ResourceAgentState::resourceAgentEnabled)) {
+ ErrorString error;
+ disable(&error);
+ }
ASSERT(!m_instrumentingAgents->inspectorResourceAgent());
}
@@ -290,7 +328,7 @@ void InspectorResourceAgent::willSendRequest(unsigned long identifier, DocumentL
callStackValue = callStack->buildInspectorArray();
else
callStackValue = InspectorArray::create();
- m_frontend->requestWillBeSent(static_cast<int>(identifier), pointerAsId(loader->frame()), pointerAsId(loader), loader->url().string(), buildObjectForResourceRequest(request), buildObjectForResourceResponse(redirectResponse), currentTime(), callStackValue);
+ m_frontend->requestWillBeSent(static_cast<int>(identifier), pointerAsId(loader->frame()), pointerAsId(loader), loader->url().string(), buildObjectForResourceRequest(request), currentTime(), callStackValue, buildObjectForResourceResponse(redirectResponse));
}
void InspectorResourceAgent::markResourceAsCached(unsigned long identifier)
@@ -314,9 +352,9 @@ void InspectorResourceAgent::didReceiveResponse(unsigned long identifier, Docume
resourceResponse->setString("mimeType", cachedResource->response().mimeType());
}
if (equalIgnoringFragmentIdentifier(response.url(), loader->frameLoader()->iconURL()))
- type = "Image";
+ type = ResourceType::image;
else if (equalIgnoringFragmentIdentifier(response.url(), loader->url()) && type == "Other")
- type = "Document";
+ type = ResourceType::document;
}
m_frontend->responseReceived(static_cast<int>(identifier), currentTime(), type, resourceResponse);
// If we revalidated the resource and got Not modified, send content length following didReceiveResponse
@@ -325,9 +363,9 @@ void InspectorResourceAgent::didReceiveResponse(unsigned long identifier, Docume
didReceiveContentLength(identifier, cachedResourceSize, 0);
}
-void InspectorResourceAgent::didReceiveContentLength(unsigned long identifier, int dataLength, int lengthReceived)
+void InspectorResourceAgent::didReceiveContentLength(unsigned long identifier, int dataLength, int encodedDataLength)
{
- m_frontend->dataReceived(static_cast<int>(identifier), currentTime(), dataLength, lengthReceived);
+ m_frontend->dataReceived(static_cast<int>(identifier), currentTime(), dataLength, encodedDataLength);
}
void InspectorResourceAgent::didFinishLoading(unsigned long identifier, double finishTime)
@@ -340,7 +378,7 @@ void InspectorResourceAgent::didFinishLoading(unsigned long identifier, double f
void InspectorResourceAgent::didFailLoading(unsigned long identifier, const ResourceError& error)
{
- m_frontend->loadingFailed(static_cast<int>(identifier), currentTime(), error.localizedDescription());
+ m_frontend->loadingFailed(static_cast<int>(identifier), currentTime(), error.localizedDescription(), error.isCancellation());
}
void InspectorResourceAgent::didLoadResourceFromMemoryCache(DocumentLoader* loader, const CachedResource* resource)
@@ -348,9 +386,24 @@ void InspectorResourceAgent::didLoadResourceFromMemoryCache(DocumentLoader* load
m_frontend->resourceLoadedFromMemoryCache(pointerAsId(loader->frame()), pointerAsId(loader), loader->url().string(), currentTime(), buildObjectForCachedResource(*resource));
}
-void InspectorResourceAgent::setInitialContent(unsigned long identifier, const String& sourceString, const String& type)
+void InspectorResourceAgent::setInitialScriptContent(unsigned long identifier, const String& sourceString)
{
- m_frontend->initialContentSet(static_cast<int>(identifier), sourceString, type);
+ m_frontend->initialContentSet(static_cast<int>(identifier), sourceString, ResourceType::script);
+}
+
+void InspectorResourceAgent::setInitialXHRContent(unsigned long identifier, const String& sourceString)
+{
+ m_frontend->initialContentSet(static_cast<int>(identifier), sourceString, ResourceType::xhr);
+}
+
+void InspectorResourceAgent::domContentEventFired()
+{
+ m_frontend->domContentEventFired(currentTime());
+}
+
+void InspectorResourceAgent::loadEventFired()
+{
+ m_frontend->loadEventFired(currentTime());
}
static PassRefPtr<InspectorObject> buildObjectForFrame(Frame* frame)
@@ -465,6 +518,14 @@ Frame* InspectorResourceAgent::frameForId(const String& frameId)
return 0;
}
+bool InspectorResourceAgent::backgroundEventsCollectionEnabled()
+{
+ // FIXME (https://bugs.webkit.org/show_bug.cgi?id=58652)
+ // Add here condition to enable background events collection.
+ // Now this function is disable.
+ return false;
+}
+
void InspectorResourceAgent::enable(ErrorString*)
{
enable();
@@ -489,14 +550,14 @@ void InspectorResourceAgent::getCachedResources(ErrorString*, RefPtr<InspectorOb
*object = buildObjectForFrameTree(m_page->mainFrame());
}
-void InspectorResourceAgent::getResourceContent(ErrorString* errorString, const String& frameId, const String& url, bool base64Encode, String* content)
+void InspectorResourceAgent::getResourceContent(ErrorString* errorString, const String& frameId, const String& url, const bool* const optionalBase64Encode, String* content)
{
Frame* frame = frameForId(frameId);
if (!frame) {
- *errorString = "No frame for given id found.";
+ *errorString = "No frame for given id found";
return;
}
- if (base64Encode)
+ if (optionalBase64Encode ? *optionalBase64Encode : false)
InspectorResourceAgent::resourceContentBase64(errorString, frame, KURL(ParsedURLString, url), content);
else
InspectorResourceAgent::resourceContent(errorString, frame, KURL(ParsedURLString, url), content);
@@ -511,8 +572,16 @@ InspectorResourceAgent::InspectorResourceAgent(InstrumentingAgents* instrumentin
: m_instrumentingAgents(instrumentingAgents)
, m_page(page)
, m_state(state)
- , m_frontend(0)
{
+ if (backgroundEventsCollectionEnabled()) {
+ m_eventsCollector = new EventsCollector();
+ m_inspectorFrontendProxy = new InspectorFrontendProxy(m_eventsCollector.get());
+ // Create mock frontend, so we can collect network events.
+ m_mockFrontend = new InspectorFrontend::Network(m_inspectorFrontendProxy.get());
+ m_frontend = m_mockFrontend.get();
+ enable();
+ } else
+ m_frontend = 0;
}
} // namespace WebCore