Chromium Code Reviews| Index: third_party/WebKit/LayoutTests/inspector-protocol/timeline/fetch-as-stream.js |
| diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/timeline/fetch-as-stream.js b/third_party/WebKit/LayoutTests/inspector-protocol/timeline/fetch-as-stream.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..adb92875cb4bc3aeeb4dd9097dd9ee187a1fef5c |
| --- /dev/null |
| +++ b/third_party/WebKit/LayoutTests/inspector-protocol/timeline/fetch-as-stream.js |
| @@ -0,0 +1,96 @@ |
| +(async function(testRunner) { |
| + let {page, session, dp} = await testRunner.startHTML(` |
| + <style> |
| + div#test { |
| + display: none; |
| + background-color: blue; |
| + width: 100px; |
| + height: 100px; |
| + } |
| + </style> |
| + <div id='test'> |
| + </div> |
| + `, ''); |
| + |
| + var tracingHelper = (await testRunner.loadScript('../resources/tracing-test.js'))(testRunner, session); |
| + tracingHelper.startTracingAndSaveAsStream(onStart); |
| + |
| + function onStart() { |
| + session.evaluate(` |
| + (function performActions() |
| + { |
| + var element = document.getElementById('test'); |
|
caseq
2017/06/22 19:32:41
Style (indent + opening '{')
dgozman
2017/06/22 21:48:55
Done.
|
| + element.style.display = 'block'; |
| + var unused = element.clientWidth; |
| + })(); |
| + `).then(evalDone); |
| + } |
| + |
| + function evalDone() { |
| + tracingHelper.stopTracingAndReturnStream(onStop); |
| + } |
| + |
| + function onStop(streamHandle) { |
| + var data1; |
| + tracingHelper.retrieveStream(streamHandle, null, null, onGotStream1); |
| + |
| + function onGotStream1(data) { |
| + data1 = data; |
| + tracingHelper.retrieveStream(streamHandle, 0, 1000, onGotStream2); |
| + } |
| + |
| + function onGotStream2(data) { |
| + if (data1 !== data) |
| + testRunner.log('FAIL: got different data for cunked vs. non-chunked reads'); |
| + dp.IO.close({ handle: streamHandle }).then(onCloseDone); |
| + } |
| + |
| + function onCloseDone(response) { |
| + testRunner.log('Error after legit close: ' + JSON.stringify(response.error)); |
| + dp.IO.read({ handle: streamHandle }).then(onReadAfterClose); |
| + } |
| + |
| + function onReadAfterClose(response) { |
| + testRunner.log('Error after illegal read: ' + JSON.stringify(response.error)); |
| + dp.IO.close({ handle: streamHandle }).then(onCloseAfterClose); |
| + } |
| + |
| + function onCloseAfterClose(response) { |
| + testRunner.log('Error after illegal close: ' + JSON.stringify(response.error)); |
| + var trace = JSON.parse(data1); |
| + performEventsSanityCheck(trace['traceEvents']); |
| + testRunner.log('Metadata: ' + typeof trace['metadata'] + (trace['metadata'] ? ', not null' : '')); |
| + testRunner.completeTest(); |
| + } |
| + } |
| + |
| + function assertGreaterOrEqual(a, b, message) { |
| + if (a >= b) |
| + return; |
| + testRunner.log(message + ' (' + a + ' < ' + b + ')'); |
| + testRunner.completeTest(); |
| + } |
| + |
| + function performEventsSanityCheck(events) { |
| + var phaseComplete = 0; |
| + |
| + var knownEvents = { |
| + 'MessageLoop::PostTask': 0, |
| + 'FunctionCall': 0, |
| + 'UpdateLayoutTree': 0, |
| + 'Layout': 0 |
| + }; |
| + |
| + for (var i = 0; i < events.length; ++i) { |
| + var event = events[i]; |
| + if (event.phase === 'X') |
| + ++phaseComplete; |
| + if (event.name in knownEvents) |
| + ++knownEvents[event.name]; |
| + } |
| + assertGreaterOrEqual(events.length, 10, 'Too few trace events recorded'); |
| + assertGreaterOrEqual(knownEvents['UpdateLayoutTree'], 1, 'Too few UpdateLayoutTree events'); |
| + assertGreaterOrEqual(knownEvents['Layout'], 1, 'Too few Layout events'); |
| + testRunner.log('Event sanity test done'); |
| + } |
| +}) |