getscreenmedia
Advanced tools
Comparing version 4.1.1 to 5.0.0
var adapter = require('webrtc-adapter'); | ||
// cache for constraints and callback | ||
var cache = {}; | ||
@@ -10,12 +8,3 @@ module.exports = function (constraints, cb) { | ||
if (typeof window === 'undefined' || window.location.protocol === 'http:') { | ||
error = new Error('NavigatorUserMediaError'); | ||
error.name = 'HTTPS_REQUIRED'; | ||
return callback(error); | ||
} | ||
if (adapter.browserDetails.browser === 'chrome') { | ||
var chromever = adapter.browserDetails.version; | ||
var isCef = !window.chrome.webstore; | ||
// check that the extension is installed by looking for a | ||
@@ -75,68 +64,3 @@ // sessionStorage variable that contains the extension id | ||
}); | ||
} else if (isCef || (chromever >= 26 && chromever <= 35)) { | ||
// chrome 26 - chrome 33 way to do it -- requires bad chrome://flags | ||
// note: this is basically in maintenance mode and will go away soon | ||
constraints = (hasConstraints && constraints) || { | ||
video: { | ||
mandatory: { | ||
googLeakyBucket: true, | ||
maxWidth: window.screen.width, | ||
maxHeight: window.screen.height, | ||
maxFrameRate: 3, | ||
chromeMediaSource: 'screen' | ||
} | ||
} | ||
}; | ||
window.navigator.mediaDevices.getUserMedia(constraints).then(function (stream) { | ||
callback(null, stream); | ||
}).catch(function (err) { | ||
callback(err); | ||
}); | ||
} else { | ||
// chrome 34+ way requiring an extension | ||
var pending = window.setTimeout(function () { | ||
error = new Error('NavigatorUserMediaError'); | ||
error.name = 'EXTENSION_UNAVAILABLE'; | ||
return callback(error); | ||
}, 1000); | ||
cache[pending] = [callback, hasConstraints ? constraints : null]; | ||
window.postMessage({ type: 'getScreen', id: pending }, '*'); | ||
} | ||
} else if (adapter.browserDetails.browser === 'firefox') { | ||
if (adapter.browserDetails.version >= 33) { | ||
constraints = (hasConstraints && constraints) || { | ||
video: { | ||
mozMediaSource: 'window', | ||
mediaSource: 'window' | ||
} | ||
}; | ||
window.navigator.mediaDevices.getUserMedia(constraints).then(function (stream) { | ||
callback(null, stream); | ||
var lastTime = stream.currentTime; | ||
var polly = window.setInterval(function () { | ||
if (!stream) window.clearInterval(polly); | ||
if (stream.currentTime == lastTime) { | ||
window.clearInterval(polly); | ||
if (stream.onended) { | ||
stream.onended(); | ||
} | ||
} | ||
lastTime = stream.currentTime; | ||
}, 500); | ||
}).catch(function (err) { | ||
callback(err); | ||
}); | ||
} else { | ||
error = new Error('NavigatorUserMediaError'); | ||
error.name = 'EXTENSION_UNAVAILABLE'; // does not make much sense but... | ||
callback(error); | ||
} | ||
} else if (adapter.browserDetails.browser === 'MicrosoftEdge') { | ||
if ('getDisplayMedia' in window.navigator) { | ||
window.navigator.getDisplayMedia({video: true}).then(function (stream) { | ||
callback(null, stream); | ||
}).catch(function (err) { | ||
callback(err); | ||
}); | ||
} else { | ||
error = new Error('Screensharing is not supported'); | ||
@@ -146,38 +70,24 @@ error.name = 'NotSupportedError'; | ||
} | ||
} else if (adapter.browserDetails.browser === 'firefox' && adapter.browserDetails.version >= 33) { | ||
constraints = (hasConstraints && constraints) || { | ||
video: { | ||
mediaSource: 'window' | ||
} | ||
}; | ||
window.navigator.mediaDevices.getUserMedia(constraints).then(function (stream) { | ||
callback(null, stream); | ||
}).catch(function (err) { | ||
callback(err); | ||
}); | ||
} else if (adapter.browserDetails.browser === 'MicrosoftEdge' && 'getDisplayMedia' in window.navigator) { | ||
window.navigator.getDisplayMedia({video: true}).then(function (stream) { | ||
callback(null, stream); | ||
}).catch(function (err) { | ||
callback(err); | ||
}); | ||
} else { | ||
error = new Error('Screensharing is not supported'); | ||
error.name = 'NotSupportedError'; | ||
callback(error); | ||
} | ||
}; | ||
typeof window !== 'undefined' && window.addEventListener('message', function (event) { | ||
if (event.origin != window.location.origin) { | ||
return; | ||
} | ||
if (event.data.type == 'gotScreen' && cache[event.data.id]) { | ||
var data = cache[event.data.id]; | ||
var constraints = data[1]; | ||
var callback = data[0]; | ||
delete cache[event.data.id]; | ||
if (event.data.sourceId === '') { // user canceled | ||
var error = new Error('NavigatorUserMediaError'); | ||
error.name = 'NotAllowedError'; | ||
callback(error); | ||
} else { | ||
constraints = constraints || {audio: false, video: { | ||
mandatory: { | ||
chromeMediaSource: 'desktop', | ||
maxWidth: window.screen.width, | ||
maxHeight: window.screen.height, | ||
maxFrameRate: 3 | ||
} | ||
}}; | ||
constraints.video.mandatory.chromeMediaSourceId = event.data.sourceId; | ||
window.navigator.mediaDevices.getUserMedia(constraints).then(function (stream) { | ||
callback(null, stream); | ||
}).catch(function (err) { | ||
callback(err); | ||
}); | ||
} | ||
} else if (event.data.type == 'getScreenPending') { | ||
window.clearTimeout(event.data.id); | ||
} | ||
}); |
{ | ||
"name": "getscreenmedia", | ||
"version": "4.1.1", | ||
"version": "5.0.0", | ||
"description": "A browser module for attempting to get access to a MediaStream of a user's screen. With a nice node-like API.", | ||
@@ -14,4 +14,3 @@ "main": "getscreenmedia.js", | ||
"screen sharing", | ||
"WebRTC", | ||
"browserify" | ||
"WebRTC" | ||
], | ||
@@ -22,6 +21,3 @@ "author": "Henrik Joreteg <henrik@andyet.net>", | ||
"webrtc-adapter": "^4.0.0" | ||
}, | ||
"devDependencies": { | ||
"browserify": "^13.1.0" | ||
} | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
0
0
21483
11
446