Skip to content

Commit

Permalink
[Longtasks] Fix containerType and containerSrc in attribution
Browse files Browse the repository at this point in the history
This CL brings the longtasks API up to date with the recent changes on
w3c/longtasks#78. It also adds WPT tests for
those changes. The changes are:

* containerType is "window", "iframe", "embed", etc. depending on the
type of the culprit browsing context container.
* containerSrc is now the 'data' attribute when the container is an
<object>.

Change-Id: I06f661968778e3bec433a1bfe758b4604df01557
  • Loading branch information
npm1 authored and chromium-wpt-export-bot committed Dec 3, 2019
1 parent 033bf24 commit 2e9000f
Show file tree
Hide file tree
Showing 10 changed files with 73 additions and 0 deletions.
64 changes: 64 additions & 0 deletions longtask-timing/containerTypes.html
@@ -0,0 +1,64 @@
<!DOCTYPE HTML>
<meta charset=utf-8>
<title>LongTask Timing: long tasks in various containers</title>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<h1>Longtasks in iframe, frame, object, and embed</h1>
<div id="log"></div>
<script>
function Container(name, src) {
this.name = name;
this.src = src;
}
const Containers = [
new Container('iframe', 'src'),
new Container('frame', 'src'),
new Container('object', 'data'),
new Container('embed', 'src'),
];
Containers.forEach(container => {
promise_test(async t => {
assert_precondition(window.PerformanceLongTaskTiming, 'Longtasks are not supported.');
const initialTime = performance.now();
return new Promise(resolve => {
const observer = new PerformanceObserver(t.step_func(entryList => {
const entries = entryList.getEntries();
assert_equals(entries.length, 1,
'Exactly one entry is expected.');
const longtask = entries[0];
assert_equals(longtask.entryType, 'longtask');
if (longtask.name == 'self' ||
longtask.name == 'multiple-contexts' ||
longtask.name == 'unknown')
return;
assert_equals(longtask.name, 'same-origin-descendant');
assert_greater_than(longtask.duration, 50);
assert_greater_than_equal(longtask.startTime, initialTime);
const currentTime = performance.now();
assert_less_than_equal(longtask.startTime, currentTime);
// Assert the TaskAttributionTiming entry in attribution.
assert_equals(longtask.attribution.length, 1,
'Exactly one attribution entry is expected');
const attribution = longtask.attribution[0];
assert_equals(attribution.entryType, 'taskattribution');
assert_equals(attribution.name, 'unknown');
assert_equals(attribution.duration, 0);
assert_equals(attribution.startTime, 0);
assert_equals(attribution.containerId, container.name + '-id');
assert_equals(attribution.containerName, container.name + '-name');
assert_equals(attribution.containerSrc, 'resources/subframe-with-longtask.html');
observer.disconnect();
resolve();
}));
observer.observe({entryTypes: ['longtask']});
const containerObject = document.createElement(container.name);
containerObject.id = container.name + '-id';
containerObject.name = container.name + '-name';
containerObject[container.src] = 'resources/subframe-with-longtask.html';
document.body.appendChild(containerObject);
});
}, `Performance longtask entries in ${container.name} are observable in parent.`);
});
</script>
</body>
1 change: 1 addition & 0 deletions longtask-timing/longtask-attributes.html
Expand Up @@ -35,6 +35,7 @@ <h1>Long Task Attributes</h1>
assert_equals(attribution.name, 'unknown');
assert_equals(attribution.duration, 0);
assert_equals(attribution.startTime, 0);
assert_equals(attribution.containerType, 'window');
assert_equals(attribution.containerId, '');
assert_equals(attribution.containerName, '');
assert_equals(attribution.containerSrc, '');
Expand Down
1 change: 1 addition & 0 deletions longtask-timing/longtask-in-childiframe-crossorigin.html
Expand Up @@ -36,6 +36,7 @@ <h1>Long Task in Nested Cross-Origin Child Iframe</h1>
assert_equals(attribution.name, 'unknown');
assert_equals(attribution.duration, 0);
assert_equals(attribution.startTime, 0);
assert_equals(attribution.containerType, 'iframe');
assert_equals(attribution.containerId, 'child-iframe-id');
assert_equals(attribution.containerName, 'child-iframe-name');
assert_equals(attribution.containerSrc,
Expand Down
1 change: 1 addition & 0 deletions longtask-timing/longtask-in-childiframe.html
Expand Up @@ -41,6 +41,7 @@ <h1>Long Task in Nested Child Iframe</h1>
assert_equals(attribution.name, 'unknown');
assert_equals(attribution.duration, 0);
assert_equals(attribution.startTime, 0);
assert_equals(attribution.containerType, 'iframe');
assert_equals(attribution.containerId, 'child-iframe-id');
assert_equals(attribution.containerName, 'child-iframe-name');
assert_equals(attribution.containerSrc, 'resources/subframe-with-longtask.html');
Expand Down
1 change: 1 addition & 0 deletions longtask-timing/longtask-in-externalscript.html
Expand Up @@ -32,6 +32,7 @@ <h1>Long Task: External Script</h1>
assert_equals(attribution.name, 'unknown');
assert_equals(attribution.duration, 0);
assert_equals(attribution.startTime, 0);
assert_equals(attribution.containerType, 'window');
assert_equals(attribution.containerId, '');
assert_equals(attribution.containerName, '');
assert_equals(attribution.containerSrc, '');
Expand Down
1 change: 1 addition & 0 deletions longtask-timing/longtask-in-parentiframe.html
Expand Up @@ -16,6 +16,7 @@
assert_equals(e.data['entryType'], 'longtask');
assert_equals(e.data['frame-attribution'], 'same-origin-ancestor');
assert_equals(e.data['task-attribution'], 'unknown');
assert_equals(e.data['containerType'], 'window');
assert_equals(e.data['containerId'], '');
assert_equals(e.data['containerName'], '');
assert_equals(e.data['containerSrc'], '');
Expand Down
1 change: 1 addition & 0 deletions longtask-timing/longtask-in-raf.html
Expand Up @@ -32,6 +32,7 @@ <h1>Long Task: requestAnimationFrame</h1>
assert_equals(attribution.name, 'unknown');
assert_equals(attribution.duration, 0);
assert_equals(attribution.startTime, 0);
assert_equals(attribution.containerType, 'window');
assert_equals(attribution.containerId, '');
assert_equals(attribution.containerName, '');
assert_equals(attribution.containerSrc, '');
Expand Down
Expand Up @@ -16,6 +16,7 @@
assert_equals(e.data['entryType'], 'longtask');
assert_equals(e.data['frame-attribution'], 'cross-origin-unreachable');
assert_equals(e.data['task-attribution'], 'unknown');
assert_equals(e.data['containerType'], 'window');
assert_equals(e.data['containerId'], '');
assert_equals(e.data['containerName'], '');
assert_equals(e.data['containerSrc'], '');
Expand Down
1 change: 1 addition & 0 deletions longtask-timing/longtask-in-sibling-iframe.html
Expand Up @@ -20,6 +20,7 @@

assert_equals(e.data['frame-attribution'], 'same-origin');
assert_equals(e.data['task-attribution'], 'unknown');
assert_equals(e.data['containerType'], 'iframe');
assert_equals(e.data['containerId'], 'longtask-iframe-id');
assert_equals(e.data['containerName'], 'longtask-iframe-name');
assert_equals(e.data['containerSrc'], 'resources/subframe-with-longtask.html');
Expand Down
1 change: 1 addition & 0 deletions longtask-timing/resources/subframe-observing-longtask.html
Expand Up @@ -19,6 +19,7 @@ <h1>Child Iframe observing long tasks</h1>
'entryType': longtask.entryType,
'frame-attribution': longtask.name,
'task-attribution': attribution.name,
'containerType': attribution.containerType,
'containerId': attribution.containerId,
'containerName': attribution.containerName,
'containerSrc': attribution.containerSrc
Expand Down

0 comments on commit 2e9000f

Please sign in to comment.