Skip to content

Commit

Permalink
Support OOP iframe
Browse files Browse the repository at this point in the history
  • Loading branch information
YusukeIwaki committed Dec 4, 2021
1 parent d3481e5 commit 057b60f
Show file tree
Hide file tree
Showing 12 changed files with 444 additions and 97 deletions.
6 changes: 3 additions & 3 deletions docs/api_coverage.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@
* viewport
* ~~waitFor~~
* waitForFileChooser => `#wait_for_file_chooser`
* ~~waitForFrame~~
* waitForFrame => `#wait_for_frame`
* waitForFunction => `#wait_for_function`
* waitForNavigation => `#wait_for_navigation`
* ~~waitForNetworkIdle~~
Expand Down Expand Up @@ -227,7 +227,7 @@
* goto
* hover
* isDetached => `#detached?`
* ~~isOOPFrame~~
* isOOPFrame => `#oop_frame?`
* name
* parentFrame => `#parent_frame`
* select
Expand Down Expand Up @@ -360,7 +360,7 @@
* connection
* detach
* ~~id~~
* id
* send
## Coverage
Expand Down
5 changes: 5 additions & 0 deletions lib/puppeteer/cdp_session.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ def initialize(connection, target_type, session_id)
@session_id = session_id
end

# @internal
def id
@session_id
end

attr_reader :connection

# @param method [String]
Expand Down
14 changes: 9 additions & 5 deletions lib/puppeteer/dom_world.rb
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,14 @@ def page_binding_init_string
end
end

# @param {!Puppeteer.FrameManager} frameManager
# @param {!Puppeteer.Frame} frame
# @param {!Puppeteer.TimeoutSettings} timeoutSettings
def initialize(frame_manager, frame, timeout_settings)
# @param client [Puppeteer::CDPSession]
# @param frame_manager [Puppeteer::FrameManager]
# @param frame [Puppeteer::Frame]
# @param timeout_settings [Puppeteer::TimeoutSettings]
def initialize(client, frame_manager, frame, timeout_settings)
# Keep own reference to client because it might differ from the FrameManager's
# client for OOP iframes.
@client = client
@frame_manager = frame_manager
@frame = frame
@timeout_settings = timeout_settings
Expand All @@ -58,7 +62,7 @@ def initialize(frame_manager, frame, timeout_settings)
@ctx_bindings = Set.new
@detached = false

frame_manager.client.on_event('Runtime.bindingCalled', &method(:handle_binding_called))
@client.on_event('Runtime.bindingCalled', &method(:handle_binding_called))
end

attr_reader :frame
Expand Down
38 changes: 30 additions & 8 deletions lib/puppeteer/frame.rb
Original file line number Diff line number Diff line change
@@ -1,25 +1,47 @@
class Puppeteer::Frame
using Puppeteer::DefineAsyncMethod

# @param {!FrameManager} frameManager
# @param {!Puppeteer.CDPSession} client
# @param {?Frame} parentFrame
# @param {string} frameId
def initialize(frame_manager, client, parent_frame, frame_id)
# @param frame_manager [Puppeteer::FrameManager]
# @param parent_frame [Puppeteer::Frame|nil]
# @param frame_id [String]
# @param client [Puppeteer::CDPSession]
def initialize(frame_manager, parent_frame, frame_id, client)
@frame_manager = frame_manager
@client = client
@parent_frame = parent_frame
@id = frame_id
@detached = false

@loader_id = ''
@lifecycle_events = Set.new
@main_world = Puppeteer::DOMWorld.new(frame_manager, self, frame_manager.timeout_settings)
@secondary_world = Puppeteer::DOMWorld.new(frame_manager, self, frame_manager.timeout_settings)
@child_frames = Set.new
if parent_frame
parent_frame._child_frames << self
end

update_client(client)
end

def inspect
values = %i[id parent_frame detached loader_id lifecycle_events child_frames].map do |sym|
value = instance_variable_get(:"@#{sym}")
"@#{sym}=#{value}"
end
"#<Puppeteer::Frame #{values.join(' ')}>"
end

def _client
@client
end

# @param client [Puppeteer::CDPSession]
private def update_client(client)
@client = client
@main_world = Puppeteer::DOMWorld.new(@client, @frame_manager, self, @frame_manager.timeout_settings)
@secondary_world = Puppeteer::DOMWorld.new(@client, @frame_manager, self, @frame_manager.timeout_settings)
end

def oop_frame?
@client != @frame_manager.client
end

attr_accessor :frame_manager, :id, :loader_id, :lifecycle_events, :main_world, :secondary_world
Expand Down

0 comments on commit 057b60f

Please sign in to comment.