[canvaskit] Add drawImage support

Adds drawImageRect as well.

Bug: skia:
Change-Id: Ib74f92a3ee22664297d8ce7ff1d2cd2644b806b7
Reviewed-on: https://skia-review.googlesource.com/c/173990
Reviewed-by: Kevin Lubick <kjlubick@google.com>
diff --git a/experimental/canvaskit/interface.js b/experimental/canvaskit/interface.js
index 6ecb327..e3d6b3a 100644
--- a/experimental/canvaskit/interface.js
+++ b/experimental/canvaskit/interface.js
@@ -328,6 +328,15 @@
     };
   }
 
+  CanvasKit.XYWHRect = function(x, y, w, h) {
+    return {
+      fLeft: x,
+      fTop: y,
+      fRight: x+w,
+      fBottom: y+h,
+    };
+  }
+
   var nullptr = 0; // emscripten doesn't like to take null as uintptr_t
 
   // arr can be a normal JS array or a TypedArray
@@ -403,6 +412,26 @@
     return dpe;
   }
 
+  // data is a TypedArray or ArrayBuffer
+  CanvasKit.MakeImageFromEncoded = function(data) {
+    data = new Uint8Array(data);
+
+    var iptr = CanvasKit._malloc(data.byteLength);
+    CanvasKit.HEAPU8.set(data, iptr);
+    var img = CanvasKit._decodeImage(iptr, data.byteLength);
+    if (!img) {
+      SkDebug('Could not decode image');
+      CanvasKit._free(iptr);
+      return null;
+    }
+    var realDelete = img.delete.bind(img);
+    img.delete = function() {
+      CanvasKit._free(iptr);
+      realDelete();
+    }
+    return img;
+  }
+
   CanvasKit.MakeImageShader = function(imgData, xTileMode, yTileMode) {
     var iptr = CanvasKit._malloc(imgData.byteLength);
     CanvasKit.HEAPU8.set(new Uint8Array(imgData), iptr);