Class: Puppeteer::LifecycleWatcher
- Inherits:
-
Object
- Object
- Puppeteer::LifecycleWatcher
- Includes:
- IfPresent
- Defined in:
- lib/puppeteer/lifecycle_watcher.rb
Overview
Defined Under Namespace
Classes: ExpectedLifecycle, FrameDetachedError, TerminatedError
Instance Attribute Summary collapse
-
#new_document_navigation_promise ⇒ Object
readonly
Returns the value of attribute new_document_navigation_promise.
-
#same_document_navigation_promise ⇒ Object
readonly
Returns the value of attribute same_document_navigation_promise.
Instance Method Summary collapse
- #dispose ⇒ Object
- #handle_frame_detached(frame) ⇒ Object
- #handle_request(request) ⇒ Object
-
#initialize(frame_manager, frame, wait_until, timeout) ⇒ LifecycleWatcher
constructor
-
@param !Puppeteer!Puppeteer.FrameManager frameManager * @param !Puppeteer!Puppeteer.Frame frame * @param string|!Array<string> waitUntil * @param number timeout.
-
- #navigation_response ⇒ Puppeteer::Response
- #timeout_or_termination_promise ⇒ Object
Methods included from IfPresent
Constructor Details
#initialize(frame_manager, frame, wait_until, timeout) ⇒ LifecycleWatcher
-
@param Puppeteer::LifecycleWatcher.!Puppeteer!Puppeteer.FrameManager frameManager
-
@param Puppeteer::LifecycleWatcher.!Puppeteer!Puppeteer.Frame frame
-
@param string|!Array<string> waitUntil
-
@param number timeout
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/puppeteer/lifecycle_watcher.rb', line 64 def initialize(frame_manager, frame, wait_until, timeout) @expected_lifecycle = ExpectedLifecycle.new(wait_until) @frame_manager = frame_manager @frame = frame @initial_loader_id = frame.loader_id @timeout = timeout @listener_ids = {} @listener_ids['client'] = @frame_manager.client.add_event_listener('Events.CDPSession.Disconnected') do terminate(TerminatedError.new('Navigation failed because browser has disconnected!')) end @listener_ids['frame_manager'] = [ @frame_manager.add_event_listener('Events.FrameManager.LifecycleEvent') do |_| check_lifecycle_complete end, @frame_manager.add_event_listener('Events.FrameManager.FrameNavigatedWithinDocument', &method(:navigated_within_document)), @frame_manager.add_event_listener('Events.FrameManager.FrameDetached', &method(:handle_frame_detached)), ] @listener_ids['network_manager'] = @frame_manager.network_manager.add_event_listener('Events.NetworkManager.Request', &method(:handle_request)) @same_document_navigation_promise = resolvable_future @lifecycle_promise = resolvable_future @new_document_navigation_promise = resolvable_future @termination_promise = resolvable_future check_lifecycle_complete end |
Instance Attribute Details
#new_document_navigation_promise ⇒ Object (readonly)
Returns the value of attribute new_document_navigation_promise.
118 119 120 |
# File 'lib/puppeteer/lifecycle_watcher.rb', line 118 def @new_document_navigation_promise end |
#same_document_navigation_promise ⇒ Object (readonly)
Returns the value of attribute same_document_navigation_promise.
118 119 120 |
# File 'lib/puppeteer/lifecycle_watcher.rb', line 118 def @same_document_navigation_promise end |
Instance Method Details
#dispose ⇒ Object
160 161 162 163 164 165 166 167 168 169 170 |
# File 'lib/puppeteer/lifecycle_watcher.rb', line 160 def dispose if_present(@listener_ids['client']) do |id| @frame_manager.client.remove_event_listener(id) end if_present(@listener_ids['frame_manager']) do |ids| @frame_manager.remove_event_listener(*ids) end if_present(@listener_ids['network_manager']) do |id| @frame_manager.network_manager.remove_event_listener(id) end end |
#handle_frame_detached(frame) ⇒ Object
98 99 100 101 102 103 104 |
# File 'lib/puppeteer/lifecycle_watcher.rb', line 98 def handle_frame_detached(frame) if @frame == frame @termination_promise.reject(FrameDetachedError.new) return end check_lifecycle_complete end |
#handle_request(request) ⇒ Object
92 93 94 95 |
# File 'lib/puppeteer/lifecycle_watcher.rb', line 92 def handle_request(request) return if request.frame != @frame || !request. @navigation_request = request end |
#navigation_response ⇒ Puppeteer::Response
107 108 109 110 111 |
# File 'lib/puppeteer/lifecycle_watcher.rb', line 107 def if_present(@navigation_request) do |request| request.response end end |
#timeout_or_termination_promise ⇒ Object
124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/puppeteer/lifecycle_watcher.rb', line 124 def timeout_or_termination_promise if @timeout > 0 future do Timeout.timeout(@timeout / 1000.0) do @termination_promise.value! end rescue Timeout::Error raise Puppeteer::FrameManager::NavigationError.new("Navigation timeout of #{@timeout}ms exceeded") end else @termination_promise end end |