|  | <!DOCTYPE html> | 
|  | <meta charset=utf-8> | 
|  | <title>Process Events for FileReader</title> | 
|  | <link rel=help href="http://dev.w3.org/2006/webapi/FileAPI/#event-handler-attributes-section"> | 
|  | <link rel=author title="Jinks Zhao" href="mailto:jinks@maxthon.com"> | 
|  | <script src="/resources/testharness.js"></script> | 
|  | <script src="/resources/testharnessreport.js"></script> | 
|  | Please choose one file through this input below.<br> | 
|  | <input type="file" id="filer"> | 
|  | <div id="log"></div> | 
|  | <script> | 
|  | var input, reader, progressEventCounter, progressEventTimeList, | 
|  | lastProgressEventTime; | 
|  | setup(function() { | 
|  | input = document.getElementById('filer'); | 
|  | reader = new FileReader(); | 
|  | progressEventCounter = 0; | 
|  | progressEventTimeList = []; | 
|  | lastProgressEventTime; | 
|  | }, { explicit_timeout: true }); | 
|  |  | 
|  | var t = async_test("FileReader progress events.") | 
|  |  | 
|  | reader.onprogress = t.step_func(function () { | 
|  | var newTime = new Date; | 
|  | var timeout = newTime - lastProgressEventTime; | 
|  |  | 
|  | progressEventTimeList.push(timeout); | 
|  | lastProgressEventTime = newTime; | 
|  | progressEventCounter++; | 
|  |  | 
|  | assert_less_than_equal(timeout, 50, "The progress event should be fired every 50ms."); | 
|  | }); | 
|  |  | 
|  | reader.onload = t.step_func_done(function () { | 
|  | assert_greater_than_equal(progressEventCounter, 1, | 
|  | "When read completely, the progress event must be fired at least once.") | 
|  | }); | 
|  |  | 
|  | input.onchange = t.step_func(function () { | 
|  | var files = input.files; | 
|  |  | 
|  | assert_greater_than(files.length, 0); | 
|  | var file = files[0]; | 
|  |  | 
|  | lastProgressEventTime = new Date; | 
|  | reader.readAsArrayBuffer(file); | 
|  | }); | 
|  | </script> |