Description

This test validates the value of window.performance.navigation.type and the values of window.performance.timing.* with a reloaded navigation.

This page should be loaded with a green background frame below. The frame will be automatically reloaded and then verified that

The window.performance.navigation.type = TYPE_RELOAD
All of the widow.performance.timing.* values after reload are > all of the window.performance.timing.* values prior to reload.

PASS window.performance is defined
PASS window.performance.navigation is defined
PASS window.performance.navigation.type == TYPE_RELOAD
PASS Reload connectEnd > Original connectEnd
PASS Reload connectStart > Original connectStart
PASS Reload domComplete > Original domComplete
PASS Reload domContentLoadedEventEnd > Original domContentLoadedEventEnd
PASS Reload domContentLoadedEventStart > Original domContentLoadedEventStart
PASS Reload domInteractive > Original domInteractive
PASS Reload domLoading > Original domLoading
PASS Reload domainLookupEnd > Original domainLookupEnd
PASS Reload domainLookupStart > Original domainLookupStart
PASS Reload fetchStart > Original fetchStart
PASS Reload loadEventEnd > Original loadEventEnd
PASS Reload loadEventStart > Original loadEventStart
PASS Reload navigationStart > Original navigationStart
PASS Reload redirectEnd(0) == Original redirectEnd(0)
PASS Reload redirectStart(0) == Original redirectStart(0)
PASS Reload requestStart > Original requestStart
PASS Reload responseEnd > Original responseEnd
PASS Reload responseStart > Original responseStart
PASS Reload unloadEventEnd > Original unloadEventEnd
PASS Reload unloadEventStart > Original unloadEventStart


