@@ -396,6 +396,65 @@ internal static BidiFrame From(BidiPage parentPage, BidiFrame parentFrame, Brows
396396 /// <inheritdoc />
397397 protected internal override DeviceRequestPromptManager GetDeviceRequestPromptManager ( ) => throw new System . NotImplementedException ( ) ;
398398
399+ private static ConsoleType ConvertConsoleMessageLevel ( string method )
400+ {
401+ return method switch
402+ {
403+ "group" => ConsoleType . StartGroup ,
404+ "groupCollapsed" => ConsoleType . StartGroupCollapsed ,
405+ "groupEnd" => ConsoleType . EndGroup ,
406+ "log" => ConsoleType . Log ,
407+ "debug" => ConsoleType . Debug ,
408+ "info" => ConsoleType . Info ,
409+ "error" => ConsoleType . Error ,
410+ "warn" => ConsoleType . Warning ,
411+ "dir" => ConsoleType . Dir ,
412+ "dirxml" => ConsoleType . Dirxml ,
413+ "table" => ConsoleType . Table ,
414+ "trace" => ConsoleType . Trace ,
415+ "clear" => ConsoleType . Clear ,
416+ "assert" => ConsoleType . Assert ,
417+ "profile" => ConsoleType . Profile ,
418+ "profileEnd" => ConsoleType . ProfileEnd ,
419+ "count" => ConsoleType . Count ,
420+ "timeEnd" => ConsoleType . TimeEnd ,
421+ "verbose" => ConsoleType . Verbose ,
422+ "timeStamp" => ConsoleType . Timestamp ,
423+ _ => ConsoleType . Log ,
424+ } ;
425+ }
426+
427+ private static ConsoleMessageLocation GetStackTraceLocation ( WebDriverBiDi . Script . StackTrace stackTrace )
428+ {
429+ if ( stackTrace ? . CallFrames ? . Count > 0 )
430+ {
431+ var callFrame = stackTrace . CallFrames [ 0 ] ;
432+ return new ConsoleMessageLocation
433+ {
434+ URL = callFrame . Url ,
435+ LineNumber = ( int ) callFrame . LineNumber ,
436+ ColumnNumber = ( int ) callFrame . ColumnNumber ,
437+ } ;
438+ }
439+
440+ return null ;
441+ }
442+
443+ private static IList < ConsoleMessageLocation > GetStackTrace ( WebDriverBiDi . Script . StackTrace stackTrace )
444+ {
445+ if ( stackTrace ? . CallFrames ? . Count > 0 )
446+ {
447+ return stackTrace . CallFrames . Select ( callFrame => new ConsoleMessageLocation
448+ {
449+ URL = callFrame . Url ,
450+ LineNumber = ( int ) callFrame . LineNumber ,
451+ ColumnNumber = ( int ) callFrame . ColumnNumber ,
452+ } ) . ToList ( ) ;
453+ }
454+
455+ return [ ] ;
456+ }
457+
399458 private PuppeteerException RewriteNavigationError ( Exception ex , string url , int timeoutSettingsNavigationTimeout )
400459 {
401460 return ex is TimeoutException
@@ -582,7 +641,41 @@ private void Initialize()
582641
583642 BrowsingContext . Log += ( sender , args ) =>
584643 {
585- if ( args . Type == "javascript" )
644+ if ( Id != args . Source . Context )
645+ {
646+ return ;
647+ }
648+
649+ if ( args . Type == "console" )
650+ {
651+ var consoleArgs = args . Arguments ;
652+ var handleArgs = consoleArgs ? . Select ( arg => ( ( BidiFrameRealm ) MainRealm ) . CreateHandle ( arg ) ) . ToArray ( ) ?? [ ] ;
653+
654+ var text = string . Join (
655+ " " ,
656+ handleArgs . Select ( arg =>
657+ {
658+ if ( arg is BidiJSHandle { IsPrimitiveValue : true } jsHandle )
659+ {
660+ return BidiDeserializer . Deserialize ( jsHandle . RemoteValue ) ;
661+ }
662+
663+ return arg . ToString ( ) ;
664+ } ) ) . Trim ( ) ;
665+
666+ var location = GetStackTraceLocation ( args . StackTrace ) ;
667+ var stackTrace = GetStackTrace ( args . StackTrace ) ;
668+
669+ var consoleMessage = new ConsoleMessage (
670+ ConvertConsoleMessageLevel ( args . Method ) ,
671+ text ,
672+ handleArgs ,
673+ location ,
674+ stackTrace ) ;
675+
676+ BidiPage . OnConsole ( new ConsoleEventArgs ( consoleMessage ) ) ;
677+ }
678+ else if ( args . Type == "javascript" )
586679 {
587680 var text = args . Text ?? string . Empty ;
588681 var messageLines = new List < string > { text } ;
0 commit comments