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

Side by Side Diff: third_party/WebKit/LayoutTests/inspector-protocol/worker/worker-console.js

Issue 2942573003: [DevTools] New harness for inspector-protocol layout tests (Closed)
Patch Set: Protocol -> dp Created 3 years, 6 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 (async function(testRunner) {
2 let {page, session, dp} = await testRunner.startBlank('');
3
4 await session.evaluate(`
5 var worker = null;
6 var onMessageCallbacks = {};
7
8 function startWorker() {
9 var callback;
10 var promise = new Promise((fulfill) => callback = fulfill);
11 worker = new Worker('${testRunner.url('../resources/worker-console-worker. js')}');
12 worker.onmessage = function(event) {
13 worker.onmessage = onMessageFromWorker;
14 callback();
15 };
16 return promise;
17 }
18
19 function logInWorkerFromPage(message, callback) {
20 onMessageCallbacks[message] = callback;
21 worker.postMessage(message);
22 }
23
24 function onMessageFromWorker(event) {
25 var callback = onMessageCallbacks[event.data];
26 delete onMessageCallbacks[event.data];
27 if (callback)
28 callback();
29 }
30
31 function stopWorker() {
32 worker.terminate();
33 worker = null;
34 }
35 `);
36
37 var workerEventHandler = {};
38 dp.Target.onAttachedToTarget(onWorkerCreated);
39 dp.Target.onReceivedMessageFromTarget(onWorkerMessage);
40 workerEventHandler['Runtime.consoleAPICalled'] = onConsoleAPICalledFromWorker;
41
42 var workerId;
43
44 function onWorkerCreated(payload) {
45 testRunner.log('Worker.created');
46 workerId = payload.params.targetInfo.targetId;
47 }
48
49 var requestId = 0;
50 var dispatchTable = [];
51
52 function sendCommandToWorker(method, params, callback) {
53 dispatchTable[++requestId] = callback;
54 var messageObject = {
55 'method': method,
56 'params': params,
57 'id': requestId
58 };
59 dp.Target.sendMessageToTarget({
60 targetId: workerId,
61 message: JSON.stringify(messageObject)
62 });
63 }
64
65 function onWorkerMessage(payload) {
66 if (payload.params.targetId !== workerId)
67 testRunner.log('targetId mismatch');
68 var messageObject = JSON.parse(payload.params.message);
69 var messageId = messageObject['id'];
70 if (typeof messageId === 'number') {
71 var handler = dispatchTable[messageId];
72 dispatchTable[messageId] = null;
73 if (handler && typeof handler === 'function')
74 handler(messageObject);
75 } else {
76 var eventName = messageObject['method'];
77 var eventHandler = workerEventHandler[eventName];
78 if (eventHandler)
79 eventHandler(messageObject);
80 }
81 }
82
83 function logInWorker(message, next) {
84 testRunner.log('Logging in worker: ' + message);
85 dp.Log.onEntryAdded(onLogEntry);
86 session.evaluate('logInWorkerFromPage(\'' + message + '\')');
87
88 function onLogEntry(payload) {
89 testRunner.log('Got log message from page: ' + payload.params.entry.text);
90 dp.Log.offEntryAdded(onLogEntry);
91 next();
92 }
93 }
94
95 var gotMessages = [];
96 var waitingForMessage;
97 var waitingForMessageCallback;
98
99 function onConsoleAPICalledFromWorker(payload) {
100 var message = payload.params.args[0].value;
101 testRunner.log('Got console API call from worker: ' + message);
102 gotMessages.push(message);
103 if (message === waitingForMessage)
104 waitingForMessageCallback();
105 }
106
107 function waitForMessage(message, next) {
108 if (gotMessages.indexOf(message) !== -1) {
109 next();
110 return;
111 }
112 waitingForMessage = message;
113 waitingForMessageCallback = next;
114 }
115
116 var steps = [
117 function listenToConsole(next) {
118 dp.Log.enable().then(next);
119 },
120
121 function start0(next) {
122 testRunner.log('Starting worker');
123 session.evaluateAsync('startWorker()').then(next);
124 },
125
126 function log0(next) {
127 logInWorker('message0', next);
128 },
129
130 function stop0(next) {
131 testRunner.log('Stopping worker');
132 session.evaluate('stopWorker()').then(next);
133 },
134
135 function start1(next) {
136 testRunner.log('Starting worker');
137 session.evaluateAsync('startWorker()').then(next);
138 },
139
140 function log1(next) {
141 logInWorker('message1', next);
142 },
143
144 function enable1(next) {
145 testRunner.log('Starting autoattach');
146 dp.Target.setAutoAttach({autoAttach: true, waitForDebuggerOnStart: false}) .then(next);
147 },
148
149 function consoleEnable1(next) {
150 testRunner.log('Sending Runtime.enable to worker');
151 waitForMessage('message1', next);
152 sendCommandToWorker('Runtime.enable', {});
153 },
154
155 function log2(next) {
156 logInWorker('message2', next);
157 },
158
159 function waitForMessage2(next) {
160 waitForMessage('message2', next);
161 },
162
163 function throw1(next) {
164 logInWorker('throw1', next);
165 },
166
167 function disable1(next) {
168 testRunner.log('Stopping autoattach');
169 dp.Target.setAutoAttach({autoAttach: false, waitForDebuggerOnStart: false} ).then(next);
170 },
171
172 function log3(next) {
173 logInWorker('message3', next);
174 },
175
176 function stop1(next) {
177 testRunner.log('Stopping worker');
178 session.evaluate('stopWorker()').then(next);
179 },
180
181 function enable2(next) {
182 testRunner.log('Starting autoattach');
183 dp.Target.setAutoAttach({autoAttach: true, waitForDebuggerOnStart: false}) .then(next);
184 },
185
186 function start2(next) {
187 testRunner.log('Starting worker');
188 session.evaluateAsync('startWorker()').then(next);
189 },
190
191 function log4(next) {
192 logInWorker('message4', next);
193 },
194
195 function consoleEnable2(next) {
196 testRunner.log('Sending Runtime.enable to worker');
197 waitForMessage('message4', next);
198 sendCommandToWorker('Runtime.enable', {});
199 },
200
201 function log5(next) {
202 logInWorker('message5', next);
203 },
204
205 function waitForMessage5(next) {
206 waitForMessage('message5', next);
207 },
208
209 function stop2(next) {
210 testRunner.log('Stopping worker');
211 session.evaluate('stopWorker()').then(next);
212 },
213
214 function start3(next) {
215 testRunner.log('Starting worker');
216 session.evaluateAsync('startWorker()').then(next);
217 },
218
219 function log6(next) {
220 logInWorker('message6', next);
221 },
222
223 function stop3(next) {
224 testRunner.log('Stopping worker');
225 session.evaluate('stopWorker()').then(next);
226 },
227
228 function disable2(next) {
229 testRunner.log('Stopping autoattach');
230 dp.Target.setAutoAttach({autoAttach: false, waitForDebuggerOnStart: false} ).then(next);
231 }
232 ];
233
234 function runNextStep() {
235 if (!steps.length) {
236 testRunner.completeTest();
237 return;
238 }
239 var nextStep = steps.shift();
240 nextStep(runNextStep);
241 }
242
243 runNextStep();
244 })
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698