NEW IMAGE OBJECT ImageBitmap is a new object available in workers and the main thread. interface ImageBitmap { }; [NoInterfaceObject] interface ImageBitmapFactory { void createImageBitmap(HTMLImageElement image, ImageBitmapCallback callback); void createImageBitmap(Blob image, ImageBitmapCallback callback); void createImageBitmap(HTMLCanvasElement image, ImageBitmapCallback callback); void createImageBitmap(ImageData image, ImageBitmapCallback callback); }; callback ImageBitmapCallback = void (ImageBitmap image); Window implements ImageBitmapFactory; WorkerUtils implements ImageBitmapFactory; ImageBitmap can be sent over postMessage(). (Not just Transferable; it's actually copied.) The factory methods asynchronously take the given data and convert it into an ImageBitmap object, if the data is valid, and then call the callback. If the data couldn't be converted, the callback is called with value null. CANVAS CHANGES getContext('worker') returns a CanvasTransferableRenderingContext and sets /inhibited canvas/ mode. /inhibited canvas/ mode disables the toBlob* and toDataURL* methods, height/width resetting, use in drawImage, createImageBitmap(), etc. Essentially it makes the bitmap unusable from the HTMLCanvasElement object. interface CanvasTransferableRenderingContext { attribute unsigned long height; // initialised from the canvas object's height attribute unsigned long width; // initialised from the canvas object's width object? getContext(DOMString contextId, any... arguments); boolean supportsContext(DOMString contextId, any... arguments); }; CanvasTransferableRenderingContext implements Transferable; CanvasTransferableRenderingContext's "neutering" behaviour is to make all the attribute and methods start throwing on getting/setting and invocation respectively. CanvasTransferableRenderingContext.getContext(), when it is invoked, neuters the CanvasTransferableRenderingContext. Anything (in canvas) that takes an HTMLImageElement is extended to also take an ImageBitmap object. If a '2d' context is obtained from a CanvasTransferableRenderingContext object: * CanvasRenderingContext2D.canvas returns an ImageBitmap object representing the canvas, not the HTMLCanvasElement * CanvasRenderingContext2D.draw*FocusRing() methods can't be invoked * scrollPathIntoView() methods can't be invoked * hitRegions cannot reference controls * anything derived from computed CSS values uses defaults * drawImage() and createPattern() only take ImageBitmap objects