Fixes the remaining two paths from #139: JS-level fetch()/XHR (op_fetch_url) and dynamic ES module imports (ObscuraModuleLoader) both built their reqwest clients with `Client::builder().build()` — no proxy — so every JS-initiated network call silently bypassed BrowserContext.proxy_url. (The third path, StealthHttpClient, was already fixed in main: page.rs:61 uses with_proxy.) Changes: * obscura-net: expose ObscuraHttpClient::proxy_url() so callers outside the crate can route their own reqwest requests through the same upstream proxy. The field was already there — just lacked an accessor. * obscura-js/module_loader: add `proxy_url: Option<String>` and `with_proxy(base_url, proxy_url)`. ObscuraModuleLoader::new keeps the pre-#139 direct-connection behaviour. load() builds a reqwest client per import, threading the proxy and bubbling up "Invalid module proxy" on bad URLs. * obscura-js/ops.rs: replace the process-wide `static SHARED_HTTP_CLIENT: OnceLock<reqwest::Client>` (which could never be reconfigured after first call) with a per-request `build_request_client(proxy_url)` that pulls the configured proxy out of SharedState.http_client.proxy_url() each call. Per-request build cost is ~1ms vs the network round-trip, and we no longer have a global singleton that lies about its config. * obscura-js/runtime: add ObscuraJsRuntime::with_base_url_and_proxy. with_base_url delegates to it with None so existing tests / callers are unaffected. * obscura-browser/page.rs: thread context.proxy_url through to with_base_url_and_proxy when constructing the JS runtime.
This commit is contained in:
1 parent
a750797d15
commit
f3c783f6f5
5 files changed
+139
-16
No files matched your search
@@ -136,7 +136,14 @@ impl Page {
|
||||
return;
|
||||
}
|
||||
|
||||
let mut rt = ObscuraJsRuntime::with_base_url(&self.url_string());
|
||||
// Thread the BrowserContext's proxy through to the ES-module loader
|
||||
// and op_fetch_url so dynamic imports and JS fetch() honour the
|
||||
// configured upstream proxy (#139). When proxy_url is None this is
|
||||
// equivalent to with_base_url() (direct connection).
|
||||
let mut rt = ObscuraJsRuntime::with_base_url_and_proxy(
|
||||
&self.url_string(),
|
||||
self.context.proxy_url.clone(),
|
||||
);
|
||||
rt.set_url(&self.url_string());
|
||||
rt.set_title(&self.title);
|
||||
|
||||
|
||||
Reference in new issue
Block a user