class Capybara::Apparition::Browser::PageManager

Public Class Methods

new(browser) click to toggle source
# File lib/capybara/apparition/browser/page_manager.rb, line 6
def initialize(browser)
  @browser = browser
  @pages = {}
end

Public Instance Methods

[](id) click to toggle source
# File lib/capybara/apparition/browser/page_manager.rb, line 15
def [](id)
  @pages[id]
end
blacklist=(list) click to toggle source
# File lib/capybara/apparition/browser/page_manager.rb, line 85
def blacklist=(list)
  @pages.each_value { |page| page.url_blacklist = list }
end
create(id, session, ctx_id, **options) click to toggle source
# File lib/capybara/apparition/browser/page_manager.rb, line 37
def create(id, session, ctx_id, **options)
  @pages[id] = Page.create(@browser, session, id, ctx_id, **options)
end
delete(id) click to toggle source
# File lib/capybara/apparition/browser/page_manager.rb, line 41
def delete(id)
  @pages.delete(id)
end
each(&block) click to toggle source
# File lib/capybara/apparition/browser/page_manager.rb, line 19
def each(&block)
  @pages.each_value(&block)
end
ids() click to toggle source
# File lib/capybara/apparition/browser/page_manager.rb, line 11
def ids
  @pages.keys
end
refresh(opener:, **page_options) click to toggle source
# File lib/capybara/apparition/browser/page_manager.rb, line 45
def refresh(opener:, **page_options)
  new_pages = @browser.command('Target.getTargets')['targetInfos'].select do |ti|
    (ti['openerId'] == opener.target_id) && (ti['type'] == 'page') && (ti['attached'] == false)
  end

  sessions = new_pages.map do |page|
    target_id = page['targetId']
    session_result = @browser.client.send_cmd('Target.attachToTarget', targetId: target_id)
    [target_id, session_result]
  end

  sessions = sessions.map do |(target_id, session_result)|
    session = Capybara::Apparition::DevToolsProtocol::Session.new(
      @browser,
      @browser.client,
      session_result.result['sessionId']
    )
    [target_id, session]
  end

  sessions.each do |(_id, session)|
    session.async_commands 'Page.enable', 'Network.enable', 'Runtime.enable', 'Security.enable', 'DOM.enable'
  end

  sessions.each do |(target_id, session)|
    new_page = Page.create(
      @browser,
      session,
      target_id,
      opener.browser_context_id,
      **page_options
    ).inherit(opener)
    @pages[target_id] = new_page
  end
end
reset() click to toggle source
# File lib/capybara/apparition/browser/page_manager.rb, line 23
def reset
  @pages.each do |id, page|
    begin
      @browser.client.send_cmd(
        'Target.disposeBrowserContext',
        browserContextId: page.browser_context_id
      ).discard_result
    rescue WrongWorld
      puts 'Unknown browserContextId'
    end
    @pages.delete(id)
  end
end
whitelist=(list) click to toggle source
# File lib/capybara/apparition/browser/page_manager.rb, line 81
def whitelist=(list)
  @pages.each_value { |page| page.url_whitelist = list }
end