@@ -44,6 +44,9 @@ def frames
4444 # @param [String] name
4545 # Frame's name if there's one.
4646 #
47+ # @param [String] execution_id
48+ # Frame's context execution id.
49+ #
4750 # @return [Frame, nil]
4851 # The matching frame.
4952 #
@@ -83,26 +86,26 @@ def frames_subscribe
8386 def subscribe_frame_attached
8487 on ( "Page.frameAttached" ) do |params |
8588 parent_frame_id , frame_id = params . values_at ( "parentFrameId" , "frameId" )
86- @frames [ frame_id ] = Frame . new ( frame_id , self , parent_frame_id )
89+ @frames . put_if_absent ( frame_id , Frame . new ( frame_id , self , parent_frame_id ) )
8790 end
8891 end
8992
9093 def subscribe_frame_detached
9194 on ( "Page.frameDetached" ) do |params |
9295 frame = @frames [ params [ "frameId" ] ]
9396
94- if frame . main?
97+ if frame & .main?
9598 frame . execution_id = nil
9699 else
97- @frames . delete ( frame . id )
100+ @frames . delete ( params [ "frameId" ] )
98101 end
99102 end
100103 end
101104
102105 def subscribe_frame_started_loading
103106 on ( "Page.frameStartedLoading" ) do |params |
104107 frame = @frames [ params [ "frameId" ] ]
105- frame . state = :started_loading
108+ frame . state = :started_loading if frame
106109 @event . reset
107110 end
108111 end
@@ -111,8 +114,11 @@ def subscribe_frame_navigated
111114 on ( "Page.frameNavigated" ) do |params |
112115 frame_id , name = params [ "frame" ] &.values_at ( "id" , "name" )
113116 frame = @frames [ frame_id ]
114- frame . state = :navigated
115- frame . name = name unless name . to_s . empty?
117+
118+ if frame
119+ frame . state = :navigated
120+ frame . name = name
121+ end
116122 end
117123 end
118124
@@ -159,14 +165,12 @@ def subscribe_execution_context_created
159165 root_frame = command ( "Page.getFrameTree" ) . dig ( "frameTree" , "frame" , "id" )
160166 if frame_id == root_frame
161167 @main_frame . id = frame_id
162- @frames [ frame_id ] = @main_frame
168+ @frames . put_if_absent ( frame_id , @main_frame )
163169 end
164170 end
165171
166- frame = @frames [ frame_id ] || Frame . new ( frame_id , self )
172+ frame = @frames . fetch_or_store ( frame_id , Frame . new ( frame_id , self ) )
167173 frame . execution_id = context_id
168-
169- @frames [ frame_id ] ||= frame
170174 end
171175 end
172176
@@ -180,13 +184,12 @@ def subscribe_execution_context_destroyed
180184
181185 def subscribe_execution_contexts_cleared
182186 on ( "Runtime.executionContextsCleared" ) do
183- @frames . delete_if { |_ , f | !f . main? }
184- @main_frame . execution_id = nil
187+ @frames . each_value { |f | f . execution_id = nil }
185188 end
186189 end
187190
188191 def idling?
189- @frames . all? { |_ , f | f . state == :stopped_loading }
192+ @frames . values . all? { |f | f . state == :stopped_loading }
190193 end
191194 end
192195 end
0 commit comments