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

Side by Side Diff: third_party/WebKit/Source/core/loader/FrameFetchContext.cpp

Issue 2706643002: DevTools: Move network request instrumentation points for timeline down the stack. (Closed)
Patch Set: addressing comment Created 3 years, 10 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) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 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 12 matching lines...) Expand all
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #include "core/loader/FrameFetchContext.h" 31 #include "core/loader/FrameFetchContext.h"
32 32
33 #include <algorithm>
34 #include <memory>
caseq 2017/02/21 22:53:30 add blank line
alph 2017/02/22 00:31:32 Done.
33 #include "bindings/core/v8/ScriptController.h" 35 #include "bindings/core/v8/ScriptController.h"
34 #include "bindings/core/v8/V8DOMActivityLogger.h" 36 #include "bindings/core/v8/V8DOMActivityLogger.h"
35 #include "core/dom/Document.h" 37 #include "core/dom/Document.h"
36 #include "core/frame/Deprecation.h" 38 #include "core/frame/Deprecation.h"
37 #include "core/frame/FrameConsole.h" 39 #include "core/frame/FrameConsole.h"
38 #include "core/frame/FrameHost.h" 40 #include "core/frame/FrameHost.h"
39 #include "core/frame/FrameView.h" 41 #include "core/frame/FrameView.h"
40 #include "core/frame/LocalDOMWindow.h" 42 #include "core/frame/LocalDOMWindow.h"
41 #include "core/frame/LocalFrame.h" 43 #include "core/frame/LocalFrame.h"
42 #include "core/frame/Settings.h" 44 #include "core/frame/Settings.h"
(...skipping 14 matching lines...) Expand all
57 #include "core/loader/PingLoader.h" 59 #include "core/loader/PingLoader.h"
58 #include "core/loader/ProgressTracker.h" 60 #include "core/loader/ProgressTracker.h"
59 #include "core/loader/appcache/ApplicationCacheHost.h" 61 #include "core/loader/appcache/ApplicationCacheHost.h"
60 #include "core/page/NetworkStateNotifier.h" 62 #include "core/page/NetworkStateNotifier.h"
61 #include "core/page/Page.h" 63 #include "core/page/Page.h"
62 #include "core/paint/FirstMeaningfulPaintDetector.h" 64 #include "core/paint/FirstMeaningfulPaintDetector.h"
63 #include "core/svg/graphics/SVGImageChromeClient.h" 65 #include "core/svg/graphics/SVGImageChromeClient.h"
64 #include "core/timing/DOMWindowPerformance.h" 66 #include "core/timing/DOMWindowPerformance.h"
65 #include "core/timing/Performance.h" 67 #include "core/timing/Performance.h"
66 #include "platform/WebFrameScheduler.h" 68 #include "platform/WebFrameScheduler.h"
69 #include "platform/instrumentation/inspector/PlatformInspectorTraceEvents.h"
67 #include "platform/instrumentation/tracing/TracedValue.h" 70 #include "platform/instrumentation/tracing/TracedValue.h"
68 #include "platform/loader/fetch/ClientHintsPreferences.h" 71 #include "platform/loader/fetch/ClientHintsPreferences.h"
69 #include "platform/loader/fetch/FetchInitiatorTypeNames.h" 72 #include "platform/loader/fetch/FetchInitiatorTypeNames.h"
70 #include "platform/loader/fetch/Resource.h" 73 #include "platform/loader/fetch/Resource.h"
71 #include "platform/loader/fetch/ResourceLoadingLog.h" 74 #include "platform/loader/fetch/ResourceLoadingLog.h"
72 #include "platform/loader/fetch/UniqueIdentifier.h" 75 #include "platform/loader/fetch/UniqueIdentifier.h"
73 #include "platform/mhtml/MHTMLArchive.h" 76 #include "platform/mhtml/MHTMLArchive.h"
74 #include "platform/network/NetworkUtils.h" 77 #include "platform/network/NetworkUtils.h"
75 #include "platform/network/ResourceLoadPriority.h" 78 #include "platform/network/ResourceLoadPriority.h"
76 #include "platform/network/ResourceTimingInfo.h" 79 #include "platform/network/ResourceTimingInfo.h"
77 #include "platform/weborigin/SchemeRegistry.h" 80 #include "platform/weborigin/SchemeRegistry.h"
78 #include "platform/weborigin/SecurityPolicy.h" 81 #include "platform/weborigin/SecurityPolicy.h"
79 #include "public/platform/WebCachePolicy.h" 82 #include "public/platform/WebCachePolicy.h"
80 #include "public/platform/WebDocumentSubresourceFilter.h" 83 #include "public/platform/WebDocumentSubresourceFilter.h"
81 #include "public/platform/WebInsecureRequestPolicy.h" 84 #include "public/platform/WebInsecureRequestPolicy.h"
82 #include "public/platform/WebViewScheduler.h" 85 #include "public/platform/WebViewScheduler.h"
83 #include "wtf/Vector.h" 86 #include "wtf/Vector.h"
84 #include <algorithm>
85 #include <memory>
86 87
87 namespace blink { 88 namespace blink {
88 89
89 namespace { 90 namespace {
90 91
91 void emitWarningForDocWriteScripts(const String& url, Document& document) { 92 void emitWarningForDocWriteScripts(const String& url, Document& document) {
92 String message = 93 String message =
93 "A Parser-blocking, cross site (i.e. different eTLD+1) script, " + url + 94 "A Parser-blocking, cross site (i.e. different eTLD+1) script, " + url +
94 ", is invoked via document.write. This MAY be blocked by " 95 ", is invoked via document.write. This MAY be blocked by "
95 "the browser in this or a future page load due to poor network " 96 "the browser in this or a future page load due to poor network "
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 void FrameFetchContext::dispatchDidReceiveData(unsigned long identifier, 464 void FrameFetchContext::dispatchDidReceiveData(unsigned long identifier,
464 const char* data, 465 const char* data,
465 int dataLength) { 466 int dataLength) {
466 frame()->loader().progress().incrementProgress(identifier, dataLength); 467 frame()->loader().progress().incrementProgress(identifier, dataLength);
467 InspectorInstrumentation::didReceiveData(frame(), identifier, data, 468 InspectorInstrumentation::didReceiveData(frame(), identifier, data,
468 dataLength); 469 dataLength);
469 } 470 }
470 471
471 void FrameFetchContext::dispatchDidReceiveEncodedData(unsigned long identifier, 472 void FrameFetchContext::dispatchDidReceiveEncodedData(unsigned long identifier,
472 int encodedDataLength) { 473 int encodedDataLength) {
473 TRACE_EVENT1( 474 TRACE_EVENT1("devtools.timeline", "ResourceReceivedData", "data",
474 "devtools.timeline", "ResourceReceivedData", "data", 475 InspectorReceiveDataEvent::data(identifier, encodedDataLength));
475 InspectorReceiveDataEvent::data(identifier, frame(), encodedDataLength));
476 InspectorInstrumentation::didReceiveEncodedDataLength(frame(), identifier, 476 InspectorInstrumentation::didReceiveEncodedDataLength(frame(), identifier,
477 encodedDataLength); 477 encodedDataLength);
478 } 478 }
479 479
480 void FrameFetchContext::dispatchDidDownloadData(unsigned long identifier, 480 void FrameFetchContext::dispatchDidDownloadData(unsigned long identifier,
481 int dataLength, 481 int dataLength,
482 int encodedDataLength) { 482 int encodedDataLength) {
483 TRACE_EVENT1( 483 TRACE_EVENT1("devtools.timeline", "ResourceReceivedData", "data",
484 "devtools.timeline", "ResourceReceivedData", "data", 484 InspectorReceiveDataEvent::data(identifier, encodedDataLength));
485 InspectorReceiveDataEvent::data(identifier, frame(), encodedDataLength));
486 frame()->loader().progress().incrementProgress(identifier, dataLength); 485 frame()->loader().progress().incrementProgress(identifier, dataLength);
487 InspectorInstrumentation::didReceiveData(frame(), identifier, 0, dataLength); 486 InspectorInstrumentation::didReceiveData(frame(), identifier, 0, dataLength);
488 InspectorInstrumentation::didReceiveEncodedDataLength(frame(), identifier, 487 InspectorInstrumentation::didReceiveEncodedDataLength(frame(), identifier,
489 encodedDataLength); 488 encodedDataLength);
490 } 489 }
491 490
492 void FrameFetchContext::dispatchDidFinishLoading(unsigned long identifier, 491 void FrameFetchContext::dispatchDidFinishLoading(unsigned long identifier,
493 double finishTime, 492 double finishTime,
494 int64_t encodedDataLength) { 493 int64_t encodedDataLength) {
495 TRACE_EVENT1("devtools.timeline", "ResourceFinish", "data",
496 InspectorResourceFinishEvent::data(identifier, finishTime, false,
497 encodedDataLength));
498 frame()->loader().progress().completeProgress(identifier); 494 frame()->loader().progress().completeProgress(identifier);
499 InspectorInstrumentation::didFinishLoading(frame(), identifier, finishTime, 495 InspectorInstrumentation::didFinishLoading(frame(), identifier, finishTime,
500 encodedDataLength); 496 encodedDataLength);
501 if (frame()->frameScheduler()) 497 if (frame()->frameScheduler())
502 frame()->frameScheduler()->didStopLoading(identifier); 498 frame()->frameScheduler()->didStopLoading(identifier);
503 } 499 }
504 500
505 void FrameFetchContext::dispatchDidFail(unsigned long identifier, 501 void FrameFetchContext::dispatchDidFail(unsigned long identifier,
506 const ResourceError& error, 502 const ResourceError& error,
507 int64_t encodedDataLength, 503 int64_t encodedDataLength,
508 bool isInternalRequest) { 504 bool isInternalRequest) {
509 TRACE_EVENT1("devtools.timeline", "ResourceFinish", "data",
510 InspectorResourceFinishEvent::data(identifier, 0, true,
511 encodedDataLength));
512 frame()->loader().progress().completeProgress(identifier); 505 frame()->loader().progress().completeProgress(identifier);
513 InspectorInstrumentation::didFailLoading(frame(), identifier, error); 506 InspectorInstrumentation::didFailLoading(frame(), identifier, error);
514 // Notification to FrameConsole should come AFTER InspectorInstrumentation 507 // Notification to FrameConsole should come AFTER InspectorInstrumentation
515 // call, DevTools front-end relies on this. 508 // call, DevTools front-end relies on this.
516 if (!isInternalRequest) 509 if (!isInternalRequest)
517 frame()->console().didFailLoading(identifier, error); 510 frame()->console().didFailLoading(identifier, error);
518 if (frame()->frameScheduler()) 511 if (frame()->frameScheduler())
519 frame()->frameScheduler()->didStopLoading(identifier); 512 frame()->frameScheduler()->didStopLoading(identifier);
520 } 513 }
521 514
522 void FrameFetchContext::dispatchDidLoadResourceFromMemoryCache( 515 void FrameFetchContext::dispatchDidLoadResourceFromMemoryCache(
523 unsigned long identifier, 516 unsigned long identifier,
524 Resource* resource, 517 Resource* resource,
525 WebURLRequest::FrameType frameType, 518 WebURLRequest::FrameType frameType,
526 WebURLRequest::RequestContext requestContext) { 519 WebURLRequest::RequestContext requestContext) {
527 ResourceRequest request(resource->url()); 520 ResourceRequest request(resource->url());
528 request.setFrameType(frameType); 521 request.setFrameType(frameType);
529 request.setRequestContext(requestContext); 522 request.setRequestContext(requestContext);
530 frameLoaderClient()->dispatchDidLoadResourceFromMemoryCache( 523 frameLoaderClient()->dispatchDidLoadResourceFromMemoryCache(
531 request, resource->response()); 524 request, resource->response());
532 dispatchWillSendRequest(identifier, request, ResourceResponse(), 525 dispatchWillSendRequest(identifier, request, ResourceResponse(),
533 resource->options().initiatorInfo); 526 resource->options().initiatorInfo);
534 527
535 InspectorInstrumentation::markResourceAsCached(frame(), identifier); 528 InspectorInstrumentation::markResourceAsCached(frame(), identifier);
536 if (!resource->response().isNull()) { 529 if (!resource->response().isNull()) {
530 TRACE_EVENT1(
531 "devtools.timeline", "ResourceReceiveResponse", "data",
532 InspectorReceiveResponseEvent::data(identifier, resource->response()));
537 dispatchDidReceiveResponseInternal(identifier, resource->response(), 533 dispatchDidReceiveResponseInternal(identifier, resource->response(),
538 frameType, requestContext, resource, 534 frameType, requestContext, resource,
539 LinkLoader::DoNotLoadResources); 535 LinkLoader::DoNotLoadResources);
540 } 536 }
541 537
542 if (resource->encodedSize() > 0) 538 if (resource->encodedSize() > 0)
543 dispatchDidReceiveData(identifier, 0, resource->encodedSize()); 539 dispatchDidReceiveData(identifier, 0, resource->encodedSize());
544 540
541 TRACE_EVENT1("devtools.timeline", "ResourceFinish", "data",
542 InspectorResourceFinishEvent::data(identifier, 0, false, 0));
545 dispatchDidFinishLoading(identifier, 0, 0); 543 dispatchDidFinishLoading(identifier, 0, 0);
546 } 544 }
547 545
548 bool FrameFetchContext::shouldLoadNewResource(Resource::Type type) const { 546 bool FrameFetchContext::shouldLoadNewResource(Resource::Type type) const {
549 if (!m_documentLoader) 547 if (!m_documentLoader)
550 return true; 548 return true;
551 549
552 FrameLoader& loader = m_documentLoader->frame()->loader(); 550 FrameLoader& loader = m_documentLoader->frame()->loader();
553 if (type == Resource::MainResource) 551 if (type == Resource::MainResource)
554 return m_documentLoader == loader.provisionalDocumentLoader(); 552 return m_documentLoader == loader.provisionalDocumentLoader();
(...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after
1062 return frame()->frameScheduler()->loadingTaskRunner(); 1060 return frame()->frameScheduler()->loadingTaskRunner();
1063 } 1061 }
1064 1062
1065 void FrameFetchContext::dispatchDidReceiveResponseInternal( 1063 void FrameFetchContext::dispatchDidReceiveResponseInternal(
1066 unsigned long identifier, 1064 unsigned long identifier,
1067 const ResourceResponse& response, 1065 const ResourceResponse& response,
1068 WebURLRequest::FrameType frameType, 1066 WebURLRequest::FrameType frameType,
1069 WebURLRequest::RequestContext requestContext, 1067 WebURLRequest::RequestContext requestContext,
1070 Resource* resource, 1068 Resource* resource,
1071 LinkLoader::CanLoadResources resourceLoadingPolicy) { 1069 LinkLoader::CanLoadResources resourceLoadingPolicy) {
1072 TRACE_EVENT1(
1073 "devtools.timeline", "ResourceReceiveResponse", "data",
1074 InspectorReceiveResponseEvent::data(identifier, frame(), response));
1075 MixedContentChecker::checkMixedPrivatePublic(frame(), 1070 MixedContentChecker::checkMixedPrivatePublic(frame(),
1076 response.remoteIPAddress()); 1071 response.remoteIPAddress());
1077 if (m_documentLoader && 1072 if (m_documentLoader &&
1078 m_documentLoader == 1073 m_documentLoader ==
1079 m_documentLoader->frame()->loader().provisionalDocumentLoader()) { 1074 m_documentLoader->frame()->loader().provisionalDocumentLoader()) {
1080 FrameClientHintsPreferencesContext hintsContext(frame()); 1075 FrameClientHintsPreferencesContext hintsContext(frame());
1081 m_documentLoader->clientHintsPreferences() 1076 m_documentLoader->clientHintsPreferences()
1082 .updateFromAcceptClientHintsHeader( 1077 .updateFromAcceptClientHintsHeader(
1083 response.httpHeaderField(HTTPNames::Accept_CH), &hintsContext); 1078 response.httpHeaderField(HTTPNames::Accept_CH), &hintsContext);
1084 // When response is received with a provisional docloader, the resource 1079 // When response is received with a provisional docloader, the resource
(...skipping 20 matching lines...) Expand all
1105 response); 1100 response);
1106 } 1101 }
1107 1102
1108 DEFINE_TRACE(FrameFetchContext) { 1103 DEFINE_TRACE(FrameFetchContext) {
1109 visitor->trace(m_document); 1104 visitor->trace(m_document);
1110 visitor->trace(m_documentLoader); 1105 visitor->trace(m_documentLoader);
1111 FetchContext::trace(visitor); 1106 FetchContext::trace(visitor);
1112 } 1107 }
1113 1108
1114 } // namespace blink 1109 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698