lib/playwright/utils.rb
require 'base64' module Playwright class DisposableStub def initialize(&block) @block = block end def dispose return unless @block block = @block @block = nil block.call rescue TargetClosedError nil end end module Utils module PrepareBrowserContextOptions # @see https://github.com/microsoft/playwright/blob/5a2cfdbd47ed3c3deff77bb73e5fac34241f649d/src/client/browserContext.ts#L265 private def prepare_browser_context_options(params) if params[:noViewport] == 0 params.delete(:noViewport) params[:noDefaultViewport] = true end if params[:extraHTTPHeaders] params[:extraHTTPHeaders] = ::Playwright::HttpHeaders.new(params[:extraHTTPHeaders]).as_serialized end if params[:record_video_dir] params[:recordVideo] = { dir: params.delete(:record_video_dir) } if params[:record_video_size] params[:recordVideo][:size] = params.delete(:record_video_size) end if params[:record_video_show_actions] params[:recordVideo][:showActions] = params.delete(:record_video_show_actions) end end if params[:storageState].is_a?(String) params[:storageState] = JSON.parse(File.read(params[:storageState])) end %i[colorScheme reducedMotion forcedColors contrast].each do |key| if params[key] == 'null' params[key] = 'no-override' end end if params[:acceptDownloads] || params[:acceptDownloads] == false params[:acceptDownloads] = params[:acceptDownloads] ? 'accept' : 'deny' end if params[:clientCertificates].is_a?(Array) params[:clientCertificates] = params[:clientCertificates].filter_map do |item| out_record = { origin: item[:origin], passphrase: item[:passphrase], } { pfxPath: 'pfx', certPath: 'cert', keyPath: 'key' }.each do |key, out_key| if (filepath = item[key]) out_record[out_key] = Base64.encode64(File.read(filepath)) rescue '' elsif (value = item[out_key.to_sym]) out_record[out_key] = value end end out_record.compact! next nil if out_record.empty? out_record end end params end end module Errors module TargetClosedErrorMethods # @param err [Exception] private def target_closed_error?(err) err.is_a?(TargetClosedError) end end end end end