11cb0ef41Sopenharmony_ci<!doctype html>
21cb0ef41Sopenharmony_ci<html>
31cb0ef41Sopenharmony_ci<head>
41cb0ef41Sopenharmony_ci<script src="/resources/testharness.js"></script>
51cb0ef41Sopenharmony_ci<script src="/resources/testharnessreport.js"></script>
61cb0ef41Sopenharmony_ci</head>
71cb0ef41Sopenharmony_ci<body>
81cb0ef41Sopenharmony_ci<script>
91cb0ef41Sopenharmony_ci
101cb0ef41Sopenharmony_citest(() => {
111cb0ef41Sopenharmony_ci  // Check Performance attributes.
121cb0ef41Sopenharmony_ci  assert_equals(typeof(performance.toJSON), 'function');
131cb0ef41Sopenharmony_ci  const json = performance.toJSON();
141cb0ef41Sopenharmony_ci  assert_equals(typeof(json), 'object');
151cb0ef41Sopenharmony_ci  assert_equals(json.timeOrigin, performance.timeOrigin,
161cb0ef41Sopenharmony_ci    'performance.toJSON().timeOrigin should match performance.timeOrigin');
171cb0ef41Sopenharmony_ci
181cb0ef41Sopenharmony_ci  // Check PerformanceTiming toJSON.
191cb0ef41Sopenharmony_ci  const jsonTiming = json.timing;
201cb0ef41Sopenharmony_ci  const timing = performance.timing;
211cb0ef41Sopenharmony_ci  assert_equals(typeof(timing.toJSON), 'function');
221cb0ef41Sopenharmony_ci  const timingJSON = timing.toJSON();
231cb0ef41Sopenharmony_ci  assert_equals(typeof(timingJSON), 'object');
241cb0ef41Sopenharmony_ci  // Check PerformanceTiming attributes, from both:
251cb0ef41Sopenharmony_ci  // 1) |jsonTiming| from  Performance.
261cb0ef41Sopenharmony_ci  // 2) |timingJSON| from PerformanceTiming.
271cb0ef41Sopenharmony_ci  const performanceTimingKeys = [
281cb0ef41Sopenharmony_ci    'navigationStart',
291cb0ef41Sopenharmony_ci    'unloadEventStart',
301cb0ef41Sopenharmony_ci    'unloadEventEnd',
311cb0ef41Sopenharmony_ci    'redirectStart',
321cb0ef41Sopenharmony_ci    'redirectEnd',
331cb0ef41Sopenharmony_ci    'fetchStart',
341cb0ef41Sopenharmony_ci    'domainLookupStart',
351cb0ef41Sopenharmony_ci    'domainLookupEnd',
361cb0ef41Sopenharmony_ci    'connectStart',
371cb0ef41Sopenharmony_ci    'connectEnd',
381cb0ef41Sopenharmony_ci    'secureConnectionStart',
391cb0ef41Sopenharmony_ci    'requestStart',
401cb0ef41Sopenharmony_ci    'responseStart',
411cb0ef41Sopenharmony_ci    'responseEnd',
421cb0ef41Sopenharmony_ci    'domLoading',
431cb0ef41Sopenharmony_ci    'domInteractive',
441cb0ef41Sopenharmony_ci    'domContentLoadedEventStart',
451cb0ef41Sopenharmony_ci    'domContentLoadedEventEnd',
461cb0ef41Sopenharmony_ci    'domComplete',
471cb0ef41Sopenharmony_ci    'loadEventStart',
481cb0ef41Sopenharmony_ci    'loadEventEnd'
491cb0ef41Sopenharmony_ci  ];
501cb0ef41Sopenharmony_ci  for (const key of performanceTimingKeys) {
511cb0ef41Sopenharmony_ci    assert_equals(jsonTiming[key], timing[key],
521cb0ef41Sopenharmony_ci      `performance.toJSON().timing.${key} should match performance.timing.${key}`);
531cb0ef41Sopenharmony_ci    assert_equals(timingJSON[key], timing[key],
541cb0ef41Sopenharmony_ci      `performance.timing.toJSON().${key} should match performance.timing.${key}`);
551cb0ef41Sopenharmony_ci  }
561cb0ef41Sopenharmony_ci
571cb0ef41Sopenharmony_ci  // Check PerformanceNavigation toJSON.
581cb0ef41Sopenharmony_ci  const jsonNavigation = json.navigation;
591cb0ef41Sopenharmony_ci  const navigation = performance.navigation;
601cb0ef41Sopenharmony_ci  assert_equals(typeof(navigation.toJSON), 'function');
611cb0ef41Sopenharmony_ci  const navigationJSON = navigation.toJSON();
621cb0ef41Sopenharmony_ci  assert_equals(typeof(navigationJSON), 'object');
631cb0ef41Sopenharmony_ci  // Check PerformanceNavigation attributes, from both:
641cb0ef41Sopenharmony_ci  // 1) |jsonNavigation| from  Performance.
651cb0ef41Sopenharmony_ci  // 2) |navigationJSON| from PerformanceNavigation.
661cb0ef41Sopenharmony_ci  let performanceNavigationKeys = ['type', 'redirectCount'];
671cb0ef41Sopenharmony_ci  for (const key of performanceNavigationKeys) {
681cb0ef41Sopenharmony_ci    assert_equals(jsonNavigation[key], navigation[key],
691cb0ef41Sopenharmony_ci      `performance.toJSON().navigation.${key} should match performance.navigation.${key}`);
701cb0ef41Sopenharmony_ci    assert_equals(navigationJSON[key], navigation[key],
711cb0ef41Sopenharmony_ci      `performance.navigation.toJSON().${key} should match performance.navigation.${key}`);
721cb0ef41Sopenharmony_ci  }
731cb0ef41Sopenharmony_ci}, 'Test performance.toJSON()');
741cb0ef41Sopenharmony_ci</script>
751cb0ef41Sopenharmony_ci</body>
761cb0ef41Sopenharmony_ci</html>