@@ -24,24 +24,26 @@ module WebDriver
2424 class Network
2525 extend Forwardable
2626
27- attr_reader :callbacks , :network
27+ Registration = Struct . new ( :subscription , :interception , :event )
28+
29+ attr_reader :registrations , :network
2830 alias bidi network
2931
3032 def_delegators :network , :continue_with_auth , :continue_with_request , :continue_with_response
3133
3234 def initialize ( bridge )
3335 @network = BiDi ::Network . new ( bridge . bidi )
34- @callbacks = { }
36+ @registrations = [ ]
3537 end
3638
37- def remove_handler ( id )
38- intercept = callbacks [ id ]
39- network . remove_intercept ( intercept [ 'intercept' ] )
40- callbacks . delete ( id )
39+ def remove_handler ( registration )
40+ network . remove_intercept ( registration . interception )
41+ network . unsubscribe ( registration . event , registration . subscription )
42+ registrations . delete ( registration )
4143 end
4244
4345 def clear_handlers
44- callbacks . each_key { |id | remove_handler ( id ) }
46+ registrations . dup . each { |registration | remove_handler ( registration ) }
4547 end
4648
4749 def add_authentication_handler ( username = nil , password = nil , *filter , pattern_type : nil , &block )
@@ -87,15 +89,17 @@ def add_response_handler(*filter, pattern_type: nil, &block)
8789 private
8890
8991 def add_handler ( event_type , phase , intercept_type , filter , pattern_type : nil )
90- intercept = network . add_intercept ( phases : [ phase ] , url_patterns : [ filter ] . flatten , pattern_type : pattern_type )
91- callback_id = network . on ( event_type ) do |event |
92+ interception = network . add_intercept ( phases : [ phase ] , url_patterns : [ filter ] . flatten ,
93+ pattern_type : pattern_type )
94+ subscription = network . on ( event_type ) do |event |
9295 request = event [ 'request' ]
9396 intercepted_item = intercept_type . new ( network , request )
9497 yield ( intercepted_item )
9598 end
9699
97- callbacks [ callback_id ] = intercept
98- callback_id
100+ registration = Registration . new ( event : event_type , subscription : subscription , interception : interception )
101+ @registrations << registration
102+ registration
99103 end
100104 end # Network
101105 end # WebDriver
0 commit comments