# File API manual IDL tests

Test steps:

1. Download upload.txt to local.
2. Select the local upload.txt file to run the test.

          interface ArrayBuffer {
          };

          interface ArrayBufferView {
          };

          interface URL {
          };

          interface EventTarget {
          };

          interface Event {
          };

          [TreatNonCallableAsNull]
          callback EventHandlerNonNull = any (Event event);
          typedef EventHandlerNonNull? EventHandler;

    [Constructor,
     Constructor(sequence<(ArrayBuffer or ArrayBufferView or Blob or DOMString)> blobParts, optional BlobPropertyBag options), Exposed=Window,Worker]
    interface Blob {

      readonly attribute unsigned long long size;
      readonly attribute DOMString type;
      readonly attribute boolean isClosed;

      //slice Blob into byte-ranged chunks

      Blob slice([Clamp] optional long long start,
                 [Clamp] optional long long end,
                 optional DOMString contentType);
      void close();

    };

    dictionary BlobPropertyBag {
      DOMString type = "";
    };

    [Constructor(sequence<(Blob or DOMString or ArrayBufferView or ArrayBuffer)> fileBits,
    [EnsureUTF16] DOMString fileName, optional FilePropertyBag options), Exposed=Window,Worker]
    interface File : Blob {

      readonly attribute DOMString name;
      readonly attribute long long lastModified;

    };

    dictionary FilePropertyBag {

      DOMString type = "";
      long long lastModified;

    };

    [Exposed=Window,Worker] interface FileList {
      getter File? item(unsigned long index);
      readonly attribute unsigned long length;
    };

    [Constructor, Exposed=Window,Worker]
    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;

    };

    [Constructor, Exposed=Worker]
    interface FileReaderSync {

      // Synchronously return strings

      ArrayBuffer readAsArrayBuffer(Blob blob);
      DOMString readAsText(Blob blob, optional DOMString label);
      DOMString readAsDataURL(Blob blob);
    };

    partial interface URL {

      static DOMString createObjectURL(Blob blob);
      static DOMString createFor(Blob blob);
      static void revokeObjectURL(DOMString url);

    };