Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(100)

Side by Side Diff: third_party/WebKit/LayoutTests/external/wpt/html/webappapis/idle-callbacks/callback-suspended.html

Issue 2695813009: Import wpt@503f5b5f78ec4e87d144f78609f363f0ed0ea8db (Closed)
Patch Set: Skip some tests Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 <!doctype html>
2 <meta charset=utf-8>
3 <title>Dispatching idle callbacks should be able to be suspended and then resume d</title>
4 <script src=/resources/testharness.js></script>
5 <script src=/resources/testharnessreport.js></script>
6 <div id="log"></div>
7 <script>
8 function withEventListener(target, event, handler) {
9 handler = handler || (e => e);
10 return new Promise(resolve => {
11 let wrapper = function(e) {
12 let result = handler(e);
13 if (!result) {
14 return;
15 }
16
17 resolve(result);
18 }
19 target.addEventListener(event, wrapper, { once: true });
20 });
21 }
22
23 function makePostBackUrl(name) {
24 return new URL('resources/post_name_on_load.html?name=' + name,
25 window.location).href;
26 }
27
28 function waitForMessage(message, handler) {
29 return withEventListener(window, 'message', e => (e.data === message) && han dler(e));;
30 }
31
32 function withWindow(name) {
33 let win = window.open(makePostBackUrl(name))
34 return waitForMessage(name, _ => win);
35 }
36
37 function navigateWindow(win, name) {
38 win.location = makePostBackUrl(name);
39 return waitForMessage(name, _ => win);
40 }
41
42 function waitDuration(delay) {
43 return new Promise(resolve => {
44 setTimeout(resolve, delay);
45 })
46 }
47
48 function goBack(win) {
49 var p = withEventListener(win, 'pagehide');
50 win.history.back();
51 return p;
52 }
53
54 promise_test(t => {
55 let idleCalled = false;
56 let running = true;
57 return withWindow('foo')
58 .then(win => {
59 let callback = function(d) {
60 idleCalled = true;
61 if (running) {
62 win.requestIdleCallback(callback);
63 }
64 };
65
66 win.requestIdleCallback(callback);
67
68 return navigateWindow(win, 'bar')
69 .then(_ => idleCalled = false)
70 .then(_ => waitDuration(2000))
71 .then(_ => {
72 assert_false(idleCalled, "idle callback shouldn't have been called y et");
73 return goBack(win);
74 })
75 .then(_ => Promise.race([
76 // At this point it's a matter of having bfcache ...
77 waitDuration(2000)
78 .then(_ => {
79 assert_true(idleCalled, "idle callback should've been called by now");
80 running = false;
81 }),
82 // ... or not. If not, we expect a load event.
83 waitForMessage("foo")
84 ]))
85 .then(_ => win.close())
86 .catch(e => {
87 win.close();
88 throw e;
89 })
90 });
91 });
92
93 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698