@@ -11,11 +11,13 @@ def frames
11
11
@frames . values
12
12
end
13
13
14
- def frame_by ( id : nil , name : nil )
14
+ def frame_by ( id : nil , name : nil , execution_id : nil )
15
15
if id
16
16
@frames [ id ]
17
17
elsif name
18
18
frames . find { |f | f . name == name }
19
+ elsif execution_id
20
+ frames . find { |f | f . execution_id == execution_id }
19
21
else
20
22
raise ArgumentError
21
23
end
@@ -69,37 +71,32 @@ def frames_subscribe
69
71
end
70
72
71
73
on ( "Runtime.executionContextCreated" ) do |params |
72
- setting_up_main_frame = false
73
74
context_id = params . dig ( "context" , "id" )
74
75
frame_id = params . dig ( "context" , "auxData" , "frameId" )
75
76
76
77
unless @main_frame . id
77
78
root_frame = command ( "Page.getFrameTree" ) . dig ( "frameTree" , "frame" , "id" )
78
79
if frame_id == root_frame
79
- setting_up_main_frame = true
80
80
@main_frame . id = frame_id
81
81
@frames [ frame_id ] = @main_frame
82
82
end
83
83
end
84
84
85
85
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
90
87
91
88
@frames [ frame_id ] ||= frame
92
89
end
93
90
94
91
on ( "Runtime.executionContextDestroyed" ) do |params |
95
92
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
98
95
end
99
96
100
97
on ( "Runtime.executionContextsCleared" ) do
101
98
@frames . delete_if { |_ , f | !f . main? }
102
- @main_frame . reset_execution_id
99
+ @main_frame . execution_id = nil
103
100
end
104
101
end
105
102
0 commit comments