Loading content/canvas/src/CustomQS_Canvas2D.h +14 −26 Original line number Original line Diff line number Diff line Loading @@ -158,10 +158,7 @@ nsIDOMCanvasRenderingContext2D_GetFillStyle(JSContext *cx, JSObject *obj, jsid i } } static bool static bool CreateImageData(JSContext* cx, CreateImageData(JSContext* cx, JSObject* obj, uint32_t w, uint32_t h, jsval* vp) uint32_t w, uint32_t h, jsval* vp) { { using mozilla::CheckedInt; using mozilla::CheckedInt; Loading @@ -183,25 +180,13 @@ CreateImageData(JSContext* cx, return false; return false; } } // Do JS_NewObject after CreateTypedArray, so that gc will get XPCLazyCallContext lccx(JS_CALLER, cx, obj); // triggered here if necessary const nsIID *iid = &NS_GET_IID(nsIDOMImageData); JSObject* result = JS_NewObject(cx, NULL, NULL, NULL); nsRefPtr<mozilla::dom::ImageData> imageData = JS::AutoObjectRooter rr(cx, result); new mozilla::dom::ImageData(w, h, *darray); if (!result) { qsObjectHelper helper(imageData, NULL); return false; return xpc_qsXPCOMObjectToJsval(lccx, helper, iid, } &interfaces[k_nsIDOMImageData], vp); if (!JS_DefineProperty(cx, result, "width", INT_TO_JSVAL(w), NULL, NULL, JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT) || !JS_DefineProperty(cx, result, "height", INT_TO_JSVAL(h), NULL, NULL, JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT) || !JS_DefineProperty(cx, result, "data", OBJECT_TO_JSVAL(darray), NULL, NULL, JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT)) { return false; } *vp = OBJECT_TO_JSVAL(result); return true; } } static JSBool static JSBool Loading @@ -209,7 +194,10 @@ nsIDOMCanvasRenderingContext2D_CreateImageData(JSContext *cx, unsigned argc, jsv { { XPC_QS_ASSERT_CONTEXT_OK(cx); XPC_QS_ASSERT_CONTEXT_OK(cx); /* Note: this doesn't need JS_THIS_OBJECT */ JSObject* obj = JS_THIS_OBJECT(cx, vp); if (!obj) { return false; } if (argc < 1) if (argc < 1) return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS); return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS); Loading @@ -223,7 +211,7 @@ nsIDOMCanvasRenderingContext2D_CreateImageData(JSContext *cx, unsigned argc, jsv return false; return false; } } return CreateImageData(cx, data_width, data_height, vp); return CreateImageData(cx, obj, data_width, data_height, vp); } } double width, height; double width, height; Loading @@ -242,7 +230,7 @@ nsIDOMCanvasRenderingContext2D_CreateImageData(JSContext *cx, unsigned argc, jsv uint32_t w = NS_ABS(wi); uint32_t w = NS_ABS(wi); uint32_t h = NS_ABS(hi); uint32_t h = NS_ABS(hi); return CreateImageData(cx, w, h, vp); return CreateImageData(cx, obj, w, h, vp); } } static JSBool static JSBool Loading content/canvas/test/test_canvas.html +2 −2 Original line number Original line Diff line number Diff line Loading @@ -7605,7 +7605,7 @@ ok(window.Uint8ClampedArray !== undefined, "window.Uint8ClampedArray !== undefin window.ImageData.prototype.thisImplementsImageData = true; window.ImageData.prototype.thisImplementsImageData = true; window.Uint8ClampedArray.prototype.thisImplementsUint8ClampedArray = true; window.Uint8ClampedArray.prototype.thisImplementsUint8ClampedArray = true; var imgdata = ctx.createImageData(1, 1); var imgdata = ctx.createImageData(1, 1); todo(imgdata.thisImplementsImageData, "imgdata.thisImplementsImageData"); ok(imgdata.thisImplementsImageData, "imgdata.thisImplementsImageData"); ok(imgdata.data.thisImplementsUint8ClampedArray, "imgdata.data.thisImplementsUint8ClampedArray"); ok(imgdata.data.thisImplementsUint8ClampedArray, "imgdata.data.thisImplementsUint8ClampedArray"); Loading @@ -7629,7 +7629,7 @@ ok(window.Uint8ClampedArray !== undefined, "window.Uint8ClampedArray !== undefin window.ImageData.prototype.thisImplementsImageData = true; window.ImageData.prototype.thisImplementsImageData = true; window.Uint8ClampedArray.prototype.thisImplementsUint8ClampedArray = true; window.Uint8ClampedArray.prototype.thisImplementsUint8ClampedArray = true; var imgdata = ctx.createImageData(ctx.createImageData(1, 1)); var imgdata = ctx.createImageData(ctx.createImageData(1, 1)); todo(imgdata.thisImplementsImageData, "imgdata.thisImplementsImageData"); ok(imgdata.thisImplementsImageData, "imgdata.thisImplementsImageData"); ok(imgdata.data.thisImplementsUint8ClampedArray, "imgdata.data.thisImplementsUint8ClampedArray"); ok(imgdata.data.thisImplementsUint8ClampedArray, "imgdata.data.thisImplementsUint8ClampedArray"); Loading Loading
content/canvas/src/CustomQS_Canvas2D.h +14 −26 Original line number Original line Diff line number Diff line Loading @@ -158,10 +158,7 @@ nsIDOMCanvasRenderingContext2D_GetFillStyle(JSContext *cx, JSObject *obj, jsid i } } static bool static bool CreateImageData(JSContext* cx, CreateImageData(JSContext* cx, JSObject* obj, uint32_t w, uint32_t h, jsval* vp) uint32_t w, uint32_t h, jsval* vp) { { using mozilla::CheckedInt; using mozilla::CheckedInt; Loading @@ -183,25 +180,13 @@ CreateImageData(JSContext* cx, return false; return false; } } // Do JS_NewObject after CreateTypedArray, so that gc will get XPCLazyCallContext lccx(JS_CALLER, cx, obj); // triggered here if necessary const nsIID *iid = &NS_GET_IID(nsIDOMImageData); JSObject* result = JS_NewObject(cx, NULL, NULL, NULL); nsRefPtr<mozilla::dom::ImageData> imageData = JS::AutoObjectRooter rr(cx, result); new mozilla::dom::ImageData(w, h, *darray); if (!result) { qsObjectHelper helper(imageData, NULL); return false; return xpc_qsXPCOMObjectToJsval(lccx, helper, iid, } &interfaces[k_nsIDOMImageData], vp); if (!JS_DefineProperty(cx, result, "width", INT_TO_JSVAL(w), NULL, NULL, JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT) || !JS_DefineProperty(cx, result, "height", INT_TO_JSVAL(h), NULL, NULL, JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT) || !JS_DefineProperty(cx, result, "data", OBJECT_TO_JSVAL(darray), NULL, NULL, JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT)) { return false; } *vp = OBJECT_TO_JSVAL(result); return true; } } static JSBool static JSBool Loading @@ -209,7 +194,10 @@ nsIDOMCanvasRenderingContext2D_CreateImageData(JSContext *cx, unsigned argc, jsv { { XPC_QS_ASSERT_CONTEXT_OK(cx); XPC_QS_ASSERT_CONTEXT_OK(cx); /* Note: this doesn't need JS_THIS_OBJECT */ JSObject* obj = JS_THIS_OBJECT(cx, vp); if (!obj) { return false; } if (argc < 1) if (argc < 1) return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS); return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS); Loading @@ -223,7 +211,7 @@ nsIDOMCanvasRenderingContext2D_CreateImageData(JSContext *cx, unsigned argc, jsv return false; return false; } } return CreateImageData(cx, data_width, data_height, vp); return CreateImageData(cx, obj, data_width, data_height, vp); } } double width, height; double width, height; Loading @@ -242,7 +230,7 @@ nsIDOMCanvasRenderingContext2D_CreateImageData(JSContext *cx, unsigned argc, jsv uint32_t w = NS_ABS(wi); uint32_t w = NS_ABS(wi); uint32_t h = NS_ABS(hi); uint32_t h = NS_ABS(hi); return CreateImageData(cx, w, h, vp); return CreateImageData(cx, obj, w, h, vp); } } static JSBool static JSBool Loading
content/canvas/test/test_canvas.html +2 −2 Original line number Original line Diff line number Diff line Loading @@ -7605,7 +7605,7 @@ ok(window.Uint8ClampedArray !== undefined, "window.Uint8ClampedArray !== undefin window.ImageData.prototype.thisImplementsImageData = true; window.ImageData.prototype.thisImplementsImageData = true; window.Uint8ClampedArray.prototype.thisImplementsUint8ClampedArray = true; window.Uint8ClampedArray.prototype.thisImplementsUint8ClampedArray = true; var imgdata = ctx.createImageData(1, 1); var imgdata = ctx.createImageData(1, 1); todo(imgdata.thisImplementsImageData, "imgdata.thisImplementsImageData"); ok(imgdata.thisImplementsImageData, "imgdata.thisImplementsImageData"); ok(imgdata.data.thisImplementsUint8ClampedArray, "imgdata.data.thisImplementsUint8ClampedArray"); ok(imgdata.data.thisImplementsUint8ClampedArray, "imgdata.data.thisImplementsUint8ClampedArray"); Loading @@ -7629,7 +7629,7 @@ ok(window.Uint8ClampedArray !== undefined, "window.Uint8ClampedArray !== undefin window.ImageData.prototype.thisImplementsImageData = true; window.ImageData.prototype.thisImplementsImageData = true; window.Uint8ClampedArray.prototype.thisImplementsUint8ClampedArray = true; window.Uint8ClampedArray.prototype.thisImplementsUint8ClampedArray = true; var imgdata = ctx.createImageData(ctx.createImageData(1, 1)); var imgdata = ctx.createImageData(ctx.createImageData(1, 1)); todo(imgdata.thisImplementsImageData, "imgdata.thisImplementsImageData"); ok(imgdata.thisImplementsImageData, "imgdata.thisImplementsImageData"); ok(imgdata.data.thisImplementsUint8ClampedArray, "imgdata.data.thisImplementsUint8ClampedArray"); ok(imgdata.data.thisImplementsUint8ClampedArray, "imgdata.data.thisImplementsUint8ClampedArray"); Loading