Parent

Class/Module Index [+]

Quicksearch

Selenium::WebDriver::Safari::Server

Constants

HEADERS
HTML

Public Class Methods

new(port, command_timeout) click to toggle source
# File lib/selenium/webdriver/safari/server.rb, line 6
def initialize(port, command_timeout)
  @port  = port
  @command_timeout = command_timeout
end

Public Instance Methods

process_handshake() click to toggle source
# File lib/selenium/webdriver/safari/server.rb, line 109
def process_handshake
  @ws = @server.accept
  hs  = WebSocket::Handshake::Server.new

  req = ''
  until hs.finished?
    data = @ws.getc || next

    req << data.chr
    hs << data
  end

  unless hs.valid?
    if req.include? "favicon.ico"
      @ws.close
      process_handshake
      return
    else
      raise Error::WebDriverError, "#{hs.error}: #{req}"
    end
  end

  @ws.write(hs.to_s)
  @ws.flush

  puts "handshake complete, v#{hs.version}" if $DEBUG
  @server.close
  @version = hs.version
end
process_initial_http_request() click to toggle source
# File lib/selenium/webdriver/safari/server.rb, line 94
def process_initial_http_request
  http = @server.accept

  req = ''
  until req.include?("\r\n\r\n")
    req << http.read(1)
  end

  http << HEADERS
  http << "\r\n\r\n"
  http << HTML % [ws_uri, ws_uri]

  http.close
end
receive() click to toggle source
# File lib/selenium/webdriver/safari/server.rb, line 30
def receive
  @frame ||= WebSocket::Frame::Incoming::Server.new(:version => @version)

  until msg = @frame.next
    end_time = Time.now + @command_timeout

    begin
      data = @ws.read_nonblock(1)
    rescue Errno::EWOULDBLOCK, Errno::EAGAIN
      now = Time.now
      if now >= end_time
        raise Error::TimeOutError, "timed out waiting for Safari to respond"
      end

      IO.select([@ws], nil, nil, end_time - now)
      retry
    end

    @frame << data
  end

  puts "<<< #{msg}" if $DEBUG

  WebDriver.json_load msg.to_s
end
send(command) click to toggle source
# File lib/selenium/webdriver/safari/server.rb, line 20
def send(command)
  json = WebDriver.json_dump(command)
  puts ">>> #{json}" if $DEBUG

  frame = WebSocket::Frame::Outgoing::Server.new(:version => @version, :data => json, :type => :text)

  @ws.write frame.to_s
  @ws.flush
end
start() click to toggle source
# File lib/selenium/webdriver/safari/server.rb, line 11
def start
  @server = TCPServer.new(Platform.localhost, @port)
end
stop() click to toggle source
# File lib/selenium/webdriver/safari/server.rb, line 15
def stop
  @server.close if @server && !@server.closed?
  @ws.close if @ws && !@ws.closed?
end
uri() click to toggle source
# File lib/selenium/webdriver/safari/server.rb, line 60
def uri
  "http://#{Platform.localhost}:#{@port}"
end
wait_for_connection() click to toggle source
# File lib/selenium/webdriver/safari/server.rb, line 64
def wait_for_connection
  # TODO: timeouts / non-blocking accept
  process_initial_http_request
  process_handshake
end
ws_uri() click to toggle source
# File lib/selenium/webdriver/safari/server.rb, line 56
def ws_uri
  "ws://#{Platform.localhost}:#{@port}/wd"
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.