// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. part of $LIBRARYNAME; $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS { List getGamepads() { var gamepadList = _getGamepads(); // If no prototype we need one for the world to hookup to the proper Dart class. var jsProto = JS('', '#.prototype', gamepadList); if (jsProto == null) { JS('', '#.prototype = Object.create(null)', gamepadList); } applyExtension('GamepadList', gamepadList); return gamepadList; } String get language => JS('String', '#.language || #.userLanguage', this, this); /** * Gets a stream (video and or audio) from the local computer. * * Use [MediaStream.supported] to check if this is supported by the current * platform. The arguments `audio` and `video` default to `false` (stream does * not use audio or video, respectively). * * Simple example usage: * * window.navigator.getUserMedia(audio: true, video: true).then((stream) { * var video = new VideoElement() * ..autoplay = true * ..src = Url.createObjectUrlFromStream(stream); * document.body.append(video); * }); * * The user can also pass in Maps to the audio or video parameters to specify * mandatory and optional constraints for the media stream. Not passing in a * map, but passing in `true` will provide a MediaStream with audio or * video capabilities, but without any additional constraints. The particular * constraint names for audio and video are still in flux, but as of this * writing, here is an example providing more constraints. * * window.navigator.getUserMedia( * audio: true, * video: {'mandatory': * { 'minAspectRatio': 1.333, 'maxAspectRatio': 1.334 }, * 'optional': * [{ 'minFrameRate': 60 }, * { 'maxWidth': 640 }] * }); * * See also: * * [MediaStream.supported] */ @SupportedBrowser(SupportedBrowser.CHROME) Future getUserMedia({audio: false, video: false}) { var completer = new Completer(); var options = { 'audio': audio, 'video': video }; _ensureGetUserMedia(); this._getUserMedia(convertDartToNative_SerializedScriptValue(options), (stream) { completer.complete(stream); }, (error) { completer.completeError(error); }); return completer.future; } _ensureGetUserMedia() { if (JS('bool', '!(#.getUserMedia)', this)) { JS('void', '#.getUserMedia = ' '(#.getUserMedia || #.webkitGetUserMedia || #.mozGetUserMedia ||' '#.msGetUserMedia)', this, this, this, this, this); } } @JSName('getUserMedia') void _getUserMedia(options, _NavigatorUserMediaSuccessCallback success, _NavigatorUserMediaErrorCallback error) native; $!MEMBERS }