refactored performance timing to align with updated spec

refactoring with ResourceFetchMetadata

implemented deprecated window.timing functionality

created ResourceTimingListener trait

fixed w3c links in navigation timing
This commit is contained in:
ddh
2018-03-12 22:24:41 +00:00
parent b8b691d063
commit 9f6656d83b
90 changed files with 1357 additions and 377 deletions

View File

@@ -21,6 +21,7 @@ use dom::globalscope::GlobalScope;
use dom::htmlelement::HTMLElement;
use dom::node::{ChildrenMutation, CloneChildrenFlag, Node};
use dom::node::{document_from_node, window_from_node};
use dom::performanceresourcetiming::InitiatorType;
use dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use encoding_rs::Encoding;
@@ -28,9 +29,9 @@ use html5ever::{LocalName, Prefix};
use ipc_channel::ipc;
use ipc_channel::router::ROUTER;
use js::jsval::UndefinedValue;
use net_traits::{FetchMetadata, FetchResponseListener, Metadata, NetworkError};
use net_traits::{FetchMetadata, FetchResponseListener, Metadata, NetworkError, ResourceFetchTiming};
use net_traits::request::{CorsSettings, CredentialsMode, Destination, RequestInit, RequestMode};
use network_listener::{NetworkListener, PreInvoke};
use network_listener::{self, NetworkListener, PreInvoke, ResourceTimingListener};
use servo_atoms::Atom;
use servo_config::opts;
use servo_url::ServoUrl;
@@ -154,7 +155,10 @@ struct ScriptContext {
/// The initial URL requested.
url: ServoUrl,
/// Indicates whether the request failed, and why
status: Result<(), NetworkError>
status: Result<(), NetworkError>,
/// Timing object for this resource
resource_timing: ResourceFetchTiming,
}
impl FetchResponseListener for ScriptContext {
@@ -221,6 +225,30 @@ impl FetchResponseListener for ScriptContext {
document.finish_load(LoadType::Script(self.url.clone()));
}
fn resource_timing_mut(&mut self) -> &mut ResourceFetchTiming {
&mut self.resource_timing
}
fn resource_timing(&self) -> &ResourceFetchTiming {
&self.resource_timing
}
fn submit_resource_timing(&mut self) {
network_listener::submit_timing(self)
}
}
impl ResourceTimingListener for ScriptContext {
fn resource_timing_information(&self) -> (InitiatorType, ServoUrl) {
let initiator_type = InitiatorType::LocalName(
self.elem.root().upcast::<Element>().local_name().to_string());
(initiator_type, self.url.clone())
}
fn resource_timing_global(&self) -> DomRoot<GlobalScope> {
(document_from_node(&*self.elem.root()).global())
}
}
impl PreInvoke for ScriptContext {}
@@ -267,7 +295,8 @@ fn fetch_a_classic_script(script: &HTMLScriptElement,
data: vec!(),
metadata: None,
url: url.clone(),
status: Ok(())
status: Ok(()),
resource_timing: ResourceFetchTiming::new(),
}));
let (action_sender, action_receiver) = ipc::channel().unwrap();