Skip to content

Commit cf0d135

Browse files
committed
fix: E2EE bug in chrome on rejoin.
1 parent 4e06845 commit cf0d135

File tree

1 file changed

+32
-18
lines changed

1 file changed

+32
-18
lines changed

lib/src/frame_cryptor_impl.dart

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -405,14 +405,21 @@ class FrameCryptorFactoryImpl implements FrameCryptorFactory {
405405

406406
jsReceiver.transform = web.RTCRtpScriptTransform(worker, options.jsify());
407407
} else {
408-
var exist = false;
409-
final streams =
410-
jsReceiver.callMethod<JSObject>('createEncodedStreams'.toJS);
411-
final readable =
412-
streams.getProperty('readable'.toJS) as web.ReadableStream;
413-
final writable =
414-
streams.getProperty('writable'.toJS) as web.WritableStream;
415-
408+
var writable =
409+
jsReceiver.getProperty('writable'.toJS) as web.WritableStream?;
410+
var readable =
411+
jsReceiver.getProperty('readable'.toJS) as web.ReadableStream?;
412+
var exist = true;
413+
if (writable == null || readable == null) {
414+
final streams = jsReceiver.callMethod<JSObject>(
415+
'createEncodedStreams'.toJS,
416+
);
417+
readable = streams.getProperty('readable'.toJS) as web.ReadableStream;
418+
jsReceiver.setProperty('readable'.toJS, readable);
419+
writable = streams.getProperty('writable'.toJS) as web.WritableStream;
420+
jsReceiver.setProperty('writable'.toJS, writable);
421+
exist = false;
422+
}
416423
var msgId = randomString(12);
417424
try {
418425
worker.postMessage(
@@ -426,7 +433,7 @@ class FrameCryptorFactoryImpl implements FrameCryptorFactory {
426433
'trackId': trackId,
427434
'options': keyProvider.options.toJson(),
428435
'readableStream': readable,
429-
'writableStream': writable
436+
'writableStream': writable,
430437
}.jsify(),
431438
[readable, writable] as JSObject,
432439
);
@@ -467,14 +474,21 @@ class FrameCryptorFactoryImpl implements FrameCryptorFactory {
467474
print('object: ${options['keyProviderId']}');
468475
jsSender.transform = web.RTCRtpScriptTransform(worker, options.jsify());
469476
} else {
470-
var exist = false;
471-
final streams =
472-
jsSender.callMethod<JSObject>('createEncodedStreams'.toJS);
473-
final readable =
474-
streams.getProperty('readable'.toJS) as web.ReadableStream;
475-
final writable =
476-
streams.getProperty('writable'.toJS) as web.WritableStream;
477-
477+
var writable =
478+
jsSender.getProperty('writable'.toJS) as web.WritableStream?;
479+
var readable =
480+
jsSender.getProperty('readable'.toJS) as web.ReadableStream?;
481+
var exist = true;
482+
if (writable == null || readable == null) {
483+
final streams = jsSender.callMethod<JSObject>(
484+
'createEncodedStreams'.toJS,
485+
);
486+
readable = streams.getProperty('readable'.toJS) as web.ReadableStream;
487+
jsSender.setProperty('readable'.toJS, readable);
488+
writable = streams.getProperty('writable'.toJS) as web.WritableStream;
489+
jsSender.setProperty('writable'.toJS, writable);
490+
exist = false;
491+
}
478492
var msgId = randomString(12);
479493

480494
try {
@@ -489,7 +503,7 @@ class FrameCryptorFactoryImpl implements FrameCryptorFactory {
489503
'trackId': trackId,
490504
'options': keyProvider.options.toJson(),
491505
'readableStream': readable,
492-
'writableStream': writable
506+
'writableStream': writable,
493507
}.jsify(),
494508
[readable, writable] as JSObject,
495509
);

0 commit comments

Comments
 (0)