@@ -284,6 +284,7 @@ class WebViewProvider {
284
284
private CompletableFuture <ICoreWebView2 > webViewFuture = new CompletableFuture <>();
285
285
private CompletableFuture <ICoreWebView2_2 > webView_2Future = new CompletableFuture <>();
286
286
private CompletableFuture <ICoreWebView2_11 > webView_11Future = new CompletableFuture <>();
287
+ private CompletableFuture <ICoreWebView2_12 > webView_12Future = new CompletableFuture <>();
287
288
288
289
private CompletableFuture <Void > lastWebViewTask = webViewFuture .thenRun (() -> {});
289
290
@@ -293,6 +294,7 @@ ICoreWebView2 initializeWebView(ICoreWebView2Controller controller) {
293
294
final ICoreWebView2 webView = new ICoreWebView2 (ppv [0 ]);
294
295
initializeWebView_2 (webView );
295
296
initializeWebView_11 (webView );
297
+ initializeWebView_12 (webView );
296
298
webViewFuture .complete (webView );
297
299
return webView ;
298
300
}
@@ -317,6 +319,16 @@ private void initializeWebView_11(ICoreWebView2 webView) {
317
319
}
318
320
}
319
321
322
+ private void initializeWebView_12 (ICoreWebView2 webView ) {
323
+ long [] ppv = new long [1 ];
324
+ int hr = webView .QueryInterface (COM .IID_ICoreWebView2_12 , ppv );
325
+ if (hr == COM .S_OK ) {
326
+ webView_12Future .complete (new ICoreWebView2_12 (ppv [0 ]));
327
+ } else {
328
+ webView_12Future .cancel (true );
329
+ }
330
+ }
331
+
320
332
ICoreWebView2 getWebView (boolean waitForPendingWebviewTasksToFinish ) {
321
333
if (waitForPendingWebviewTasksToFinish ) {
322
334
waitForFutureToFinish (lastWebViewTask );
@@ -348,6 +360,18 @@ boolean isWebView_11Available() {
348
360
return !webView_11Future .isCancelled ();
349
361
}
350
362
363
+ ICoreWebView2_12 getWebView_12 (boolean waitForPendingWebviewTasksToFinish ) {
364
+ if (waitForPendingWebviewTasksToFinish ) {
365
+ waitForFutureToFinish (lastWebViewTask );
366
+ }
367
+ return webView_12Future .join ();
368
+ }
369
+
370
+ boolean isWebView_12Available () {
371
+ waitForFutureToFinish (webView_12Future );
372
+ return !webView_12Future .isCancelled ();
373
+ }
374
+
351
375
/*
352
376
* Schedule a given runnable in a queue to execute when the webView is free and
353
377
* has finished all the pending tasks queued before it.
@@ -561,6 +585,11 @@ void setupBrowser(int hr, long pv) {
561
585
webViewProvider .getWebView_11 (false ).add_ContextMenuRequested (handler , token );
562
586
handler .Release ();
563
587
}
588
+ if (webViewProvider .isWebView_12Available ()) {
589
+ handler = newCallback (this ::handleStatusBarTextChanged );
590
+ webViewProvider .getWebView_12 (false ).add_StatusBarTextChanged (handler , token );
591
+ handler .Release ();
592
+ }
564
593
565
594
IUnknown hostDisp = newHostObject (this ::handleCallJava );
566
595
long [] hostObj = { COM .VT_DISPATCH , hostDisp .getAddress (), 0 }; // VARIANT
@@ -587,6 +616,7 @@ void browserDispose(Event event) {
587
616
if (settings != null ) settings .Release ();
588
617
if (webViewProvider .isWebView_2Available ()) webViewProvider .getWebView_2 (false ).Release ();
589
618
if (webViewProvider .isWebView_11Available ()) webViewProvider .getWebView_11 (false ).Release ();
619
+ if (webViewProvider .isWebView_12Available ()) webViewProvider .getWebView_12 (false ).Release ();
590
620
if (controller != null ) {
591
621
// Bug in WebView2. Closing the controller from an event handler results
592
622
// in a crash. The fix is to delay the closure with asyncExec.
@@ -866,6 +896,20 @@ int handleContextMenuRequested(long pView, long pArgs) {
866
896
return COM .S_OK ;
867
897
}
868
898
899
+ int handleStatusBarTextChanged (long pView , long pArgs ) {
900
+ long ppsz [] = new long [1 ];
901
+ webViewProvider .getWebView_12 (true ).get_StatusBarText (ppsz );
902
+ String text = wstrToString (ppsz [0 ], true );
903
+ StatusTextEvent newEvent5 = new StatusTextEvent (browser );
904
+ newEvent5 .display = browser .getDisplay ();
905
+ newEvent5 .widget = browser ;
906
+ newEvent5 .text = text ;
907
+ for (StatusTextListener statusTextListener : statusTextListeners ) {
908
+ statusTextListener .changed (newEvent5 );
909
+ }
910
+ return COM .S_OK ;
911
+ }
912
+
869
913
int handleNavigationCompleted (long pView , long pArgs ) {
870
914
return handleNavigationCompleted (pView , pArgs , true );
871
915
}
0 commit comments