@@ -50,6 +50,7 @@ export class Tab extends StatefulClass {
5050
5151 sendToChobitsu : ( ( message : string ) => void ) | null = null ;
5252 onChobitsuMessage : ( ( message : string ) => void ) | null = null ;
53+ waitForChobitsuInit : Promise < void > ;
5354
5455 constructor ( public url : URL = new URL ( "puter://newtab" ) ) {
5556 super ( createState ( Object . create ( Tab . prototype ) ) ) ;
@@ -73,11 +74,16 @@ export class Tab extends StatefulClass {
7374 this . width = 0 ;
7475 this . pos = 0 ;
7576
77+ let resolver : ( ) => void ;
78+ this . waitForChobitsuInit = new Promise ( ( resolve ) => {
79+ resolver = resolve ;
80+ } ) ;
81+
7682 addHistoryListeners ( frame , this ) ;
7783 let injected = false ;
7884 frame . addEventListener ( "contextInit" , ( ctx ) => {
7985 injectContextMenu ( ctx . client , this ) ;
80- injectChobitsu ( ctx . client , this ) ;
86+ injectChobitsu ( ctx . client , this , resolver ) ;
8187
8288 // make sure it's top level, ctxInit calls for all frames too
8389 if ( ctx . window == frame . frame . contentWindow ) {
@@ -171,7 +177,11 @@ export class Tab extends StatefulClass {
171177 }
172178}
173179
174- function injectChobitsu ( client : ScramjetClient , tab : Tab ) {
180+ function injectChobitsu (
181+ client : ScramjetClient ,
182+ tab : Tab ,
183+ resolver : ( ) => void
184+ ) {
175185 console . log ( "injecting chobitsu" ) ;
176186 // the fake origin is defined in sw.js
177187 const devtoolsUrl = "https://fake-devtools.invalid" ;
@@ -188,6 +198,11 @@ function injectChobitsu(client: ScramjetClient, tab: Tab) {
188198 client . global . $onChobitsuMessage = ( message : string ) => {
189199 if ( tab . onChobitsuMessage ) tab . onChobitsuMessage ( message ) ;
190200 } ;
201+
202+ // @ts -expect-error
203+ client . global . $onChobitsuInit = ( ) => {
204+ resolver ( ) ;
205+ } ;
191206 tab . sendToChobitsu = ( message : string ) => {
192207 console . warn ( message ) ;
193208 // @ts -expect-error
0 commit comments