Class: Puppeteer::CdpWebWorker

Inherits:
WebWorker show all
Includes:
DebugPrint
Defined in:
lib/puppeteer/web_worker.rb,
sig/puppeteer/web_worker.rbs

Instance Attribute Summary

Attributes inherited from WebWorker

#timeout_settings

Instance Method Summary collapse

Methods included from DebugPrint

#debug_print, #debug_puts

Methods inherited from WebWorker

#url

Methods included from EventCallbackable

#add_event_listener, #emit_event, #observe_first, #off, #on_event, #remove_event_listener

Constructor Details

#initialize(client, url, target_id, target_type, console_api_called, exception_thrown, network_manager: nil) ⇒ Object

Parameters:

  • client (Puppeteer::CDPSession)
  • url (String)
  • target_id (String)
  • target_type (String)
  • console_api_called (Proc, nil)
  • exception_thrown (Proc, nil)
  • network_manager: (Object, nil) (defaults to: nil)


175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
# File 'lib/puppeteer/web_worker.rb', line 175

def initialize(client, url, target_id, target_type, console_api_called, exception_thrown, network_manager: nil)
  super(url)
  @client = client
  @target_id = target_id
  @target_type = target_type
  @world = Puppeteer::WorkerWorld.new(@client)
  @worker_loaded_promise = Async::Promise.new

  @client.once('Runtime.executionContextCreated') do |event|
    @world.set_context(Puppeteer::ExecutionContext.new(@client, event['context'], @world))
  end
  @client.once('Inspector.workerScriptLoaded') do
    @worker_loaded_promise.resolve(nil) unless @worker_loaded_promise.resolved?
  end
  @client.on_event('Runtime.consoleAPICalled') do |event|
    values = event['args'].map do |arg|
      remote_object = Puppeteer::RemoteObject.new(arg)
      Puppeteer::JSHandle.create(context: @world.execution_context, remote_object: remote_object)
    end
    console_api_called&.call(@world, event)
    emit_event(
      'console',
      Puppeteer::ConsoleMessage.new(
        event['type'],
        values.map { |value| console_value_from_js_handle(value) }.join(' '),
        values,
        console_message_locations(event['stackTrace']),
      ),
    )
  end
  if exception_thrown
    @client.on_event('Runtime.exceptionThrown') do |event|
      exception_thrown.call(event['exceptionDetails'])
    end
  end
  @client.once(CDPSessionEmittedEvents::Disconnected) do
    @world.dispose
  end

  if network_manager
    Async do
      network_manager.add_client(@client)
    rescue => err
      debug_puts(err)
    end
  end

  @client.async_send_message('Runtime.enable')
end

Instance Method Details

#clientPuppeteer::CDPSession



231
232
233
# File 'lib/puppeteer/web_worker.rb', line 231

def client
  @client
end

#closevoid

This method returns an undefined value.



289
290
291
292
293
294
295
296
297
298
299
300
# File 'lib/puppeteer/web_worker.rb', line 289

def close
  connection = @client.connection
  case @target_type
  when 'service_worker'
    connection&.send_message('Target.closeTarget', targetId: @target_id)
    connection&.send_message('Target.detachFromTarget', sessionId: @client.id)
  when 'shared_worker'
    connection&.send_message('Target.closeTarget', targetId: @target_id)
  else
    evaluate('() => self.close()')
  end
end

#evaluate(page_function, *args) ⇒ Object

Parameters:

  • page_function (String)
  • args (Object)

Returns:

  • (Object)


238
239
240
241
# File 'lib/puppeteer/web_worker.rb', line 238

def evaluate(page_function, *args)
  @worker_loaded_promise.wait
  super
end

#evaluate_handle(page_function, *args) ⇒ Puppeteer::JSHandle

Parameters:

  • page_function (String)
  • args (Object)

Returns:



246
247
248
249
# File 'lib/puppeteer/web_worker.rb', line 246

def evaluate_handle(page_function, *args)
  @worker_loaded_promise.wait
  super
end

#main_realmPuppeteer::WorkerWorld



226
227
228
# File 'lib/puppeteer/web_worker.rb', line 226

def main_realm
  @world
end

#wait_for_function(page_function, args: [], polling: nil, timeout: nil) ⇒ Puppeteer::JSHandle

Parameters:

  • page_function (String)
  • args: (Array[untyped]) (defaults to: [])
  • polling: (Integer, String, nil) (defaults to: nil)
  • timeout: (Integer, nil) (defaults to: nil)

Returns:



256
257
258
259
# File 'lib/puppeteer/web_worker.rb', line 256

def wait_for_function(page_function, args: [], polling: nil, timeout: nil)
  @worker_loaded_promise.wait
  super
end