[rb] generate the url_pattern from single filters parameter
diff --git a/rb/lib/selenium/webdriver/bidi/network.rb b/rb/lib/selenium/webdriver/bidi/network.rb
index 0042ac8..50c5d5c 100644
--- a/rb/lib/selenium/webdriver/bidi/network.rb
+++ b/rb/lib/selenium/webdriver/bidi/network.rb
@@ -40,12 +40,11 @@
@bidi = bidi
end
- def add_intercept(phases: [], contexts: nil, url_patterns: nil, pattern_type: :string)
- url_patterns = url_patterns && pattern_type ? UrlPattern.format_pattern(url_patterns, pattern_type) : nil
+ def add_intercept(phases: [], contexts: nil, filters: nil)
@bidi.send_cmd('network.addIntercept',
phases: phases,
contexts: contexts,
- urlPatterns: url_patterns)
+ urlPatterns: UrlPattern.format_pattern(filters))
end
def remove_intercept(intercept)
diff --git a/rb/lib/selenium/webdriver/bidi/network/url_pattern.rb b/rb/lib/selenium/webdriver/bidi/network/url_pattern.rb
index 659b4be..878a576 100644
--- a/rb/lib/selenium/webdriver/bidi/network/url_pattern.rb
+++ b/rb/lib/selenium/webdriver/bidi/network/url_pattern.rb
@@ -25,39 +25,39 @@
module UrlPattern
module_function
- def format_pattern(url_patterns, pattern_type)
- case pattern_type
- when :string
- to_url_string_pattern(url_patterns)
- when :url
- to_url_pattern(url_patterns)
- else
- raise ArgumentError, "Unknown pattern type: #{pattern_type}"
+ ALLOWED_KEYS = %i[protocol hostname port pathname search].freeze
+ WEB = [{ type: 'pattern', protocol: 'https' }.freeze, { type: 'pattern', protocol: 'http' }.freeze].freeze
+
+ def format_pattern(filters)
+ patterns = Array(filters).flatten.compact
+ return WEB.dup if patterns.empty?
+
+ patterns.each_with_object([]) do |pattern, array|
+ case pattern
+ when String, ::URI::Generic
+ array << { type: 'string', pattern: pattern.to_s }
+ when Hash
+ url_pattern = to_url_pattern(pattern)
+ if url_pattern.key?(:protocol)
+ array << url_pattern
+ else
+ array << url_pattern.merge(protocol: 'http')
+ array << url_pattern.merge(protocol: 'https')
+ end
+ else
+ raise TypeError, "pattern must be a String, URI or a Hash of keys: #{ALLOWED_KEYS.join(", ")}"
+ end
end
+
end
- def to_url_pattern(*url_patterns)
- url_patterns.flatten.map do |url_pattern|
- uri = URI.parse(url_pattern)
+ private
- {
- type: 'pattern',
- protocol: uri.scheme || '',
- hostname: uri.host || '',
- port: uri.port.to_s,
- pathname: uri.path || '',
- search: uri.query || ''
- }
- end
- end
+ def to_url_pattern(pattern)
+ unknown = pattern.keys - ALLOWED_KEYS
+ raise ArgumentError, "Unknown keys in pattern hash: #{unknown.inspect}" unless unknown.empty?
- def to_url_string_pattern(*url_patterns)
- url_patterns.flatten.map do |url_pattern|
- {
- type: 'string',
- pattern: url_pattern
- }
- end
+ pattern.slice(*ALLOWED_KEYS).merge(type: 'pattern')
end
end
end # BiDi
diff --git a/rb/lib/selenium/webdriver/common/network.rb b/rb/lib/selenium/webdriver/common/network.rb
index 765ba88..660b9dd 100644
--- a/rb/lib/selenium/webdriver/common/network.rb
+++ b/rb/lib/selenium/webdriver/common/network.rb
@@ -44,7 +44,7 @@
callbacks.each_key { |id| remove_handler(id) }
end
- def add_authentication_handler(username = nil, password = nil, *filter, pattern_type: nil, &block)
+ def add_authentication_handler(username = nil, password = nil, *filters, &block)
selected_block =
if username && password
proc { |auth| auth.authenticate(username, password) }
@@ -56,38 +56,35 @@
:auth_required,
BiDi::Network::PHASES[:auth_required],
BiDi::InterceptedAuth,
- filter,
- pattern_type: pattern_type,
+ Array(filters).flatten,
&selected_block
)
end
- def add_request_handler(*filter, pattern_type: nil, &block)
+ def add_request_handler(*filters, &block)
add_handler(
:before_request,
BiDi::Network::PHASES[:before_request],
BiDi::InterceptedRequest,
- filter,
- pattern_type: pattern_type,
+ Array(filters).flatten,
&block
)
end
- def add_response_handler(*filter, pattern_type: nil, &block)
+ def add_response_handler(*filters, &block)
add_handler(
:response_started,
BiDi::Network::PHASES[:response_started],
BiDi::InterceptedResponse,
- filter,
- pattern_type: pattern_type,
+ Array(filters).flatten,
&block
)
end
private
- def add_handler(event_type, phase, intercept_type, filter, pattern_type: nil)
- intercept = network.add_intercept(phases: [phase], url_patterns: [filter].flatten, pattern_type: pattern_type)
+ def add_handler(event_type, phase, intercept_type, filters)
+ intercept = network.add_intercept(phases: [phase], filters: filters)
callback_id = network.on(event_type) do |event|
request = event['request']
intercepted_item = intercept_type.new(network, request)
diff --git a/rb/sig/lib/selenium/webdriver/bidi/network.rbs b/rb/sig/lib/selenium/webdriver/bidi/network.rbs
index bc286a1..3dd8463 100644
--- a/rb/sig/lib/selenium/webdriver/bidi/network.rbs
+++ b/rb/sig/lib/selenium/webdriver/bidi/network.rbs
@@ -10,7 +10,7 @@
def initialize: (BiDi bidi) -> void
- def add_intercept: (?phases: Array[String], ?contexts: BrowsingContext?, ?url_patterns: String | Array[String]?) -> Hash[String, String]
+ def add_intercept: (?phases: Array[String], ?contexts: BrowsingContext?, ?filters: Array[String | Hash[Symbol, String]]?) -> Hash[String, String]
def cancel_auth: -> Hash[nil, nil]
@@ -22,7 +22,7 @@
def fail_request: -> Hash[nil, nil]
- def remove_intercept: (String intercept) -> Hash[nil, nil]
+ def remove_intercept: (String? intercept) -> Hash[nil, nil]
def continue_with_auth: (Integer request_id, String username, String password) -> Hash[nil, nil]
diff --git a/rb/sig/lib/selenium/webdriver/bidi/network/url_pattern.rbs b/rb/sig/lib/selenium/webdriver/bidi/network/url_pattern.rbs
index 5735347..f294b7e 100644
--- a/rb/sig/lib/selenium/webdriver/bidi/network/url_pattern.rbs
+++ b/rb/sig/lib/selenium/webdriver/bidi/network/url_pattern.rbs
@@ -2,11 +2,13 @@
module WebDriver
class BiDi
module UrlPattern
- def self?.format_pattern: (Array[String] | String url_patterns, Symbol pattern_type) -> Array[Hash[Symbol, String]]
+ ALLOWED_KEYS: Array[Symbol]
- def self?.to_url_pattern: (*String url_patterns) -> Array[Hash[Symbol, String]]
+ WEB: Array[Hash[Symbol, String]]
- def self?.to_url_string_pattern: (*String url_patterns) -> Array[Hash[Symbol, String]]
+ def self?.format_pattern: (nil | Array[String] | Array[URI] | Array[Hash[Symbol, String]]) -> Array[Hash[Symbol, String]]
+
+ def self?.to_url_pattern: (Hash[Symbol, String]) -> Hash[Symbol, String]
end
end
end
diff --git a/rb/sig/lib/selenium/webdriver/common/network.rbs b/rb/sig/lib/selenium/webdriver/common/network.rbs
index 193e738..58a09d4 100644
--- a/rb/sig/lib/selenium/webdriver/common/network.rbs
+++ b/rb/sig/lib/selenium/webdriver/common/network.rbs
@@ -11,21 +11,21 @@
alias bidi network
- def initialize: (Remote::Bridge bridge) -> void
+ def initialize: (Remote::BiDiBridge bridge) -> void
def remove_handler: (Numeric id) -> untyped
def clear_handlers: () -> untyped
- def add_authentication_handler: (?String? username, ?String? password, *String filter, ?pattern_type: Symbol?) { (?) -> untyped } -> untyped
+ def add_authentication_handler: (?String? username, ?String? password, *(String | Hash[Symbol, String])?) { (BiDi::InterceptedAuth) -> void } -> Hash[String, String]
- def add_request_handler: (*String filter, ?pattern_type: Symbol?) -> Hash[String, String]
+ def add_request_handler: (*(String | Hash[Symbol, String])?) { (BiDi::InterceptedRequest) -> void } -> Hash[String, String]
- def add_response_handler: (*String filter, ?pattern_type: Symbol?) -> Hash[String, String]
+ def add_response_handler: (*(String | Hash[Symbol, String])?) { (BiDi::InterceptedResponse) -> void } -> Hash[String, String]
private
- def add_handler: (Symbol event_type, String phase, BiDi::InterceptedRequest | BiDi::InterceptedAuth | BiDi::InterceptedResponse intercept_type, Array[String] filter, ?pattern_type: Symbol?) { (untyped) -> untyped } -> untyped
+ def add_handler: (Symbol event_type, String phase, Class intercept_type, Array[String | Hash[Symbol, String]] filters) { (untyped) -> untyped } -> untyped
end
end
end
diff --git a/rb/spec/integration/selenium/webdriver/bidi/network_spec.rb b/rb/spec/integration/selenium/webdriver/bidi/network_spec.rb
index 8cc7fe2..4082cb1 100644
--- a/rb/spec/integration/selenium/webdriver/bidi/network_spec.rb
+++ b/rb/spec/integration/selenium/webdriver/bidi/network_spec.rb
@@ -35,16 +35,14 @@
it 'adds an intercept with a default pattern type' do
network = described_class.new(driver.bidi)
pattern = 'http://localhost:4444/formPage.html'
- intercept = network.add_intercept(phases: [described_class::PHASES[:before_request]], url_patterns: pattern)
+ intercept = network.add_intercept(phases: [described_class::PHASES[:before_request]], filters: [pattern])
expect(intercept).not_to be_nil
end
it 'adds an intercept with a url pattern' do
network = described_class.new(driver.bidi)
pattern = 'http://localhost:4444/formPage.html'
- intercept = network.add_intercept(phases: [described_class::PHASES[:before_request]],
- url_patterns: pattern,
- pattern_type: :url)
+ intercept = network.add_intercept(phases: [described_class::PHASES[:before_request]], filters: [pattern])
expect(intercept).not_to be_nil
end
diff --git a/rb/spec/integration/selenium/webdriver/network_spec.rb b/rb/spec/integration/selenium/webdriver/network_spec.rb
index ae1b2bf..f557253 100644
--- a/rb/spec/integration/selenium/webdriver/network_spec.rb
+++ b/rb/spec/integration/selenium/webdriver/network_spec.rb
@@ -60,7 +60,7 @@
it 'adds an auth handler with a pattern type' do
reset_driver!(web_socket_url: true) do |driver|
network = described_class.new(driver)
- network.add_authentication_handler(username, password, url_for('basicAuth'), pattern_type: :url)
+ network.add_authentication_handler(username, password, url_for('basicAuth'))
driver.navigate.to url_for('basicAuth')
expect(driver.find_element(tag_name: 'h1').text).to eq('authorized')
expect(network.callbacks.count).to be 1
@@ -135,7 +135,7 @@
it 'adds a request handler with a pattern type' do
reset_driver!(web_socket_url: true) do |driver|
network = described_class.new(driver)
- network.add_request_handler(url_for('formPage.html'), pattern_type: :url, &:continue)
+ network.add_request_handler(url_for('formPage.html'), &:continue)
driver.navigate.to url_for('formPage.html')
expect(driver.current_url).to eq(url_for('formPage.html'))
expect(network.callbacks.count).to be 1
@@ -230,7 +230,7 @@
it 'adds a response handler with a pattern type' do
reset_driver!(web_socket_url: true) do |driver|
network = described_class.new(driver)
- network.add_response_handler(url_for('formPage.html'), pattern_type: :url, &:continue)
+ network.add_response_handler(url_for('formPage.html'), &:continue)
driver.navigate.to url_for('formPage.html')
expect(driver.current_url).to eq(url_for('formPage.html'))
expect(network.callbacks.count).to be 1