@@ -457,9 +457,8 @@ if (typeof window !== 'undefined' && window._schedMock) {
457
457
// If Scheduler runs in a non-DOM environment, it falls back to a naive
458
458
// implementation using setTimeout.
459
459
typeof window === 'undefined' ||
460
- // "addEventListener" might not be available on the window object
461
- // if this is a mocked "window" object. So we need to validate that too.
462
- typeof window . addEventListener !== 'function'
460
+ // Check if MessageChannel is supported, too.
461
+ typeof MessageChannel !== 'function'
463
462
) {
464
463
var _callback = null ;
465
464
var _currentTime = - 1 ;
@@ -533,17 +532,9 @@ if (typeof window !== 'undefined' && window._schedMock) {
533
532
} ;
534
533
535
534
// We use the postMessage trick to defer idle work until after the repaint.
536
- var port = null ;
537
- var messageKey =
538
- '__reactIdleCallback$' +
539
- Math . random ( )
540
- . toString ( 36 )
541
- . slice ( 2 ) ;
542
- var idleTick = function ( event ) {
543
- if ( event . source !== port || event . data !== messageKey ) {
544
- return ;
545
- }
546
-
535
+ var channel = new MessageChannel ( ) ;
536
+ var port = channel . port2 ;
537
+ channel . port1 . onmessage = function ( event ) {
547
538
isMessageEventScheduled = false ;
548
539
549
540
var prevScheduledCallback = scheduledHostCallback ;
@@ -627,7 +618,7 @@ if (typeof window !== 'undefined' && window._schedMock) {
627
618
frameDeadline = rafTime + activeFrameTime ;
628
619
if ( ! isMessageEventScheduled ) {
629
620
isMessageEventScheduled = true ;
630
- port . postMessage ( messageKey , '*' ) ;
621
+ port . postMessage ( '*' ) ;
631
622
}
632
623
} ;
633
624
@@ -636,7 +627,7 @@ if (typeof window !== 'undefined' && window._schedMock) {
636
627
timeoutTime = absoluteTimeout ;
637
628
if ( isFlushingHostCallback || absoluteTimeout < 0 ) {
638
629
// Don't wait for the next frame. Continue working ASAP, in a new event.
639
- port . postMessage ( messageKey , '*' ) ;
630
+ port . postMessage ( '*' ) ;
640
631
} else if ( ! isAnimationFrameScheduled ) {
641
632
// If rAF didn't already schedule one, we need to schedule a frame.
642
633
// TODO: If this rAF doesn't materialize because the browser throttles, we
@@ -647,19 +638,6 @@ if (typeof window !== 'undefined' && window._schedMock) {
647
638
}
648
639
} ;
649
640
650
- if ( typeof MessageChannel === 'function' ) {
651
- // Use a MessageChannel, if support exists
652
- var channel = new MessageChannel ( ) ;
653
- channel . port1 . onmessage = idleTick ;
654
- port = channel . port2 ;
655
- } else {
656
- // Otherwise post a message to the window. This isn't ideal because message
657
- // handlers will fire on every frame until the queue is empty, including
658
- // some browser extensions.
659
- window . addEventListener ( 'message' , idleTick , false ) ;
660
- port = window ;
661
- }
662
-
663
641
cancelHostCallback = function ( ) {
664
642
scheduledHostCallback = null ;
665
643
isMessageEventScheduled = false ;
0 commit comments