Class: Playwright::Connection

Inherits:
Object
  • Object
show all
Defined in:
lib/playwright/connection.rb

Overview

Instance Method Summary collapse

Constructor Details

#initialize(playwright_cli_executable_path:) ⇒ Connection

Returns a new instance of Connection.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/playwright/connection.rb', line 8

def initialize(playwright_cli_executable_path:)
  @transport = Transport.new(
    playwright_cli_executable_path: playwright_cli_executable_path
  )
  @transport.on_message_received do |message|
    dispatch(message)
  end
  @transport.on_driver_crashed do
    @callbacks.each_value do |callback|
      callback.reject(::Playwright::DriverCrashedError.new)
    end
    raise ::Playwright::DriverCrashedError.new
  end

  @objects = {} # Hash[ guid => ChannelOwner ]
  @waiting_for_object = {} # Hash[ guid => Promise<ChannelOwner> ]
  @callbacks = {} # Hash [ guid => Promise<ChannelOwner> ]
  @root_object = RootChannelOwner.new(self)
end

Instance Method Details

#async_runObject



28
29
30
# File 'lib/playwright/connection.rb', line 28

def async_run
  @transport.async_run
end

#async_send_message_to_server(guid, method, params) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/playwright/connection.rb', line 46

def async_send_message_to_server(guid, method, params)
  callback = Concurrent::Promises.resolvable_future

  with_generated_id do |id|
    # register callback promise object first.
    # @see https://github.com/YusukeIwaki/puppeteer-ruby/pull/34
    @callbacks[id] = callback

    message = {
      id: id,
      guid: guid,
      method: method,
      params: replace_channels_with_guids(params),
    }
    begin
      @transport.send_message(message)
    rescue => err
      @callbacks.delete(id)
      callback.reject(err)
      raise unless err.is_a?(Transport::AlreadyDisconnectedError)
    end
  end

  callback
end

#send_message_to_server(guid, method, params) ⇒ Object



72
73
74
# File 'lib/playwright/connection.rb', line 72

def send_message_to_server(guid, method, params)
  async_send_message_to_server(guid, method, params).value!
end

#stopObject



32
33
34
# File 'lib/playwright/connection.rb', line 32

def stop
  @transport.stop
end

#wait_for_object_with_known_name(guid) ⇒ Object



36
37
38
39
40
41
42
43
44
# File 'lib/playwright/connection.rb', line 36

def wait_for_object_with_known_name(guid)
  if @objects[guid]
    return @objects[guid]
  end

  callback = Concurrent::Promises.resolvable_future
  @waiting_for_object[guid] = callback
  callback.value!
end