diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index 3f9f9f46f0a..6574623232d 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -381,6 +381,12 @@ fn obtain_response( // TODO(#21261) connect_start: set if a persistent connection is *not* used and the last non-redirected // fetch passes the timing allow check let connect_start = precise_time_ms(); + context + .timing + .lock() + .unwrap() + .set_attribute(ResourceAttribute::ConnectStart(connect_start)); + // https://url.spec.whatwg.org/#percent-encoded-bytes let request = HyperRequest::builder() .method(method) diff --git a/components/net_traits/lib.rs b/components/net_traits/lib.rs index 59d997df71d..853692da33c 100644 --- a/components/net_traits/lib.rs +++ b/components/net_traits/lib.rs @@ -452,7 +452,7 @@ pub struct ResourceFetchTiming { pub response_end: u64, pub redirect_start: u64, // pub redirect_end: u64, - // pub connect_start: u64, + pub connect_start: u64, pub connect_end: u64, } @@ -468,6 +468,7 @@ pub enum ResourceAttribute { ResponseStart, RedirectStart(RedirectStartValue), FetchStart, + ConnectStart(u64), ConnectEnd(u64), ResponseEnd, } @@ -489,6 +490,7 @@ impl ResourceFetchTiming { response_start: 0, fetch_start: 0, redirect_start: 0, + connect_start: 0, connect_end: 0, response_end: 0, } @@ -510,6 +512,7 @@ impl ResourceFetchTiming { }, }, ResourceAttribute::FetchStart => self.fetch_start = precise_time_ns(), + ResourceAttribute::ConnectStart(val) => self.connect_start = val, ResourceAttribute::ConnectEnd(val) => self.connect_end = val, ResourceAttribute::ResponseEnd => self.response_end = precise_time_ns(), } diff --git a/components/script/dom/performanceresourcetiming.rs b/components/script/dom/performanceresourcetiming.rs index 9726f2c04e4..0c7df4d4f80 100644 --- a/components/script/dom/performanceresourcetiming.rs +++ b/components/script/dom/performanceresourcetiming.rs @@ -120,7 +120,7 @@ impl PerformanceResourceTiming { fetch_start: resource_timing.fetch_start as f64, domain_lookup_start: 0., domain_lookup_end: 0., - connect_start: 0., + connect_start: resource_timing.connect_start as f64, connect_end: resource_timing.connect_end as f64, secure_connection_start: 0., request_start: resource_timing.request_start as f64, @@ -192,6 +192,11 @@ impl PerformanceResourceTimingMethods for PerformanceResourceTiming { Finite::wrap(self.fetch_start) } + // https://w3c.github.io/resource-timing/#dom-performanceresourcetiming-connectstart + fn ConnectStart(&self) -> DOMHighResTimeStamp { + Finite::wrap(self.connect_start) + } + // https://w3c.github.io/resource-timing/#dom-performanceresourcetiming-connectend fn ConnectEnd(&self) -> DOMHighResTimeStamp { Finite::wrap(self.connect_end) diff --git a/components/script/dom/webidls/PerformanceResourceTiming.webidl b/components/script/dom/webidls/PerformanceResourceTiming.webidl index 9fdd9c845da..1c9cf1bb8e5 100644 --- a/components/script/dom/webidls/PerformanceResourceTiming.webidl +++ b/components/script/dom/webidls/PerformanceResourceTiming.webidl @@ -17,7 +17,7 @@ interface PerformanceResourceTiming : PerformanceEntry { readonly attribute DOMHighResTimeStamp fetchStart; // readonly attribute DOMHighResTimeStamp domainLookupStart; // readonly attribute DOMHighResTimeStamp domainLookupEnd; - // readonly attribute DOMHighResTimeStamp connectStart; + readonly attribute DOMHighResTimeStamp connectStart; readonly attribute DOMHighResTimeStamp connectEnd; // readonly attribute DOMHighResTimeStamp secureConnectionStart; readonly attribute DOMHighResTimeStamp requestStart; diff --git a/tests/wpt/metadata/resource-timing/idlharness.any.js.ini b/tests/wpt/metadata/resource-timing/idlharness.any.js.ini index d5afd6d78d9..1938b2ca3ff 100644 --- a/tests/wpt/metadata/resource-timing/idlharness.any.js.ini +++ b/tests/wpt/metadata/resource-timing/idlharness.any.js.ini @@ -44,18 +44,12 @@ [PerformanceResourceTiming interface: resource must inherit property "domainLookupStart" with the proper type] expected: FAIL - [PerformanceResourceTiming interface: resource must inherit property "connectStart" with the proper type] - expected: FAIL - [PerformanceResourceTiming interface: attribute workerStart] expected: FAIL [PerformanceResourceTiming interface: attribute domainLookupStart] expected: FAIL - [PerformanceResourceTiming interface: attribute connectStart] - expected: FAIL - [PerformanceResourceTiming interface: resource must inherit property "redirectEnd" with the proper type] expected: FAIL @@ -157,9 +151,6 @@ [PerformanceResourceTiming interface: attribute domainLookupStart] expected: FAIL - [PerformanceResourceTiming interface: attribute connectStart] - expected: FAIL - [PerformanceResourceTiming interface: attribute redirectEnd] expected: FAIL diff --git a/tests/wpt/metadata/resource-timing/resource_TAO_zero.htm.ini b/tests/wpt/metadata/resource-timing/resource_TAO_zero.htm.ini index fe102191c74..191e465e85c 100644 --- a/tests/wpt/metadata/resource-timing/resource_TAO_zero.htm.ini +++ b/tests/wpt/metadata/resource-timing/resource_TAO_zero.htm.ini @@ -11,9 +11,6 @@ [domainLookupStart should be 0 in cross-origin request.] expected: FAIL - [connectStart should be 0 in cross-origin request.] - expected: FAIL - [redirectStart should be 0 in cross-origin request.] expected: PASS