lib/puppeteer/page.rb in puppeteer-ruby-0.32.2 vs lib/puppeteer/page.rb in puppeteer-ruby-0.32.3

- old
+ new

@@ -47,11 +47,11 @@ @workers = {} @client.on_event('Target.attachedToTarget') do |event| if event['targetInfo']['type'] != 'worker' # If we don't detach from service workers, they will never die. - await @client.send_message('Target.detachFromTarget', sessionId: event['sessionId']) + @client.async_send_message('Target.detachFromTarget', sessionId: event['sessionId']) next end session = Puppeteer::Connection.from_session(@client).session(event['sessionId']) # rubocop:disable Lint/UselessAssignment # const worker = new Worker(session, event.targetInfo.url, this._addConsoleMessage.bind(this), this._handleException.bind(this)); @@ -792,34 +792,50 @@ raise ArgumentError.new("Unsupported media type: #{media_type}") end @client.send_message('Emulation.setEmulatedMedia', media: media_type_str) end - # /** - # * @param {?Array<MediaFeature>} features - # */ - # async emulateMediaFeatures(features) { - # if (features === null) - # await this._client.send('Emulation.setEmulatedMedia', {features: null}); - # if (Array.isArray(features)) { - # features.every(mediaFeature => { - # const name = mediaFeature.name; - # assert(/^prefers-(?:color-scheme|reduced-motion)$/.test(name), 'Unsupported media feature: ' + name); - # return true; - # }); - # await this._client.send('Emulation.setEmulatedMedia', {features: features}); - # } - # } + # @param features [Array] + def emulate_media_features(features) + if features.nil? + @client.send_message('Emulation.setEmulatedMedia', features: nil) + elsif features.is_a?(Array) + features.each do |media_feature| + name = media_feature[:name] + unless /^(?:prefers-(?:color-scheme|reduced-motion)|color-gamut)$/.match?(name) + raise ArgumentError.new("Unsupported media feature: #{name}") + end + end + @client.send_message('Emulation.setEmulatedMedia', features: features) + end + end # @param timezone_id [String?] def emulate_timezone(timezone_id) @client.send_message('Emulation.setTimezoneOverride', timezoneId: timezone_id || '') rescue => err if err.message.include?('Invalid timezone') raise ArgumentError.new("Invalid timezone ID: #{timezone_id}") else raise err end + end + + VISION_DEFICIENCY_TYPES = %w[ + none + achromatopsia + blurredVision + deuteranopia + protanopia + tritanopia + ].freeze + + def emulate_vision_deficiency(vision_deficiency_type) + value = vision_deficiency_type || 'none' + unless VISION_DEFICIENCY_TYPES.include?(value) + raise ArgumentError.new("Unsupported vision deficiency: #{vision_deficiency_type}") + end + @client.send_message('Emulation.setEmulatedVisionDeficiency', type: value) end # @param is_user_active [Boolean] # @param is_screen_unlocked [Boolean] def emulate_idle_state(is_user_active: nil, is_screen_unlocked: nil)