<br><br><div class="gmail_quote">On Wed, Dec 22, 2010 at 8:28 PM, Tom Rathbone <span dir="ltr">&lt;<a href="mailto:tom.rathbone@gmail.com">tom.rathbone@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Sounds like this conversion might be being done in the wrong place, it<br>
doesn&#39;t feel like this should be the responsibility of this method<br>
since &quot;undefined&quot; is a valid return value from any JavaScript call.<br>
<div><div></div><div class="h5"><br></div></div></blockquote><div>I agree, this looks like a bug and proper fix would be to remove this conversion</div><div>from that place. We need to double check that this won&#39;t break Chromium&#39;s code.</div>
<div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div><div class="h5">
On Wed, Dec 22, 2010 at 4:41 PM, Yury Semikhatsky &lt;<a href="mailto:yurys@chromium.org">yurys@chromium.org</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt; On Wed, Dec 22, 2010 at 7:22 PM, Tom Rathbone &lt;<a href="mailto:tom.rathbone@gmail.com">tom.rathbone@gmail.com</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; From my experiments calling executeScriptAndReturnValue &quot;function<br>
&gt;&gt; foo() { } foo();&quot; will also return an empty handle meaning that this<br>
&gt;&gt; can&#39;t reliably be used to detect errors.  Is there another way to<br>
&gt;&gt; distinguish non values from errors?<br>
&gt;<br>
&gt; I see, the problem is that &#39;undefined&#39; value is converted into an empty<br>
&gt; ScriptValue in ScriptController::evaluate:<br>
&gt; <a href="http://codesearch.google.com/codesearch/p?hl=en#OAMlx_jo-ck/src/third_party/WebKit/WebCore/bindings/v8/ScriptController.cpp&amp;q=::executeScriptAndReturnValue%5C(&amp;gs=cpp:WebCore::ScriptController::executeScript(const%2520WebCore::ScriptSourceCode%2520&amp;amp" target="_blank">http://codesearch.google.com/codesearch/p?hl=en#OAMlx_jo-ck/src/third_party/WebKit/WebCore/bindings/v8/ScriptController.cpp&amp;q=::executeScriptAndReturnValue%5C(&amp;gs=cpp:WebCore::ScriptController::executeScript(const%2520WebCore::ScriptSourceCode%2520&amp;amp</a>;,%2520enum%2520ShouldAllowXSS)@chrome/trunk/src/third_party/WebKit/WebCore/bindings/v8/ScriptController.h%257Cdecl&amp;gsn=executeScript&amp;d=5&amp;l=260<br>

&gt; Not sure what this conversion is used for.<br>
&gt; Yury<br>
&gt;<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Wed, Dec 22, 2010 at 2:35 PM, Yury Semikhatsky &lt;<a href="mailto:yurys@chromium.org">yurys@chromium.org</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt; &gt; Hi Tom,<br>
&gt;&gt; &gt; In case of uncaught JS exception returned v8::Handle will always be<br>
&gt;&gt; &gt; empty<br>
&gt;&gt; &gt; (v8::Handle&lt;v8::Value&gt;::IsEmpty() will return true) while in case of<br>
&gt;&gt; &gt; successful<br>
&gt;&gt; &gt; evaluation the result is always non-empty. Also uncaught JS exception<br>
&gt;&gt; &gt; will<br>
&gt;&gt; &gt; be<br>
&gt;&gt; &gt; reported to the console object(see Console.cpp) which will propagate<br>
&gt;&gt; &gt; them<br>
&gt;&gt; &gt; to<br>
&gt;&gt; &gt; InspectorController and ChromeClient.<br>
&gt;&gt; &gt; Thanks,<br>
&gt;&gt; &gt; Yury<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Wed, Dec 22, 2010 at 12:58 PM, Tom Rathbone &lt;<a href="mailto:tom.rathbone@gmail.com">tom.rathbone@gmail.com</a>&gt;<br>
&gt;&gt; &gt; wrote:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Hi Guys,<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; I was wondering if it would be possible to expose v8 exceptions<br>
&gt;&gt; &gt;&gt; through WebFrameImpl::executeScriptAndReturnValue and<br>
&gt;&gt; &gt;&gt; ScriptController::executeScript, perhaps as an output reference<br>
&gt;&gt; &gt;&gt; argument.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; The effected methods would be:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; v8::Handle&lt;v8::Value&gt; WebFrameImpl::executeScriptAndReturnValue(const<br>
&gt;&gt; &gt;&gt; WebScriptSource&amp; source)<br>
&gt;&gt; &gt;&gt; ScriptValue ScriptController::executeScript(const ScriptSourceCode&amp;<br>
&gt;&gt; &gt;&gt; sourceCode, ShouldAllowXSS shouldAllowXSS)<br>
&gt;&gt; &gt;&gt; ScriptValue ScriptController::evaluate(const ScriptSourceCode&amp;<br>
&gt;&gt; &gt;&gt; sourceCode, ShouldAllowXSS shouldAllowXSS)<br>
&gt;&gt; &gt;&gt; v8::Local&lt;v8::Value&gt; V8Proxy::evaluate(const ScriptSourceCode&amp; source,<br>
&gt;&gt; &gt;&gt; Node* node)<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; If I&#39;ve read the source correctly V8 exceptions are caught in<br>
&gt;&gt; &gt;&gt; V8Proxy::evaluate and swallowed.  This means clients calling<br>
&gt;&gt; &gt;&gt; executeScriptAndReturnValue have no easy way of determining what went<br>
&gt;&gt; &gt;&gt; wrong or of responding to script errors.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Maybe...<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; v8::Handle&lt;v8::Value&gt; WebFrameImpl::executeScriptAndReturnValue(const<br>
&gt;&gt; &gt;&gt; WebScriptSource&amp; source, bool&amp; exceptionReturned)<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; If others think these changes are worthwhile then I&#39;ll have a go at<br>
&gt;&gt; &gt;&gt; crafting a patch.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Thanks,<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Tom.<br>
&gt;&gt; &gt;&gt; _______________________________________________<br>
&gt;&gt; &gt;&gt; webkit-dev mailing list<br>
&gt;&gt; &gt;&gt; <a href="mailto:webkit-dev@lists.webkit.org">webkit-dev@lists.webkit.org</a><br>
&gt;&gt; &gt;&gt; <a href="http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev" target="_blank">http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br>