[Bug 20525] MIDIAccess methods aren't restricted to instances created by requestMIDIAccess

https://www.w3.org/Bugs/Public/show_bug.cgi?id=20525

--- Comment #3 from Jussi Kalliokoski <jussi.kalliokoski@gmail.com> ---
(In reply to comment #2)
> The object on the global scope is a different object :) This is where WebIDL
> gets funky. That's called the "interface object" and it does not expose the
> methods. 
> 
> See: 
> http://www.w3.org/TR/WebIDL/#es-interfaces 
> 
> (yes, it's freeken complicated and I've been trying to grok that for about a
> year) 
> 
> you basically end up with this:
> //This one holds constants and statics
> var interfaceObject=  function MidiAccess(){
>   if(this instanceof MidiAccess){
>      var msg="DOM object constructor cannot be called as a function."   
>      throw new TypeError(msg);
>   }
> }
> //This one makes actual instances
> var interfacePrototypeObj = function MIDIAccess(){}   
> window.MIDIAccess = interfaceObject; 
> 
> 
> You can confirm this in the browser by querying any object. For example: 
> 
> >> Event
> function Event() { [native code] }
> >>Event()
> TypeError: DOM object constructor cannot be called as a function.
> 
> Note that Event does not expose preventDefault() or any other instance
> method. Only the constants are exposed.  

Event doesn't, but Event.prototype does:

typeof Event.prototype.preventDefault === 'function' // true

-- 
You are receiving this mail because:
You are the QA Contact for the bug.

Received on Thursday, 27 December 2012 17:46:45 UTC