axe-core-api 4.14.0.pre.2f8ac75 → 4.14.0.pre.37cf919

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cfbb1243c81827957f4b5a5278d072134c8f72e19887cb6534788ec354804668
4
- data.tar.gz: 5acc4535009c2562ecf8b27fb957fcc4c781ad1de819ab86b40e97f92399e5f2
3
+ metadata.gz: e638cbf5135f83ec9689d70c0022e14b91fbdf7fc2b4046efb5efe75a4a20a2f
4
+ data.tar.gz: 432881714eb6b4c8b4be4886e9d3386f3d22f55fab098e5c3bad9ce155d8eddb
5
5
  SHA512:
6
- metadata.gz: 54be796ee4ac9fa856bdb3658b1e83f221ba0827b555b3b234583be11b8c177348f958effa089da0001c730c73562352c0e244341a9e723b794d8a2144500836
7
- data.tar.gz: 536e0a351d614f34920f4e0611be216583df8137524744d380d1bfbc4c7e04f1dd72c738e839138296e0b6826fcba4136b8c885143f97d2ec01f8a5f47876698
6
+ metadata.gz: 6ed3af28f5731d0999ea1d324f38c6cecf687a2127414c772e7d72c599041ffe85e1e5ab226ba82188a79be7e4eadbea178f37bed9aabb14a719aee4b214b4cf
7
+ data.tar.gz: 6662fc97c02f63bebf93f064699a97a733ebbdc2f46bf5d0e089597b6eaa76ebfd6c869b66bd9de8d4c77087b599964d8a76599863b185946c50f9d3ce78705d
data/lib/axe/api/run.rb CHANGED
@@ -31,6 +31,10 @@ module Axe
31
31
  Audit.new to_js, Results.new(results)
32
32
  end
33
33
 
34
+ def iframes?
35
+ JSON.parse(@options.to_json)["iframes"] != false
36
+ end
37
+
34
38
  def analyze_post_43x(page, lib)
35
39
  user_page_load = (get_selenium page).manage.timeouts.page_load
36
40
  (get_selenium page).manage.timeouts.page_load = 1
@@ -220,8 +224,9 @@ module Axe
220
224
  def get_frame_context_script(page)
221
225
  script = <<-JS
222
226
  const context = arguments[0];
227
+ const options = arguments[1];
223
228
  try {
224
- return window.axe.utils.getFrameContexts(context);
229
+ return window.axe.utils.getFrameContexts(context, options);
225
230
  } catch (err) {
226
231
  return {
227
232
  violations: [],
@@ -232,7 +237,7 @@ module Axe
232
237
  };
233
238
  }
234
239
  JS
235
- page.execute_script_fixed script, @context
240
+ page.execute_script_fixed script, @context, @options
236
241
  end
237
242
 
238
243
  def get_selenium(page)
data/lib/axe/core.rb CHANGED
@@ -18,6 +18,7 @@ module Axe
18
18
  if use_run_partial
19
19
  callable.analyze_post_43x @page, self
20
20
  else
21
+ load_legacy callable
21
22
  callable.call @page
22
23
  end
23
24
  end
@@ -39,12 +40,29 @@ module Axe
39
40
  end
40
41
 
41
42
  def load_axe_core(source)
42
- return if already_loaded?
43
- loader = Common::Loader.new(@page, self)
44
- loader.load_top_level source
45
- return if use_run_partial
43
+ @source = source
44
+ loaded = already_loaded?
45
+ @loader = Common::Loader.new(@page, self, loaded_top_level: loaded)
46
+ return if loaded
46
47
 
47
- loader.call source
48
+ begin
49
+ @loading_frames = true
50
+ @loader.load_top_level source
51
+ ensure
52
+ @loading_frames = false
53
+ end
54
+ end
55
+
56
+ def load_legacy(callable)
57
+ return if @frames_loaded || @loading_frames
58
+
59
+ iframes = !callable.respond_to?(:iframes?) || callable.iframes?
60
+ begin
61
+ @loading_frames = true
62
+ @frames_loaded = @loader.call @source, iframes: iframes
63
+ ensure
64
+ @loading_frames = false
65
+ end
48
66
  end
49
67
 
50
68
  def already_loaded?
data/lib/loader.rb CHANGED
@@ -4,10 +4,12 @@ require_relative "./hooks"
4
4
 
5
5
  module Common
6
6
  class Loader
7
- def initialize(page, lib)
7
+ INJECTED = "axeCoreGemsInjected".freeze
8
+
9
+ def initialize(page, lib, loaded_top_level: false)
8
10
  @page = page
9
11
  @lib = lib
10
- @loaded_top_level = false
12
+ @loaded_top_level = loaded_top_level
11
13
  end
12
14
 
13
15
  def load_top_level(source)
@@ -16,15 +18,30 @@ module Common
16
18
  Common::Hooks.run_after_load @lib
17
19
  end
18
20
 
19
- def call(source, is_top_level = true)
20
- @page.execute_script source unless (@loaded_top_level and is_top_level)
21
- set_allowed_origins
22
- Common::Hooks.run_after_load @lib
23
- load_into_iframes(source) unless Axe::Configuration.instance.skip_iframes
21
+ def call(source, is_top_level = true, iframes: true)
22
+ if is_top_level || !injected?
23
+ unless @loaded_top_level and is_top_level
24
+ @page.execute_script source
25
+ mark_injected unless is_top_level
26
+ end
27
+ set_allowed_origins
28
+ Common::Hooks.run_after_load @lib
29
+ end
30
+ load_frames = iframes && !Axe::Configuration.instance.skip_iframes
31
+ load_into_iframes(source) if load_frames
32
+ load_frames
24
33
  end
25
34
 
26
35
  private
27
36
 
37
+ def injected?
38
+ @page.evaluate_script "window.#{INJECTED} !== undefined && window.#{INJECTED} === window.#{Axe::Core::JS_NAME}"
39
+ end
40
+
41
+ def mark_injected
42
+ @page.execute_script "window.#{INJECTED} = window.#{Axe::Core::JS_NAME};"
43
+ end
44
+
28
45
  def set_allowed_origins
29
46
  allowed_origins = "<same_origin>"
30
47
  allowed_origins = "<unsafe_all_origins>" if !Axe::Configuration.instance.legacy_mode && !Axe::Core::has_run_partial?(@page)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: axe-core-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.14.0.pre.2f8ac75
4
+ version: 4.14.0.pre.37cf919
5
5
  platform: ruby
6
6
  authors:
7
7
  - Deque Systems
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-10-15 00:00:00.000000000 Z
11
+ date: 2026-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dumb_delegator