#import <FileAPI/Blob.idl>
#import <HTML/CanvasRenderingContext2D.idl>
#import <HTML/HTMLElement.idl>
#import <WebGL/WebGLRenderingContext.idl>
#import <WebGL/WebGL2RenderingContext.idl>

typedef (CanvasRenderingContext2D or WebGLRenderingContext or WebGL2RenderingContext) RenderingContext;

// https://html.spec.whatwg.org/multipage/semantics.html#htmlcanvaselement
[Exposed=Window]
interface HTMLCanvasElement : HTMLElement {

    [HTMLConstructor] constructor();

    [CEReactions] attribute unsigned long width;
    [CEReactions] attribute unsigned long height;

    RenderingContext? getContext(DOMString contextId, optional any options = null);

    USVString toDataURL(optional DOMString type = "image/png", optional any quality);
    undefined toBlob(BlobCallback _callback, optional DOMString type = "image/png", optional any quality);

};

callback BlobCallback = undefined (Blob? blob);
