class Selenium::WebDriver::Remote::Http::Common

Constants

CONTENT_TYPE
DEFAULT_HEADERS
MAX_REDIRECTS

Attributes

server_url[W]
timeout[RW]

Public Class Methods

new() click to toggle source
# File lib/selenium/webdriver/remote/http/common.rb, line 35
def initialize
  @timeout = nil
end

Public Instance Methods

call(verb, url, command_hash) click to toggle source
# File lib/selenium/webdriver/remote/http/common.rb, line 47
def call(verb, url, command_hash)
  url      = server_url.merge(url) unless url.is_a?(URI)
  headers  = DEFAULT_HEADERS.dup
  headers['Cache-Control'] = 'no-cache' if verb == :get

  if command_hash
    payload                   = JSON.generate(command_hash)
    headers['Content-Length'] = payload.bytesize.to_s if %i[post put].include?(verb)

    WebDriver.logger.info("   >>> #{url} | #{payload}")
    WebDriver.logger.debug("     > #{headers.inspect}")
  elsif verb == :post
    payload = '{}'
    headers['Content-Length'] = '2'
  end

  request verb, url, headers, payload
end
close() click to toggle source
# File lib/selenium/webdriver/remote/http/common.rb, line 43
def close
  # hook for subclasses - will be called on Driver#quit
end
quit_errors() click to toggle source
# File lib/selenium/webdriver/remote/http/common.rb, line 39
def quit_errors
  [IOError]
end

Private Instance Methods

create_response(code, body, content_type) click to toggle source
# File lib/selenium/webdriver/remote/http/common.rb, line 78
def create_response(code, body, content_type)
  code = code.to_i
  body = body.to_s.strip
  content_type = content_type.to_s
  WebDriver.logger.info("<- #{body}")

  if content_type.include? CONTENT_TYPE
    raise Error::WebDriverError, "empty body: #{content_type.inspect} (#{code})\n#{body}" if body.empty?

    Response.new(code, JSON.parse(body))
  elsif code == 204
    Response.new(code)
  else
    msg = if body.empty?
            "unexpected response, code=#{code}, content-type=#{content_type.inspect}"
          else
            "unexpected response, code=#{code}, content-type=#{content_type.inspect}\n#{body}"
          end

    raise Error::WebDriverError, msg
  end
end
request(*) click to toggle source
# File lib/selenium/webdriver/remote/http/common.rb, line 74
def request(*)
  raise NotImplementedError, 'subclass responsibility'
end
server_url() click to toggle source
# File lib/selenium/webdriver/remote/http/common.rb, line 68
def server_url
  return @server_url if @server_url

  raise Error::WebDriverError, 'server_url not set'
end