Test steps:
interface ArrayBuffer { }; interface ArrayBufferView { }; interface URL { }; interface EventTarget { }; interface Event { }; [TreatNonCallableAsNull] callback EventHandlerNonNull = any (Event event); typedef EventHandlerNonNull? EventHandler;
interface FileList { getter File? item(unsigned long index); readonly attribute unsigned long length; }; [Constructor, Constructor(sequence<(ArrayBuffer or ArrayBufferView or Blob or DOMString)> blobParts, optional BlobPropertyBag options)] interface Blob { readonly attribute unsigned long long size; readonly attribute DOMString type; //slice Blob into byte-ranged chunks Blob slice(optional long long start, optional long long end, optional DOMString contentType); void close(); }; dictionary BlobPropertyBag { DOMString type = ""; }; [Constructor(Blob fileBits, DOMString fileName)] interface File : Blob { readonly attribute DOMString name; readonly attribute Date lastModifiedDate; }; [Constructor] interface FileReader: EventTarget { // async read methods void readAsArrayBuffer(Blob blob); void readAsText(Blob blob, optional DOMString label); void readAsDataURL(Blob blob); void abort(); // states const unsigned short EMPTY = 0; const unsigned short LOADING = 1; const unsigned short DONE = 2; readonly attribute unsigned short readyState; // File or Blob data readonly attribute (DOMString or ArrayBuffer)? result; readonly attribute DOMError? error; // event handler attributes attribute EventHandler onloadstart; attribute EventHandler onprogress; attribute EventHandler onload; attribute EventHandler onabort; attribute EventHandler onerror; attribute EventHandler onloadend; }; partial interface URL { static DOMString? createObjectURL(Blob blob); static DOMString? createFor(Blob blob); // static DOMString? createFor()Blob blob); static void revokeObjectURL(DOMString url); };