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
Returns a new instance of 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 |