Changeset 277493 in webkit
- Timestamp:
- May 14, 2021, 9:56:47 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 14 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/TestExpectations (modified) (1 diff)
-
LayoutTests/imported/w3c/ChangeLog (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse_mixed_content-expected.txt (modified) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/page/PerformanceResourceTiming.cpp (modified) (1 diff)
-
Source/WebCore/platform/network/NetworkLoadMetrics.h (modified) (3 diffs)
-
Source/WebCore/platform/network/ResourceHandle.h (modified) (1 diff)
-
Source/WebCore/platform/network/cocoa/NetworkLoadMetrics.mm (modified) (1 diff)
-
Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm (modified) (1 diff)
-
Source/WebCore/platform/network/mac/ResourceHandleMac.mm (modified) (1 diff)
-
Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm (modified) (1 diff)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r277488 r277493 1 2021-05-14 Alex Christensen <achristensen@webkit.org> 2 3 Resource Timing: secureConnectionStart == 0 when a connection is re-used 4 https://bugs.webkit.org/show_bug.cgi?id=225733 5 6 Reviewed by Chris Dumez. 7 8 * TestExpectations: 9 1 10 2021-05-14 Amir Mark Jr <amir_mark@apple.com> 2 11 -
trunk/LayoutTests/TestExpectations
r277468 r277493 941 941 imported/w3c/web-platform-tests/resource-timing/crossorigin-sandwich-TAO.sub.html [ Pass Failure ] 942 942 imported/w3c/web-platform-tests/resource-timing/crossorigin-sandwich-partial-TAO.sub.html [ Pass Failure ] 943 imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse_mixed_content.html [ Pass Failure ]944 943 945 944 imported/w3c/web-platform-tests/mediacapture-streams/MediaStream-default-feature-policy.https.html [ DumpJSConsoleLogInStdErr ] -
trunk/LayoutTests/imported/w3c/ChangeLog
r277468 r277493 1 2021-05-14 Alex Christensen <achristensen@webkit.org> 2 3 Resource Timing: secureConnectionStart == 0 when a connection is re-used 4 https://bugs.webkit.org/show_bug.cgi?id=225733 5 6 Reviewed by Chris Dumez. 7 8 * web-platform-tests/resource-timing/resource_connection_reuse_mixed_content-expected.txt: 9 1 10 2021-05-13 Dean Jackson <dino@apple.com> 2 11 -
trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse_mixed_content-expected.txt
r267647 r277493 9 9 PASS connectStart and fetchStart should be the same 10 10 PASS connectEnd and fetchStart should be the same 11 FAIL secureConnectionStart and fetchStart should be the same assert_equals: secureConnectionStart and fetchStart should be the same expected 0 but got 18.000000000000004 11 PASS secureConnectionStart and fetchStart should be the same 12 12 PASS domainLookupStart and fetchStart should be the same 13 13 PASS domainLookupEnd and fetchStart should be the same -
trunk/Source/WebCore/ChangeLog
r277492 r277493 1 2021-05-14 Alex Christensen <achristensen@webkit.org> 2 3 Resource Timing: secureConnectionStart == 0 when a connection is re-used 4 https://bugs.webkit.org/show_bug.cgi?id=225733 5 6 Reviewed by Chris Dumez. 7 8 Covered by a newly-passing web platform test, which was already passed by Chrome and Firefox. 9 10 * page/PerformanceResourceTiming.cpp: 11 (WebCore::PerformanceResourceTiming::secureConnectionStart const): 12 * platform/network/NetworkLoadMetrics.h: 13 I use a sentinel value to distinguish no secure connection from a reused secure connection. 14 * platform/network/ResourceHandle.h: 15 * platform/network/cocoa/NetworkLoadMetrics.mm: 16 (WebCore::packageTimingData): 17 (WebCore::copyTimingData): 18 Introduce a way to get timing data from CFNetwork using a more modern API. 19 (WebCore::timingValue): Deleted. 20 * platform/network/cocoa/WebCoreNSURLSession.mm: 21 (-[WebCoreNSURLSessionDataTask _timingData]): 22 * platform/network/mac/ResourceHandleMac.mm: 23 (WebCore::ResourceHandle::getConnectionTimingData): Deleted. 24 * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm: 25 (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]): 26 1 27 2021-05-14 Chris Dumez <cdumez@apple.com> 2 28 -
trunk/Source/WebCore/page/PerformanceResourceTiming.cpp
r257766 r277493 177 177 return 0.0; 178 178 179 if (m_networkLoadMetrics.secureConnectionStart == reusedTLSConnectionSentinel) 180 return fetchStart(); 181 179 182 if (m_networkLoadMetrics.secureConnectionStart <= 0_ms) 180 183 return 0.0; -
trunk/Source/WebCore/platform/network/NetworkLoadMetrics.h
r277038 r277493 47 47 48 48 #if PLATFORM(COCOA) 49 OBJC_CLASS NSDictionary; 49 OBJC_CLASS NSURLConnection; 50 OBJC_CLASS NSURLResponse; 51 OBJC_CLASS NSURLSessionTaskTransactionMetrics; 50 52 #endif 51 53 … … 60 62 61 63 NETWORK_LOAD_METRICS_ADDITIONS_1; 64 65 constexpr Seconds reusedTLSConnectionSentinel { -2 }; 62 66 63 67 class NetworkLoadMetricsWithoutNonTimingData { … … 197 201 198 202 #if PLATFORM(COCOA) 199 WEBCORE_EXPORT Box<NetworkLoadMetrics> copyTimingData(NSDictionary *timingData); 203 Box<NetworkLoadMetrics> copyTimingData(NSURLConnection *, NSURLResponse *); 204 WEBCORE_EXPORT Box<NetworkLoadMetrics> copyTimingData(NSURLSessionTaskTransactionMetrics *incompleteMetrics); 200 205 #endif 201 206 -
trunk/Source/WebCore/platform/network/ResourceHandle.h
r259575 r277493 129 129 130 130 #if PLATFORM(COCOA) 131 #if USE(CFURLCONNECTION)132 static Box<NetworkLoadMetrics> getConnectionTimingData(CFURLConnectionRef);133 #else134 static Box<NetworkLoadMetrics> getConnectionTimingData(NSURLConnection *);135 #endif136 #endif137 138 #if PLATFORM(COCOA)139 131 void schedule(WTF::SchedulePair&); 140 132 void unschedule(WTF::SchedulePair&); -
trunk/Source/WebCore/platform/network/cocoa/NetworkLoadMetrics.mm
r261597 r277493 31 31 namespace WebCore { 32 32 33 static double timingValue(NSDictionary *timingData, NSString *key)33 static Box<NetworkLoadMetrics> packageTimingData(double fetchStart, double domainLookupStart, double domainLookupEnd, double connectStart, double secureConnectionStart, double connectEnd, double requestStart, double responseStart, bool reusedTLSConnection, NSString *protocol) 34 34 { 35 if (id object = [timingData objectForKey:key]) 36 return [object doubleValue]; 37 return 0.0; 35 auto timing = Box<NetworkLoadMetrics>::create(); 36 37 timing->fetchStart = Seconds(fetchStart); 38 timing->domainLookupStart = Seconds(domainLookupStart <= 0 ? -1 : domainLookupStart - fetchStart); 39 timing->domainLookupEnd = Seconds(domainLookupEnd <= 0 ? -1 : domainLookupEnd - fetchStart); 40 timing->connectStart = Seconds(connectStart <= 0 ? -1 : connectStart - fetchStart); 41 if (reusedTLSConnection && [protocol isEqualToString:@"https"]) 42 timing->secureConnectionStart = reusedTLSConnectionSentinel; 43 else 44 timing->secureConnectionStart = Seconds(secureConnectionStart <= 0 ? -1 : secureConnectionStart - fetchStart); 45 timing->connectEnd = Seconds(connectEnd <= 0 ? -1 : connectEnd - fetchStart); 46 timing->requestStart = Seconds(requestStart <= 0 ? 0 : requestStart - fetchStart); 47 timing->responseStart = Seconds(responseStart <= 0 ? 0 : responseStart - fetchStart); 48 49 // NOTE: responseEnd is not populated in this code path. 50 51 return timing; 38 52 } 39 40 Box<NetworkLoadMetrics> copyTimingData(NS Dictionary *timingData)53 54 Box<NetworkLoadMetrics> copyTimingData(NSURLSessionTaskTransactionMetrics *incompleteMetrics) 41 55 { 56 return packageTimingData( 57 incompleteMetrics.fetchStartDate.timeIntervalSince1970, 58 incompleteMetrics.domainLookupStartDate.timeIntervalSince1970, 59 incompleteMetrics.domainLookupEndDate.timeIntervalSince1970, 60 incompleteMetrics.connectStartDate.timeIntervalSince1970, 61 incompleteMetrics.secureConnectionStartDate.timeIntervalSince1970, 62 incompleteMetrics.connectEndDate.timeIntervalSince1970, 63 incompleteMetrics.requestStartDate.timeIntervalSince1970, 64 incompleteMetrics.responseStartDate.timeIntervalSince1970, 65 incompleteMetrics.reusedConnection, 66 incompleteMetrics.response.URL.scheme 67 ); 68 } 69 70 Box<NetworkLoadMetrics> copyTimingData(NSURLConnection *connection, NSURLResponse *response) 71 { 72 NSDictionary *timingData = [connection _timingData]; 42 73 if (!timingData) 43 74 return nullptr; 44 75 45 Box<NetworkLoadMetrics> timing = Box<NetworkLoadMetrics>::create(); 76 auto timingValue = [](NSDictionary *timingData, NSString *key) { 77 if (id object = [timingData objectForKey:key]) 78 return [object doubleValue]; 79 return 0.0; 80 }; 46 81 47 // This is not the navigationStart time in monotonic time, but the other times are relative to this time 48 // and only the differences between times are stored. 49 double referenceStart = timingValue(timingData, @"_kCFNTimingDataFetchStart"); 50 51 double domainLookupStart = timingValue(timingData, @"_kCFNTimingDataDomainLookupStart"); 52 double domainLookupEnd = timingValue(timingData, @"_kCFNTimingDataDomainLookupEnd"); 53 double connectStart = timingValue(timingData, @"_kCFNTimingDataConnectStart"); 54 double secureConnectionStart = timingValue(timingData, @"_kCFNTimingDataSecureConnectionStart"); 55 double connectEnd = timingValue(timingData, @"_kCFNTimingDataConnectEnd"); 56 double requestStart = timingValue(timingData, @"_kCFNTimingDataRequestStart"); 57 double responseStart = timingValue(timingData, @"_kCFNTimingDataResponseStart"); 58 59 timing->fetchStart = Seconds(referenceStart); 60 timing->domainLookupStart = Seconds(domainLookupStart <= 0 ? -1 : domainLookupStart - referenceStart); 61 timing->domainLookupEnd = Seconds(domainLookupEnd <= 0 ? -1 : domainLookupEnd - referenceStart); 62 timing->connectStart = Seconds(connectStart <= 0 ? -1 : connectStart - referenceStart); 63 timing->secureConnectionStart = Seconds(secureConnectionStart <= 0 ? -1 : secureConnectionStart - referenceStart); 64 timing->connectEnd = Seconds(connectEnd <= 0 ? -1 : connectEnd - referenceStart); 65 timing->requestStart = Seconds(requestStart <= 0 ? 0 : requestStart - referenceStart); 66 timing->responseStart = Seconds(responseStart <= 0 ? 0 : responseStart - referenceStart); 67 68 // NOTE: responseEnd is not populated in this code path. 69 return timing; 82 return packageTimingData( 83 timingValue(timingData, @"_kCFNTimingDataFetchStart"), 84 timingValue(timingData, @"_kCFNTimingDataDomainLookupStart"), 85 timingValue(timingData, @"_kCFNTimingDataDomainLookupEnd"), 86 timingValue(timingData, @"_kCFNTimingDataConnectStart"), 87 timingValue(timingData, @"_kCFNTimingDataSecureConnectionStart"), 88 timingValue(timingData, @"_kCFNTimingDataConnectEnd"), 89 timingValue(timingData, @"_kCFNTimingDataRequestStart"), 90 timingValue(timingData, @"_kCFNTimingDataResponseStart"), 91 timingValue(timingData, @"_kCFNTimingDataConnectionReused"), 92 response.URL.scheme 93 ); 70 94 } 71 95 -
trunk/Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm
r277038 r277493 803 803 - (NSDictionary *)_timingData 804 804 { 805 // FIXME: return a dictionary sourced from ResourceHandle::getConnectionTimingData().805 // FIXME: Make sure nobody is using this and remove this. It is replaced by WebCoreNSURLSessionTaskTransactionMetrics. 806 806 return @{ }; 807 807 } -
trunk/Source/WebCore/platform/network/mac/ResourceHandleMac.mm
r274931 r277493 654 654 } 655 655 656 Box<NetworkLoadMetrics> ResourceHandle::getConnectionTimingData(NSURLConnection *connection)657 {658 return copyTimingData([connection _timingData]);659 }660 661 656 } // namespace WebCore -
trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm
r264993 r277493 253 253 ResourceResponse resourceResponse(r.get()); 254 254 resourceResponse.setSource(ResourceResponse::Source::Network); 255 resourceResponse.setDeprecatedNetworkLoadMetrics( ResourceHandle::getConnectionTimingData(connection.get()));255 resourceResponse.setDeprecatedNetworkLoadMetrics(copyTimingData(connection.get(), r.get())); 256 256 257 257 m_handle->didReceiveResponse(WTFMove(resourceResponse), [self, protectedSelf = WTFMove(protectedSelf)] { -
trunk/Source/WebKit/ChangeLog
r277492 r277493 1 2021-05-14 Alex Christensen <achristensen@webkit.org> 2 3 Resource Timing: secureConnectionStart == 0 when a connection is re-used 4 https://bugs.webkit.org/show_bug.cgi?id=225733 5 6 Reviewed by Chris Dumez. 7 8 * NetworkProcess/cocoa/NetworkSessionCocoa.mm: 9 (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]): 10 1 11 2021-05-14 Chris Dumez <cdumez@apple.com> 2 12 -
trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm
r277055 r277493 879 879 880 880 NegotiatedLegacyTLS negotiatedLegacyTLS = NegotiatedLegacyTLS::No; 881 NSURLSessionTaskTransactionMetrics *metrics = dataTask._incompleteTaskMetrics.transactionMetrics.lastObject; 881 882 #if HAVE(TLS_PROTOCOL_VERSION_T) 882 NSURLSessionTaskTransactionMetrics *metrics = dataTask._incompleteTaskMetrics.transactionMetrics.lastObject;883 883 auto tlsVersion = (tls_protocol_version_t)metrics.negotiatedTLSProtocolVersion.unsignedShortValue; 884 884 if (tlsVersion == tls_protocol_version_TLSv10 || tlsVersion == tls_protocol_version_TLSv11) … … 907 907 resourceResponse.disableLazyInitialization(); 908 908 909 // FIXME: This cannot be eliminated until other code no longer relies on ResourceResponse's 910 // NetworkLoadMetrics. For example, PerformanceTiming. 911 resourceResponse.setDeprecatedNetworkLoadMetrics(WebCore::copyTimingData([dataTask _timingData])); 909 resourceResponse.setDeprecatedNetworkLoadMetrics(WebCore::copyTimingData(metrics)); 912 910 913 911 networkDataTask->didReceiveResponse(WTFMove(resourceResponse), negotiatedLegacyTLS, [completionHandler = makeBlockPtr(completionHandler), taskIdentifier](WebCore::PolicyAction policyAction) {
Note:
See TracChangeset
for help on using the changeset viewer.