9191import static com .microsoft .identity .common .java .AuthenticationConstants .OAuth2 .UTID ;
9292
9393import com .microsoft .identity .common .java .opentelemetry .OTelUtility ;
94+ import com .microsoft .identity .common .java .opentelemetry .SpanExtension ;
9495import com .microsoft .identity .common .java .opentelemetry .SpanName ;
9596
9697import io .opentelemetry .api .trace .Span ;
@@ -406,20 +407,27 @@ public boolean onCreateWindow(final WebView view, boolean isDialog,
406407 final Span span = OTelUtility .createSpanFromParent (
407408 SpanName .WebViewTargetBlankNavigation .name (), parentSpanContext );
408409 boolean windowHandled = false ;
409- try (final Scope scope = span . makeCurrent ( )) {
410+ try (final Scope scope = SpanExtension . makeCurrentSpan ( span )) {
410411 Logger .info (methodTag , "onCreateWindow: intercepting target=_blank navigation." );
411412 final WebView interceptorWebView = new WebView (view .getContext ());
412413 interceptorWebView .setWebViewClient (new WebViewClient () {
413414 @ Override
414415 public boolean shouldOverrideUrlLoading (WebView v , WebResourceRequest request ) {
415416 try {
416417 final String url = request .getUrl ().toString ();
418+ final String scheme = request .getUrl ().getScheme ();
419+ if (!"https" .equalsIgnoreCase (scheme ) && !"http" .equalsIgnoreCase (scheme )) {
420+ Logger .warn (methodTag , "onCreateWindow: ignoring non-http(s) scheme: " + scheme );
421+ return true ;
422+ }
417423 Logger .info (methodTag , "onCreateWindow: opening target=_blank URL in external browser." );
418- span .setAttribute ("target_blank_url" , url );
419424 final Intent browserIntent = new Intent (Intent .ACTION_VIEW , Uri .parse (url ));
420425 view .getContext ().startActivity (browserIntent );
421426 } catch (final Exception e ) {
422427 Logger .error (methodTag , "Error opening target=_blank URL in external browser." , e );
428+ } finally {
429+ // Destroy the interceptor WebView after it has served its purpose
430+ v .post (() -> v .destroy ());
423431 }
424432 return true ;
425433 }
@@ -436,7 +444,8 @@ public boolean shouldOverrideUrlLoading(WebView v, WebResourceRequest request) {
436444 windowHandled = true ;
437445 } catch (@ NonNull final Exception e ) {
438446 Logger .error (methodTag , "Error handling target=_blank navigation." , e );
439- span .setStatus (StatusCode .ERROR , e .getMessage () != null ? e .getMessage () : "Unknown error" );
447+ span .recordException (e );
448+ span .setStatus (StatusCode .ERROR );
440449 } finally {
441450 span .end ();
442451 }
0 commit comments