| Index: third_party/WebKit/LayoutTests/http/tests/performance-timing/test-navigation-timing2-attributes-exist.html
 | 
| diff --git a/third_party/WebKit/LayoutTests/http/tests/performance-timing/test-navigation-timing2-attributes-exist.html b/third_party/WebKit/LayoutTests/http/tests/performance-timing/test-navigation-timing2-attributes-exist.html
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..29efe660a7aa4f6769c0104ebabe4e2f565f3cda
 | 
| --- /dev/null
 | 
| +++ b/third_party/WebKit/LayoutTests/http/tests/performance-timing/test-navigation-timing2-attributes-exist.html
 | 
| @@ -0,0 +1,72 @@
 | 
| +<!DOCTYPE html>
 | 
| +<script src="../../../resources/testharness.js"></script>
 | 
| +<script src="../../../resources/testharnessreport.js"></script>
 | 
| +<script>
 | 
| +
 | 
| +async_test(function (t) {
 | 
| +    var observer = new PerformanceObserver(
 | 
| +        t.step_func(function (entryList) {
 | 
| +            var entries = entryList.getEntries();
 | 
| +            assert_equals(entries.length, 1,
 | 
| +                "there should be only one navigation timing instance");
 | 
| +            assert_true("transferSize" in entries[0],
 | 
| +                "expected attribute: transferSize");
 | 
| +            assert_true("encodedBodySize" in entries[0],
 | 
| +                "expected attribute: encodedBodySize");
 | 
| +            assert_true("decodedBodySize" in entries[0],
 | 
| +                "expected attribute: decodedBodySize");
 | 
| +            assert_true("redirectCount" in entries[0],
 | 
| +                "expected attribute: workerStart");
 | 
| +            assert_true("workerStart" in entries[0],
 | 
| +                "expected attribute: redirectCount");
 | 
| +            assert_equals(entries[0].entryType, "navigation",
 | 
| +                "entryType expected to be: navigation");
 | 
| +            assert_equals(entries[0].name, "document",
 | 
| +                "name expected to be: document");
 | 
| +            assert_equals(entries[0].startTime, 0,
 | 
| +                "startTime expected to be: 0");
 | 
| +            assert_equals(entries[0].duration, entries[0].loadEventEnd,
 | 
| +                "expected duration to be equal to loadEventEnd");
 | 
| +            assert_true(entries[0].startTime <= entries[0].redirectStart,
 | 
| +                "expected startTime to be no greater than redirectStart");
 | 
| +            assert_true(entries[0].unloadEventStart <= entries[0].unloadEventEnd,
 | 
| +                "expected unloadEventStart to be no greater than unloadEventEnd");
 | 
| +            assert_true(entries[0].redirectStart <= entries[0].redirectEnd,
 | 
| +                "expected redirectStart to be no greater than redirectEnd");
 | 
| +            assert_true(entries[0].redirectEnd <= entries[0].fetchStart,
 | 
| +                "expected redirectEnd to be no greater than fetchStart");
 | 
| +            assert_true(entries[0].fetchStart <= entries[0].domainLookupStart,
 | 
| +                "expected fetchStart to be no greater than domainLookupStart");
 | 
| +            assert_true(entries[0].domainLookupStart <= entries[0].domainLookupEnd,
 | 
| +                "expected domainLookupStart to be no greater than domainLookupEnd");
 | 
| +            assert_true(entries[0].domainLookupEnd <= entries[0].connectStart,
 | 
| +                "expected domainLookupEnd to be no greater than connectStart");
 | 
| +            assert_true(entries[0].secureConnectionStart <= entries[0].connectEnd,
 | 
| +                "expected secureConnectionStart to be no greater than connectEnd");
 | 
| +            assert_true(entries[0].connectEnd <= entries[0].requestStart,
 | 
| +                "expected connectEnd to be no greater than requestStart");
 | 
| +            assert_true(entries[0].requestStart <= entries[0].responseStart,
 | 
| +                "expected requestStart to be no greater than responseStart");
 | 
| +            assert_true(entries[0].responseStart <= entries[0].responseEnd,
 | 
| +                "expected responseStart to be no greater than responseEnd");
 | 
| +            assert_true(entries[0].responseEnd <= entries[0].domInteractive,
 | 
| +                "expected responseEnd to be no greater than domInteractive");
 | 
| +            assert_true(entries[0].domInteractive <= entries[0].domContentLoadedEventStart,
 | 
| +                "expected domInteractive to be no greater than domContentLoadedEventStart");
 | 
| +            assert_true(entries[0].domContentLoadedEventStart <= entries[0].domContentLoadedEventEnd,
 | 
| +                "expected domContentLoadedEventStart to be no greater than domContentLoadedEventEnd");
 | 
| +            assert_true(entries[0].domContentLoadedEventEnd <= entries[0].domComplete,
 | 
| +                "expected domContentLoadedEventEnd to be no greater than domComplete");
 | 
| +            assert_true(entries[0].domComplete <= entries[0].loadEventStart,
 | 
| +                "expected domComplete to be no greater than loadEventStart");
 | 
| +            assert_true(entries[0].loadEventStart <= entries[0].loadEventEnd,
 | 
| +                "expected loadEventStart to be no greater than loadEventEnd");
 | 
| +            observer.disconnect();
 | 
| +            t.done();
 | 
| +        })
 | 
| +    );
 | 
| +    observer.observe({entryTypes: ["navigation"]});
 | 
| +
 | 
| +}, "Performance navigation timing entries are observable");
 | 
| +
 | 
| +</script>
 | 
| 
 |