Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(48)

Side by Side Diff: Source/core/inspector/InspectorResourceAgent.cpp

Issue 1259393002: DevTools: add support for logging fetch requests when XHR logging is enabled (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: review comments addressed Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698