@@ -11,11 +11,13 @@ def frames
1111 @frames . values
1212 end
1313
14- def frame_by ( id : nil , name : nil )
14+ def frame_by ( id : nil , name : nil , execution_id : nil )
1515 if id
1616 @frames [ id ]
1717 elsif name
1818 frames . find { |f | f . name == name }
19+ elsif execution_id
20+ frames . find { |f | f . execution_id == execution_id }
1921 else
2022 raise ArgumentError
2123 end
@@ -69,37 +71,32 @@ def frames_subscribe
6971 end
7072
7173 on ( "Runtime.executionContextCreated" ) do |params |
72- setting_up_main_frame = false
7374 context_id = params . dig ( "context" , "id" )
7475 frame_id = params . dig ( "context" , "auxData" , "frameId" )
7576
7677 unless @main_frame . id
7778 root_frame = command ( "Page.getFrameTree" ) . dig ( "frameTree" , "frame" , "id" )
7879 if frame_id == root_frame
79- setting_up_main_frame = true
8080 @main_frame . id = frame_id
8181 @frames [ frame_id ] = @main_frame
8282 end
8383 end
8484
8585 frame = @frames [ frame_id ] || Frame . new ( frame_id , self )
86- frame . set_execution_id ( context_id )
87-
88- # Set event because `execution_id` might raise NoExecutionContextError
89- @event . set if setting_up_main_frame
86+ frame . execution_id = context_id
9087
9188 @frames [ frame_id ] ||= frame
9289 end
9390
9491 on ( "Runtime.executionContextDestroyed" ) do |params |
9592 execution_id = params [ "executionContextId" ]
96- frame = frames . find { | f | f . execution_id? ( execution_id ) }
97- frame . reset_execution_id
93+ frame = frame_by ( execution_id : execution_id )
94+ frame &. execution_id = nil
9895 end
9996
10097 on ( "Runtime.executionContextsCleared" ) do
10198 @frames . delete_if { |_ , f | !f . main? }
102- @main_frame . reset_execution_id
99+ @main_frame . execution_id = nil
103100 end
104101 end
105102
0 commit comments