class Selenium::WebDriver::Safari::Extensions

@api private

Constants

PLIST
PLIST_EXTENSION_LINE

Public Class Methods

new(opts = {}) click to toggle source
# File lib/selenium/webdriver/safari/extensions.rb, line 49
def initialize(opts = {})
  @data_dir   = opts.data_dir || safari_data_dir
  @skip       = opts.skip_extension_installation?
  @extensions = opts.extensions
  @backup     = Backup.new
  @installed  = false
end

Public Instance Methods

extension_destination() click to toggle source
# File lib/selenium/webdriver/safari/extensions.rb, line 113
def extension_destination
  install_directory.join('WebDriver.safariextz')
end
extension_source() click to toggle source
# File lib/selenium/webdriver/safari/extensions.rb, line 109
def extension_source
  Safari.resource_path.join('SafariDriver.safariextz')
end
install() click to toggle source
# File lib/selenium/webdriver/safari/extensions.rb, line 57
def install
  return if @installed
  installed_extensions = []

  if install_directory.exist?
    @backup.backup install_directory
  end

  install_directory.mkpath

  unless @skip
    extension_destination.rmtree if extension_destination.exist?
    FileUtils.cp extension_source.to_s, extension_destination.to_s

    installed_extensions << extension_destination
  end

  @extensions.each do |extension|
    target = install_directory.join(extension.basename)

    if extension.expand_path == target.expand_path
      @backup.backup(target)
    else
      FileUtils.cp extension, target
    end

    installed_extensions << target
  end

  plist_destination.open('w') do |io|
    extension_lines = installed_extensions.map do |ext|
      name = ext.basename('.safariextz').to_s
      PLIST_EXTENSION_LINE % [name, name]
    end
    io << PLIST % extension_lines.join("\n")
  end

  Platform.exit_hook { uninstall }
  @installed = true
end
install_directory() click to toggle source
# File lib/selenium/webdriver/safari/extensions.rb, line 121
def install_directory
  @install_directory ||= (
    data_dir = Pathname.new(@data_dir || safari_data_dir)

    unless data_dir.exist? && data_dir.directory?
      raise Errno::ENOENT, "Safari data directory not found at #{data_dir.to_s}"
    end

    data_dir.join('Extensions')
  )
end
plist_destination() click to toggle source
# File lib/selenium/webdriver/safari/extensions.rb, line 117
def plist_destination
  install_directory.join('Extensions.plist')
end
safari_data_dir() click to toggle source
# File lib/selenium/webdriver/safari/extensions.rb, line 133
def safari_data_dir
  current = Platform.os

  case current
  when :macosx
    Pathname.new(Platform.home).join('Library/Safari')
  when :windows
    Pathname.new(ENV['APPDATA']).join('Apple Computer/Safari')
  else
    raise Error::WebDriverError, "unsupported platform: #{current}"
  end
end
uninstall() click to toggle source
# File lib/selenium/webdriver/safari/extensions.rb, line 98
def uninstall
  return unless @installed

  install_directory.rmtree if install_directory.exist?
  @backup.restore_all

  nil
ensure
  @installed = false
end