Hi Xabier.

Our bindings assume, by default, that the ‘this’ parameter passed to any DOM 
interface is an object of the interface’s type. This is how most DOM bindings 
work.

Our bindings also assume that a requested property can be read from the ‘this’ 
object, which represents the DOM interface.

If you’re going to pass undefined into the size function, you’ve violated both 
assumptions. (It would be meaningless to remove the type check — the call to 
size later would just crash anyway.)

The easiest way to make this work is to make the function custom. What exactly 
did you do when you tried that, and why exactly didn’t it work?

Side note: Shouldn’t this function bear the name “strategySize” rather than 
“size”?

Geoff

> On Jul 1, 2015, at 10:59 AM, Xabier Rodríguez Calvar <calva...@igalia.com> 
> wrote:
> 
>       Hello,
> 
> I need some help with some JS bindings code. I am implementing
> CountQueuingStrategy [1], which is an object containing two properties,
> one of them a function. That strategy is passed to another
> ReadableStream object [2] and as you can see at step 8, the size method
> is extracted from the strategy and kept inside the stream for later
> use. That use happens at [3], step 5.b.i, when the spec says that we
> have to pass undefined as this (and we do).
> 
> [1] https://streams.spec.whatwg.org/#cqs-class
> [2] https://streams.spec.whatwg.org/#rs-constructor
> [3] https://streams.spec.whatwg.org/#enqueue-in-readable-stream
> 
> The problem comes when invoking that method at the generated bindings:
> 
> EncodedJSValue JSC_HOST_CALL
> jsCountQueuingStrategyPrototypeFunctionSize(ExecState* exec)
> {
>    JSValue thisValue = exec->thisValue();
>    JSCountQueuingStrategy* castedThis =
> jsDynamicCast<JSCountQueuingStrategy*>(thisValue);
>    if (UNLIKELY(!castedThis))
>        return throwThisTypeError(*exec, "CountQueuingStrategy",
> "size");
>    ASSERT_GC_OBJECT_INHERITS(castedThis,
> JSCountQueuingStrategy::info());
>    return JSValue::encode(castedThis->size(exec));
> }
> 
> The problem is that it checks that "this" casts to the class and of
> course it fails because the spec says it has to be undefined. I haven't
> found any way to overcome this, even making the method custom.
> 
> Any ideas here?
> 
> Thanks in advance and best regards.
> _______________________________________________
> webkit-dev mailing list
> webkit-dev@lists.webkit.org
> https://lists.webkit.org/mailman/listinfo/webkit-dev

_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-dev

Reply via email to