Class: Playwright::Connection

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

Overview

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(transport) ⇒ 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
# File 'lib/playwright/connection.rb', line 8

def initialize(transport)
  @transport = transport
  @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)
  @remote = false
end

Instance Attribute Details

#local_utilsObject (readonly)

Returns the value of attribute local_utils.



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

def local_utils
  @local_utils
end

Instance Method Details

#async_runObject



37
38
39
# File 'lib/playwright/connection.rb', line 37

def async_run
  @transport.async_run
end

#async_send_message_to_server(guid, method, params, metadata: nil) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/playwright/connection.rb', line 53

def async_send_message_to_server(guid, method, params, metadata: nil)
  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),
      metadata:  || {},
    }

    begin
      @transport.send_message(message)
    rescue => err
      @callbacks.delete(id)
      callback.reject(err)
      raise unless err.is_a?(Transport::AlreadyDisconnectedError)
    end
  end

  callback
end

#initialize_playwrightObject



45
46
47
48
49
50
51
# File 'lib/playwright/connection.rb', line 45

def initialize_playwright
  # Avoid Error: sdkLanguage: expected one of (javascript|python|java|csharp)
  # ref: https://github.com/microsoft/playwright/pull/18308
  # ref: https://github.com/YusukeIwaki/playwright-ruby-client/issues/228
  result = send_message_to_server('', 'initialize', { sdkLanguage: 'python' })
  ChannelOwners::Playwright.from(result['playwright'])
end

#mark_as_remoteObject



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

def mark_as_remote
  @remote = true
end

#remote?Boolean

Returns:

  • (Boolean)


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

def remote?
  @remote
end

#send_message_to_server(guid, method, params, metadata: nil) ⇒ Object



81
82
83
# File 'lib/playwright/connection.rb', line 81

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

#stopObject



41
42
43
# File 'lib/playwright/connection.rb', line 41

def stop
  @transport.stop
end