puppeteer-ruby 0.41.0 → 0.43.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -50,33 +50,11 @@ class Puppeteer::Page
50
50
  @workers = {}
51
51
  @user_drag_interception_enabled = false
52
52
 
53
- @client.add_event_listener('Target.attachedToTarget') do |event|
54
- if event['targetInfo']['type'] != 'worker' && event['targetInfo']['type'] != 'iframe'
55
- # If we don't detach from service workers, they will never die.
56
- # We still want to attach to workers for emitting events.
57
- # We still want to attach to iframes so sessions may interact with them.
58
- # We detach from all other types out of an abundance of caution.
59
- # See https://source.chromium.org/chromium/chromium/src/+/main:content/browser/devtools/devtools_agent_host_impl.cc?ss=chromium&q=f:devtools%20-f:out%20%22::kTypePage%5B%5D%22
60
- # for the complete list of available types.
61
- @client.async_send_message('Target.detachFromTarget', sessionId: event['sessionId'])
62
- next
63
- end
64
-
65
- if event['targetInfo']['type'] == 'worker'
66
- session = Puppeteer::Connection.from_session(@client).session(event['sessionId']) # rubocop:disable Lint/UselessAssignment
67
- # const worker = new Worker(session, event.targetInfo.url, this._addConsoleMessage.bind(this), this._handleException.bind(this));
68
- # this._workers.set(event.sessionId, worker);
69
- # this.emit(PageEmittedEvents::WorkerCreated, worker);
70
- end
71
- end
72
- @client.add_event_listener('Target.detachedFromTarget') do |event|
73
- session_id = event['sessionId']
74
- worker = @workers[session_id]
75
- next unless worker
76
-
77
- emit_event(PageEmittedEvents::WorkerDestroyed, worker)
78
- @workers.delete(session_id)
79
- end
53
+ @target.target_manager.add_target_interceptor(@client, method(:handle_attached_to_target))
54
+ @target_gone_listener_id = @target.target_manager.add_event_listener(
55
+ TargetManagerEmittedEvents::TargetGone,
56
+ &method(:handle_detached_from_target)
57
+ )
80
58
 
81
59
  @frame_manager.on_event(FrameManagerEmittedEvents::FrameAttached) do |event|
82
60
  emit_event(PageEmittedEvents::FrameAttached, event)
@@ -135,15 +113,46 @@ class Puppeteer::Page
135
113
  handle_file_chooser(event)
136
114
  end
137
115
  @target.is_closed_promise.then do
116
+ @target.target_manager.remove_target_interceptor(@client, method(:handle_attached_to_target))
117
+ @target.target_manager.remove_event_listener(@target_gone_listener_id)
118
+
138
119
  emit_event(PageEmittedEvents::Close)
139
120
  @closed = true
140
121
  end
141
122
  end
142
123
 
124
+ private def handle_detached_from_target(target)
125
+ session_id = target.session&.id
126
+ @frame_manager.handle_detached_from_target(target)
127
+ return unless session_id
128
+ worker = @workers.delete(session_id)
129
+ return unless worker
130
+ emit_event(PageEmittedEvents::WorkerDestroyed, worker)
131
+ end
132
+
133
+ private def handle_attached_to_target(target, _)
134
+ @frame_manager.handle_attached_to_target(target)
135
+ if target.raw_type == 'worker'
136
+ # const session = createdTarget._session();
137
+ # assert(session);
138
+ # const worker = new WebWorker(
139
+ # session,
140
+ # createdTarget.url(),
141
+ # this.#addConsoleMessage.bind(this),
142
+ # this.#handleException.bind(this)
143
+ # );
144
+ # this.#workers.set(session.id(), worker);
145
+ # this.emit(PageEmittedEvents.WorkerCreated, worker);
146
+ end
147
+
148
+ if target.session
149
+ @target.target_manager.add_target_interceptor(target.session, method(:handle_attached_to_target))
150
+ end
151
+ end
152
+
143
153
  def init
144
154
  await_all(
145
- @frame_manager.async_init,
146
- @client.async_send_message('Target.setAutoAttach', autoAttach: true, waitForDebuggerOnStart: false, flatten: true),
155
+ @frame_manager.async_init(@target.target_id),
147
156
  @client.async_send_message('Performance.enable'),
148
157
  @client.async_send_message('Log.enable'),
149
158
  )
@@ -110,7 +110,7 @@ class Puppeteer::Puppeteer
110
110
  default_viewport: default_viewport,
111
111
  slow_mo: slow_mo,
112
112
  }.compact
113
- browser = launcher.connect(options)
113
+ browser = Puppeteer::BrowserConnector.new(options).connect_to_browser
114
114
  if block_given?
115
115
  begin
116
116
  yield(browser)
@@ -176,4 +176,8 @@ class Puppeteer::RemoteObject
176
176
  def set_file_input_files(client, files, backend_node_id)
177
177
  client.send_message('DOM.setFileInputFiles', objectId: @object_id, files: files, backendNodeId: backend_node_id)
178
178
  end
179
+
180
+ def scroll_into_view_if_needed(client)
181
+ client.send_message('DOM.scrollIntoViewIfNeeded', objectId: @object_id)
182
+ end
179
183
  end
@@ -19,11 +19,15 @@ class Puppeteer::Target
19
19
  # @param {boolean} ignoreHTTPSErrors
20
20
  # @param {?Puppeteer.Viewport} defaultViewport
21
21
  def initialize(target_info:,
22
+ session:,
22
23
  browser_context:,
24
+ target_manager:,
23
25
  session_factory:,
24
26
  ignore_https_errors:,
25
27
  default_viewport:,
26
28
  is_page_target_callback:)
29
+ @session = session
30
+ @target_manager = target_manager
27
31
  @target_info = target_info
28
32
  @browser_context = browser_context
29
33
  @target_id = target_info.target_id
@@ -83,13 +87,22 @@ class Puppeteer::Target
83
87
  @is_initialized
84
88
  end
85
89
 
90
+ # @return [CDPSession|nil]
91
+ def session
92
+ @session
93
+ end
94
+
86
95
  def create_cdp_session
87
96
  @session_factory.call
88
97
  end
89
98
 
99
+ def target_manager
100
+ @target_manager
101
+ end
102
+
90
103
  def page
91
104
  if @is_page_target_callback.call(@target_info) && @page.nil?
92
- client = @session_factory.call
105
+ client = @session || @session_factory.call
93
106
  @page = Puppeteer::Page.create(client, self, @ignore_https_errors, @default_viewport)
94
107
  end
95
108
  @page
@@ -1,3 +1,3 @@
1
1
  module Puppeteer
2
- VERSION = '0.41.0'
2
+ VERSION = '0.43.0'
3
3
  end
data/lib/puppeteer.rb CHANGED
@@ -22,7 +22,9 @@ require 'puppeteer/aria_query_handler'
22
22
  require 'puppeteer/browser'
23
23
  require 'puppeteer/browser_context'
24
24
  require 'puppeteer/browser_runner'
25
+ require 'puppeteer/browser_connector'
25
26
  require 'puppeteer/cdp_session'
27
+ require 'puppeteer/chrome_target_manager'
26
28
  require 'puppeteer/connection'
27
29
  require 'puppeteer/console_message'
28
30
  require 'puppeteer/coverage'
@@ -36,6 +38,7 @@ require 'puppeteer/exception_details'
36
38
  require 'puppeteer/executable_path_finder'
37
39
  require 'puppeteer/execution_context'
38
40
  require 'puppeteer/file_chooser'
41
+ require 'puppeteer/firefox_target_manager'
39
42
  require 'puppeteer/frame'
40
43
  require 'puppeteer/frame_manager'
41
44
  require 'puppeteer/http_request'
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
32
32
  spec.add_development_dependency 'rollbar'
33
33
  spec.add_development_dependency 'rspec', '~> 3.11.0'
34
34
  spec.add_development_dependency 'rspec_junit_formatter' # for CircleCI.
35
- spec.add_development_dependency 'rubocop', '~> 1.31.0'
35
+ spec.add_development_dependency 'rubocop', '~> 1.36.0'
36
36
  spec.add_development_dependency 'rubocop-rspec'
37
37
  spec.add_development_dependency 'sinatra'
38
38
  spec.add_development_dependency 'webrick'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppeteer-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.41.0
4
+ version: 0.43.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - YusukeIwaki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-07-03 00:00:00.000000000 Z
11
+ date: 2022-09-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -170,14 +170,14 @@ dependencies:
170
170
  requirements:
171
171
  - - "~>"
172
172
  - !ruby/object:Gem::Version
173
- version: 1.31.0
173
+ version: 1.36.0
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
- version: 1.31.0
180
+ version: 1.36.0
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: rubocop-rspec
183
183
  requirement: !ruby/object:Gem::Requirement
@@ -255,10 +255,12 @@ files:
255
255
  - lib/puppeteer.rb
256
256
  - lib/puppeteer/aria_query_handler.rb
257
257
  - lib/puppeteer/browser.rb
258
+ - lib/puppeteer/browser_connector.rb
258
259
  - lib/puppeteer/browser_context.rb
259
260
  - lib/puppeteer/browser_fetcher.rb
260
261
  - lib/puppeteer/browser_runner.rb
261
262
  - lib/puppeteer/cdp_session.rb
263
+ - lib/puppeteer/chrome_target_manager.rb
262
264
  - lib/puppeteer/concurrent_ruby_utils.rb
263
265
  - lib/puppeteer/connection.rb
264
266
  - lib/puppeteer/console_message.rb
@@ -285,6 +287,7 @@ files:
285
287
  - lib/puppeteer/executable_path_finder.rb
286
288
  - lib/puppeteer/execution_context.rb
287
289
  - lib/puppeteer/file_chooser.rb
290
+ - lib/puppeteer/firefox_target_manager.rb
288
291
  - lib/puppeteer/frame.rb
289
292
  - lib/puppeteer/frame_manager.rb
290
293
  - lib/puppeteer/geolocation.rb