@@ -2,14 +2,19 @@ import ContentFeature from '../content-feature.js';
22import { isBeingFramed } from '../utils.js' ;
33import { DuckPlayerNativeMessages } from './duckplayer-native/messages.js' ;
44import { mockTransport } from './duckplayer-native/mock-transport.js' ;
5- import { setupDuckPlayerForEverything , setupDuckPlayerForNoCookie , setupDuckPlayerForSerp , setupDuckPlayerForYouTube } from './duckplayer-native/duckplayer-native.js' ;
5+ import { setupDuckPlayerForNoCookie , setupDuckPlayerForSerp , setupDuckPlayerForYouTube } from './duckplayer-native/duckplayer-native.js' ;
66import { Environment } from './duckplayer-native/environment.js' ;
77
8- /** @import {DuckPlayerNative} from './duckplayer-native/duckplayer-native.js' */
8+ /**
9+ * @import {DuckPlayerNative} from './duckplayer-native/duckplayer-native.js'
10+ * @import {DuckPlayerNativeSettings} from '@duckduckgo/privacy-configuration/schema/features/duckplayer-native.js'
11+ * @import {UrlChangeSettings} from './duckplayer-native/messages.js'
12+ */
913
1014/**
1115 * @typedef InitialSettings - The initial payload used to communicate render-blocking information
1216 * @property {string } locale - UI locale
17+ * @property {UrlChangeSettings['pageType'] } pageType - The type of the current page
1318 */
1419
1520export class DuckPlayerNativeFeature extends ContentFeature {
@@ -25,9 +30,6 @@ export class DuckPlayerNativeFeature extends ContentFeature {
2530 */
2631 if ( isBeingFramed ( ) ) return ;
2732
28- /**
29- * @type {import("@duckduckgo/privacy-configuration/schema/features/duckplayer-native.js").DuckPlayerNativeSettings['selectors'] }
30- */
3133 const selectors = this . getFeatureSetting ( 'selectors' ) ;
3234 console . log ( 'DUCK PLAYER NATIVE SELECTORS' , selectors ) ;
3335
@@ -46,56 +48,68 @@ export class DuckPlayerNativeFeature extends ContentFeature {
4648 this . messaging . transport = mockTransport ( ) ;
4749 }
4850
49- const comms = new DuckPlayerNativeMessages ( this . messaging ) ;
50- const settings = { selectors } ;
51-
52- comms . subscribeToURLChange ( ( { pageType } ) => {
51+ const messages = new DuckPlayerNativeMessages ( this . messaging ) ;
52+ messages . subscribeToURLChange ( ( { pageType } ) => {
5353 console . log ( 'GOT PAGE TYPE' , pageType ) ;
54- let next ;
55-
56- switch ( pageType ) {
57- case 'NOCOOKIE' :
58- next = setupDuckPlayerForNoCookie ( settings , env , comms ) ;
59- break ;
60- case 'YOUTUBE' :
61- next = setupDuckPlayerForYouTube ( settings , env , comms ) ;
62- break ;
63- case 'SERP' :
64- next = setupDuckPlayerForSerp ( settings , env , comms ) ;
65- break ;
66- case 'UNKNOWN' :
67- default :
68- console . warn ( 'No known pageType' ) ;
69- }
70-
71- // const next = setupDuckPlayerForEverything(settings, env, comms);
72-
73- if ( next ) {
74- console . log ( 'LOADING NEXT INSTANCE' , this . current , next ) ;
75- if ( this . current ) {
76- this . current . destroy ( ) ;
77- }
78- next . init ( ) ;
79- this . current = next ;
80- }
54+ this . urlChangeHandler ( pageType , selectors , env , messages ) ;
8155 } ) ;
8256
8357 /** @type {InitialSettings } */
8458 let initialSetup ;
8559
8660 // TODO: This seems to get initted twice. Check with Daniel
8761 try {
88- initialSetup = await comms . initialSetup ( ) ;
62+ initialSetup = await messages . initialSetup ( ) ;
8963 } catch ( e ) {
9064 console . error ( e ) ;
9165 return ;
9266 }
9367
9468 console . log ( 'INITIAL SETUP' , initialSetup ) ;
9569
96- comms . notifyFeatureIsReady ( ) ;
97- // this.current = setupDuckPlayerForEverything(settings, env, comms);
98- // this.current.init();
70+ if ( initialSetup . pageType ) {
71+ console . log ( 'GOT INITIAL PAGE TYPE' , initialSetup . pageType ) ;
72+ this . urlChangeHandler ( initialSetup . pageType , selectors , env , messages ) ;
73+ }
74+
75+ messages . notifyFeatureIsReady ( ) ;
76+ }
77+
78+ /**
79+ *
80+ * @param {UrlChangeSettings['pageType'] } pageType
81+ * @param {DuckPlayerNativeSettings['selectors'] } selectors
82+ * @param {Environment } env
83+ * @param {DuckPlayerNativeMessages } messages
84+ */
85+ urlChangeHandler ( pageType , selectors , env , messages ) {
86+ let next ;
87+
88+ switch ( pageType ) {
89+ case 'NOCOOKIE' :
90+ next = setupDuckPlayerForNoCookie ( selectors , env , messages ) ;
91+ break ;
92+ case 'YOUTUBE' :
93+ next = setupDuckPlayerForYouTube ( selectors , env , messages ) ;
94+ break ;
95+ case 'SERP' :
96+ next = setupDuckPlayerForSerp ( selectors , env , messages ) ;
97+ break ;
98+ case 'UNKNOWN' :
99+ default :
100+ console . warn ( 'No known pageType' ) ;
101+ }
102+
103+ if ( this . current ) {
104+ console . log ( 'DESTROYING CURRENT INSTANCE' , this . current ) ;
105+ this . current . destroy ( ) ;
106+ }
107+
108+ if ( next ) {
109+ console . log ( 'LOADING NEXT INSTANCE' , next ) ;
110+ next . init ( ) ;
111+ this . current = next ;
112+ }
99113 }
100114}
101115
0 commit comments