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

Side by Side Diff: third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp

Issue 2620463002: Show service worker navigation preload requests in DevTools Network tab (Closed)
Patch Set: reuse existing instrumentation for network Created 3 years, 11 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 558 matching lines...) Expand 10 before | Expand all | Expand 10 after
569 return false; 569 return false;
570 } 570 }
571 571
572 void InspectorNetworkAgent::didBlockRequest( 572 void InspectorNetworkAgent::didBlockRequest(
573 LocalFrame* frame, 573 LocalFrame* frame,
574 const ResourceRequest& request, 574 const ResourceRequest& request,
575 DocumentLoader* loader, 575 DocumentLoader* loader,
576 const FetchInitiatorInfo& initiatorInfo, 576 const FetchInitiatorInfo& initiatorInfo,
577 ResourceRequestBlockedReason reason) { 577 ResourceRequestBlockedReason reason) {
578 unsigned long identifier = createUniqueIdentifier(); 578 unsigned long identifier = createUniqueIdentifier();
579 willSendRequestInternal(frame, identifier, loader, request, 579 willSendRequestInternal(identifier, loader, request, ResourceResponse(),
580 ResourceResponse(), initiatorInfo); 580 initiatorInfo, monotonicallyIncreasingTime(),
581 currentTime());
581 582
582 String requestId = IdentifiersFactory::requestId(identifier); 583 String requestId = IdentifiersFactory::requestId(identifier);
583 String protocolReason = buildBlockedReason(reason); 584 String protocolReason = buildBlockedReason(reason);
584 frontend()->loadingFailed(requestId, monotonicallyIncreasingTime(), 585 frontend()->loadingFailed(requestId, monotonicallyIncreasingTime(),
585 InspectorPageAgent::resourceTypeJson( 586 InspectorPageAgent::resourceTypeJson(
586 m_resourcesData->resourceType(requestId)), 587 m_resourcesData->resourceType(requestId)),
587 String(), false, protocolReason); 588 String(), false, protocolReason);
588 } 589 }
589 590
590 void InspectorNetworkAgent::didChangeResourcePriority( 591 void InspectorNetworkAgent::didChangeResourcePriority(
591 unsigned long identifier, 592 unsigned long identifier,
592 ResourceLoadPriority loadPriority) { 593 ResourceLoadPriority loadPriority) {
593 String requestId = IdentifiersFactory::requestId(identifier); 594 String requestId = IdentifiersFactory::requestId(identifier);
594 frontend()->resourceChangedPriority(requestId, 595 frontend()->resourceChangedPriority(requestId,
595 resourcePriorityJSON(loadPriority), 596 resourcePriorityJSON(loadPriority),
596 monotonicallyIncreasingTime()); 597 monotonicallyIncreasingTime());
597 } 598 }
598 599
599 void InspectorNetworkAgent::willSendRequestInternal( 600 void InspectorNetworkAgent::willSendRequestInternal(
600 LocalFrame* frame,
601 unsigned long identifier, 601 unsigned long identifier,
602 DocumentLoader* loader, 602 DocumentLoader* loader,
603 const ResourceRequest& request, 603 const ResourceRequest& request,
604 const ResourceResponse& redirectResponse, 604 const ResourceResponse& redirectResponse,
605 const FetchInitiatorInfo& initiatorInfo) { 605 const FetchInitiatorInfo& initiatorInfo,
606 double timestamp,
607 double wallTime) {
606 String requestId = IdentifiersFactory::requestId(identifier); 608 String requestId = IdentifiersFactory::requestId(identifier);
607 String loaderId = IdentifiersFactory::loaderId(loader); 609 String loaderId = loader ? IdentifiersFactory::loaderId(loader) : "";
608 m_resourcesData->resourceCreated(requestId, loaderId, request.url()); 610 m_resourcesData->resourceCreated(requestId, loaderId, request.url());
609 611
610 InspectorPageAgent::ResourceType type = InspectorPageAgent::OtherResource; 612 InspectorPageAgent::ResourceType type = InspectorPageAgent::OtherResource;
611 if (initiatorInfo.name == FetchInitiatorTypeNames::xmlhttprequest) { 613 if (initiatorInfo.name == FetchInitiatorTypeNames::xmlhttprequest) {
612 type = InspectorPageAgent::XHRResource; 614 type = InspectorPageAgent::XHRResource;
613 m_resourcesData->setResourceType(requestId, type); 615 m_resourcesData->setResourceType(requestId, type);
614 } else if (initiatorInfo.name == FetchInitiatorTypeNames::document) { 616 } else if (initiatorInfo.name == FetchInitiatorTypeNames::document) {
615 type = InspectorPageAgent::DocumentResource; 617 type = InspectorPageAgent::DocumentResource;
616 m_resourcesData->setResourceType(requestId, type); 618 m_resourcesData->setResourceType(requestId, type);
617 } 619 }
618 620
619 String frameId = 621 String frameId = loader && loader->frame()
620 loader->frame() ? IdentifiersFactory::frameId(loader->frame()) : ""; 622 ? IdentifiersFactory::frameId(loader->frame())
621 std::unique_ptr<protocol::Network::Initiator> initiatorObject = 623 : "";
622 buildInitiatorObject(loader->frame() ? loader->frame()->document() : 0, 624 std::unique_ptr<protocol::Network::Initiator> initiatorObject;
623 initiatorInfo); 625 if (loader) {
626 initiatorObject = buildInitiatorObject(
627 loader->frame() ? loader->frame()->document() : 0, initiatorInfo);
628 } else {
629 initiatorObject =
630 protocol::Network::Initiator::create()
631 .setType(protocol::Network::Initiator::TypeEnum::Preload)
632 .build();
633 }
634
624 if (initiatorInfo.name == FetchInitiatorTypeNames::document) { 635 if (initiatorInfo.name == FetchInitiatorTypeNames::document) {
625 FrameNavigationInitiatorMap::iterator it = 636 FrameNavigationInitiatorMap::iterator it =
626 m_frameNavigationInitiatorMap.find(frameId); 637 m_frameNavigationInitiatorMap.find(frameId);
627 if (it != m_frameNavigationInitiatorMap.end()) 638 if (it != m_frameNavigationInitiatorMap.end())
628 initiatorObject = it->value->clone(); 639 initiatorObject = it->value->clone();
629 } 640 }
630 641
631 std::unique_ptr<protocol::Network::Request> requestInfo( 642 std::unique_ptr<protocol::Network::Request> requestInfo(
632 buildObjectForResourceRequest(request)); 643 buildObjectForResourceRequest(request));
633 644
634 requestInfo->setMixedContentType(mixedContentTypeForContextType( 645 if (loader) {
635 MixedContentChecker::contextTypeForInspector(frame, request))); 646 requestInfo->setMixedContentType(mixedContentTypeForContextType(
647 MixedContentChecker::contextTypeForInspector(loader->frame(),
648 request)));
649 }
636 650
637 requestInfo->setReferrerPolicy(referrerPolicy(request.getReferrerPolicy())); 651 requestInfo->setReferrerPolicy(referrerPolicy(request.getReferrerPolicy()));
638 652
639 String resourceType = InspectorPageAgent::resourceTypeJson(type); 653 String resourceType = InspectorPageAgent::resourceTypeJson(type);
640 frontend()->requestWillBeSent( 654 frontend()->requestWillBeSent(
641 requestId, frameId, loaderId, 655 requestId, frameId, loaderId,
642 urlWithoutFragment(loader->url()).getString(), std::move(requestInfo), 656 loader ? urlWithoutFragment(loader->url()).getString() : "",
643 monotonicallyIncreasingTime(), currentTime(), std::move(initiatorObject), 657 std::move(requestInfo), timestamp, wallTime, std::move(initiatorObject),
pfeldman 2017/01/20 20:41:46 We report blink time as a part of the willSendRequ
horo 2017/01/23 08:05:32 Done.
644 buildObjectForResourceResponse(redirectResponse), resourceType); 658 buildObjectForResourceResponse(redirectResponse), resourceType);
645 if (m_pendingXHRReplayData && !m_pendingXHRReplayData->async()) 659 if (m_pendingXHRReplayData && !m_pendingXHRReplayData->async())
646 frontend()->flush(); 660 frontend()->flush();
647 } 661 }
648 662
649 void InspectorNetworkAgent::willSendRequest( 663 void InspectorNetworkAgent::willSendRequest(
650 LocalFrame* frame,
651 unsigned long identifier, 664 unsigned long identifier,
652 DocumentLoader* loader, 665 DocumentLoader* loader,
653 ResourceRequest& request, 666 ResourceRequest& request,
654 const ResourceResponse& redirectResponse, 667 const ResourceResponse& redirectResponse,
655 const FetchInitiatorInfo& initiatorInfo) { 668 const FetchInitiatorInfo& initiatorInfo,
669 double timestamp,
pfeldman 2017/01/20 20:41:46 ditto
horo 2017/01/23 08:05:32 Done.
670 double wallTime) {
656 // Ignore the request initiated internally. 671 // Ignore the request initiated internally.
657 if (initiatorInfo.name == FetchInitiatorTypeNames::internal) 672 if (initiatorInfo.name == FetchInitiatorTypeNames::internal)
658 return; 673 return;
659 674
660 if (initiatorInfo.name == FetchInitiatorTypeNames::document && 675 if (initiatorInfo.name == FetchInitiatorTypeNames::document &&
661 loader->substituteData().isValid()) 676 loader->substituteData().isValid())
662 return; 677 return;
663 678
664 protocol::DictionaryValue* headers = 679 protocol::DictionaryValue* headers =
665 m_state->getObject(NetworkAgentState::extraRequestHeaders); 680 m_state->getObject(NetworkAgentState::extraRequestHeaders);
(...skipping 14 matching lines...) Expand all
680 request.requestContext() != WebURLRequest::RequestContextInternal) { 695 request.requestContext() != WebURLRequest::RequestContextInternal) {
681 request.setCachePolicy(WebCachePolicy::BypassCacheLoadOnlyFromCache); 696 request.setCachePolicy(WebCachePolicy::BypassCacheLoadOnlyFromCache);
682 } else { 697 } else {
683 request.setCachePolicy(WebCachePolicy::BypassingCache); 698 request.setCachePolicy(WebCachePolicy::BypassingCache);
684 } 699 }
685 request.setShouldResetAppCache(true); 700 request.setShouldResetAppCache(true);
686 } 701 }
687 if (m_state->booleanProperty(NetworkAgentState::bypassServiceWorker, false)) 702 if (m_state->booleanProperty(NetworkAgentState::bypassServiceWorker, false))
688 request.setSkipServiceWorker(WebURLRequest::SkipServiceWorker::All); 703 request.setSkipServiceWorker(WebURLRequest::SkipServiceWorker::All);
689 704
690 willSendRequestInternal(frame, identifier, loader, request, redirectResponse, 705 willSendRequestInternal(identifier, loader, request, redirectResponse,
691 initiatorInfo); 706 initiatorInfo, timestamp, wallTime);
692 707
693 if (!m_hostId.isEmpty()) 708 if (!m_hostId.isEmpty())
694 request.addHTTPHeaderField( 709 request.addHTTPHeaderField(
695 HTTPNames::X_DevTools_Emulate_Network_Conditions_Client_Id, 710 HTTPNames::X_DevTools_Emulate_Network_Conditions_Client_Id,
696 AtomicString(m_hostId)); 711 AtomicString(m_hostId));
697 } 712 }
698 713
699 void InspectorNetworkAgent::markResourceAsCached(unsigned long identifier) { 714 void InspectorNetworkAgent::markResourceAsCached(unsigned long identifier) {
700 frontend()->requestServedFromCache(IdentifiersFactory::requestId(identifier)); 715 frontend()->requestServedFromCache(IdentifiersFactory::requestId(identifier));
701 } 716 }
702 717
703 void InspectorNetworkAgent::didReceiveResourceResponse( 718 void InspectorNetworkAgent::didReceiveResourceResponse(
704 LocalFrame* frame, 719 ExecutionContext* context,
705 unsigned long identifier, 720 unsigned long identifier,
706 DocumentLoader* loader, 721 DocumentLoader* loader,
707 const ResourceResponse& response, 722 const ResourceResponse& response,
708 Resource* cachedResource) { 723 Resource* cachedResource) {
709 String requestId = IdentifiersFactory::requestId(identifier); 724 String requestId = IdentifiersFactory::requestId(identifier);
710 bool isNotModified = response.httpStatusCode() == 304; 725 bool isNotModified = response.httpStatusCode() == 304;
711 726
712 bool resourceIsEmpty = true; 727 bool resourceIsEmpty = true;
713 std::unique_ptr<protocol::Network::Response> resourceResponse = 728 std::unique_ptr<protocol::Network::Response> resourceResponse =
714 buildObjectForResourceResponse(response, cachedResource, 729 buildObjectForResourceResponse(response, cachedResource,
(...skipping 15 matching lines...) Expand all
730 if (type == InspectorPageAgent::DocumentResource && loader && 745 if (type == InspectorPageAgent::DocumentResource && loader &&
731 loader->substituteData().isValid()) 746 loader->substituteData().isValid())
732 return; 747 return;
733 748
734 // Resources are added to NetworkResourcesData as a WeakMember here and 749 // Resources are added to NetworkResourcesData as a WeakMember here and
735 // removed in willDestroyResource() called in the prefinalizer of Resource. 750 // removed in willDestroyResource() called in the prefinalizer of Resource.
736 // Because NetworkResourceData retains weak references only, it 751 // Because NetworkResourceData retains weak references only, it
737 // doesn't affect Resource lifetime. 752 // doesn't affect Resource lifetime.
738 if (cachedResource) 753 if (cachedResource)
739 m_resourcesData->addResource(requestId, cachedResource); 754 m_resourcesData->addResource(requestId, cachedResource);
740 String frameId = IdentifiersFactory::frameId(frame); 755 String frameId =
756 context->isDocument()
757 ? IdentifiersFactory::frameId(toDocument(context)->frame())
758 : "";
741 String loaderId = loader ? IdentifiersFactory::loaderId(loader) : ""; 759 String loaderId = loader ? IdentifiersFactory::loaderId(loader) : "";
742 m_resourcesData->responseReceived(requestId, frameId, response); 760 m_resourcesData->responseReceived(requestId, frameId, response);
743 m_resourcesData->setResourceType(requestId, type); 761 m_resourcesData->setResourceType(requestId, type);
744 762
745 if (response.getSecurityStyle() != ResourceResponse::SecurityStyleUnknown && 763 if (response.getSecurityStyle() != ResourceResponse::SecurityStyleUnknown &&
746 response.getSecurityStyle() != 764 response.getSecurityStyle() !=
747 ResourceResponse::SecurityStyleUnauthenticated) { 765 ResourceResponse::SecurityStyleUnauthenticated) {
748 const ResourceResponse::SecurityDetails* responseSecurityDetails = 766 const ResourceResponse::SecurityDetails* responseSecurityDetails =
749 response.getSecurityDetails(); 767 response.getSecurityDetails();
750 m_resourcesData->setCertificate(requestId, 768 m_resourcesData->setCertificate(requestId,
751 responseSecurityDetails->certificate); 769 responseSecurityDetails->certificate);
752 } 770 }
753 771
754 if (resourceResponse && !resourceIsEmpty) 772 if (resourceResponse && !resourceIsEmpty)
755 frontend()->responseReceived(requestId, frameId, loaderId, 773 frontend()->responseReceived(requestId, frameId, loaderId,
756 monotonicallyIncreasingTime(), 774 monotonicallyIncreasingTime(),
757 InspectorPageAgent::resourceTypeJson(type), 775 InspectorPageAgent::resourceTypeJson(type),
758 std::move(resourceResponse)); 776 std::move(resourceResponse));
759 // If we revalidated the resource and got Not modified, send content length 777 // If we revalidated the resource and got Not modified, send content length
760 // following didReceiveResponse as there will be no calls to didReceiveData 778 // following didReceiveResponse as there will be no calls to didReceiveData
761 // from the network stack. 779 // from the network stack.
762 if (isNotModified && cachedResource && cachedResource->encodedSize()) 780 if (isNotModified && cachedResource && cachedResource->encodedSize())
763 didReceiveData(frame, identifier, 0, cachedResource->encodedSize()); 781 didReceiveData(identifier, 0, cachedResource->encodedSize());
764 } 782 }
765 783
766 static bool isErrorStatusCode(int statusCode) { 784 static bool isErrorStatusCode(int statusCode) {
767 return statusCode >= 400; 785 return statusCode >= 400;
768 } 786 }
769 787
770 void InspectorNetworkAgent::didReceiveData(LocalFrame*, 788 void InspectorNetworkAgent::didReceiveData(unsigned long identifier,
771 unsigned long identifier,
772 const char* data, 789 const char* data,
773 int dataLength) { 790 int dataLength) {
774 String requestId = IdentifiersFactory::requestId(identifier); 791 String requestId = IdentifiersFactory::requestId(identifier);
775 792
776 if (data) { 793 if (data) {
777 NetworkResourcesData::ResourceData const* resourceData = 794 NetworkResourcesData::ResourceData const* resourceData =
778 m_resourcesData->data(requestId); 795 m_resourcesData->data(requestId);
779 if (resourceData && 796 if (resourceData &&
780 (!resourceData->cachedResource() || 797 (!resourceData->cachedResource() ||
781 resourceData->cachedResource()->getDataBufferingPolicy() == 798 resourceData->cachedResource()->getDataBufferingPolicy() ==
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
826 encodedDataLength); 843 encodedDataLength);
827 } 844 }
828 845
829 void InspectorNetworkAgent::didReceiveCORSRedirectResponse( 846 void InspectorNetworkAgent::didReceiveCORSRedirectResponse(
830 LocalFrame* frame, 847 LocalFrame* frame,
831 unsigned long identifier, 848 unsigned long identifier,
832 DocumentLoader* loader, 849 DocumentLoader* loader,
833 const ResourceResponse& response, 850 const ResourceResponse& response,
834 Resource* resource) { 851 Resource* resource) {
835 // Update the response and finish loading 852 // Update the response and finish loading
836 didReceiveResourceResponse(frame, identifier, loader, response, resource); 853 didReceiveResourceResponse(frame->document(), identifier, loader, response,
854 resource);
837 didFinishLoading(identifier, 0, 855 didFinishLoading(identifier, 0,
838 WebURLLoaderClient::kUnknownEncodedDataLength); 856 WebURLLoaderClient::kUnknownEncodedDataLength);
839 } 857 }
840 858
841 void InspectorNetworkAgent::didFailLoading(unsigned long identifier, 859 void InspectorNetworkAgent::didFailLoading(unsigned long identifier,
842 const ResourceError& error) { 860 const ResourceError& error) {
843 String requestId = IdentifiersFactory::requestId(identifier); 861 String requestId = IdentifiersFactory::requestId(identifier);
844 bool canceled = error.isCancellation(); 862 bool canceled = error.isCancellation();
845 frontend()->loadingFailed(requestId, monotonicallyIncreasingTime(), 863 frontend()->loadingFailed(requestId, monotonicallyIncreasingTime(),
846 InspectorPageAgent::resourceTypeJson( 864 InspectorPageAgent::resourceTypeJson(
(...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after
1532 m_isRecalculatingStyle(false), 1550 m_isRecalculatingStyle(false),
1533 m_removeFinishedReplayXHRTimer( 1551 m_removeFinishedReplayXHRTimer(
1534 this, 1552 this,
1535 &InspectorNetworkAgent::removeFinishedReplayXHRFired) {} 1553 &InspectorNetworkAgent::removeFinishedReplayXHRFired) {}
1536 1554
1537 bool InspectorNetworkAgent::shouldForceCORSPreflight() { 1555 bool InspectorNetworkAgent::shouldForceCORSPreflight() {
1538 return m_state->booleanProperty(NetworkAgentState::cacheDisabled, false); 1556 return m_state->booleanProperty(NetworkAgentState::cacheDisabled, false);
1539 } 1557 }
1540 1558
1541 } // namespace blink 1559 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698