<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sat, Apr 25, 2015 at 5:03 PM, Domenic Denicola <span dir="ltr"><<a href="mailto:d@domenic.me" target="_blank">d@domenic.me</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">There needs to be an unforgable brand property such that only objects created with `new XPromise()` pass `XPromise.resolve`. It is not a use case to allow building
 an object ES5 style in pieces to pass the brand check. Such objects should be coerced to real promises.</blockquote></div><div class="gmail_extra"><br></div>But can you give me an actual use case, please?  The ostensible security property is pretty moot given `Object.setPrototypeOf`.<br><br></div><div class="gmail_extra">In this case, the promises *are* "real promises".  They were created with `new Promise`.  But then the prototype was changed.  So in effect I've forged the brand -- they are not actually `Promise` any more, they are something else.</div><div class="gmail_extra"><br></div><div class="gmail_extra">And I can forge this arbitrarily using Reflect.construct, which lets me set `new.target` (and thus [[PromiseConstructor]]`) to absolutely anything I want.</div><div class="gmail_extra"><br></div><div class="gmail_extra">If the brand property is not actually unforgeable, what use is it?  It seems like some broken piece of an idea that doesn't actually work.</div><div class="gmail_extra"><br></div><div class="gmail_extra">But maybe it does work and serve a purpose -- that's why I'm asking: can we point to someone who is actually using this functionality for a specific purpose?  And is it working for them?</div><div class="gmail_extra">  --scott</div><div class="gmail_extra"><br></div></div>