lib/puppeteer/browser.rb in puppeteer-ruby-0.40.7 vs lib/puppeteer/browser.rb in puppeteer-ruby-0.41.0
- old
+ new
@@ -11,18 +11,27 @@
# @param {!Array<string>} contextIds
# @param {boolean} ignoreHTTPSErrors
# @param {?Puppeteer.Viewport} defaultViewport
# @param process [Puppeteer::BrowserRunner::BrowserProcess|NilClass]
# @param {function()=} closeCallback
- def self.create(connection:, context_ids:, ignore_https_errors:, default_viewport:, process:, close_callback:)
+ def self.create(connection:,
+ context_ids:,
+ ignore_https_errors:,
+ default_viewport:,
+ process:,
+ close_callback:,
+ target_filter_callback:,
+ is_page_target_callback:)
browser = Puppeteer::Browser.new(
connection: connection,
context_ids: context_ids,
ignore_https_errors: ignore_https_errors,
default_viewport: default_viewport,
process: process,
close_callback: close_callback,
+ target_filter_callback: target_filter_callback,
+ is_page_target_callback: is_page_target_callback,
)
connection.send_message('Target.setDiscoverTargets', discover: true)
browser
end
@@ -30,16 +39,25 @@
# @param {!Array<string>} contextIds
# @param {boolean} ignoreHTTPSErrors
# @param {?Puppeteer.Viewport} defaultViewport
# @param {?Puppeteer.ChildProcess} process
# @param {(function():Promise)=} closeCallback
- def initialize(connection:, context_ids:, ignore_https_errors:, default_viewport:, process:, close_callback:)
+ def initialize(connection:,
+ context_ids:,
+ ignore_https_errors:,
+ default_viewport:,
+ process:,
+ close_callback:,
+ target_filter_callback:,
+ is_page_target_callback:)
@ignore_https_errors = ignore_https_errors
@default_viewport = default_viewport
@process = process
@connection = connection
@close_callback = close_callback
+ @target_filter_callback = target_filter_callback || method(:default_target_filter_callback)
+ @is_page_target_callback = is_page_target_callback || method(:default_is_page_target_callback)
@default_context = Puppeteer::BrowserContext.new(@connection, self, nil)
@contexts = {}
context_ids.each do |context_id|
@contexts[context_id] = Puppeteer::BrowserContext.new(@connection, self, context_id)
@@ -52,10 +70,20 @@
@connection.on_event('Target.targetCreated', &method(:handle_target_created))
@connection.on_event('Target.targetDestroyed', &method(:handle_target_destroyed))
@connection.on_event('Target.targetInfoChanged', &method(:handle_target_info_changed))
end
+ private def default_target_filter_callback(target_info)
+ true
+ end
+
+ private def default_is_page_target_callback(target_info)
+ ['page', 'background_page', 'webview'].include?(target_info.type)
+ end
+
+ attr_reader :is_page_target_callback
+
# @param event_name [Symbol] either of :disconnected, :targetcreated, :targetchanged, :targetdestroyed
def on(event_name, &block)
unless BrowserEmittedEvents.values.include?(event_name.to_s)
raise ArgumentError.new("Unknown event name: #{event_name}. Known events are #{BrowserEmittedEvents.values.to_a.join(", ")}")
end
@@ -117,15 +145,19 @@
end
if @targets[target_info.target_id]
raise TargetAlreadyExistError.new
end
+
+ return unless @target_filter_callback.call(target_info)
+
target = Puppeteer::Target.new(
target_info: target_info,
browser_context: context,
session_factory: -> { @connection.create_session(target_info) },
ignore_https_errors: @ignore_https_errors,
default_viewport: @default_viewport,
+ is_page_target_callback: @is_page_target_callback,
)
@targets[target_info.target_id] = target
if_present(@wait_for_creating_targets.delete(target_info.target_id)) do |promise|
promise.fulfill(target)
end