| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 #include "FetchInitiatorTypeNames.h" | 34 #include "FetchInitiatorTypeNames.h" |
| 35 #include "InspectorFrontend.h" | 35 #include "InspectorFrontend.h" |
| 36 #include "bindings/v8/ExceptionStatePlaceholder.h" | 36 #include "bindings/v8/ExceptionStatePlaceholder.h" |
| 37 #include "bindings/v8/ScriptCallStackFactory.h" | 37 #include "bindings/v8/ScriptCallStackFactory.h" |
| 38 #include "core/dom/Document.h" | 38 #include "core/dom/Document.h" |
| 39 #include "core/dom/ScriptableDocumentParser.h" | 39 #include "core/dom/ScriptableDocumentParser.h" |
| 40 #include "core/fetch/FetchInitiatorInfo.h" | 40 #include "core/fetch/FetchInitiatorInfo.h" |
| 41 #include "core/fetch/MemoryCache.h" | 41 #include "core/fetch/MemoryCache.h" |
| 42 #include "core/fetch/Resource.h" | 42 #include "core/fetch/Resource.h" |
| 43 #include "core/fetch/ResourceLoader.h" | 43 #include "core/fetch/ResourceLoader.h" |
| 44 #include "core/fetch/TextResourceDecoder.h" |
| 45 #include "core/fileapi/Blob.h" |
| 46 #include "core/fileapi/FileReaderLoader.h" |
| 47 #include "core/fileapi/FileReaderLoaderClient.h" |
| 44 #include "core/inspector/IdentifiersFactory.h" | 48 #include "core/inspector/IdentifiersFactory.h" |
| 45 #include "core/inspector/InspectorClient.h" | 49 #include "core/inspector/InspectorClient.h" |
| 46 #include "core/inspector/InspectorOverlay.h" | 50 #include "core/inspector/InspectorOverlay.h" |
| 47 #include "core/inspector/InspectorPageAgent.h" | 51 #include "core/inspector/InspectorPageAgent.h" |
| 48 #include "core/inspector/InspectorState.h" | 52 #include "core/inspector/InspectorState.h" |
| 49 #include "core/inspector/InstrumentingAgents.h" | 53 #include "core/inspector/InstrumentingAgents.h" |
| 50 #include "core/inspector/NetworkResourcesData.h" | 54 #include "core/inspector/NetworkResourcesData.h" |
| 51 #include "core/inspector/ScriptCallStack.h" | 55 #include "core/inspector/ScriptCallStack.h" |
| 52 #include "core/loader/DocumentLoader.h" | 56 #include "core/loader/DocumentLoader.h" |
| 53 #include "core/loader/DocumentThreadableLoader.h" | 57 #include "core/loader/DocumentThreadableLoader.h" |
| 54 #include "core/loader/FrameLoader.h" | 58 #include "core/loader/FrameLoader.h" |
| 55 #include "core/loader/ThreadableLoader.h" | 59 #include "core/loader/ThreadableLoader.h" |
| 56 #include "core/loader/ThreadableLoaderClient.h" | 60 #include "core/loader/ThreadableLoaderClient.h" |
| 57 #include "core/page/Frame.h" | 61 #include "core/page/Frame.h" |
| 58 #include "core/page/Page.h" | 62 #include "core/page/Page.h" |
| 59 #include "core/platform/JSONValues.h" | 63 #include "core/platform/JSONValues.h" |
| 60 #include "core/platform/network/HTTPHeaderMap.h" | 64 #include "core/platform/network/HTTPHeaderMap.h" |
| 61 #include "core/platform/network/ResourceError.h" | 65 #include "core/platform/network/ResourceError.h" |
| 62 #include "core/platform/network/ResourceRequest.h" | 66 #include "core/platform/network/ResourceRequest.h" |
| 63 #include "core/platform/network/ResourceResponse.h" | 67 #include "core/platform/network/ResourceResponse.h" |
| 64 #include "core/xml/XMLHttpRequest.h" | 68 #include "core/xml/XMLHttpRequest.h" |
| 65 #include "modules/websockets/WebSocketFrame.h" | 69 #include "modules/websockets/WebSocketFrame.h" |
| 66 #include "modules/websockets/WebSocketHandshakeRequest.h" | 70 #include "modules/websockets/WebSocketHandshakeRequest.h" |
| 67 #include "modules/websockets/WebSocketHandshakeResponse.h" | 71 #include "modules/websockets/WebSocketHandshakeResponse.h" |
| 68 #include "weborigin/KURL.h" | 72 #include "weborigin/KURL.h" |
| 69 #include "wtf/CurrentTime.h" | 73 #include "wtf/CurrentTime.h" |
| 70 #include "wtf/RefPtr.h" | 74 #include "wtf/RefPtr.h" |
| 71 | 75 |
| 72 typedef WebCore::InspectorBackendDispatcher::NetworkCommandHandler::LoadResource
ForFrontendCallback LoadResourceForFrontendCallback; | 76 typedef WebCore::InspectorBackendDispatcher::NetworkCommandHandler::LoadResource
ForFrontendCallback LoadResourceForFrontendCallback; |
| 77 typedef WebCore::InspectorBackendDispatcher::NetworkCommandHandler::GetResponseB
odyCallback GetResponseBodyCallback; |
| 73 | 78 |
| 74 namespace WebCore { | 79 namespace WebCore { |
| 75 | 80 |
| 76 namespace ResourceAgentState { | 81 namespace ResourceAgentState { |
| 77 static const char resourceAgentEnabled[] = "resourceAgentEnabled"; | 82 static const char resourceAgentEnabled[] = "resourceAgentEnabled"; |
| 78 static const char extraRequestHeaders[] = "extraRequestHeaders"; | 83 static const char extraRequestHeaders[] = "extraRequestHeaders"; |
| 79 static const char cacheDisabled[] = "cacheDisabled"; | 84 static const char cacheDisabled[] = "cacheDisabled"; |
| 80 static const char userAgentOverride[] = "userAgentOverride"; | 85 static const char userAgentOverride[] = "userAgentOverride"; |
| 81 } | 86 } |
| 82 | 87 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 } | 168 } |
| 164 | 169 |
| 165 RefPtr<LoadResourceForFrontendCallback> m_callback; | 170 RefPtr<LoadResourceForFrontendCallback> m_callback; |
| 166 RefPtr<ThreadableLoader> m_loader; | 171 RefPtr<ThreadableLoader> m_loader; |
| 167 RefPtr<TextResourceDecoder> m_decoder; | 172 RefPtr<TextResourceDecoder> m_decoder; |
| 168 ScriptString m_responseText; | 173 ScriptString m_responseText; |
| 169 int m_statusCode; | 174 int m_statusCode; |
| 170 HTTPHeaderMap m_responseHeaders; | 175 HTTPHeaderMap m_responseHeaders; |
| 171 }; | 176 }; |
| 172 | 177 |
| 178 |
| 179 class InspectorResourceFileReaderLoaderClient : public FileReaderLoaderClient { |
| 180 WTF_MAKE_NONCOPYABLE(InspectorResourceFileReaderLoaderClient); |
| 181 public: |
| 182 InspectorResourceFileReaderLoaderClient(PassRefPtr<GetResponseBodyCallback>
callback) |
| 183 : m_callback(callback) { } |
| 184 |
| 185 void didStartLoading() |
| 186 { |
| 187 ASSERT(m_loader); |
| 188 } |
| 189 |
| 190 void didReceiveData() |
| 191 { |
| 192 ASSERT(m_loader); |
| 193 } |
| 194 |
| 195 void didFinishLoading() |
| 196 { |
| 197 ASSERT(m_loader); |
| 198 if (!m_decoder) { |
| 199 m_callback->sendSuccess(String(""), false); |
| 200 } else { |
| 201 RefPtr<ArrayBuffer> buffer = m_loader->arrayBufferResult(); |
| 202 String content = m_decoder->decode(static_cast<const char*>(buffer->
data()), buffer->byteLength()); |
| 203 m_callback->sendSuccess(content + m_decoder->flush(), false); |
| 204 } |
| 205 dispose(); |
| 206 } |
| 207 |
| 208 void didFail(FileError::ErrorCode errorCode) |
| 209 { |
| 210 m_callback->sendFailure("Failed to load Blob: error code = " + String::n
umber(errorCode)); // FIXME: Generate human-friendly reason message. |
| 211 dispose(); |
| 212 } |
| 213 |
| 214 void setLoader(PassOwnPtr<FileReaderLoader> loader) |
| 215 { |
| 216 m_loader = loader; |
| 217 } |
| 218 |
| 219 void start(Document* document, PassRefPtr<Blob> prpBlob, const String& textE
ncodingName) |
| 220 { |
| 221 ASSERT(m_loader); |
| 222 RefPtr<Blob> blob = prpBlob; |
| 223 m_decoder = InspectorPageAgent::createXHRTextDecoder(blob->type(), textE
ncodingName); |
| 224 m_loader->start(document, *blob); |
| 225 } |
| 226 |
| 227 private: |
| 228 void dispose() |
| 229 { |
| 230 m_loader.clear(); |
| 231 delete this; |
| 232 } |
| 233 |
| 234 OwnPtr<FileReaderLoader> m_loader; |
| 235 RefPtr<GetResponseBodyCallback> m_callback; |
| 236 RefPtr<TextResourceDecoder> m_decoder; |
| 237 }; |
| 238 |
| 173 KURL urlWithoutFragment(const KURL& url) | 239 KURL urlWithoutFragment(const KURL& url) |
| 174 { | 240 { |
| 175 KURL result = url; | 241 KURL result = url; |
| 176 result.removeFragmentIdentifier(); | 242 result.removeFragmentIdentifier(); |
| 177 return result; | 243 return result; |
| 178 } | 244 } |
| 179 | 245 |
| 180 } // namespace | 246 } // namespace |
| 181 | 247 |
| 182 void InspectorResourceAgent::setFrontend(InspectorFrontend* frontend) | 248 void InspectorResourceAgent::setFrontend(InspectorFrontend* frontend) |
| (...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 475 } | 541 } |
| 476 | 542 |
| 477 void InspectorResourceAgent::willDestroyResource(Resource* cachedResource) | 543 void InspectorResourceAgent::willDestroyResource(Resource* cachedResource) |
| 478 { | 544 { |
| 479 Vector<String> requestIds = m_resourcesData->removeResource(cachedResource); | 545 Vector<String> requestIds = m_resourcesData->removeResource(cachedResource); |
| 480 if (!requestIds.size()) | 546 if (!requestIds.size()) |
| 481 return; | 547 return; |
| 482 | 548 |
| 483 String content; | 549 String content; |
| 484 bool base64Encoded; | 550 bool base64Encoded; |
| 485 if (!InspectorPageAgent::cachedResourceContent(cachedResource, &content, &ba
se64Encoded)) | 551 RefPtr<Blob> blob; |
| 552 String textEncodingName; |
| 553 if (!InspectorPageAgent::cachedResourceContentOrBlob(cachedResource, &conten
t, &base64Encoded, &blob, &textEncodingName)) |
| 486 return; | 554 return; |
| 487 Vector<String>::iterator end = requestIds.end(); | 555 Vector<String>::iterator end = requestIds.end(); |
| 488 for (Vector<String>::iterator it = requestIds.begin(); it != end; ++it) | 556 for (Vector<String>::iterator it = requestIds.begin(); it != end; ++it) { |
| 489 m_resourcesData->setResourceContent(*it, content, base64Encoded); | 557 if (!blob) |
| 558 m_resourcesData->setResourceContent(*it, content, base64Encoded); |
| 559 else |
| 560 m_resourcesData->setResourceBlob(*it, blob, textEncodingName); |
| 561 } |
| 490 } | 562 } |
| 491 | 563 |
| 492 void InspectorResourceAgent::applyUserAgentOverride(String* userAgent) | 564 void InspectorResourceAgent::applyUserAgentOverride(String* userAgent) |
| 493 { | 565 { |
| 494 String userAgentOverride = m_state->getString(ResourceAgentState::userAgentO
verride); | 566 String userAgentOverride = m_state->getString(ResourceAgentState::userAgentO
verride); |
| 495 if (!userAgentOverride.isEmpty()) | 567 if (!userAgentOverride.isEmpty()) |
| 496 *userAgent = userAgentOverride; | 568 *userAgent = userAgentOverride; |
| 497 } | 569 } |
| 498 | 570 |
| 499 void InspectorResourceAgent::willRecalculateStyle(Document*) | 571 void InspectorResourceAgent::willRecalculateStyle(Document*) |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 622 { | 694 { |
| 623 m_state->setString(ResourceAgentState::userAgentOverride, userAgent); | 695 m_state->setString(ResourceAgentState::userAgentOverride, userAgent); |
| 624 m_overlay->setOverride(InspectorOverlay::UserAgentOverride, !userAgent.isEmp
ty()); | 696 m_overlay->setOverride(InspectorOverlay::UserAgentOverride, !userAgent.isEmp
ty()); |
| 625 } | 697 } |
| 626 | 698 |
| 627 void InspectorResourceAgent::setExtraHTTPHeaders(ErrorString*, const RefPtr<JSON
Object>& headers) | 699 void InspectorResourceAgent::setExtraHTTPHeaders(ErrorString*, const RefPtr<JSON
Object>& headers) |
| 628 { | 700 { |
| 629 m_state->setObject(ResourceAgentState::extraRequestHeaders, headers); | 701 m_state->setObject(ResourceAgentState::extraRequestHeaders, headers); |
| 630 } | 702 } |
| 631 | 703 |
| 632 void InspectorResourceAgent::getResponseBody(ErrorString* errorString, const Str
ing& requestId, String* content, bool* base64Encoded) | 704 void InspectorResourceAgent::getResponseBody(ErrorString* errorString, const Str
ing& requestId, PassRefPtr<GetResponseBodyCallback> prpCallback) |
| 633 { | 705 { |
| 706 RefPtr<GetResponseBodyCallback> callback = prpCallback; |
| 707 if (!callback->isActive()) |
| 708 return; |
| 709 |
| 710 Document* document = m_pageAgent->mainFrame()->document(); |
| 711 if (!document) { |
| 712 *errorString = "No Document instance for the specified frame"; |
| 713 return; |
| 714 } |
| 715 |
| 634 NetworkResourcesData::ResourceData const* resourceData = m_resourcesData->da
ta(requestId); | 716 NetworkResourcesData::ResourceData const* resourceData = m_resourcesData->da
ta(requestId); |
| 635 if (!resourceData) { | 717 if (!resourceData) { |
| 636 *errorString = "No resource with given identifier found"; | 718 *errorString = "No resource with given identifier found"; |
| 637 return; | 719 return; |
| 638 } | 720 } |
| 639 | 721 |
| 640 if (resourceData->hasContent()) { | 722 if (resourceData->hasContent()) { |
| 641 *base64Encoded = resourceData->base64Encoded(); | 723 callback->sendSuccess(resourceData->content(), resourceData->base64Encod
ed()); |
| 642 *content = resourceData->content(); | |
| 643 return; | 724 return; |
| 644 } | 725 } |
| 645 | 726 |
| 727 if (resourceData->hasBlob()) { |
| 728 InspectorResourceFileReaderLoaderClient* client = new InspectorResourceF
ileReaderLoaderClient(callback); |
| 729 OwnPtr<FileReaderLoader> loader = adoptPtr(new FileReaderLoader(FileRead
erLoader::ReadAsArrayBuffer, client)); |
| 730 client->setLoader(loader.release()); |
| 731 client->start(document, resourceData->blob(), resourceData->blobTextEnco
dingName()); |
| 732 return; |
| 733 } |
| 734 |
| 646 if (resourceData->isContentEvicted()) { | 735 if (resourceData->isContentEvicted()) { |
| 647 *errorString = "Request content was evicted from inspector cache"; | 736 *errorString = "Request content was evicted from inspector cache"; |
| 648 return; | 737 return; |
| 649 } | 738 } |
| 650 | 739 |
| 651 if (resourceData->buffer() && !resourceData->textEncodingName().isNull()) { | 740 if (resourceData->buffer() && !resourceData->textEncodingName().isNull()) { |
| 652 *base64Encoded = false; | 741 String content; |
| 653 if (InspectorPageAgent::sharedBufferContent(resourceData->buffer(), reso
urceData->textEncodingName(), *base64Encoded, content)) | 742 bool base64Encoded = false; |
| 743 if (InspectorPageAgent::sharedBufferContent(resourceData->buffer(), reso
urceData->textEncodingName(), base64Encoded, &content)) { |
| 744 callback->sendSuccess(content, base64Encoded); |
| 654 return; | 745 return; |
| 746 } |
| 655 } | 747 } |
| 656 | 748 |
| 657 if (resourceData->cachedResource()) { | 749 if (resourceData->cachedResource()) { |
| 658 if (InspectorPageAgent::cachedResourceContent(resourceData->cachedResour
ce(), content, base64Encoded)) | 750 String content; |
| 751 bool base64Encoded; |
| 752 RefPtr<Blob> blob; |
| 753 String textEncodingName; |
| 754 if (InspectorPageAgent::cachedResourceContentOrBlob(resourceData->cached
Resource(), &content, &base64Encoded, &blob, &textEncodingName)) { |
| 755 if (blob) { |
| 756 InspectorResourceFileReaderLoaderClient* client = new InspectorR
esourceFileReaderLoaderClient(callback); |
| 757 OwnPtr<FileReaderLoader> loader = adoptPtr(new FileReaderLoader(
FileReaderLoader::ReadAsArrayBuffer, client)); |
| 758 client->setLoader(loader.release()); |
| 759 client->start(document, blob.release(), textEncodingName); |
| 760 } else { |
| 761 callback->sendSuccess(content, base64Encoded); |
| 762 } |
| 659 return; | 763 return; |
| 764 } |
| 660 } | 765 } |
| 661 | 766 |
| 662 *errorString = "No data found for resource with given identifier"; | 767 *errorString = "No data found for resource with given identifier"; |
| 663 } | 768 } |
| 664 | 769 |
| 665 void InspectorResourceAgent::replayXHR(ErrorString*, const String& requestId) | 770 void InspectorResourceAgent::replayXHR(ErrorString*, const String& requestId) |
| 666 { | 771 { |
| 667 RefPtr<XMLHttpRequest> xhr = XMLHttpRequest::create(m_pageAgent->mainFrame()
->document()); | 772 RefPtr<XMLHttpRequest> xhr = XMLHttpRequest::create(m_pageAgent->mainFrame()
->document()); |
| 668 String actualRequestId = requestId; | 773 String actualRequestId = requestId; |
| 669 | 774 |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 783 , m_overlay(overlay) | 888 , m_overlay(overlay) |
| 784 , m_frontend(0) | 889 , m_frontend(0) |
| 785 , m_resourcesData(adoptPtr(new NetworkResourcesData())) | 890 , m_resourcesData(adoptPtr(new NetworkResourcesData())) |
| 786 , m_loadingXHRSynchronously(false) | 891 , m_loadingXHRSynchronously(false) |
| 787 , m_isRecalculatingStyle(false) | 892 , m_isRecalculatingStyle(false) |
| 788 { | 893 { |
| 789 } | 894 } |
| 790 | 895 |
| 791 } // namespace WebCore | 896 } // namespace WebCore |
| 792 | 897 |
| OLD | NEW |