summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/longtask-timing/shared-renderer
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/longtask-timing/shared-renderer')
-rw-r--r--testing/web-platform/tests/longtask-timing/shared-renderer/longtask-in-new-window.html48
-rw-r--r--testing/web-platform/tests/longtask-timing/shared-renderer/resources/frame-with-longtask.html14
2 files changed, 62 insertions, 0 deletions
diff --git a/testing/web-platform/tests/longtask-timing/shared-renderer/longtask-in-new-window.html b/testing/web-platform/tests/longtask-timing/shared-renderer/longtask-in-new-window.html
new file mode 100644
index 0000000000..7668d995d8
--- /dev/null
+++ b/testing/web-platform/tests/longtask-timing/shared-renderer/longtask-in-new-window.html
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>LongTask Timing: long task in another window</title>
+<body>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+/* This test should pass even when windows share a single renderer process.
+ This window opens a new window which contains a longtask. We test that the
+ longtask from the new window is not observed by the observer of this window. */
+async_test(t => {
+ assert_implements(window.PerformanceLongTaskTiming, 'Longtasks are not supported.');
+ const observer = new PerformanceObserver(
+ t.step_func(function (entryList) {
+ const entries = entryList.getEntries();
+ let markFound = false;
+ for (let i = 0; i < entries.length; ++i) {
+ const entry = entries[i];
+ // We do not expect to observe longtasks but the work being made in this window may produce a longtask.
+ assert_true(entry.entryType === 'longtask' ||
+ entry.entryType === 'mark');
+ if (entry.entryType === 'mark') {
+ markFound = true;
+ continue;
+ }
+ // If a longtask is observed, it must come from this window.
+ assert_equals(entry.name, 'self');
+ }
+ // If we found the mark, then the other window longtask is done.
+ if (markFound)
+ t.done();
+ })
+ );
+ observer.observe({entryTypes: ['mark', 'longtask']});
+
+ window.onload = () => {
+ // Open a window with a longtask.
+ const other_window = window.open('resources/frame-with-longtask.html');
+ window.addEventListener('message', t.step_func(e => {
+ // Do a mark (after the other window's longtask) to fire the callback.
+ self.performance.mark('mark1');
+ }));
+ };
+}, 'A longtask in a frame from window.open is not reported in original frame');
+</script>
+</body>
diff --git a/testing/web-platform/tests/longtask-timing/shared-renderer/resources/frame-with-longtask.html b/testing/web-platform/tests/longtask-timing/shared-renderer/resources/frame-with-longtask.html
new file mode 100644
index 0000000000..9d0273e192
--- /dev/null
+++ b/testing/web-platform/tests/longtask-timing/shared-renderer/resources/frame-with-longtask.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<meta name="viewport" content="width=device-width">
+
+<title>Long Task Frame</title>
+<body>
+<h1>Long Task plus PostMessage</h1>
+
+<script>
+ const begin = window.performance.now();
+ while (window.performance.now() < begin + 60);
+ window.opener.postMessage('Finished.', '*');
+</script>
+</body>