Commit 07234ed6 authored by Ms2ger's avatar Ms2ger
Browse files

Bug 550309 - Part f: Return real ImageData from CreateImageData; r=bz

parent b9704abc
Loading
Loading
Loading
Loading
+14 −26
Original line number Original line Diff line number Diff line
@@ -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;


@@ -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
@@ -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);
@@ -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;
@@ -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
+2 −2
Original line number Original line Diff line number Diff line
@@ -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");
@@ -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");