Changeset 291441 in webkit
- Timestamp:
- Mar 17, 2022 2:19:27 PM (4 months ago)
- Location:
- trunk
- Files:
-
- 4 added
- 7 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/http/wpt/service-workers/navigation-timing.https-expected.txt (added)
-
LayoutTests/http/wpt/service-workers/navigation-timing.https.html (added)
-
LayoutTests/http/wpt/service-workers/navigation-timing.js (added)
-
LayoutTests/http/wpt/service-workers/resources/navigation-timing-part-2.html (added)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/Modules/cache/DOMCache.cpp (modified) (5 diffs)
-
Source/WebCore/Modules/cache/DOMCache.h (modified) (1 diff)
-
Source/WebCore/page/PerformanceNavigationTiming.cpp (modified) (1 diff)
-
Source/WebCore/platform/network/NetworkLoadMetrics.cpp (modified) (1 diff)
-
Source/WebCore/platform/network/NetworkLoadMetrics.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r291435 r291441 1 2022-03-17 Alex Christensen <achristensen@webkit.org> 2 3 PerformanceNavigationTiming Response Start unavailable when using Service Worker Cache 4 https://bugs.webkit.org/show_bug.cgi?id=237317 5 6 Reviewed by Youenn Fablet. 7 8 Test that these values are reasonable after loading the main resource from a service worker's cache. 9 10 * http/wpt/service-workers/navigation-timing.https-expected.txt: Added. 11 * http/wpt/service-workers/navigation-timing.https.html: Added. 12 * http/wpt/service-workers/navigation-timing.js: Added. 13 (event.event.waitUntil.caches.open.string_appeared_here.then): 14 (event.event.respondWith.caches.open.string_appeared_here.then): 15 * http/wpt/service-workers/resources/navigation-timing-part-2.html: Added. 16 1 17 2022-03-17 Cameron McCormack <heycam@apple.com> 2 18 -
trunk/Source/WebCore/ChangeLog
r291438 r291441 1 2022-03-17 Alex Christensen <achristensen@webkit.org> 2 3 PerformanceNavigationTiming Response Start unavailable when using Service Worker Cache 4 https://bugs.webkit.org/show_bug.cgi?id=237317 5 6 Reviewed by Youenn Fablet. 7 8 * Modules/cache/DOMCache.cpp: 9 (WebCore::createResponse): 10 * page/PerformanceNavigationTiming.cpp: 11 (WebCore::PerformanceNavigationTiming::navigationFinished): 12 * platform/network/NetworkLoadMetrics.cpp: 13 (WebCore::NetworkLoadMetrics::updateFrom): 14 (WebCore::NetworkLoadMetrics::NetworkLoadMetrics): Deleted. 15 * platform/network/NetworkLoadMetrics.h: 16 1 17 2022-03-17 Eric Carlson <eric.carlson@apple.com> 2 18 -
trunk/Source/WebCore/Modules/cache/DOMCache.cpp
r291123 r291441 80 80 } 81 81 82 static Ref<FetchResponse> createResponse(ScriptExecutionContext& context, const DOMCacheEngine::Record& record )82 static Ref<FetchResponse> createResponse(ScriptExecutionContext& context, const DOMCacheEngine::Record& record, MonotonicTime requestStart) 83 83 { 84 84 auto resourceResponse = record.response; 85 85 resourceResponse.setSource(ResourceResponse::Source::DOMCache); 86 87 auto metrics = Box<NetworkLoadMetrics>::create(); 88 metrics->requestStart = requestStart; 89 metrics->responseStart = MonotonicTime::now(); 90 resourceResponse.setDeprecatedNetworkLoadMetrics(WTFMove(metrics)); 91 86 92 auto response = FetchResponse::create(&context, std::nullopt, record.responseHeadersGuard, WTFMove(resourceResponse)); 87 93 response->setBodyData(copyResponseBody(record.responseBody), record.responseBodySize); … … 101 107 102 108 auto request = requestOrException.releaseReturnValue()->resourceRequest(); 103 queryCache(WTFMove(request), options, ShouldRetrieveResponses::Yes, [this, callback = WTFMove(callback)](auto&& result) mutable { 109 auto requestStart = MonotonicTime::now(); 110 queryCache(WTFMove(request), options, ShouldRetrieveResponses::Yes, [this, callback = WTFMove(callback), requestStart](auto&& result) mutable { 104 111 if (result.hasException()) { 105 112 callback(result.releaseException()); … … 109 116 RefPtr<FetchResponse> response; 110 117 if (!result.returnValue().isEmpty()) 111 response = createResponse(*scriptExecutionContext(), result.returnValue()[0] );118 response = createResponse(*scriptExecutionContext(), result.returnValue()[0], requestStart); 112 119 113 120 callback(WTFMove(response)); … … 115 122 } 116 123 117 Vector<Ref<FetchResponse>> DOMCache::cloneResponses(const Vector<DOMCacheEngine::Record>& records )118 { 119 return WTF::map(records, [this ] (const auto& record) {120 return createResponse(*scriptExecutionContext(), record );124 Vector<Ref<FetchResponse>> DOMCache::cloneResponses(const Vector<DOMCacheEngine::Record>& records, MonotonicTime requestStart) 125 { 126 return WTF::map(records, [this, requestStart] (const auto& record) { 127 return createResponse(*scriptExecutionContext(), record, requestStart); 121 128 }); 122 129 } … … 137 144 } 138 145 139 queryCache(WTFMove(resourceRequest), options, ShouldRetrieveResponses::Yes, [this, promise = WTFMove(promise)](auto&& result) mutable { 140 queueTaskKeepingObjectAlive(*this, TaskSource::DOMManipulation, [this, promise = WTFMove(promise), result = WTFMove(result)]() mutable { 146 auto requestStart = MonotonicTime::now(); 147 queryCache(WTFMove(resourceRequest), options, ShouldRetrieveResponses::Yes, [this, promise = WTFMove(promise), requestStart](auto&& result) mutable { 148 queueTaskKeepingObjectAlive(*this, TaskSource::DOMManipulation, [this, promise = WTFMove(promise), result = WTFMove(result), requestStart]() mutable { 141 149 if (result.hasException()) { 142 150 promise.reject(result.releaseException()); 143 151 return; 144 152 } 145 promise.resolve(cloneResponses(result.releaseReturnValue() ));153 promise.resolve(cloneResponses(result.releaseReturnValue(), requestStart)); 146 154 }); 147 155 }); -
trunk/Source/WebCore/Modules/cache/DOMCache.h
r287066 r291441 83 83 void batchPutOperation(Vector<DOMCacheEngine::Record>&&, CompletionHandler<void(ExceptionOr<void>&&)>&&); 84 84 85 Vector<Ref<FetchResponse>> cloneResponses(const Vector<DOMCacheEngine::Record>& );85 Vector<Ref<FetchResponse>> cloneResponses(const Vector<DOMCacheEngine::Record>&, MonotonicTime); 86 86 DOMCacheEngine::Record toConnectionRecord(const FetchRequest&, FetchResponse&, DOMCacheEngine::ResponseBody&&); 87 87 -
trunk/Source/WebCore/page/PerformanceNavigationTiming.cpp
r285724 r291441 143 143 { 144 144 m_documentLoadTiming.markEndTime(); 145 m_resourceTiming.networkLoadMetrics() = metrics;145 m_resourceTiming.networkLoadMetrics().updateFromFinalMetrics(metrics); 146 146 } 147 147 -
trunk/Source/WebCore/platform/network/NetworkLoadMetrics.cpp
r282853 r291441 31 31 namespace WebCore { 32 32 33 NetworkLoadMetrics::NetworkLoadMetrics() 34 : complete(false) 35 , cellular(false) 36 , expensive(false) 37 , constrained(false) 38 , multipath(false) 39 , isReusedConnection(false) 40 , failsTAOCheck(false) 41 , hasCrossOriginRedirect(false) { } 33 NetworkLoadMetrics::NetworkLoadMetrics() = default; 34 35 void NetworkLoadMetrics::updateFromFinalMetrics(const NetworkLoadMetrics& other) 36 { 37 MonotonicTime originalRedirectStart = redirectStart; 38 MonotonicTime originalFetchStart = fetchStart; 39 MonotonicTime originalDomainLookupStart = domainLookupStart; 40 MonotonicTime originalDomainLookupEnd = domainLookupEnd; 41 MonotonicTime originalConnectStart = connectStart; 42 MonotonicTime originalSecureConnectionStart = secureConnectionStart; 43 MonotonicTime originalConnectEnd = connectEnd; 44 MonotonicTime originalRequestStart = requestStart; 45 MonotonicTime originalResponseStart = responseStart; 46 MonotonicTime originalResponseEnd = responseEnd; 47 48 *this = other; 49 50 if (!redirectStart) 51 redirectStart = originalRedirectStart; 52 if (!fetchStart) 53 fetchStart = originalFetchStart; 54 if (!domainLookupStart) 55 domainLookupStart = originalDomainLookupStart; 56 if (!domainLookupEnd) 57 domainLookupEnd = originalDomainLookupEnd; 58 if (!connectStart) 59 connectStart = originalConnectStart; 60 if (!secureConnectionStart) 61 secureConnectionStart = originalSecureConnectionStart; 62 if (!connectEnd) 63 connectEnd = originalConnectEnd; 64 if (!requestStart) 65 requestStart = originalRequestStart; 66 if (!responseStart) 67 responseStart = originalResponseStart; 68 if (!responseEnd) 69 responseEnd = originalResponseEnd; 70 71 if (!responseEnd) 72 responseEnd = MonotonicTime::now(); 73 complete = true; 74 } 42 75 43 76 const NetworkLoadMetrics& NetworkLoadMetrics::emptyMetrics() -
trunk/Source/WebCore/platform/network/NetworkLoadMetrics.h
r290969 r291441 76 76 void markComplete() { complete = true; } 77 77 78 void updateFromFinalMetrics(const NetworkLoadMetrics&); 79 78 80 // https://www.w3.org/TR/resource-timing-2/#attribute-descriptions 79 81 MonotonicTime redirectStart; … … 93 95 uint16_t redirectCount { 0 }; 94 96 95 bool complete : 1 ;96 bool cellular : 1 ;97 bool expensive : 1 ;98 bool constrained : 1 ;99 bool multipath : 1 ;100 bool isReusedConnection : 1 ;101 bool failsTAOCheck : 1 ;102 bool hasCrossOriginRedirect : 1 ;97 bool complete : 1 { false }; 98 bool cellular : 1 { false }; 99 bool expensive : 1 { false }; 100 bool constrained : 1 { false }; 101 bool multipath : 1 { false }; 102 bool isReusedConnection : 1 { false }; 103 bool failsTAOCheck : 1 { false }; 104 bool hasCrossOriginRedirect : 1 { false }; 103 105 104 106 PrivacyStance privacyStance { PrivacyStance::Unknown };
Note: See TracChangeset
for help on using the changeset viewer.