| <!DOCTYPE HTML> |
| <html> |
| <head> |
| <meta charset="utf-8" /> |
| <title>This test validates element timing information for cross-origin redirect chain images.</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="resources/element-timing-helpers.js"></script> |
| <script src=/common/get-host-info.sub.js></script> |
| </head> |
| <body> |
| <script> |
| async_test(t => { |
| assert_implements(window.PerformanceElementTiming, "PerformanceElementTiming is not implemented"); |
| let destUrl = get_host_info().HTTP_REMOTE_ORIGIN |
| + '/resource-timing/resources/multi_redirect.py?'; |
| destUrl += 'page_origin=' + get_host_info().HTTP_ORIGIN; |
| destUrl += '&cross_origin=' + get_host_info().HTTP_REMOTE_ORIGIN; |
| destUrl += '&final_resource=' + '/element-timing/resources/circle-tao.svg'; |
| destUrl += '&timing_allow=1'; |
| destUrl += '&tao_steps='; |
| for (let taoSteps=0; taoSteps < 4; taoSteps++) { |
| const image = document.createElement('img'); |
| image.src = destUrl + taoSteps; |
| image.setAttribute('elementtiming', taoSteps); |
| image.setAttribute('id', 'id' + taoSteps) |
| document.body.appendChild(image); |
| } |
| let numObserved = 0; |
| let observedMap = [false, false, false, false]; |
| const beforeRender = performance.now(); |
| new PerformanceObserver(t.step_func(entries => { |
| entries.getEntries().forEach(entry => { |
| const taoSteps = entry.identifier; |
| assert_false(observedMap[taoSteps], 'Should observe each image once'); |
| observedMap[taoSteps] = true; |
| if (taoSteps !== '3') { |
| assert_equals(entry.renderTime, 0, |
| 'renderTime should be 0 when there is ' + taoSteps + ' tao steps'); |
| } |
| const bound = taoSteps === '3' ? beforeRender : 0; |
| checkElement(entry, destUrl + taoSteps, taoSteps, 'id' + taoSteps, bound, |
| document.getElementById(taoSteps)); |
| }); |
| numObserved += entries.getEntries().length; |
| if (numObserved === 4) |
| t.done(); |
| })).observe({type: 'element', buffered: true}); |
| }, 'Cross-origin image without TAO should not have its renderTime set, with full TAO it should.'); |
| </script> |
| </body> |
| </html> |
| |