Chromium Code Reviews| 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 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 304 #endif | 304 #endif |
| 305 } | 305 } |
| 306 | 306 |
| 307 DEFINE_TRACE(InspectorResourceAgent) | 307 DEFINE_TRACE(InspectorResourceAgent) |
| 308 { | 308 { |
| 309 visitor->trace(m_pageAgent); | 309 visitor->trace(m_pageAgent); |
| 310 visitor->trace(m_replayXHRs); | 310 visitor->trace(m_replayXHRs); |
| 311 visitor->trace(m_replayXHRsToBeDeleted); | 311 visitor->trace(m_replayXHRsToBeDeleted); |
| 312 | 312 |
| 313 #if ENABLE(OILPAN) | 313 #if ENABLE(OILPAN) |
| 314 visitor->trace(m_pendingXHRReplayData); | 314 visitor->trace(m_pendingRequest); |
| 315 #endif | 315 #endif |
| 316 InspectorBaseAgent::trace(visitor); | 316 InspectorBaseAgent::trace(visitor); |
| 317 } | 317 } |
| 318 | 318 |
| 319 void InspectorResourceAgent::willSendRequest(unsigned long identifier, DocumentL oader* loader, ResourceRequest& request, const ResourceResponse& redirectRespons e, const FetchInitiatorInfo& initiatorInfo) | 319 void InspectorResourceAgent::willSendRequest(unsigned long identifier, DocumentL oader* loader, ResourceRequest& request, const ResourceResponse& redirectRespons e, const FetchInitiatorInfo& initiatorInfo) |
| 320 { | 320 { |
| 321 // Ignore the request initiated internally. | 321 // Ignore the request initiated internally. |
| 322 if (initiatorInfo.name == FetchInitiatorTypeNames::internal) | 322 if (initiatorInfo.name == FetchInitiatorTypeNames::internal) |
| 323 return; | 323 return; |
| 324 | 324 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 405 cachedResource = InspectorPageAgent::cachedResource(frame, response.url( )); | 405 cachedResource = InspectorPageAgent::cachedResource(frame, response.url( )); |
| 406 | 406 |
| 407 if (cachedResource && resourceResponse && response.mimeType().isEmpty()) { | 407 if (cachedResource && resourceResponse && response.mimeType().isEmpty()) { |
| 408 // Use mime type from cached resource in case the one in response is emp ty. | 408 // Use mime type from cached resource in case the one in response is emp ty. |
| 409 resourceResponse->setString(TypeBuilder::Network::Response::MimeType, ca chedResource->response().mimeType()); | 409 resourceResponse->setString(TypeBuilder::Network::Response::MimeType, ca chedResource->response().mimeType()); |
| 410 } | 410 } |
| 411 | 411 |
| 412 InspectorPageAgent::ResourceType type = cachedResource ? InspectorPageAgent: :cachedResourceType(*cachedResource) : InspectorPageAgent::OtherResource; | 412 InspectorPageAgent::ResourceType type = cachedResource ? InspectorPageAgent: :cachedResourceType(*cachedResource) : InspectorPageAgent::OtherResource; |
| 413 // Override with already discovered resource type. | 413 // Override with already discovered resource type. |
| 414 InspectorPageAgent::ResourceType savedType = m_resourcesData->resourceType(r equestId); | 414 InspectorPageAgent::ResourceType savedType = m_resourcesData->resourceType(r equestId); |
| 415 if (savedType == InspectorPageAgent::ScriptResource || savedType == Inspecto rPageAgent::XHRResource || savedType == InspectorPageAgent::DocumentResource) | 415 if (savedType == InspectorPageAgent::ScriptResource || savedType == Inspecto rPageAgent::XHRResource || savedType == InspectorPageAgent::DocumentResource |
| 416 || savedType == InspectorPageAgent::FetchResource || savedType == Inspec torPageAgent::EventSourceResource) { | |
| 416 type = savedType; | 417 type = savedType; |
| 417 | 418 } |
| 418 if (type == InspectorPageAgent::DocumentResource && loader && loader->substi tuteData().isValid()) | 419 if (type == InspectorPageAgent::DocumentResource && loader && loader->substi tuteData().isValid()) |
| 419 return; | 420 return; |
| 420 | 421 |
| 421 if (cachedResource) | 422 if (cachedResource) |
| 422 m_resourcesData->addResource(requestId, cachedResource); | 423 m_resourcesData->addResource(requestId, cachedResource); |
| 423 String frameId = IdentifiersFactory::frameId(frame); | 424 String frameId = IdentifiersFactory::frameId(frame); |
| 424 String loaderId = loader ? IdentifiersFactory::loaderId(loader) : ""; | 425 String loaderId = loader ? IdentifiersFactory::loaderId(loader) : ""; |
| 425 m_resourcesData->responseReceived(requestId, frameId, response); | 426 m_resourcesData->responseReceived(requestId, frameId, response); |
| 426 m_resourcesData->setResourceType(requestId, type); | 427 m_resourcesData->setResourceType(requestId, type); |
| 427 | 428 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 479 m_resourcesData->setResourceContent(IdentifiersFactory::requestId(identifier ), sourceString); | 480 m_resourcesData->setResourceContent(IdentifiersFactory::requestId(identifier ), sourceString); |
| 480 } | 481 } |
| 481 | 482 |
| 482 void InspectorResourceAgent::didReceiveScriptResponse(unsigned long identifier) | 483 void InspectorResourceAgent::didReceiveScriptResponse(unsigned long identifier) |
| 483 { | 484 { |
| 484 m_resourcesData->setResourceType(IdentifiersFactory::requestId(identifier), InspectorPageAgent::ScriptResource); | 485 m_resourcesData->setResourceType(IdentifiersFactory::requestId(identifier), InspectorPageAgent::ScriptResource); |
| 485 } | 486 } |
| 486 | 487 |
| 487 void InspectorResourceAgent::documentThreadableLoaderStartedLoadingForClient(uns igned long identifier, ThreadableLoaderClient* client) | 488 void InspectorResourceAgent::documentThreadableLoaderStartedLoadingForClient(uns igned long identifier, ThreadableLoaderClient* client) |
| 488 { | 489 { |
| 489 if (!client) | 490 if (!client || client != m_pendingRequest) |
|
dgozman
2015/07/31 06:50:38
Should we ASSERT(client == m_pendingRequest) if bo
| |
| 490 return; | 491 return; |
| 491 | 492 |
| 492 if (client == m_pendingEventSource) { | 493 m_knownRequestIdMap.set(client, identifier); |
| 493 m_eventSourceRequestIdMap.set(client, identifier); | 494 String requestId = IdentifiersFactory::requestId(identifier); |
| 494 m_pendingEventSource = nullptr; | 495 m_resourcesData->setResourceType(requestId, m_pendingRequestType); |
| 495 } | 496 if (m_pendingRequestType == InspectorPageAgent::XHRResource) { |
| 496 | |
| 497 if (client == m_pendingXHR) { | |
| 498 String requestId = IdentifiersFactory::requestId(identifier); | |
| 499 m_resourcesData->setResourceType(requestId, InspectorPageAgent::XHRResou rce); | |
| 500 m_resourcesData->setXHRReplayData(requestId, m_pendingXHRReplayData.get( )); | 497 m_resourcesData->setXHRReplayData(requestId, m_pendingXHRReplayData.get( )); |
| 501 m_xhrRequestIdMap.set(client, identifier); | |
| 502 m_pendingXHR = nullptr; | |
| 503 m_pendingXHRReplayData.clear(); | 498 m_pendingXHRReplayData.clear(); |
| 504 } | 499 } |
| 500 m_pendingRequest = nullptr; | |
| 505 } | 501 } |
| 506 | 502 |
| 507 void InspectorResourceAgent::willLoadXHR(XMLHttpRequest* xhr, ThreadableLoaderCl ient* client, const AtomicString& method, const KURL& url, bool async, PassRefPt r<FormData> formData, const HTTPHeaderMap& headers, bool includeCredentials) | 503 void InspectorResourceAgent::willLoadXHR(XMLHttpRequest* xhr, ThreadableLoaderCl ient* client, const AtomicString& method, const KURL& url, bool async, PassRefPt r<FormData> formData, const HTTPHeaderMap& headers, bool includeCredentials) |
| 508 { | 504 { |
| 509 ASSERT(xhr); | 505 ASSERT(xhr); |
| 510 ASSERT(!m_pendingXHR); | 506 ASSERT(!m_pendingRequest); |
| 511 m_pendingXHR = client; | 507 m_pendingRequest = client; |
| 508 m_pendingRequestType = InspectorPageAgent::XHRResource; | |
| 512 m_pendingXHRReplayData = XHRReplayData::create(xhr->executionContext(), meth od, urlWithoutFragment(url), async, formData.get(), includeCredentials); | 509 m_pendingXHRReplayData = XHRReplayData::create(xhr->executionContext(), meth od, urlWithoutFragment(url), async, formData.get(), includeCredentials); |
| 513 for (const auto& header : headers) | 510 for (const auto& header : headers) |
| 514 m_pendingXHRReplayData->addHeader(header.key, header.value); | 511 m_pendingXHRReplayData->addHeader(header.key, header.value); |
| 515 } | 512 } |
| 516 | 513 |
| 517 void InspectorResourceAgent::delayedRemoveReplayXHR(XMLHttpRequest* xhr) | 514 void InspectorResourceAgent::delayedRemoveReplayXHR(XMLHttpRequest* xhr) |
| 518 { | 515 { |
| 519 if (!m_replayXHRs.contains(xhr)) | 516 if (!m_replayXHRs.contains(xhr)) |
| 520 return; | 517 return; |
| 521 | 518 |
| 522 m_replayXHRsToBeDeleted.add(xhr); | 519 m_replayXHRsToBeDeleted.add(xhr); |
| 523 m_replayXHRs.remove(xhr); | 520 m_replayXHRs.remove(xhr); |
| 524 m_removeFinishedReplayXHRTimer.startOneShot(0, FROM_HERE); | 521 m_removeFinishedReplayXHRTimer.startOneShot(0, FROM_HERE); |
| 525 } | 522 } |
| 526 | 523 |
| 527 void InspectorResourceAgent::didFailXHRLoading(ExecutionContext* context, XMLHtt pRequest* xhr, ThreadableLoaderClient* client, const AtomicString& method, const String& url) | 524 void InspectorResourceAgent::didFailXHRLoading(ExecutionContext* context, XMLHtt pRequest* xhr, ThreadableLoaderClient* client, const AtomicString& method, const String& url) |
| 528 { | 525 { |
| 529 didFinishXHRInternal(context, xhr, client, method, url, false); | 526 didFinishXHRInternal(context, xhr, client, method, url, false); |
| 530 } | 527 } |
| 531 | 528 |
| 532 void InspectorResourceAgent::didFinishXHRLoading(ExecutionContext* context, XMLH ttpRequest* xhr, ThreadableLoaderClient* client, const AtomicString& method, con st String& url) | 529 void InspectorResourceAgent::didFinishXHRLoading(ExecutionContext* context, XMLH ttpRequest* xhr, ThreadableLoaderClient* client, const AtomicString& method, con st String& url) |
| 533 { | 530 { |
| 534 didFinishXHRInternal(context, xhr, client, method, url, true); | 531 didFinishXHRInternal(context, xhr, client, method, url, true); |
| 535 } | 532 } |
| 536 | 533 |
| 537 void InspectorResourceAgent::didFinishXHRInternal(ExecutionContext* context, XML HttpRequest* xhr, ThreadableLoaderClient* client, const AtomicString& method, co nst String& url, bool success) | 534 void InspectorResourceAgent::didFinishXHRInternal(ExecutionContext* context, XML HttpRequest* xhr, ThreadableLoaderClient* client, const AtomicString& method, co nst String& url, bool success) |
| 538 { | 535 { |
| 539 m_pendingXHR = nullptr; | 536 m_pendingRequest = nullptr; |
| 540 m_pendingXHRReplayData.clear(); | 537 m_pendingXHRReplayData.clear(); |
| 541 | 538 |
| 542 // This method will be called from the XHR. | 539 // This method will be called from the XHR. |
| 543 // We delay deleting the replay XHR, as deleting here may delete the caller. | 540 // We delay deleting the replay XHR, as deleting here may delete the caller. |
| 544 delayedRemoveReplayXHR(xhr); | 541 delayedRemoveReplayXHR(xhr); |
| 545 | 542 |
| 546 ThreadableLoaderClientRequestIdMap::iterator it = m_xhrRequestIdMap.find(cli ent); | 543 ThreadableLoaderClientRequestIdMap::iterator it = m_knownRequestIdMap.find(c lient); |
| 547 if (it == m_xhrRequestIdMap.end()) | 544 if (it == m_knownRequestIdMap.end()) |
| 548 return; | 545 return; |
| 549 | 546 |
| 550 if (m_state->getBoolean(ResourceAgentState::monitoringXHR)) { | 547 if (m_state->getBoolean(ResourceAgentState::monitoringXHR)) { |
| 551 String message = (success ? "XHR finished loading: " : "XHR failed loadi ng: ") + method + " \"" + url + "\"."; | 548 String message = (success ? "XHR finished loading: " : "XHR failed loadi ng: ") + method + " \"" + url + "\"."; |
| 552 RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::crea te(NetworkMessageSource, DebugMessageLevel, message); | 549 RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::crea te(NetworkMessageSource, DebugMessageLevel, message); |
| 553 consoleMessage->setRequestIdentifier(it->value); | 550 consoleMessage->setRequestIdentifier(it->value); |
| 554 m_pageAgent->frameHost()->consoleMessageStorage().reportMessage(context, consoleMessage.release()); | 551 m_pageAgent->frameHost()->consoleMessageStorage().reportMessage(context, consoleMessage.release()); |
| 555 } | 552 } |
| 556 m_xhrRequestIdMap.remove(client); | 553 m_knownRequestIdMap.remove(client); |
| 554 } | |
| 555 | |
| 556 void InspectorResourceAgent::willStartFetch(ThreadableLoaderClient* client) | |
| 557 { | |
| 558 ASSERT(!m_pendingRequest); | |
| 559 m_pendingRequest = client; | |
| 560 m_pendingRequestType = InspectorPageAgent::FetchResource; | |
| 561 } | |
| 562 | |
| 563 void InspectorResourceAgent::didFailFetch(ThreadableLoaderClient* client) | |
| 564 { | |
| 565 m_knownRequestIdMap.remove(client); | |
| 566 } | |
| 567 | |
| 568 void InspectorResourceAgent::didFinishFetch(ExecutionContext* context, Threadabl eLoaderClient* client, const AtomicString& method, const String& url) | |
| 569 { | |
| 570 ThreadableLoaderClientRequestIdMap::iterator it = m_knownRequestIdMap.find(c lient); | |
| 571 if (it == m_knownRequestIdMap.end()) | |
| 572 return; | |
| 573 | |
| 574 if (m_state->getBoolean(ResourceAgentState::monitoringXHR)) { | |
| 575 String message = "Fetch complete: " + method + " \"" + url + "\"."; | |
| 576 RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::crea te(NetworkMessageSource, DebugMessageLevel, message); | |
| 577 consoleMessage->setRequestIdentifier(it->value); | |
| 578 m_pageAgent->frameHost()->consoleMessageStorage().reportMessage(context, consoleMessage.release()); | |
| 579 } | |
| 580 m_knownRequestIdMap.remove(client); | |
| 557 } | 581 } |
| 558 | 582 |
| 559 void InspectorResourceAgent::willSendEventSourceRequest(ThreadableLoaderClient* eventSource) | 583 void InspectorResourceAgent::willSendEventSourceRequest(ThreadableLoaderClient* eventSource) |
| 560 { | 584 { |
| 561 ASSERT(!m_pendingEventSource); | 585 ASSERT(!m_pendingRequest); |
| 562 m_pendingEventSource = eventSource; | 586 m_pendingRequest = eventSource; |
| 587 m_pendingRequestType = InspectorPageAgent::EventSourceResource; | |
| 563 } | 588 } |
| 564 | 589 |
| 565 void InspectorResourceAgent::willDispachEventSourceEvent(ThreadableLoaderClient* eventSource, const AtomicString& eventName, const AtomicString& eventId, const Vector<UChar>& data) | 590 void InspectorResourceAgent::willDispachEventSourceEvent(ThreadableLoaderClient* eventSource, const AtomicString& eventName, const AtomicString& eventId, const Vector<UChar>& data) |
| 566 { | 591 { |
| 567 ThreadableLoaderClientRequestIdMap::iterator it = m_eventSourceRequestIdMap. find(eventSource); | 592 ThreadableLoaderClientRequestIdMap::iterator it = m_knownRequestIdMap.find(e ventSource); |
| 568 if (it == m_eventSourceRequestIdMap.end()) | 593 if (it == m_knownRequestIdMap.end()) |
| 569 return; | 594 return; |
| 570 frontend()->eventSourceMessageReceived(IdentifiersFactory::requestId(it->val ue), monotonicallyIncreasingTime(), eventName.string(), eventId.string(), String (data)); | 595 frontend()->eventSourceMessageReceived(IdentifiersFactory::requestId(it->val ue), monotonicallyIncreasingTime(), eventName.string(), eventId.string(), String (data)); |
| 571 } | 596 } |
| 572 | 597 |
| 573 void InspectorResourceAgent::didFinishEventSourceRequest(ThreadableLoaderClient* eventSource) | 598 void InspectorResourceAgent::didFinishEventSourceRequest(ThreadableLoaderClient* eventSource) |
| 574 { | 599 { |
| 575 m_eventSourceRequestIdMap.remove(eventSource); | 600 m_knownRequestIdMap.remove(eventSource); |
| 576 if (eventSource == m_pendingEventSource) | 601 m_pendingRequest = nullptr; |
| 577 m_pendingEventSource = nullptr; | |
| 578 } | 602 } |
| 579 | 603 |
| 580 void InspectorResourceAgent::willDestroyResource(Resource* cachedResource) | 604 void InspectorResourceAgent::willDestroyResource(Resource* cachedResource) |
| 581 { | 605 { |
| 582 Vector<String> requestIds = m_resourcesData->removeResource(cachedResource); | 606 Vector<String> requestIds = m_resourcesData->removeResource(cachedResource); |
| 583 if (!requestIds.size()) | 607 if (!requestIds.size()) |
| 584 return; | 608 return; |
| 585 | 609 |
| 586 String content; | 610 String content; |
| 587 bool base64Encoded; | 611 bool base64Encoded; |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 716 void InspectorResourceAgent::enable() | 740 void InspectorResourceAgent::enable() |
| 717 { | 741 { |
| 718 if (!frontend()) | 742 if (!frontend()) |
| 719 return; | 743 return; |
| 720 m_state->setBoolean(ResourceAgentState::resourceAgentEnabled, true); | 744 m_state->setBoolean(ResourceAgentState::resourceAgentEnabled, true); |
| 721 m_instrumentingAgents->setInspectorResourceAgent(this); | 745 m_instrumentingAgents->setInspectorResourceAgent(this); |
| 722 } | 746 } |
| 723 | 747 |
| 724 void InspectorResourceAgent::disable(ErrorString*) | 748 void InspectorResourceAgent::disable(ErrorString*) |
| 725 { | 749 { |
| 726 ASSERT(!m_pendingXHR); | 750 ASSERT(!m_pendingRequest); |
| 727 ASSERT(!m_pendingEventSource); | |
| 728 m_state->setBoolean(ResourceAgentState::resourceAgentEnabled, false); | 751 m_state->setBoolean(ResourceAgentState::resourceAgentEnabled, false); |
| 729 m_state->setString(ResourceAgentState::userAgentOverride, ""); | 752 m_state->setString(ResourceAgentState::userAgentOverride, ""); |
| 730 m_instrumentingAgents->setInspectorResourceAgent(0); | 753 m_instrumentingAgents->setInspectorResourceAgent(0); |
| 731 m_resourcesData->clear(); | 754 m_resourcesData->clear(); |
| 755 m_knownRequestIdMap.clear(); | |
| 732 } | 756 } |
| 733 | 757 |
| 734 void InspectorResourceAgent::setUserAgentOverride(ErrorString*, const String& us erAgent) | 758 void InspectorResourceAgent::setUserAgentOverride(ErrorString*, const String& us erAgent) |
| 735 { | 759 { |
| 736 m_state->setString(ResourceAgentState::userAgentOverride, userAgent); | 760 m_state->setString(ResourceAgentState::userAgentOverride, userAgent); |
| 737 } | 761 } |
| 738 | 762 |
| 739 void InspectorResourceAgent::setExtraHTTPHeaders(ErrorString*, const RefPtr<JSON Object>& headers) | 763 void InspectorResourceAgent::setExtraHTTPHeaders(ErrorString*, const RefPtr<JSON Object>& headers) |
| 740 { | 764 { |
| 741 m_state->setObject(ResourceAgentState::extraRequestHeaders, headers); | 765 m_state->setObject(ResourceAgentState::extraRequestHeaders, headers); |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 917 | 941 |
| 918 void InspectorResourceAgent::removeFinishedReplayXHRFired(Timer<InspectorResourc eAgent>*) | 942 void InspectorResourceAgent::removeFinishedReplayXHRFired(Timer<InspectorResourc eAgent>*) |
| 919 { | 943 { |
| 920 m_replayXHRsToBeDeleted.clear(); | 944 m_replayXHRsToBeDeleted.clear(); |
| 921 } | 945 } |
| 922 | 946 |
| 923 InspectorResourceAgent::InspectorResourceAgent(InspectorPageAgent* pageAgent) | 947 InspectorResourceAgent::InspectorResourceAgent(InspectorPageAgent* pageAgent) |
| 924 : InspectorBaseAgent<InspectorResourceAgent, InspectorFrontend::Network>("Ne twork") | 948 : InspectorBaseAgent<InspectorResourceAgent, InspectorFrontend::Network>("Ne twork") |
| 925 , m_pageAgent(pageAgent) | 949 , m_pageAgent(pageAgent) |
| 926 , m_resourcesData(adoptPtr(new NetworkResourcesData())) | 950 , m_resourcesData(adoptPtr(new NetworkResourcesData())) |
| 927 , m_pendingXHR(nullptr) | 951 , m_pendingRequest(nullptr) |
|
dgozman
2015/07/31 06:50:38
Initialize |m_pendingRequestType|.
| |
| 928 , m_pendingEventSource(nullptr) | |
| 929 , m_isRecalculatingStyle(false) | 952 , m_isRecalculatingStyle(false) |
| 930 , m_removeFinishedReplayXHRTimer(this, &InspectorResourceAgent::removeFinish edReplayXHRFired) | 953 , m_removeFinishedReplayXHRTimer(this, &InspectorResourceAgent::removeFinish edReplayXHRFired) |
| 931 { | 954 { |
| 932 } | 955 } |
| 933 | 956 |
| 934 bool InspectorResourceAgent::shouldForceCORSPreflight() | 957 bool InspectorResourceAgent::shouldForceCORSPreflight() |
| 935 { | 958 { |
| 936 return m_state->getBoolean(ResourceAgentState::cacheDisabled); | 959 return m_state->getBoolean(ResourceAgentState::cacheDisabled); |
| 937 } | 960 } |
| 938 | 961 |
| 939 } // namespace blink | 962 } // namespace blink |
| OLD | NEW |