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