11import ContentFeature from '../content-feature.js' ;
22import { isBeingFramed } from '../utils.js' ;
33import { DuckPlayerNativeMessages } from './duckplayer-native/messages.js' ;
4- import { setupDuckPlayerForNoCookie , setupDuckPlayerForSerp , setupDuckPlayerForYouTube } from './duckplayer-native/duckplayer-native .js' ;
4+ import { setupDuckPlayerForNoCookie , setupDuckPlayerForSerp , setupDuckPlayerForYouTube } from './duckplayer-native/sub-feature .js' ;
55import { Environment } from './duckplayer/environment.js' ;
6+ import { Logger } from './duckplayer/util.js' ;
67
78/**
8- * @import {DuckPlayerNativePage } from './duckplayer-native/duckplayer-native .js'
9+ * @import {DuckPlayerNativeSubFeature } from './duckplayer-native/sub-feature .js'
910 * @import {DuckPlayerNativeSettings} from '@duckduckgo/privacy-configuration/schema/features/duckplayer-native.js'
1011 * @import {UrlChangeSettings} from './duckplayer-native/messages.js'
1112 */
@@ -72,9 +73,14 @@ export class DuckPlayerNativeFeature extends ContentFeature {
7273 * @param {DuckPlayerNativeMessages } messages
7374 */
7475 urlChanged ( pageType , selectors , playbackPaused , env , messages ) {
75- /** @type {DuckPlayerNativePage | null } */
76+ /** @type {DuckPlayerNativeSubFeature | null } */
7677 let nextPage = null ;
7778
79+ const logger = new Logger ( {
80+ id : 'DUCK_PLAYER_NATIVE' ,
81+ shouldLog : ( ) => env . isTestMode ( ) ,
82+ } ) ;
83+
7884 switch ( pageType ) {
7985 case 'NOCOOKIE' :
8086 nextPage = setupDuckPlayerForNoCookie ( selectors , env , messages ) ;
@@ -83,7 +89,7 @@ export class DuckPlayerNativeFeature extends ContentFeature {
8389 nextPage = setupDuckPlayerForYouTube ( selectors , playbackPaused , env , messages ) ;
8490 break ;
8591 case 'SERP' :
86- nextPage = setupDuckPlayerForSerp ( selectors , env , messages ) ;
92+ nextPage = setupDuckPlayerForSerp ( ) ;
8793 break ;
8894 case 'UNKNOWN' :
8995 default :
@@ -95,8 +101,21 @@ export class DuckPlayerNativeFeature extends ContentFeature {
95101 }
96102
97103 if ( nextPage ) {
98- nextPage . init ( ) ;
99- this . currentPage = nextPage ;
104+ logger . log ( 'Running init handlers' ) ;
105+ nextPage . onInit ( ) ;
106+
107+ if ( document . readyState === 'loading' ) {
108+ const loadHandler = ( ) => {
109+ logger . log ( 'Running deferred load handlers' ) ;
110+ nextPage . onLoad ( ) ;
111+ messages . notifyScriptIsReady ( ) ;
112+ } ;
113+ document . addEventListener ( 'DOMContentLoaded' , loadHandler , { once : true } ) ;
114+ } else {
115+ logger . log ( 'Running load handlers immediately' ) ;
116+ nextPage . onLoad ( ) ;
117+ messages . notifyScriptIsReady ( ) ;
118+ }
100119 }
101120 }
102121}
0 commit comments