| <!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> |