Skip to content

Commit 63e1558

Browse files
authored
Merge pull request #489 from cordova-rtc/bugs/ios-10
Restore iOS 10.x.x support
2 parents b1e81df + 4036247 commit 63e1558

File tree

3 files changed

+50
-12
lines changed

3 files changed

+50
-12
lines changed

dist/cordova-plugin-iosrtc.js

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ function newMediaStreamId() {
158158
}
159159

160160
// Save original MediaStream
161-
var originalMediaStream = window.MediaStream;
161+
var originalMediaStream = window.MediaStream || window.Blob;
162162
var originalMediaStreamTrack = MediaStreamTrack.originalMediaStreamTrack;
163163

164164
/**
@@ -171,8 +171,9 @@ function MediaStream(arg, id) {
171171
// new MediaStream(originalMediaStream) // stream
172172
// new MediaStream(originalMediaStreamTrack[]) // tracks
173173
if (
174-
(arg instanceof originalMediaStream && typeof arg.getBlobId === 'undefined') ||
175-
(Array.isArray(arg) && arg[0] instanceof originalMediaStreamTrack)
174+
!(arg instanceof window.Blob) &&
175+
(arg instanceof originalMediaStream && typeof arg.getBlobId === 'undefined') ||
176+
(Array.isArray(arg) && arg[0] instanceof originalMediaStreamTrack)
176177
) {
177178
return new originalMediaStream(arg);
178179
}
@@ -181,9 +182,23 @@ function MediaStream(arg, id) {
181182
// new MediaStream(MediaStreamTrack[]) // tracks
182183
// new MediaStream() // empty
183184

184-
// TODO attempt CustomMediaStream extend.
185185
// Extend returned MediaTream with custom MediaStream
186-
var stream = new (Function.prototype.bind.apply(originalMediaStream.bind(this), [])); // jshint ignore:line
186+
var stream;
187+
if (originalMediaStream !== window.Blob) {
188+
stream = new (Function.prototype.bind.apply(originalMediaStream.bind(this), [])); // jshint ignore:line
189+
190+
// Fallback on Blob if originalMediaStream is not a MediaStream and Emulate EventTarget
191+
} else {
192+
stream = new Blob([], {
193+
type: 'stream'
194+
});
195+
196+
var target = document.createTextNode(null);
197+
stream.addEventListener = target.addEventListener.bind(target);
198+
stream.removeEventListener = target.removeEventListener.bind(target);
199+
stream.dispatchEvent = target.dispatchEvent.bind(target);
200+
}
201+
187202
Object.defineProperties(stream, Object.getOwnPropertyDescriptors(MediaStream.prototype));
188203

189204
// Make it an EventTarget.
@@ -1009,9 +1024,13 @@ var
10091024
EventTarget = _dereq_('./EventTarget');
10101025

10111026
// Save original MediaStreamTrack
1012-
var originalMediaStreamTrack = window.MediaStreamTrack;
1027+
var originalMediaStreamTrack = window.MediaStreamTrack || function dummyMediaStreamTrack() {};
10131028

10141029
function MediaStreamTrack(dataFromEvent) {
1030+
if (!dataFromEvent) {
1031+
throw new Error('Illegal constructor');
1032+
}
1033+
10151034
debug('new() | [dataFromEvent:%o]', dataFromEvent);
10161035

10171036
var self = this;

js/MediaStream.js

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ function newMediaStreamId() {
3232
}
3333

3434
// Save original MediaStream
35-
var originalMediaStream = window.MediaStream;
35+
var originalMediaStream = window.MediaStream || window.Blob;
3636
var originalMediaStreamTrack = MediaStreamTrack.originalMediaStreamTrack;
3737

3838
/**
@@ -45,8 +45,9 @@ function MediaStream(arg, id) {
4545
// new MediaStream(originalMediaStream) // stream
4646
// new MediaStream(originalMediaStreamTrack[]) // tracks
4747
if (
48-
(arg instanceof originalMediaStream && typeof arg.getBlobId === 'undefined') ||
49-
(Array.isArray(arg) && arg[0] instanceof originalMediaStreamTrack)
48+
!(arg instanceof window.Blob) &&
49+
(arg instanceof originalMediaStream && typeof arg.getBlobId === 'undefined') ||
50+
(Array.isArray(arg) && arg[0] instanceof originalMediaStreamTrack)
5051
) {
5152
return new originalMediaStream(arg);
5253
}
@@ -55,9 +56,23 @@ function MediaStream(arg, id) {
5556
// new MediaStream(MediaStreamTrack[]) // tracks
5657
// new MediaStream() // empty
5758

58-
// TODO attempt CustomMediaStream extend.
5959
// Extend returned MediaTream with custom MediaStream
60-
var stream = new (Function.prototype.bind.apply(originalMediaStream.bind(this), [])); // jshint ignore:line
60+
var stream;
61+
if (originalMediaStream !== window.Blob) {
62+
stream = new (Function.prototype.bind.apply(originalMediaStream.bind(this), [])); // jshint ignore:line
63+
64+
// Fallback on Blob if originalMediaStream is not a MediaStream and Emulate EventTarget
65+
} else {
66+
stream = new Blob([], {
67+
type: 'stream'
68+
});
69+
70+
var target = document.createTextNode(null);
71+
stream.addEventListener = target.addEventListener.bind(target);
72+
stream.removeEventListener = target.removeEventListener.bind(target);
73+
stream.dispatchEvent = target.dispatchEvent.bind(target);
74+
}
75+
6176
Object.defineProperties(stream, Object.getOwnPropertyDescriptors(MediaStream.prototype));
6277

6378
// Make it an EventTarget.

js/MediaStreamTrack.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,13 @@ var
1919
EventTarget = require('./EventTarget');
2020

2121
// Save original MediaStreamTrack
22-
var originalMediaStreamTrack = window.MediaStreamTrack;
22+
var originalMediaStreamTrack = window.MediaStreamTrack || function dummyMediaStreamTrack() {};
2323

2424
function MediaStreamTrack(dataFromEvent) {
25+
if (!dataFromEvent) {
26+
throw new Error('Illegal constructor');
27+
}
28+
2529
debug('new() | [dataFromEvent:%o]', dataFromEvent);
2630

2731
var self = this;

0 commit comments

Comments
 (0)