Changeset 69948 in webkit
- Timestamp:
- Oct 18, 2010 3:14:56 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 27 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r69947 r69948 1 2010-10-17 Pavel Feldman <pfeldman@chromium.org> 2 3 Reviewed by Yury Semikhatsky. 4 5 Web Inspector: Introduce InspectorResourceAgent.h/cpp and ResourceManager.js to 6 fill network panel with data. 7 https://bugs.webkit.org/show_bug.cgi?id=47779 8 9 InspectorResourceAgent instance / JS part are introduced in this patch. Agent's lifetime is equal 10 to the front-end's. This new resource agent does not have state, instead it covers two functions: 11 1) forwards loader client messages to the front-end 2) is capable of building a tree of cached resources. 12 (1) feeds network panel with data, (2) shows the resource tree in the new ResourcesPanel concept. 13 This bug is for extracting this new InspectorResourceAgent class and its javascript counterpart. 14 Once resources panel is refactored for the new concept, InspectorResource, InspectorController's 15 resource-related routines, inspector.js's code dealing with resources, they all will be gone. 16 17 * WebCore.gypi: 18 * WebCore.vcproj/WebCore.vcproj: 19 * inspector/CodeGeneratorInspector.pm: 20 * inspector/Inspector.idl: 21 * inspector/InspectorApplicationCacheAgent.cpp: 22 (WebCore::InspectorApplicationCacheAgent::didReceiveManifestResponse): 23 * inspector/InspectorController.cpp: 24 (WebCore::InspectorController::connectFrontend): 25 (WebCore::InspectorController::releaseFrontendLifetimeAgents): 26 (WebCore::InspectorController::didCommitLoad): 27 (WebCore::InspectorController::frameDetachedFromParent): 28 (WebCore::InspectorController::didLoadResourceFromMemoryCache): 29 (WebCore::InspectorController::identifierForInitialRequest): 30 (WebCore::InspectorController::willSendRequest): 31 (WebCore::InspectorController::markResourceAsCached): 32 (WebCore::InspectorController::didReceiveResponse): 33 (WebCore::InspectorController::didReceiveContentLength): 34 (WebCore::InspectorController::didFinishLoading): 35 (WebCore::InspectorController::didFailLoading): 36 (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest): 37 (WebCore::InspectorController::scriptImported): 38 (WebCore::InspectorController::didCreateWebSocket): 39 (WebCore::InspectorController::willSendWebSocketHandshakeRequest): 40 (WebCore::InspectorController::didReceiveWebSocketHandshakeResponse): 41 (WebCore::InspectorController::didCloseWebSocket): 42 * inspector/InspectorController.h: 43 * inspector/InspectorResource.cpp: 44 (WebCore::InspectorResource::updateResponse): 45 (WebCore::cachedResourceType): 46 (WebCore::InspectorResource::type): 47 (WebCore::InspectorResource::sourceString): 48 (WebCore::InspectorResource::sourceBytes): 49 (WebCore::InspectorResource::endTiming): 50 * inspector/InspectorResourceAgent.cpp: 51 (WebCore::InspectorResourceAgent::resourceContent): 52 (WebCore::InspectorResourceAgent::resourceContentBase64): 53 (WebCore::InspectorResourceAgent::resourceData): 54 (WebCore::InspectorResourceAgent::cachedResource): 55 (WebCore::buildObjectForHeaders): 56 (WebCore::buildObjectForTiming): 57 (WebCore::buildObjectForResourceRequest): 58 (WebCore::buildObjectForResourceResponse): 59 (WebCore::buildObjectForMainResource): 60 (WebCore::cachedResourceTypeString): 61 (WebCore::buildObjectForCachedResource): 62 (WebCore::buildObjectForFrameResources): 63 (WebCore::InspectorResourceAgent::~InspectorResourceAgent): 64 (WebCore::InspectorResourceAgent::identifierForInitialRequest): 65 (WebCore::InspectorResourceAgent::willSendRequest): 66 (WebCore::InspectorResourceAgent::markResourceAsCached): 67 (WebCore::InspectorResourceAgent::didReceiveResponse): 68 (WebCore::InspectorResourceAgent::didReceiveContentLength): 69 (WebCore::InspectorResourceAgent::didFinishLoading): 70 (WebCore::InspectorResourceAgent::didFailLoading): 71 (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache): 72 (WebCore::InspectorResourceAgent::setOverrideContent): 73 (WebCore::InspectorResourceAgent::didCommitLoad): 74 (WebCore::InspectorResourceAgent::frameDetachedFromParent): 75 (WebCore::createReadableStringFromBinary): 76 (WebCore::InspectorResourceAgent::didCreateWebSocket): 77 (WebCore::InspectorResourceAgent::willSendWebSocketHandshakeRequest): 78 (WebCore::InspectorResourceAgent::didReceiveWebSocketHandshakeResponse): 79 (WebCore::InspectorResourceAgent::didCloseWebSocket): 80 (WebCore::InspectorResourceAgent::cachedResources): 81 (WebCore::InspectorResourceAgent::InspectorResourceAgent): 82 * inspector/InspectorResourceAgent.h: 83 (WebCore::InspectorResourceAgent::create): 84 * inspector/InspectorStyleSheet.cpp: 85 (WebCore::InspectorStyleSheet::resourceStyleSheetText): 86 * inspector/front-end/ExtensionServer.js: 87 (WebInspector.ExtensionServer.prototype._onRevealAndSelectResource): 88 (WebInspector.ExtensionServer.prototype._onGetResourceContent): 89 * inspector/front-end/Resource.js: 90 (WebInspector.Resource.prototype.get responseReceivedTime): 91 (WebInspector.Resource.prototype.set endTime): 92 * inspector/front-end/Settings.js: 93 * inspector/front-end/SourceView.js: 94 (WebInspector.SourceView.prototype.setupSourceFrameIfNeeded): 95 * inspector/front-end/WebKit.qrc: 96 * inspector/front-end/inspector.css: 97 (.tabbed-pane-header li): 98 * inspector/front-end/inspector.html: 99 * inspector/front-end/inspector.js: 100 (WebInspector.updateResource): 101 * loader/ResourceLoadNotifier.cpp: 102 (WebCore::ResourceLoadNotifier::dispatchDidReceiveResponse): 103 * loader/appcache/ApplicationCacheGroup.cpp: 104 (WebCore::ApplicationCacheGroup::didReceiveResponse): 105 1 106 2010-10-16 Pavel Feldman <pfeldman@chromium.org> 2 107 -
trunk/WebCore/WebCore.gypi
r69942 r69948 4404 4404 'inspector/front-end/Resource.js', 4405 4405 'inspector/front-end/ResourceCategory.js', 4406 'inspector/front-end/ResourceManager.js', 4406 4407 'inspector/front-end/ResourcesPanel.js', 4407 4408 'inspector/front-end/ResourceView.js', -
trunk/WebCore/WebCore.vcproj/WebCore.vcproj
r69880 r69948 63659 63659 </File> 63660 63660 <File 63661 RelativePath="..\inspector\front-end\ResourceManager.js" 63662 > 63663 </File> 63664 <File 63661 63665 RelativePath="..\inspector\front-end\ResourcesPanel.js" 63662 63666 > -
trunk/WebCore/inspector/CodeGeneratorInspector.pm
r69798 r69948 28 28 "header" => "InspectorDebuggerAgent.h", 29 29 "domainAccessor" => "m_inspectorController->debuggerAgent()", 30 }; 31 $typeTransform{"Resource"} = { 32 "forward" => "InspectorResourceAgent", 33 "header" => "InspectorResourceAgent.h", 34 "domainAccessor" => "m_inspectorController->m_resourceAgent", 30 35 }; 31 36 $typeTransform{"DOM"} = { -
trunk/WebCore/inspector/Inspector.idl
r69853 r69948 113 113 [handler=Controller] void stopTimelineProfiler(); 114 114 115 [handler=Resource] void cachedResources(out Array resources); 116 [handler=Resource] void resourceContent(in unsigned long frameID, in String url, out String content); 117 [notify] void identifierForInitialRequest(out long identifier, out String url, out unsigned long frameID, out boolean isMainResource); 118 [notify] void willSendRequest(out long identifier, out double time, out Object request, out Object redirectResponse); 119 [notify] void markResourceAsCached(out long identifier); 120 [notify] void didReceiveResponse(out long identifier, out double time, out String resourceType, out Object response); 121 [notify] void didReceiveContentLength(out long identifier, out double time, out long lengthReceived); 122 [notify] void didFinishLoading(out long identifier, out double finishTime); 123 [notify] void didFailLoading(out long identifier, out double time, out String localizedDescription); 124 [notify] void didLoadResourceFromMemoryCache(out double time, out unsigned long frameID, out Object resource); 125 [notify] void setOverrideContent(out long identifier, out String sourceString, out String type); 126 [notify] void didCommitLoad(out unsigned long frameID); 127 [notify] void frameDetachedFromParent(out unsigned long frameID); 128 129 [notify] void didCreateWebSocket(out unsigned long identifier, out String requestURL); 130 [notify] void willSendWebSocketHandshakeRequest(out unsigned long identifier, out double time, out Object request); 131 [notify] void didReceiveWebSocketHandshakeResponse(out unsigned long identifier, out double time, out Object response); 132 [notify] void didCloseWebSocket(out unsigned long identifier, out double time); 133 115 134 #if defined(ENABLE_JAVASCRIPT_DEBUGGER) && ENABLE_JAVASCRIPT_DEBUGGER 116 135 [handler=Backend] void enableDebugger(in boolean always); -
trunk/WebCore/inspector/InspectorApplicationCacheAgent.cpp
r65891 r69948 49 49 void InspectorApplicationCacheAgent::didReceiveManifestResponse(unsigned long identifier, const ResourceResponse& response) 50 50 { 51 m_inspectorController->didReceiveResponse(identifier, response);51 m_inspectorController->didReceiveResponse(identifier, 0, response); 52 52 } 53 53 -
trunk/WebCore/inspector/InspectorController.cpp
r69938 r69948 70 70 #include "InspectorProfilerAgent.h" 71 71 #include "InspectorResource.h" 72 #include "InspectorResourceAgent.h" 72 73 #include "InspectorState.h" 73 74 #include "InspectorStorageAgent.h" … … 500 501 m_frontend = new InspectorFrontend(m_client); 501 502 m_domAgent = InspectorDOMAgent::create(m_cssStore.get(), m_frontend.get()); 503 // FIXME: enable resource agent once front-end is ready. 504 // m_resourceAgent = InspectorResourceAgent::create(m_inspectedPage, m_frontend.get()); 502 505 503 506 #if ENABLE(DATABASE) … … 609 612 void InspectorController::releaseFrontendLifetimeAgents() 610 613 { 614 m_resourceAgent.clear(); 615 611 616 // m_domAgent is RefPtr. Remove DOM listeners first to ensure that there are 612 617 // no references to the DOM agent from the DOM tree. … … 748 753 if (!enabled()) 749 754 return; 755 756 if (m_resourceAgent) 757 m_resourceAgent->didCommitLoad(loader); 750 758 751 759 ASSERT(m_inspectedPage); … … 823 831 if (!enabled()) 824 832 return; 833 834 if (m_resourceAgent) 835 m_resourceAgent->frameDetachedFromParent(frame); 836 825 837 if (ResourcesMap* resourceMap = m_frameResources.get(frame)) 826 838 removeAllResources(resourceMap); … … 897 909 return; 898 910 911 if (m_resourceAgent) 912 m_resourceAgent->didLoadResourceFromMemoryCache(loader, cachedResource); 913 899 914 // If the resource URL is already known, we don't need to add it again since this is just a cached load. 900 915 if (m_knownResources.contains(cachedResource->url())) … … 927 942 928 943 bool isMainResource = isMainResourceLoader(loader, request.url()); 944 945 if (m_resourceAgent) 946 m_resourceAgent->identifierForInitialRequest(identifier, request.url(), loader, isMainResource); 947 929 948 ensureSettingsLoaded(); 930 949 if (!isMainResource && !resourceTrackingEnabled()) … … 977 996 if (!enabled()) 978 997 return; 998 999 if (m_resourceAgent) 1000 m_resourceAgent->willSendRequest(identifier, request, redirectResponse); 979 1001 980 1002 bool isMainResource = (m_mainResource && m_mainResource->identifier() == identifier); … … 1024 1046 return; 1025 1047 1048 if (m_resourceAgent) 1049 m_resourceAgent->markResourceAsCached(identifier); 1050 1026 1051 if (RefPtr<InspectorResource> resource = getTrackedResource(identifier)) 1027 1052 resource->markAsCached(); 1028 1053 } 1029 1054 1030 void InspectorController::didReceiveResponse(unsigned long identifier, const ResourceResponse& response) 1031 { 1032 if (!enabled()) 1033 return; 1055 void InspectorController::didReceiveResponse(unsigned long identifier, DocumentLoader* loader, const ResourceResponse& response) 1056 { 1057 if (!enabled()) 1058 return; 1059 1060 if (m_resourceAgent) 1061 m_resourceAgent->didReceiveResponse(identifier, loader, response); 1034 1062 1035 1063 if (RefPtr<InspectorResource> resource = getTrackedResource(identifier)) { … … 1050 1078 return; 1051 1079 1080 if (m_resourceAgent) 1081 m_resourceAgent->didReceiveContentLength(identifier, lengthReceived); 1082 1052 1083 RefPtr<InspectorResource> resource = getTrackedResource(identifier); 1053 1084 if (!resource) … … 1064 1095 if (!enabled()) 1065 1096 return; 1097 1098 if (m_resourceAgent) 1099 m_resourceAgent->didFinishLoading(identifier, finishTime); 1066 1100 1067 1101 if (m_timelineAgent) … … 1083 1117 if (!enabled()) 1084 1118 return; 1119 1120 if (m_resourceAgent) 1121 m_resourceAgent->didFailLoading(identifier, error); 1085 1122 1086 1123 if (m_timelineAgent) … … 1109 1146 return; 1110 1147 1148 if (m_resourceAgent) 1149 m_resourceAgent->setOverrideContent(identifier, sourceString, InspectorResource::XHR); 1150 1111 1151 if (m_state->getBoolean(InspectorState::monitoringXHR)) 1112 1152 addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel, "XHR finished loading: \"" + url + "\".", sendLineNumber, sendURL); … … 1127 1167 void InspectorController::scriptImported(unsigned long identifier, const String& sourceString) 1128 1168 { 1129 if (!enabled() || !resourceTrackingEnabled()) 1169 if (!enabled()) 1170 return; 1171 1172 if (m_resourceAgent) 1173 m_resourceAgent->setOverrideContent(identifier, sourceString, InspectorResource::Script); 1174 1175 if (!resourceTrackingEnabled()) 1130 1176 return; 1131 1177 … … 1483 1529 ASSERT(m_inspectedPage); 1484 1530 1531 if (m_resourceAgent) 1532 m_resourceAgent->didCreateWebSocket(identifier, requestURL); 1533 1485 1534 RefPtr<InspectorResource> resource = InspectorResource::createWebSocket(identifier, requestURL, documentURL); 1486 1535 addResource(resource.get()); … … 1492 1541 void InspectorController::willSendWebSocketHandshakeRequest(unsigned long identifier, const WebSocketHandshakeRequest& request) 1493 1542 { 1543 if (m_resourceAgent) 1544 m_resourceAgent->willSendWebSocketHandshakeRequest(identifier, request); 1545 1494 1546 RefPtr<InspectorResource> resource = getTrackedResource(identifier); 1495 1547 if (!resource) … … 1503 1555 void InspectorController::didReceiveWebSocketHandshakeResponse(unsigned long identifier, const WebSocketHandshakeResponse& response) 1504 1556 { 1557 if (m_resourceAgent) 1558 m_resourceAgent->didReceiveWebSocketHandshakeResponse(identifier, response); 1559 1505 1560 RefPtr<InspectorResource> resource = getTrackedResource(identifier); 1506 1561 if (!resource) … … 1516 1571 void InspectorController::didCloseWebSocket(unsigned long identifier) 1517 1572 { 1573 if (m_resourceAgent) 1574 m_resourceAgent->didCloseWebSocket(identifier); 1575 1518 1576 RefPtr<InspectorResource> resource = getTrackedResource(identifier); 1519 1577 if (!resource) -
trunk/WebCore/inspector/InspectorController.h
r69853 r69948 69 69 class InspectorProfilerAgent; 70 70 class InspectorResource; 71 class InspectorResourceAgent; 71 72 class InspectorState; 72 73 class InspectorStorageAgent; … … 166 167 void willSendRequest(unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse); 167 168 void markResourceAsCached(unsigned long identifier); 168 void didReceiveResponse(unsigned long identifier, const ResourceResponse&);169 void didReceiveResponse(unsigned long identifier, DocumentLoader*, const ResourceResponse&); 169 170 void didReceiveContentLength(unsigned long identifier, int lengthReceived); 170 171 void didFinishLoading(unsigned long identifier, double finishTime); … … 345 346 OwnPtr<InspectorFrontend> m_frontend; 346 347 RefPtr<InspectorDOMAgent> m_domAgent; 348 RefPtr<InspectorResourceAgent> m_resourceAgent; 347 349 RefPtr<InspectorStorageAgent> m_storageAgent; 348 350 OwnPtr<InspectorCSSStore> m_cssStore; -
trunk/WebCore/inspector/InspectorResource.cpp
r69947 r69948 190 190 m_loadTiming = response.resourceLoadTiming(); 191 191 m_cached = m_cached || response.wasCached(); 192 193 if (!m_cached && m_loadTiming && m_loadTiming->requestTime) 194 m_responseReceivedTime = m_loadTiming->requestTime + m_loadTiming->receiveHeadersEnd / 1000.0; 195 else 196 m_responseReceivedTime = currentTime(); 197 192 m_responseReceivedTime = currentTime(); 198 193 m_changes.set(TimingChange); 199 194 m_changes.set(ResponseChange); … … 341 336 } 342 337 338 static InspectorResource::Type cachedResourceType(CachedResource* cachedResource) 339 { 340 if (!cachedResource) 341 return InspectorResource::Other; 342 343 switch (cachedResource->type()) { 344 case CachedResource::ImageResource: 345 return InspectorResource::Image; 346 case CachedResource::FontResource: 347 return InspectorResource::Font; 348 case CachedResource::CSSStyleSheet: 349 #if ENABLE(XSLT) 350 case CachedResource::XSLStyleSheet: 351 #endif 352 return InspectorResource::Stylesheet; 353 case CachedResource::Script: 354 return InspectorResource::Script; 355 default: 356 return InspectorResource::Other; 357 } 358 } 359 343 360 InspectorResource::Type InspectorResource::type() const 344 361 { … … 359 376 return Other; 360 377 361 InspectorResource::Type resourceType = InspectorResourceAgent::cachedResourceType(m_frame->document(), m_requestURL);378 InspectorResource::Type resourceType = cachedResourceType(InspectorResourceAgent::cachedResource(m_frame.get(), m_requestURL)); 362 379 if (equalIgnoringFragmentIdentifier(m_requestURL, m_loader->requestURL()) && resourceType == Other) 363 380 return Doc; … … 379 396 380 397 String result; 381 if (!InspectorResourceAgent::resourceContent(m_frame ->document(), m_requestURL, &result))398 if (!InspectorResourceAgent::resourceContent(m_frame.get(), m_requestURL, &result)) 382 399 return String(); 383 400 return result; … … 396 413 397 414 String result; 398 if (!InspectorResourceAgent::resourceContentBase64(m_frame ->document(), m_requestURL, &result))415 if (!InspectorResourceAgent::resourceContentBase64(m_frame.get(), m_requestURL, &result)) 399 416 return String(); 400 417 return result; … … 409 426 void InspectorResource::endTiming(double actualEndTime) 410 427 { 411 if (actualEndTime) {428 if (actualEndTime) 412 429 m_endTime = actualEndTime; 413 // In case of fast load (or in case of cached resources), endTime on network stack 414 // can be less then m_responseReceivedTime measured in WebCore. Normalize it here, 415 // prefer actualEndTime to m_responseReceivedTime. 416 if (m_endTime < m_responseReceivedTime) 417 m_responseReceivedTime = m_endTime; 418 } else 430 else 419 431 m_endTime = currentTime(); 420 432 -
trunk/WebCore/inspector/InspectorResourceAgent.cpp
r69761 r69948 40 40 #include "Frame.h" 41 41 #include "FrameLoader.h" 42 #include "HTTPHeaderMap.h" 43 #include "InspectorFrontend.h" 44 #include "InspectorValues.h" 42 45 #include "KURL.h" 46 #include "Page.h" 47 #include "ProgressTracker.h" 48 #include "ResourceError.h" 49 #include "ResourceRequest.h" 50 #include "ResourceResponse.h" 43 51 #include "SharedBuffer.h" 44 52 #include "TextEncoding.h" 45 53 #include "WebSocketHandshakeRequest.h" 54 #include "WebSocketHandshakeResponse.h" 55 56 #include <wtf/ListHashSet.h> 46 57 #include <wtf/RefPtr.h> 58 #include <wtf/text/StringBuffer.h> 47 59 48 60 #if ENABLE(INSPECTOR) … … 50 62 namespace WebCore { 51 63 52 bool InspectorResourceAgent::resourceContent( Document* document, const KURL& url, String* result)53 { 54 if (! document)64 bool InspectorResourceAgent::resourceContent(Frame* frame, const KURL& url, String* result) 65 { 66 if (!frame) 55 67 return false; 56 68 57 69 String textEncodingName; 58 RefPtr<SharedBuffer> buffer = InspectorResourceAgent::resourceData( document, url, &textEncodingName);70 RefPtr<SharedBuffer> buffer = InspectorResourceAgent::resourceData(frame, url, &textEncodingName); 59 71 60 72 if (buffer) { … … 69 81 } 70 82 71 bool InspectorResourceAgent::resourceContentBase64( Document* document, const KURL& url, String* result)83 bool InspectorResourceAgent::resourceContentBase64(Frame* frame, const KURL& url, String* result) 72 84 { 73 85 Vector<char> out; 74 86 String textEncodingName; 75 RefPtr<SharedBuffer> data = InspectorResourceAgent::resourceData( document, url, &textEncodingName);87 RefPtr<SharedBuffer> data = InspectorResourceAgent::resourceData(frame, url, &textEncodingName); 76 88 if (!data) { 77 89 *result = String(); … … 84 96 } 85 97 86 PassRefPtr<SharedBuffer> InspectorResourceAgent::resourceData( Document* document, const KURL& url, String* textEncodingName)87 { 88 FrameLoader* frameLoader = document->frame()->loader();98 PassRefPtr<SharedBuffer> InspectorResourceAgent::resourceData(Frame* frame, const KURL& url, String* textEncodingName) 99 { 100 FrameLoader* frameLoader = frame->loader(); 89 101 DocumentLoader* loader = frameLoader->documentLoader(); 90 102 if (equalIgnoringFragmentIdentifier(url, loader->url())) { 91 *textEncodingName = document->inputEncoding();103 *textEncodingName = frame->document()->inputEncoding(); 92 104 return frameLoader->documentLoader()->mainResourceData(); 93 105 } 94 106 95 CachedResource* cachedResource = InspectorResourceAgent::cachedResource( document, url);107 CachedResource* cachedResource = InspectorResourceAgent::cachedResource(frame, url); 96 108 if (!cachedResource) 97 109 return 0; … … 112 124 } 113 125 114 InspectorResource::Type InspectorResourceAgent::cachedResourceType(Document* document, const KURL& url) 115 { 116 CachedResource* cachedResource = InspectorResourceAgent::cachedResource(document, url); 126 CachedResource* InspectorResourceAgent::cachedResource(Frame* frame, const KURL& url) 127 { 128 const String& urlString = url.string(); 129 CachedResource* cachedResource = frame->document()->cachedResourceLoader()->cachedResource(urlString); 117 130 if (!cachedResource) 118 return InspectorResource::Other; 119 120 switch (cachedResource->type()) { 131 cachedResource = cache()->resourceForURL(urlString); 132 return cachedResource; 133 } 134 135 static PassRefPtr<InspectorObject> buildObjectForHeaders(const HTTPHeaderMap& headers) 136 { 137 RefPtr<InspectorObject> headersObject = InspectorObject::create(); 138 HTTPHeaderMap::const_iterator end = headers.end(); 139 for (HTTPHeaderMap::const_iterator it = headers.begin(); it != end; ++it) 140 headersObject->setString(it->first.string(), it->second); 141 return headersObject; 142 } 143 144 static PassRefPtr<InspectorObject> buildObjectForTiming(const ResourceLoadTiming& timing) 145 { 146 RefPtr<InspectorObject> timingObject = InspectorObject::create(); 147 timingObject->setNumber("requestTime", timing.requestTime); 148 timingObject->setNumber("proxyStart", timing.proxyStart); 149 timingObject->setNumber("proxyEnd", timing.proxyEnd); 150 timingObject->setNumber("dnsStart", timing.dnsStart); 151 timingObject->setNumber("dnsEnd", timing.dnsEnd); 152 timingObject->setNumber("connectStart", timing.connectStart); 153 timingObject->setNumber("connectEnd", timing.connectEnd); 154 timingObject->setNumber("sslStart", timing.sslStart); 155 timingObject->setNumber("sslEnd", timing.sslEnd); 156 timingObject->setNumber("sendStart", timing.sendStart); 157 timingObject->setNumber("sendEnd", timing.sendEnd); 158 timingObject->setNumber("receiveHeadersEnd", timing.receiveHeadersEnd); 159 return timingObject; 160 } 161 162 static PassRefPtr<InspectorObject> buildObjectForResourceRequest(const ResourceRequest& request) 163 { 164 RefPtr<InspectorObject> requestObject = InspectorObject::create(); 165 requestObject->setString("url", request.url().string()); 166 requestObject->setString("httpMethod", request.httpMethod()); 167 requestObject->setObject("httpHeaderFields", buildObjectForHeaders(request.httpHeaderFields())); 168 if (request.httpBody() && !request.httpBody()->isEmpty()) 169 requestObject->setString("requestFormData", request.httpBody()->flattenToString()); 170 return requestObject; 171 } 172 173 static PassRefPtr<InspectorObject> buildObjectForResourceResponse(const ResourceResponse& response) 174 { 175 RefPtr<InspectorObject> responseObject = InspectorObject::create(); 176 if (response.isNull()) { 177 responseObject->setBoolean("isNull", true); 178 return responseObject; 179 } 180 responseObject->setString("url", response.url().string()); 181 responseObject->setString("mimeType", response.mimeType()); 182 responseObject->setNumber("expectedContentLength", response.expectedContentLength()); 183 responseObject->setString("textEncodingName", response.textEncodingName()); 184 responseObject->setString("suggestedFilename", response.suggestedFilename()); 185 responseObject->setNumber("httpStatusCode", response.httpStatusCode()); 186 responseObject->setString("httpStatusText", response.httpStatusText()); 187 responseObject->setObject("httpHeaderFields", buildObjectForHeaders(response.httpHeaderFields())); 188 responseObject->setBoolean("connectionReused", response.connectionReused()); 189 responseObject->setNumber("connectionID", response.connectionID()); 190 responseObject->setBoolean("wasCached", response.wasCached()); 191 if (response.resourceLoadTiming()) 192 responseObject->setObject("timing", buildObjectForTiming(*response.resourceLoadTiming())); 193 if (response.resourceRawHeaders()) { 194 RefPtr<InspectorObject> rawHeadersObject = InspectorObject::create(); 195 rawHeadersObject->setObject("requestHeaders", buildObjectForHeaders(response.resourceRawHeaders()->requestHeaders)); 196 rawHeadersObject->setObject("responseHeaders", buildObjectForHeaders(response.resourceRawHeaders()->responseHeaders)); 197 responseObject->setObject("rawHeaders", rawHeadersObject); 198 } 199 return responseObject; 200 } 201 202 static PassRefPtr<InspectorObject> buildObjectForMainResource(Frame* frame) 203 { 204 FrameLoader* frameLoader = frame->loader(); 205 DocumentLoader* loader = frameLoader->documentLoader(); 206 207 RefPtr<InspectorObject> resourceObject = InspectorObject::create(); 208 resourceObject->setString("url", loader->url().string()); 209 resourceObject->setString("host", loader->url().host()); 210 resourceObject->setString("path", loader->url().path()); 211 resourceObject->setString("lastPathComponent", loader->url().lastPathComponent()); 212 resourceObject->setString("type", "Document"); 213 resourceObject->setObject("request", buildObjectForResourceRequest(loader->request())); 214 resourceObject->setObject("response", buildObjectForResourceResponse(loader->response())); 215 return resourceObject; 216 } 217 218 static String cachedResourceTypeString(const CachedResource& cachedResource) 219 { 220 switch (cachedResource.type()) { 121 221 case CachedResource::ImageResource: 122 return InspectorResource::Image; 222 return "Image"; 223 break; 123 224 case CachedResource::FontResource: 124 return InspectorResource::Font;225 return "Font"; 125 226 case CachedResource::CSSStyleSheet: 227 // Fall through. 126 228 #if ENABLE(XSLT) 127 229 case CachedResource::XSLStyleSheet: 128 230 #endif 129 return InspectorResource::Stylesheet;231 return "Stylesheet"; 130 232 case CachedResource::Script: 131 return InspectorResource::Script;233 return "Script"; 132 234 default: 133 return InspectorResource::Other; 134 } 135 } 136 137 CachedResource* InspectorResourceAgent::cachedResource(Document* document, const KURL& url) 138 { 139 const String& urlString = url.string(); 140 CachedResource* cachedResource = document->cachedResourceLoader()->cachedResource(urlString); 141 if (!cachedResource) 142 cachedResource = cache()->resourceForURL(urlString); 143 return cachedResource; 235 } 236 return "Other"; 237 } 238 239 static PassRefPtr<InspectorObject> buildObjectForCachedResource(const CachedResource& cachedResource) 240 { 241 RefPtr<InspectorObject> resourceObject = InspectorObject::create(); 242 resourceObject->setString("url", cachedResource.url()); 243 resourceObject->setString("type", cachedResourceTypeString(cachedResource)); 244 resourceObject->setNumber("encodedSize", cachedResource.encodedSize()); 245 resourceObject->setObject("response", buildObjectForResourceResponse(cachedResource.response())); 246 return resourceObject; 247 } 248 249 static PassRefPtr<InspectorObject> buildObjectForFrameResources(Frame* frame) 250 { 251 RefPtr<InspectorObject> frameResources = InspectorObject::create(); 252 frameResources->setNumber("frameID", reinterpret_cast<uintptr_t>(frame)); 253 frameResources->setObject("mainResource", buildObjectForMainResource(frame)); 254 RefPtr<InspectorArray> subresources = InspectorArray::create(); 255 frameResources->setArray("subresources", subresources); 256 257 const CachedResourceLoader::DocumentResourceMap& allResources = frame->document()->cachedResourceLoader()->allCachedResources(); 258 CachedResourceLoader::DocumentResourceMap::const_iterator end = allResources.end(); 259 for (CachedResourceLoader::DocumentResourceMap::const_iterator it = allResources.begin(); it != end; ++it) { 260 CachedResource* cachedResource = it->second.get(); 261 if (cachedResource) 262 subresources->pushValue(buildObjectForCachedResource(*cachedResource)); 263 } 264 return frameResources; 265 } 266 267 InspectorResourceAgent::~InspectorResourceAgent() 268 { 269 } 270 271 void InspectorResourceAgent::identifierForInitialRequest(unsigned long identifier, const KURL& url, DocumentLoader* loader, bool isMainResource) 272 { 273 m_frontend->identifierForInitialRequest(identifier, url.string(), reinterpret_cast<uintptr_t>(loader->frame()), isMainResource); 274 } 275 276 void InspectorResourceAgent::willSendRequest(unsigned long identifier, ResourceRequest& request, const ResourceResponse& redirectResponse) 277 { 278 m_frontend->willSendRequest(identifier, currentTime(), buildObjectForResourceRequest(request), buildObjectForResourceResponse(redirectResponse)); 279 } 280 281 void InspectorResourceAgent::markResourceAsCached(unsigned long identifier) 282 { 283 m_frontend->markResourceAsCached(identifier); 284 } 285 286 void InspectorResourceAgent::didReceiveResponse(unsigned long identifier, DocumentLoader* loader, const ResourceResponse& response) 287 { 288 String type = "Other"; 289 if (loader) { 290 if (equalIgnoringFragmentIdentifier(response.url(), loader->frameLoader()->iconURL())) 291 type = "Image"; 292 else { 293 CachedResource* cachedResource = InspectorResourceAgent::cachedResource(loader->frame(), response.url()); 294 if (cachedResource) 295 type = cachedResourceTypeString(*cachedResource); 296 297 if (equalIgnoringFragmentIdentifier(response.url(), loader->url()) && type == "Other") 298 type = "Document"; 299 } 300 } 301 m_frontend->didReceiveResponse(identifier, currentTime(), type, buildObjectForResourceResponse(response)); 302 } 303 304 void InspectorResourceAgent::didReceiveContentLength(unsigned long identifier, int lengthReceived) 305 { 306 m_frontend->didReceiveContentLength(identifier, currentTime(), lengthReceived); 307 } 308 309 void InspectorResourceAgent::didFinishLoading(unsigned long identifier, double finishTime) 310 { 311 if (!finishTime) 312 finishTime = currentTime(); 313 314 m_frontend->didFinishLoading(identifier, finishTime); 315 } 316 317 void InspectorResourceAgent::didFailLoading(unsigned long identifier, const ResourceError& error) 318 { 319 m_frontend->didFailLoading(identifier, currentTime(), error.localizedDescription()); 320 } 321 322 void InspectorResourceAgent::didLoadResourceFromMemoryCache(DocumentLoader* loader, const CachedResource* resource) 323 { 324 Frame* frame = loader->frame(); 325 m_frontend->didLoadResourceFromMemoryCache(currentTime(), reinterpret_cast<uintptr_t>(frame), buildObjectForCachedResource(*resource)); 326 } 327 328 void InspectorResourceAgent::setOverrideContent(unsigned long identifier, const String& sourceString, InspectorResource::Type type) 329 { 330 String typeString; 331 switch (type) { 332 case InspectorResource::XHR: 333 typeString = "XHR"; 334 break; 335 case InspectorResource::Script: 336 typeString = "Script"; 337 break; 338 default: 339 typeString = "Other"; 340 } 341 342 m_frontend->setOverrideContent(identifier, sourceString, typeString); 343 } 344 345 void InspectorResourceAgent::didCommitLoad(DocumentLoader* loader) 346 { 347 Frame* frame = loader->frame(); 348 m_frontend->didCommitLoad(reinterpret_cast<uintptr_t>(frame)); 349 } 350 351 void InspectorResourceAgent::frameDetachedFromParent(Frame* frame) 352 { 353 m_frontend->frameDetachedFromParent(reinterpret_cast<uintptr_t>(frame)); 354 } 355 356 357 #if ENABLE(WEB_SOCKETS) 358 359 // FIXME: More this into the front-end? 360 // Create human-readable binary representation, like "01:23:45:67:89:AB:CD:EF". 361 static String createReadableStringFromBinary(const unsigned char* value, size_t length) 362 { 363 ASSERT(length > 0); 364 static const char hexDigits[17] = "0123456789ABCDEF"; 365 size_t bufferSize = length * 3 - 1; 366 StringBuffer buffer(bufferSize); 367 size_t index = 0; 368 for (size_t i = 0; i < length; ++i) { 369 if (i > 0) 370 buffer[index++] = ':'; 371 buffer[index++] = hexDigits[value[i] >> 4]; 372 buffer[index++] = hexDigits[value[i] & 0xF]; 373 } 374 ASSERT(index == bufferSize); 375 return String::adopt(buffer); 376 } 377 378 void InspectorResourceAgent::didCreateWebSocket(unsigned long identifier, const KURL& requestURL) 379 { 380 m_frontend->didCreateWebSocket(identifier, requestURL.string()); 381 } 382 383 void InspectorResourceAgent::willSendWebSocketHandshakeRequest(unsigned long identifier, const WebSocketHandshakeRequest& request) 384 { 385 RefPtr<InspectorObject> requestObject = InspectorObject::create(); 386 requestObject->setObject("webSocketHeaderFields", buildObjectForHeaders(request.headerFields())); 387 requestObject->setString("webSocketRequestKey3", createReadableStringFromBinary(request.key3().value, sizeof(request.key3().value))); 388 m_frontend->willSendWebSocketHandshakeRequest(identifier, currentTime(), requestObject); 389 } 390 391 void InspectorResourceAgent::didReceiveWebSocketHandshakeResponse(unsigned long identifier, const WebSocketHandshakeResponse& response) 392 { 393 RefPtr<InspectorObject> responseObject = InspectorObject::create(); 394 responseObject->setNumber("statusCode", response.statusCode()); 395 responseObject->setString("statusText", response.statusText()); 396 responseObject->setObject("webSocketHeaderFields", buildObjectForHeaders(response.headerFields())); 397 responseObject->setString("webSocketChallengeResponse", createReadableStringFromBinary(response.challengeResponse().value, sizeof(response.challengeResponse().value))); 398 m_frontend->didReceiveWebSocketHandshakeResponse(identifier, currentTime(), responseObject); 399 } 400 401 void InspectorResourceAgent::didCloseWebSocket(unsigned long identifier) 402 { 403 m_frontend->didCloseWebSocket(identifier, currentTime()); 404 } 405 #endif // ENABLE(WEB_SOCKETS) 406 407 void InspectorResourceAgent::cachedResources(RefPtr<InspectorArray>* resources) 408 { 409 for (Frame* frame = m_page->mainFrame(); frame; frame = frame->tree()->traverseNext(m_page->mainFrame())) 410 (*resources)->pushObject(buildObjectForFrameResources(frame)); 411 } 412 413 void InspectorResourceAgent::resourceContent(unsigned long frameID, const String& url, String* content) 414 { 415 RefPtr<InspectorArray> frameResources = InspectorArray::create(); 416 for (Frame* frame = m_page->mainFrame(); frame; frame = frame->tree()->traverseNext(m_page->mainFrame())) { 417 if (reinterpret_cast<uintptr_t>(frame) != frameID) 418 continue; 419 InspectorResourceAgent::resourceContent(frame, KURL(ParsedURLString, url), content); 420 break; 421 } 422 } 423 424 InspectorResourceAgent::InspectorResourceAgent(Page* page, InspectorFrontend* frontend) 425 : m_page(page) 426 , m_frontend(frontend) 427 { 144 428 } 145 429 -
trunk/WebCore/inspector/InspectorResourceAgent.h
r69761 r69948 33 33 34 34 #include "InspectorResource.h" 35 #include "PlatformString.h" 35 36 36 37 #include <wtf/PassRefPtr.h> 38 #include <wtf/Vector.h> 37 39 38 40 #if ENABLE(INSPECTOR) … … 46 48 class CachedResource; 47 49 class Document; 50 class DocumentLoader; 51 class InspectorArray; 52 class InspectorObject; 53 class InspectorFrontend; 48 54 class KURL; 55 class Page; 56 class ResourceError; 57 class ResourceRequest; 58 class ResourceResponse; 49 59 class SharedBuffer; 50 60 51 class InspectorResourceAgent { 61 #if ENABLE(WEB_SOCKETS) 62 class WebSocketHandshakeRequest; 63 class WebSocketHandshakeResponse; 64 #endif 65 66 class InspectorResourceAgent : public RefCounted<InspectorResourceAgent> { 52 67 public: 53 static bool resourceContent(Document*, const KURL&, String* result); 54 static bool resourceContentBase64(Document*, const KURL&, String* result); 55 static PassRefPtr<SharedBuffer> resourceData(Document*, const KURL&, String* textEncodingName); 56 static InspectorResource::Type cachedResourceType(Document*, const KURL&); 57 static CachedResource* cachedResource(Document*, const KURL&); 68 static PassRefPtr<InspectorResourceAgent> create(Page* page, InspectorFrontend* frontend) 69 { 70 return adoptRef(new InspectorResourceAgent(page, frontend)); 71 } 72 73 static bool resourceContent(Frame*, const KURL&, String* result); 74 static bool resourceContentBase64(Frame*, const KURL&, String* result); 75 static PassRefPtr<SharedBuffer> resourceData(Frame*, const KURL&, String* textEncodingName); 76 static CachedResource* cachedResource(Frame*, const KURL&); 77 78 ~InspectorResourceAgent(); 79 80 void identifierForInitialRequest(unsigned long identifier, const KURL&, DocumentLoader*, bool isMainResource); 81 void willSendRequest(unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse); 82 void markResourceAsCached(unsigned long identifier); 83 void didReceiveResponse(unsigned long identifier, DocumentLoader* laoder, const ResourceResponse&); 84 void didReceiveContentLength(unsigned long identifier, int lengthReceived); 85 void didFinishLoading(unsigned long identifier, double finishTime); 86 void didFailLoading(unsigned long identifier, const ResourceError&); 87 void didLoadResourceFromMemoryCache(DocumentLoader*, const CachedResource*); 88 void setOverrideContent(unsigned long identifier, const String& sourceString, InspectorResource::Type); 89 void didCommitLoad(DocumentLoader*); 90 void frameDetachedFromParent(Frame*); 91 92 #if ENABLE(WEB_SOCKETS) 93 void didCreateWebSocket(unsigned long identifier, const KURL& requestURL); 94 void willSendWebSocketHandshakeRequest(unsigned long identifier, const WebSocketHandshakeRequest&); 95 void didReceiveWebSocketHandshakeResponse(unsigned long identifier, const WebSocketHandshakeResponse&); 96 void didCloseWebSocket(unsigned long identifier); 97 #endif 98 99 // Called from frontend 100 void cachedResources(RefPtr<InspectorArray>*); 101 void resourceContent(unsigned long frameID, const String& url, String* content); 102 103 private: 104 InspectorResourceAgent(Page* page, InspectorFrontend* frontend); 105 106 Page* m_page; 107 InspectorFrontend* m_frontend; 58 108 }; 59 109 -
trunk/WebCore/inspector/InspectorStyleSheet.cpp
r69761 r69948 469 469 return false; 470 470 471 return InspectorResourceAgent::resourceContent(ownerDocument() , m_pageStyleSheet->finalURL(), result);471 return InspectorResourceAgent::resourceContent(ownerDocument()->frame(), m_pageStyleSheet->finalURL(), result); 472 472 } 473 473 -
trunk/WebCore/inspector/front-end/DataGrid.js
r69400 r69948 662 662 663 663 var sortedRows = Array.prototype.slice.call(childNodes, 0, childNodes.length - 1); 664 sortedRows.sort(comparatorWrapper .bind(this));664 sortedRows.sort(comparatorWrapper); 665 665 var sortedRowsLength = sortedRows.length; 666 666 -
trunk/WebCore/inspector/front-end/ExtensionServer.js
r69185 r69948 241 241 var resource = null; 242 242 243 resource = typeof id === "number" ? WebInspector.resources[id] :WebInspector.resourceForURL(id);243 resource = WebInspector.resources[id] || WebInspector.resourceForURL(id); 244 244 if (!resource) 245 245 return this._status.E_NOTFOUND(typeof id + ": " + id); … … 285 285 } 286 286 287 if (typeof message.ids === "number") {287 if (typeof message.ids === "number") 288 288 ids = [ message.ids ]; 289 } else if (message.ids instanceof Array) {289 else if (message.ids instanceof Array) 290 290 ids = message.ids; 291 } else {291 else 292 292 return this._status.E_BADARGTYPE("message.ids", "Array", typeof message.ids); 293 }294 293 295 294 for (var i = 0; i < ids.length; ++i) { -
trunk/WebCore/inspector/front-end/NetworkPanel.js
r69400 r69948 128 128 129 129 if (this._summaryBarElement.parentElement !== this.element && offsetHeight > (this._dataGrid.children.length - 1) * rowHeight + summaryBarHeight) { 130 this._dataGrid.removeChild(this._summaryBarRowNode); 130 // Glue status to bottom. 131 if (this._summaryBarRowNode) { 132 this._dataGrid.removeChild(this._summaryBarRowNode); 133 delete this._summaryBarRowNode; 134 } 131 135 this._summaryBarElement.addStyleClass("network-summary-bar-bottom"); 132 delete this._summaryBarRowNode;133 136 this.element.appendChild(this._summaryBarElement); 134 137 this._dataGrid.element.style.bottom = "20px"; … … 137 140 138 141 if (!this._summaryBarRowNode && offsetHeight - summaryBarHeight < this._dataGrid.children.length * rowHeight) { 142 // Glue status to table. 139 143 this._summaryBarRowNode = new WebInspector.NetworkTotalGridNode(this._summaryBarElement); 140 144 this._summaryBarElement.removeStyleClass("network-summary-bar-bottom"); … … 143 147 this._sortItems(); 144 148 } 149 }, 150 151 _resetSummaryBar: function() 152 { 153 delete this._summaryBarRowNode; 154 this._summaryBarElement.parentElement.removeChild(this._summaryBarElement); 155 this._updateSummaryBar(); 145 156 }, 146 157 … … 350 361 this._positionSummaryBar(); // Grid is growing. 351 362 var numRequests = this._resources.length; 363 364 if (!numRequests) { 365 if (this._summaryBarElement._isDisplayingWarning) 366 return; 367 this._summaryBarElement._isDisplayingWarning = true; 368 369 var img = document.createElement("img"); 370 img.src = "Images/warningIcon.png"; 371 this._summaryBarElement.removeChildren(); 372 this._summaryBarElement.appendChild(img); 373 this._summaryBarElement.appendChild(document.createTextNode(" ")); 374 this._summaryBarElement.appendChild(document.createTextNode( 375 WebInspector.UIString("No requests captured. Reload the page to see detailed information on the network activity."))); 376 return; 377 } 378 delete this._summaryBarElement._isDisplayingWarning; 379 352 380 var transferSize = 0; 353 381 var baseTime = -1; … … 356 384 var resource = this._resources[i]; 357 385 transferSize += resource.cached ? 0 : resource.transferSize; 358 if (resource === WebInspector.mainResource)386 if (resource.isMainResource) 359 387 baseTime = resource.startTime; 360 388 if (resource.endTime > maxTime) … … 363 391 var text = String.sprintf(WebInspector.UIString("%d requests"), numRequests); 364 392 text += " \u2758 " + String.sprintf(WebInspector.UIString("%s transferred"), Number.bytesToString(transferSize)); 365 if (baseTime !== -1 && this._mainResourceLoadTime !== -1 && this._mainResourceDOMContentTime !== -1 ) {393 if (baseTime !== -1 && this._mainResourceLoadTime !== -1 && this._mainResourceDOMContentTime !== -1 && this._mainResourceDOMContentTime > baseTime) { 366 394 text += " \u2758 " + String.sprintf(WebInspector.UIString("%s (onload: %s, DOMContentLoaded: %s)"), 367 395 Number.secondsToString(maxTime - baseTime), … … 579 607 { 580 608 this._clearButton = new WebInspector.StatusBarButton(WebInspector.UIString("Clear"), "clear-status-bar-item"); 581 this._clearButton.addEventListener("click", this. reset.bind(this), false);609 this._clearButton.addEventListener("click", this._reset.bind(this), false); 582 610 583 611 this._largerResourcesButton = new WebInspector.StatusBarButton(WebInspector.UIString("Use small resource rows."), "network-larger-resources-status-bar-item"); … … 719 747 }, 720 748 721 reset: function()749 _reset: function() 722 750 { 723 751 this._popoverHelper.hidePopup(); … … 725 753 726 754 this._toggleGridMode(); 727 728 delete this.currentQuery;729 this.searchCanceled();730 731 if (this._resources) {732 var resourcesLength = this._resources.length;733 for (var i = 0; i < resourcesLength; ++i) {734 var resource = this._resources[i];735 736 resource.warnings = 0;737 resource.errors = 0;738 739 delete resource._resourcesView;740 }741 }742 755 743 756 // Begin reset timeline 744 757 if (this._calculator) 745 758 this._calculator.reset(); 746 747 if (this._resources) {748 var itemsLength = this._resources.length;749 for (var i = 0; i < itemsLength; ++i) {750 var item = this._resources[i];751 }752 }753 759 754 760 this._resources = []; … … 765 771 766 772 this._viewsContainerElement.removeChildren(); 773 this._resetSummaryBar(); 767 774 }, 768 775 … … 787 794 if (newView.__proto__ === resource._resourcesView.__proto__) 788 795 return; 789 790 if (!this.currentQuery && this._resourceGridNode(resource))791 this._resourceGridNode(resource).updateErrorsAndWarnings();792 796 793 797 var oldView = resource._resourcesView; … … 1098 1102 WebInspector.NetworkPanel.prototype.__proto__ = WebInspector.Panel.prototype; 1099 1103 1100 WebInspector.getResourceContent = function(identifier, callback)1101 {1102 InspectorBackend.getResourceContent(identifier, false, callback);1103 }1104 1105 1104 WebInspector.NetworkBaseCalculator = function() 1106 1105 { … … 1612 1611 _refreshLabelPositions: function() 1613 1612 { 1613 if (!this._percentages) 1614 return; 1614 1615 this._labelLeftElement.style.removeProperty("left"); 1615 1616 this._labelLeftElement.style.removeProperty("right"); -
trunk/WebCore/inspector/front-end/Resource.js
r69947 r69948 165 165 get responseReceivedTime() 166 166 { 167 if (this.timing && this.timing.requestTime) { 168 // Calculate responseReceivedTime from timing data for better accuracy. 169 // Timing's requestTime is a baseline in seconds, rest of the numbers there are ticks in millis. 170 return this.timing.requestTime + this.timing.receiveHeadersEnd / 1000.0; 171 } 167 172 return this._responseReceivedTime || -1; 168 173 }, … … 186 191 set endTime(x) 187 192 { 193 // In case of fast load (or in case of cached resources), endTime on network stack 194 // can be less then m_responseReceivedTime measured in WebCore. Normalize it here, 195 // prefer actualEndTime to m_responseReceivedTime. 196 if (x < this.responseReceivedTime) 197 this.responseReceivedTime = x; 198 188 199 if (this._endTime === x) 189 200 return; … … 610 621 if (msg) 611 622 WebInspector.console.addMessage(msg); 623 }, 624 625 getContents: function(callback) 626 { 627 // FIXME: eventually, cached resources will have no identifiers. 628 if (this.frameID) 629 InspectorBackend.resourceContent(this.frameID, this.url, callback); 630 else 631 InspectorBackend.getResourceContent(this.identifier, false, callback); 612 632 } 613 633 } -
trunk/WebCore/inspector/front-end/ResourcesPanel.js
r69203 r69948 1292 1292 WebInspector.ResourcesPanel.prototype.__proto__ = WebInspector.Panel.prototype; 1293 1293 1294 WebInspector.getResourceContent = function(identifier, callback)1295 {1296 InspectorBackend.getResourceContent(identifier, false, callback);1297 }1298 1299 1294 WebInspector.ResourceBaseCalculator = function() 1300 1295 { -
trunk/WebCore/inspector/front-end/SourceView.js
r69276 r69948 84 84 85 85 delete this._frameNeedsSetup; 86 WebInspector.getResourceContent(this.resource.identifier,this._contentLoaded.bind(this));86 this.resource.getContents(this._contentLoaded.bind(this)); 87 87 }, 88 88 -
trunk/WebCore/inspector/front-end/WebKit.qrc
r68636 r69948 69 69 <file>Resource.js</file> 70 70 <file>ResourceCategory.js</file> 71 <file>ResourceManager.js</file> 71 72 <file>ResourcesPanel.js</file> 72 73 <file>ResourceView.js</file> -
trunk/WebCore/inspector/front-end/inspector.html
r68636 r69948 62 62 <script type="text/javascript" src="TimelineGrid.js"></script> 63 63 <script type="text/javascript" src="Resource.js"></script> 64 <script type="text/javascript" src="ResourceManager.js"></script> 64 65 <script type="text/javascript" src="ResourceCategory.js"></script> 65 66 <script type="text/javascript" src="Database.js"></script> -
trunk/WebCore/inspector/front-end/inspector.js
r69947 r69948 508 508 // TODO: Remove class="hidden" from inspector.html on button#changes-status-bar-item 509 509 this.drawer.visibleView = this.console; 510 this.resourceManager = new WebInspector.ResourceManager(); 510 511 this.domAgent = new WebInspector.DOMAgent(); 511 512 … … 1221 1222 this.panels.resources.addResource(resource); 1222 1223 this.panels.audits.resourceStarted(resource); 1223 if (this.panels.network)1224 this.panels.network.addResource(resource);1225 1224 } 1226 1225 … … 1282 1281 resource.endTime = payload.endTime; 1283 1282 } 1284 1285 if (this.panels.network) 1286 this.panels.network.refreshResource(resource); 1287 } 1288 1283 } 1289 1284 1290 1285 WebInspector.domContentEventFired = function(time) -
trunk/WebCore/inspector/front-end/networkPanel.css
r69400 r69948 61 61 font-weight: bold; 62 62 } 63 64 .network.panel .data-grid tr.filler { 65 background-color: white; 66 } 67 63 68 .network.panel .data-grid td.name-column { 64 69 font-weight: bold; -
trunk/WebCore/loader/ResourceLoadNotifier.cpp
r67553 r69948 137 137 #if ENABLE(INSPECTOR) 138 138 if (Page* page = m_frame->page()) 139 page->inspectorController()->didReceiveResponse(identifier, r);139 page->inspectorController()->didReceiveResponse(identifier, loader, r); 140 140 #endif 141 141 } -
trunk/WebCore/loader/appcache/ApplicationCacheGroup.cpp
r69048 r69948 524 524 applicationCacheAgent->didReceiveManifestResponse(m_currentResourceIdentifier, response); 525 525 } else 526 page->inspectorController()->didReceiveResponse(m_currentResourceIdentifier, response);526 page->inspectorController()->didReceiveResponse(m_currentResourceIdentifier, m_frame->loader()->documentLoader(), response); 527 527 } 528 528 #endif -
trunk/WebKit/chromium/ChangeLog
r69942 r69948 1 2010-10-17 Pavel Feldman <pfeldman@chromium.org> 2 3 Reviewed by Yury Semikhatsky. 4 5 Web Inspector: Introduce InspectorResourceAgent.h/cpp and ResourceManager.js to 6 fill network panel with data. 7 https://bugs.webkit.org/show_bug.cgi?id=47779 8 9 * src/WebDevToolsAgentImpl.cpp: 10 (WebKit::WebDevToolsAgentImpl::didReceiveResponse): 11 1 12 2010-10-17 Pascal Massimino <pascal.massimino@gmail.com> 2 13 -
trunk/WebKit/chromium/src/WebDevToolsAgentImpl.cpp
r68781 r69948 334 334 { 335 335 if (InspectorController* ic = inspectorController()) 336 ic->didReceiveResponse(resourceId, response.toResourceResponse());336 ic->didReceiveResponse(resourceId, 0, response.toResourceResponse()); 337 337 } 338 338
Note: See TracChangeset
for help on using the changeset viewer.