aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/net/http_loader.rs12
-rw-r--r--components/net_traits/lib.rs18
-rw-r--r--components/script/dom/performanceresourcetiming.rs7
-rw-r--r--components/script/dom/webidls/PerformanceResourceTiming.webidl2
-rw-r--r--tests/wpt/metadata/resource-timing/idlharness.any.js.ini6
-rw-r--r--tests/wpt/metadata/resource-timing/resource_TAO_origin.htm.ini2
-rw-r--r--tests/wpt/metadata/resource-timing/resource_TAO_zero.htm.ini2
7 files changed, 39 insertions, 10 deletions
diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs
index c70a2bb2ad5..dba4b2d3127 100644
--- a/components/net/http_loader.rs
+++ b/components/net/http_loader.rs
@@ -41,8 +41,8 @@ use net_traits::request::{CacheMode, CredentialsMode, Destination, Origin};
use net_traits::request::{RedirectMode, Referrer, Request, RequestMode};
use net_traits::request::{ResponseTainting, ServiceWorkersMode};
use net_traits::response::{HttpsState, Response, ResponseBody, ResponseType};
-use net_traits::ResourceAttribute;
use net_traits::{CookieSource, FetchMetadata, NetworkError, ReferrerPolicy};
+use net_traits::{RedirectStartValue, ResourceAttribute};
use openssl::ssl::SslConnectorBuilder;
use servo_url::{ImmutableOrigin, ServoUrl};
use std::collections::{HashMap, HashSet};
@@ -528,7 +528,6 @@ pub fn http_fetch(
// Generally, we use a persistent connection, so we will also set other PerformanceResourceTiming
// attributes to this as well (domain_lookup_start, domain_lookup_end, connect_start, connect_end,
// secure_connection_start)
- // TODO(#21256) maybe set redirect_start if this resource initiates the redirect
// TODO(#21254) also set startTime equal to either fetch_start or redirect_start
// (https://w3c.github.io/resource-timing/#dfn-starttime)
context
@@ -659,6 +658,15 @@ pub fn http_redirect_fetch(
};
// Step 1 of https://w3c.github.io/resource-timing/#dom-performanceresourcetiming-fetchstart
+ // TODO: check origin and timing allow check
+ context
+ .timing
+ .lock()
+ .unwrap()
+ .set_attribute(ResourceAttribute::RedirectStart(
+ RedirectStartValue::FetchStart,
+ ));
+
context
.timing
.lock()
diff --git a/components/net_traits/lib.rs b/components/net_traits/lib.rs
index 6a38b0a8cc9..e7f4d6fa776 100644
--- a/components/net_traits/lib.rs
+++ b/components/net_traits/lib.rs
@@ -449,16 +449,23 @@ pub struct ResourceFetchTiming {
pub response_start: u64,
pub fetch_start: u64,
// pub response_end: u64,
- // pub redirect_start: u64,
+ pub redirect_start: u64,
// pub redirect_end: u64,
// pub connect_start: u64,
// pub connect_end: u64,
}
+pub enum RedirectStartValue {
+ #[allow(dead_code)]
+ Zero,
+ FetchStart,
+}
+
pub enum ResourceAttribute {
RedirectCount(u16),
RequestStart,
ResponseStart,
+ RedirectStart(RedirectStartValue),
FetchStart,
}
@@ -478,6 +485,7 @@ impl ResourceFetchTiming {
request_start: 0,
response_start: 0,
fetch_start: 0,
+ redirect_start: 0,
}
}
@@ -488,6 +496,14 @@ impl ResourceFetchTiming {
ResourceAttribute::RedirectCount(count) => self.redirect_count = count,
ResourceAttribute::RequestStart => self.request_start = precise_time_ns(),
ResourceAttribute::ResponseStart => self.response_start = precise_time_ns(),
+ ResourceAttribute::RedirectStart(val) => match val {
+ RedirectStartValue::Zero => self.redirect_start = 0,
+ RedirectStartValue::FetchStart => {
+ if self.redirect_start == 0 {
+ self.redirect_start = self.fetch_start
+ }
+ },
+ },
ResourceAttribute::FetchStart => self.fetch_start = precise_time_ns(),
}
}
diff --git a/components/script/dom/performanceresourcetiming.rs b/components/script/dom/performanceresourcetiming.rs
index 1a3022af1c4..f8fe807b85e 100644
--- a/components/script/dom/performanceresourcetiming.rs
+++ b/components/script/dom/performanceresourcetiming.rs
@@ -116,7 +116,7 @@ impl PerformanceResourceTiming {
initiator_type: initiator_type,
next_hop: next_hop,
worker_start: 0.,
- redirect_start: 0.,
+ redirect_start: resource_timing.redirect_start as f64,
redirect_end: 0.,
fetch_start: resource_timing.fetch_start as f64,
domain_lookup_start: 0.,
@@ -179,6 +179,11 @@ impl PerformanceResourceTimingMethods for PerformanceResourceTiming {
Finite::wrap(self.request_start)
}
+ // https://w3c.github.io/resource-timing/#dom-performanceresourcetiming-redirectstart
+ fn RedirectStart(&self) -> DOMHighResTimeStamp {
+ Finite::wrap(self.redirect_start)
+ }
+
// https://w3c.github.io/resource-timing/#dom-performanceresourcetiming-responsestart
fn ResponseStart(&self) -> DOMHighResTimeStamp {
// TODO
diff --git a/components/script/dom/webidls/PerformanceResourceTiming.webidl b/components/script/dom/webidls/PerformanceResourceTiming.webidl
index b63f341b1c9..7e9e394ab6b 100644
--- a/components/script/dom/webidls/PerformanceResourceTiming.webidl
+++ b/components/script/dom/webidls/PerformanceResourceTiming.webidl
@@ -12,7 +12,7 @@ interface PerformanceResourceTiming : PerformanceEntry {
readonly attribute DOMString initiatorType;
readonly attribute DOMString nextHopProtocol;
// readonly attribute DOMHighResTimeStamp workerStart;
- // readonly attribute DOMHighResTimeStamp redirectStart;
+ readonly attribute DOMHighResTimeStamp redirectStart;
// readonly attribute DOMHighResTimeStamp redirectEnd;
readonly attribute DOMHighResTimeStamp fetchStart;
// readonly attribute DOMHighResTimeStamp domainLookupStart;
diff --git a/tests/wpt/metadata/resource-timing/idlharness.any.js.ini b/tests/wpt/metadata/resource-timing/idlharness.any.js.ini
index b1347bdd5ce..b2bbf08bce4 100644
--- a/tests/wpt/metadata/resource-timing/idlharness.any.js.ini
+++ b/tests/wpt/metadata/resource-timing/idlharness.any.js.ini
@@ -57,7 +57,7 @@
expected: FAIL
[PerformanceResourceTiming interface: resource must inherit property "redirectStart" with the proper type]
- expected: FAIL
+ expected: PASS
[PerformanceResourceTiming interface: attribute connectStart]
expected: FAIL
@@ -81,7 +81,7 @@
expected: FAIL
[PerformanceResourceTiming interface: attribute redirectStart]
- expected: FAIL
+ expected: PASS
[PerformanceResourceTiming interface: resource must inherit property "connectEnd" with the proper type]
expected: FAIL
@@ -188,5 +188,5 @@
expected: FAIL
[PerformanceResourceTiming interface: attribute redirectStart]
- expected: FAIL
+ expected: PASS
diff --git a/tests/wpt/metadata/resource-timing/resource_TAO_origin.htm.ini b/tests/wpt/metadata/resource-timing/resource_TAO_origin.htm.ini
index 5bc7995d47f..08e6c45b394 100644
--- a/tests/wpt/metadata/resource-timing/resource_TAO_origin.htm.ini
+++ b/tests/wpt/metadata/resource-timing/resource_TAO_origin.htm.ini
@@ -24,7 +24,7 @@
expected: FAIL
[redirectStart should be 0 in cross-origin request since no redirect.]
- expected: FAIL
+ expected: PASS
[redirectEnd should be 0 in cross-origin request since no redirect.]
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 c64ef4dfc1d..6364f872d11 100644
--- a/tests/wpt/metadata/resource-timing/resource_TAO_zero.htm.ini
+++ b/tests/wpt/metadata/resource-timing/resource_TAO_zero.htm.ini
@@ -18,7 +18,7 @@
expected: FAIL
[redirectStart should be 0 in cross-origin request.]
- expected: FAIL
+ expected: PASS
[domainLookupEnd should be 0 in cross-origin request.]
expected: FAIL