<div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="im"><br>
</div>No, this is a synchronous API which is not acceptible since it creates<br>
a multithreaded environment for web developers. You need to use a<br>
callback function.<br>
<font color="#888888"></font></blockquote><div><br>Hmmm, I must've misinterpreted your previous statement:<br><br>>>> It seems like it should fine to allow reading cookies in dedicated<br>
>>> workers though.<br><br>I'm sure I'm being obtuse, but I don't understand what you are saying here.<br><br>Let's imagine that I have a synchronous API - you are saying that this is bad, because when I do this:<br>
<br>var cookies = self.getAllCookies();<br>doSomethingWithCookies(cookies);<br><br>The value of "cookies" may be out of date, so whatever doSomethingWithCookies() is doing (like invoking an XHR request) may fail because the cookies aren't accurate.<br>
<br>So, let's assume instead that we allow passing a callback to getAllCookies():<br><br>self.getAllCookies( function(cookies) { doSomethingWithCookies(cookies); })<br><br>When doSomethingWithCookies() is invoked, whatever operation it is performing may fail, because the passed-in value of cookies may still be out of date.<br>
<br>Making getAllCookies() asynchronous means that the trivial fail case:<br><br>var a = getAllCookies();<br>var b = getAllCookies();<br>assert(a === b);<br><br>...can no longer fail because there's no return value. But fundamentally the underlying problem continues to exist - the cookies may have changed behind the scene, so whatever snapshot you have (either delivered synchronously or asynchronously) may be out-of-date. So making getAllCookies() asynchronous does not buy you anything, and additionally makes this API painful to use.<br>
<br>I think it's a laudable goal to try to shield developers from the intricacies of accessing mutable global state, but I'm not sure that's possible given that mutable global state exists and we want to allow applications to access it from multiple threads. <br>
<br>As an aside, I wonder how a multi-process browser like Chrome handles cookies even in the absence of workers - if I open two windows (separate processes) under the same domain and set cookies in both, it seems like there's an existing race condition.<br>
<br>-atw<br><br><br><br></div></div><br>