From 1b780e7b13358e5a2469393729edfacf1d6af4a1 Mon Sep 17 00:00:00 2001 From: Dmitry Vorotilin Date: Fri, 20 Dec 2024 11:24:13 +0300 Subject: [PATCH 1/3] feat: Supplement request headers with Network.requestWillBeSentExtraInfo --- CHANGELOG.md | 2 ++ lib/ferrum/network.rb | 12 ++++++++++-- lib/ferrum/network/exchange.rb | 4 ++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f4738e1f..d1d3f37c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ### Added +`Ferrum::Network::Request#headers` are enhanced and supplemented with `Network.requestWillBeSentExtraInfo` + ### Changed ### Fixed diff --git a/lib/ferrum/network.rb b/lib/ferrum/network.rb index 6d8c2c31..005f2097 100644 --- a/lib/ferrum/network.rb +++ b/lib/ferrum/network.rb @@ -380,16 +380,24 @@ def subscribe_request_will_be_sent # We can build exchange in two places, here on the event or when request # is interrupted. So we have to be careful when to create new one. We - # create new exchange only if there's no with such id or there's but + # create new exchange only if there's no with such id or there's, but # it's filled with request which means this one is new but has response # for a redirect. So we assign response from the params to previous # exchange and build new exchange to assign this request to it. exchange = select(request.id).last - exchange = build_exchange(request.id) unless exchange&.blank? + exchange = build_exchange(request.id) if exchange.nil? || !exchange.blank? + request.headers.merge!(Hash(exchange.request_extra_info&.dig("headers"))) exchange.request = request @exchange = exchange if exchange.navigation_request?(@page.main_frame.id) end + + @page.on("Network.requestWillBeSentExtraInfo") do |params| + exchange = select(params["requestId"]).last + exchange ||= build_exchange(params["requestId"]) + exchange.request_extra_info = params + exchange.request&.headers&.merge!(params["headers"]) + end end def subscribe_response_received diff --git a/lib/ferrum/network/exchange.rb b/lib/ferrum/network/exchange.rb index eef99d8f..f3f261be 100644 --- a/lib/ferrum/network/exchange.rb +++ b/lib/ferrum/network/exchange.rb @@ -28,6 +28,9 @@ class Exchange # @return [Error, nil] attr_accessor :error + # @api private + attr_accessor :request_extra_info + # # Initializes the network exchange. # @@ -40,6 +43,7 @@ def initialize(page, id) @page = page @intercepted_request = nil @request = @response = @error = nil + @request_extra_info = nil end # From e3c933d084fab353bf1202b3aead5d0ab6b44989 Mon Sep 17 00:00:00 2001 From: Dmitry Vorotilin Date: Fri, 20 Dec 2024 11:28:33 +0300 Subject: [PATCH 2/3] chore: Add PR number to CHANGELOG --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d1d3f37c..7a392784 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ### Added -`Ferrum::Network::Request#headers` are enhanced and supplemented with `Network.requestWillBeSentExtraInfo` +`Ferrum::Network::Request#headers` are enhanced and supplemented with `Network.requestWillBeSentExtraInfo` [#506] ### Changed From ae9131f3fb14691bb8748588e023b7dc79d1f83f Mon Sep 17 00:00:00 2001 From: Dmitry Vorotilin Date: Fri, 20 Dec 2024 13:44:15 +0300 Subject: [PATCH 3/3] fix: build Chrome is broken on GA giving: [FATAL:setuid_sandbox_host.cc(163)] The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now. You need to make sure that /opt/hostedtoolcache/setup-chrome/chromium/stable/x64/chrome-sandbox is owned by root and has mode 4755. --- .github/workflows/tests.yml | 5 +++++ spec/spec_helper.rb | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 788cfddc..c17b917c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -31,6 +31,11 @@ jobs: with: chrome-version: stable + - name: Fix GA Chrome Permissions + run: | + sudo chown root:root /opt/hostedtoolcache/setup-chrome/chromium/stable/x64/chrome-sandbox + sudo chmod 4755 /opt/hostedtoolcache/setup-chrome/chromium/stable/x64/chrome-sandbox + - name: Run tests run: | mkdir -p /tmp/ferrum diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 9f94527b..4c944a29 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -46,7 +46,7 @@ end config.after(:all) do - @browser.quit + @browser&.quit end config.before(:each) do