<p dir="ltr">One way may be to make &#39;size&#39; an attribute, cachable and returning a JSFunction wrapping a C++ function returning 1. Not sure this will pass signature tests though.<br>
This can be done as a custom &#39;size&#39; function also but I guess you need to return the same JS object all the time.</p>
<p dir="ltr">A second approach might be to return the &#39;size&#39; method bound to the count queuing strategy object. That is easy in JS but I do not know how easy it is within JSC.</p>
<p dir="ltr">IIUC, &#39;size&#39; is somehow similar to a C++ static class method. A third approach could be to add a &#39;static&#39; IDL keyword to the binding generator to enable calling static methods of the DOM class. No custom code in that case.<br>
</p>
<p dir="ltr"><br>
</p>
<p dir="ltr">Hope this helps<br>
    Y<br>
</p>
<p dir="ltr"><br>
Le mer. 1 juil. 2015 20:07, Geoffrey Garen &lt;<a href="mailto:ggaren@apple.com">ggaren@apple.com</a>&gt; a écrit :</p>
<blockquote><p dir="ltr">Hi Xabier.</p>
<p dir="ltr">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.</p>
<p dir="ltr">Our bindings also assume that a requested property can be read from the ‘this’ object, which represents the DOM interface.</p>
<p dir="ltr">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.)</p>
<p dir="ltr">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?</p>
<p dir="ltr">Side note: Shouldn’t this function bear the name “strategySize” rather than “size”?</p>
<p dir="ltr">Geoff</p>
<p dir="ltr">&gt; On Jul 1, 2015, at 10:59 AM, Xabier Rodríguez Calvar &lt;<a href="mailto:calvaris@igalia.com">calvaris@igalia.com</a>&gt; wrote:<br>
&gt;<br>
&gt;       Hello,<br>
&gt;<br>
&gt; I need some help with some JS bindings code. I am implementing<br>
&gt; CountQueuingStrategy [1], which is an object containing two properties,<br>
&gt; one of them a function. That strategy is passed to another<br>
&gt; ReadableStream object [2] and as you can see at step 8, the size method<br>
&gt; is extracted from the strategy and kept inside the stream for later<br>
&gt; use. That use happens at [3], step 5.b.i, when the spec says that we<br>
&gt; have to pass undefined as this (and we do).<br>
&gt;<br>
&gt; [1] <a href="https://streams.spec.whatwg.org/#cqs-class">https://streams.spec.whatwg.org/#cqs-class</a><br>
&gt; [2] <a href="https://streams.spec.whatwg.org/#rs-constructor">https://streams.spec.whatwg.org/#rs-constructor</a><br>
&gt; [3] <a href="https://streams.spec.whatwg.org/#enqueue-in-readable-stream">https://streams.spec.whatwg.org/#enqueue-in-readable-stream</a><br>
&gt;<br>
&gt; The problem comes when invoking that method at the generated bindings:<br>
&gt;<br>
&gt; EncodedJSValue JSC_HOST_CALL<br>
&gt; jsCountQueuingStrategyPrototypeFunctionSize(ExecState* exec)<br>
&gt; {<br>
&gt;    JSValue thisValue = exec-&gt;thisValue();<br>
&gt;    JSCountQueuingStrategy* castedThis =<br>
&gt; jsDynamicCast&lt;JSCountQueuingStrategy*&gt;(thisValue);<br>
&gt;    if (UNLIKELY(!castedThis))<br>
&gt;        return throwThisTypeError(*exec, &quot;CountQueuingStrategy&quot;,<br>
&gt; &quot;size&quot;);<br>
&gt;    ASSERT_GC_OBJECT_INHERITS(castedThis,<br>
&gt; JSCountQueuingStrategy::info());<br>
&gt;    return JSValue::encode(castedThis-&gt;size(exec));<br>
&gt; }<br>
&gt;<br>
&gt; The problem is that it checks that &quot;this&quot; casts to the class and of<br>
&gt; course it fails because the spec says it has to be undefined. I haven&#39;t<br>
&gt; found any way to overcome this, even making the method custom.<br>
&gt;<br>
&gt; Any ideas here?<br>
&gt;<br>
&gt; Thanks in advance and best regards.<br>
&gt; _______________________________________________<br>
&gt; webkit-dev mailing list<br>
&gt; <a href="mailto:webkit-dev@lists.webkit.org">webkit-dev@lists.webkit.org</a><br>
&gt; <a href="https://lists.webkit.org/mailman/listinfo/webkit-dev">https://lists.webkit.org/mailman/listinfo/webkit-dev</a></p>
<p dir="ltr">_______________________________________________<br>
webkit-dev mailing list<br>
<a href="mailto:webkit-dev@lists.webkit.org">webkit-dev@lists.webkit.org</a><br>
<a href="https://lists.webkit.org/mailman/listinfo/webkit-dev">https://lists.webkit.org/mailman/listinfo/webkit-dev</a><br>
</p>
</blockquote>
<p dir="ltr"><br>
</p>