Class: Puppeteer::FirefoxTargetManager
- Inherits:
-
Object
- Object
- Puppeteer::FirefoxTargetManager
- Includes:
- EventCallbackable
- Defined in:
- lib/puppeteer/firefox_target_manager.rb
Overview
FirefoxTargetManager implements target management using ‘Target.setDiscoverTargets` without using auto-attach. It, therefore, creates targets that lazily establish their CDP sessions.
Although the approach is potentially flaky, there is no other way for Firefox because Firefox’s CDP implementation does not support auto-attach.
Firefox does not support targetInfoChanged and detachedFromTarget events:
Defined Under Namespace
Classes: SessionNotCreatedError
Instance Method Summary collapse
- #add_target_interceptor(client, interceptor) ⇒ Object
- #available_targets ⇒ Object
- #dispose ⇒ Object
- #init ⇒ Object
-
#initialize(connection:, target_factory:, target_filter_callback:) ⇒ FirefoxTargetManager
constructor
A new instance of FirefoxTargetManager.
- #remove_target_interceptor(client, interceptor) ⇒ Object
Methods included from EventCallbackable
#add_event_listener, #emit_event, #observe_first, #on_event, #remove_event_listener
Constructor Details
#initialize(connection:, target_factory:, target_filter_callback:) ⇒ FirefoxTargetManager
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/puppeteer/firefox_target_manager.rb', line 14 def initialize(connection:, target_factory:, target_filter_callback:) @discovered_targets_by_target_id = {} @available_targets_by_target_id = {} @available_targets_by_session_id = {} @ignored_targets = Set.new @target_ids_for_init = Set.new @connection = connection @target_filter_callback = target_filter_callback @target_factory = target_factory @target_interceptors = {} @initialize_promise = resolvable_future @connection_event_listeners = [] @connection_event_listeners << @connection.add_event_listener( 'Target.targetCreated', &method(:handle_target_created) ) @connection_event_listeners << @connection.add_event_listener( 'Target.targetDestroyed', &method(:handle_target_destroyed) ) @connection_event_listeners << @connection.add_event_listener( 'sessiondetached', &method(:handle_session_detached) ) (@connection) end |
Instance Method Details
#add_target_interceptor(client, interceptor) ⇒ Object
44 45 46 47 48 |
# File 'lib/puppeteer/firefox_target_manager.rb', line 44 def add_target_interceptor(client, interceptor) interceptors = @target_interceptors[client] || [] interceptors << interceptor @target_interceptors[client] = interceptors end |
#available_targets ⇒ Object
74 75 76 |
# File 'lib/puppeteer/firefox_target_manager.rb', line 74 def available_targets @available_targets_by_target_id end |
#dispose ⇒ Object
78 79 80 81 |
# File 'lib/puppeteer/firefox_target_manager.rb', line 78 def dispose @connection.remove_event_listener(*@connection_event_listeners) remove_session_listeners(@connection) end |
#init ⇒ Object
83 84 85 86 87 |
# File 'lib/puppeteer/firefox_target_manager.rb', line 83 def init @connection.('Target.setDiscoverTargets', discover: true) @target_ids_for_init.merge(@discovered_targets_by_target_id.keys) @initialize_promise.value! end |
#remove_target_interceptor(client, interceptor) ⇒ Object
50 51 52 |
# File 'lib/puppeteer/firefox_target_manager.rb', line 50 def remove_target_interceptor(client, interceptor) @target_interceptors[client]&.delete_if { |current| current == interceptor } end |