| Index: Source/core/inspector/InspectorResourceAgent.cpp
|
| diff --git a/Source/core/inspector/InspectorResourceAgent.cpp b/Source/core/inspector/InspectorResourceAgent.cpp
|
| index d8a349596bc28bd47877e7811a0816220400f57f..24d4e816ca97786b356359d67e7259da36fd1f25 100644
|
| --- a/Source/core/inspector/InspectorResourceAgent.cpp
|
| +++ b/Source/core/inspector/InspectorResourceAgent.cpp
|
| @@ -34,6 +34,10 @@
|
| #include "InspectorFrontend.h"
|
| #include "bindings/v8/ScriptCallStackFactory.h"
|
| #include "core/dom/Document.h"
|
| +#include "core/dom/Event.h"
|
| +#include "core/dom/EventListener.h"
|
| +#include "core/dom/EventTarget.h"
|
| +#include "core/dom/ExceptionCode.h"
|
| #include "core/dom/ExceptionCodePlaceholder.h"
|
| #include "core/dom/ScriptableDocumentParser.h"
|
| #include "core/inspector/IdentifiersFactory.h"
|
| @@ -70,6 +74,8 @@
|
| #include <wtf/RefPtr.h>
|
| #include <wtf/text/StringBuilder.h>
|
|
|
| +typedef WebCore::InspectorBackendDispatcher::NetworkCommandHandler::LoadResourceForFrontendCallback LoadResourceForFrontendCallback;
|
| +
|
| namespace WebCore {
|
|
|
| namespace ResourceAgentState {
|
| @@ -79,6 +85,53 @@ static const char cacheDisabled[] = "cacheDisabled";
|
| static const char userAgentOverride[] = "userAgentOverride";
|
| }
|
|
|
| +namespace {
|
| +
|
| +class SendXHRCallback : public EventListener {
|
| + WTF_MAKE_NONCOPYABLE(SendXHRCallback);
|
| +public:
|
| + static PassRefPtr<SendXHRCallback> create(PassRefPtr<LoadResourceForFrontendCallback> callback)
|
| + {
|
| + return adoptRef(new SendXHRCallback(callback));
|
| + }
|
| +
|
| + virtual ~SendXHRCallback() { }
|
| +
|
| + virtual bool operator==(const EventListener& other) OVERRIDE
|
| + {
|
| + return this == &other;
|
| + }
|
| +
|
| + virtual void handleEvent(ScriptExecutionContext*, Event* event) OVERRIDE
|
| + {
|
| + if (!m_callback->isActive())
|
| + return;
|
| + if (event->type() == eventNames().errorEvent) {
|
| + m_callback->sendFailure("Error loading resource.");
|
| + return;
|
| + }
|
| + if (event->type() != eventNames().readystatechangeEvent) {
|
| + m_callback->sendFailure("Unexpected event type.");
|
| + return;
|
| + }
|
| +
|
| + XMLHttpRequest* xhr = static_cast<XMLHttpRequest*>(event->target());
|
| + if (xhr->readyState() != XMLHttpRequest::DONE)
|
| + return;
|
| +
|
| + String responseText = xhr->responseText(IGNORE_EXCEPTION);
|
| + m_callback->sendSuccess(responseText);
|
| + }
|
| +
|
| +private:
|
| + SendXHRCallback(PassRefPtr<LoadResourceForFrontendCallback> callback)
|
| + : EventListener(EventListener::CPPEventListenerType)
|
| + , m_callback(callback) { }
|
| + RefPtr<LoadResourceForFrontendCallback> m_callback;
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| void InspectorResourceAgent::setFrontend(InspectorFrontend* frontend)
|
| {
|
| m_frontend = frontend->network();
|
| @@ -613,7 +666,7 @@ void InspectorResourceAgent::replayXHR(ErrorString*, const String& requestId)
|
| HTTPHeaderMap::const_iterator end = xhrReplayData->headers().end();
|
| for (HTTPHeaderMap::const_iterator it = xhrReplayData->headers().begin(); it!= end; ++it)
|
| xhr->setRequestHeader(it->key, it->value, IGNORE_EXCEPTION);
|
| - xhr->sendFromInspector(xhrReplayData->formData(), IGNORE_EXCEPTION);
|
| + xhr->sendForInspectorXHRReplay(xhrReplayData->formData(), IGNORE_EXCEPTION);
|
| }
|
|
|
| void InspectorResourceAgent::canClearBrowserCache(ErrorString*, bool* result)
|
| @@ -643,6 +696,44 @@ void InspectorResourceAgent::setCacheDisabled(ErrorString*, bool cacheDisabled)
|
| memoryCache()->evictResources();
|
| }
|
|
|
| +void InspectorResourceAgent::loadResourceForFrontend(ErrorString* errorString, const String& frameId, const String& url, PassRefPtr<LoadResourceForFrontendCallback> callback)
|
| +{
|
| + Frame* frame = m_pageAgent->assertFrame(errorString, frameId);
|
| + if (!frame)
|
| + return;
|
| +
|
| + Document* document = frame->document();
|
| + if (!document) {
|
| + *errorString = "No Document instance for the specified frame";
|
| + return;
|
| + }
|
| +
|
| + RefPtr<XMLHttpRequest> xhr = XMLHttpRequest::create(document);
|
| +
|
| + KURL kurl = KURL(ParsedURLString, url);
|
| + if (kurl.isLocalFile()) {
|
| + *errorString = "Can not load local file";
|
| + return;
|
| + }
|
| +
|
| + ExceptionCode ec = 0;
|
| + xhr->open(ASCIILiteral("GET"), kurl, ec);
|
| + if (ec) {
|
| + *errorString = "Error opening an XMLHttpRequest";
|
| + return;
|
| + }
|
| +
|
| + RefPtr<SendXHRCallback> sendXHRCallback = SendXHRCallback::create(callback);
|
| + xhr->addEventListener(eventNames().abortEvent, sendXHRCallback, false);
|
| + xhr->addEventListener(eventNames().errorEvent, sendXHRCallback, false);
|
| + xhr->addEventListener(eventNames().readystatechangeEvent, sendXHRCallback, false);
|
| + xhr->sendForInspector(ec);
|
| + if (ec) {
|
| + *errorString = "Error sending an XMLHttpRequest";
|
| + return;
|
| + }
|
| +}
|
| +
|
| void InspectorResourceAgent::didCommitLoad(Frame* frame, DocumentLoader* loader)
|
| {
|
| if (loader->frame() != frame->page()->mainFrame())
|
|
|