Skip to content
Open
Show file tree
Hide file tree
Changes from 59 commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
624e1ef
feat(firefox): network control and emulation on Firefox
lahfir Oct 30, 2026
2e61c4f
fix(firefox): retain HAR request bodies and elapsed time
lahfir Nov 5, 2026
e16d59e
fix(firefox): complete native HTML5 drag gestures
lahfir Nov 5, 2026
aedffcf
fix(firefox): read the active page through BiDi
lahfir Nov 5, 2026
abfcae2
fix(firefox): complete HTML5 drags with DOM events
lahfir Nov 6, 2026
c16ee86
Merge updated Firefox commands into network support
lahfir Nov 6, 2026
8c2c76d
Merge restored Firefox element fixtures
lahfir Nov 6, 2026
aa56451
Keep Firefox proxy credentials scoped to their settings
lahfir Nov 6, 2026
55acbd3
fix(firefox): track repeated downloads on Firefox 150
lahfir Nov 6, 2026
807eb00
Merge commit '0999849b2ec84b6e50046fca146be84b65f20b06' into HEAD
lahfir Nov 6, 2026
b1bebfb
fix(firefox): track request bodies and link downloads
lahfir Nov 6, 2026
d2d0392
Merge Firefox state fixes into network and emulation
lahfir Nov 6, 2026
a519b2d
Merge shared CI fixes and retain Firefox network regressions
lahfir Nov 6, 2026
550912f
Merge commit '31e81cd66137ecbc9555d206384a93825dcbe0d3' into HEAD
lahfir Nov 6, 2026
59a16aa
fix: align regression tests with integrated browser code
lahfir Nov 6, 2026
64aa676
Merge commit '87b84a1499742f1c47a51bd1d90bf2ad808a293c' into HEAD
lahfir Nov 6, 2026
d2c2972
style: format integrated Firefox regressions
lahfir Nov 6, 2026
04a11bb
Merge commit '4d620c9499a1c55c3fc7c615d2fb414442802790' into HEAD
lahfir Nov 6, 2026
e03e0e2
fix: correct docs fixtures and bound popup regression waits
lahfir Nov 6, 2026
e8f1a4d
Merge commit '8cd0758acf76ca0d0673c36f30c2d7b4847716de' into HEAD
lahfir Nov 6, 2026
6e0b125
fix(firefox): isolate storage export from user routes
lahfir Nov 6, 2026
d5a2848
Merge launch and tab fixes while retaining Firefox network support
lahfir Nov 6, 2026
bb4719b
fix(firefox): verify restore recovery and document capture limits
lahfir Nov 6, 2026
b439170
Merge final checks while retaining supported network options
lahfir Nov 6, 2026
cb301fd
fix(firefox): wait for network idle after navigation
lahfir Nov 6, 2026
2bf6e0d
test(firefox): accept the command deadline for idle waits
lahfir Nov 6, 2026
6be8668
Merge commit 'b6cbde342f23bbf04d0b561785531503f2be2fba' into HEAD
lahfir Nov 6, 2026
8e48447
Merge commit '1ddee9bdfa0bb0d007fd24c21722fb6bd34b8223' into HEAD
lahfir Nov 6, 2026
458ec96
fix(firefox): preserve origin auth and overlapping downloads
lahfir Nov 6, 2026
09064c8
Merge commit '5bfb843' into HEAD
lahfir Nov 6, 2026
3309592
test(firefox): check origin auth without blocking navigation
lahfir Nov 6, 2026
e0de4f4
fix(firefox): initialize the current HAR entry fields
lahfir Nov 6, 2026
26502cb
style(firefox): format the overlapping download assertion
lahfir Nov 6, 2026
871edaa
Merge commit '669c9e0' into HEAD
lahfir Nov 6, 2026
a40b43c
Merge commit 'ed3e979' into HEAD
lahfir Nov 6, 2026
44d6661
fix(firefox): scope networkidle waits to the active tab
lahfir Nov 6, 2026
4b37828
Merge commit '0a3bd0a2f4c1ea2f122f5bc81946bb29fb71a2f9' into HEAD
lahfir Nov 6, 2026
4238e05
Merge Firefox interaction and live dialog fixes into network support
lahfir Nov 7, 2026
a2ae6d6
Reuse the shared BiDi client in the fake Firefox session
lahfir Nov 7, 2026
71cf692
Keep Firefox media emulation on the active tab
lahfir Nov 7, 2026
2e49785
Test Firefox media emulation does not select background tabs
lahfir Nov 7, 2026
cd0fd17
Remove the unused RDP argument from background emulation
lahfir Nov 7, 2026
13707b7
Merge screenshot and CI coverage into network support
lahfir Nov 7, 2026
1663602
Remove the unused RDP dispatcher dependency
lahfir Nov 7, 2026
b621992
Merge PR Firefox test gating into network support
lahfir Nov 7, 2026
18025d7
Scope Firefox request recording to the active tab
lahfir Nov 7, 2026
ae6059f
Cover active child frames in request scope test
lahfir Nov 7, 2026
b8dad12
Prevent stale proxy credentials from reaching a new daemon
lahfir Nov 7, 2026
9978f37
Test proxy credential isolation for daemon launches
lahfir Nov 7, 2026
a928696
Format the Firefox request scope regression
lahfir Nov 7, 2026
1ab20dc
Restore DevTools support required by network emulation
lahfir Nov 7, 2026
5ca0cc4
Merge shared click preparation into network support
lahfir Nov 7, 2026
dec483a
Merge final interaction fixes into network support
lahfir Nov 7, 2026
d2689da
Merge fail-closed RDP timeout into network support
lahfir Nov 7, 2026
04ff1ad
Merge standard RDP reply handling into network support
lahfir Nov 7, 2026
c40b700
Merge RDP assertion formatting into network support
lahfir Nov 7, 2026
9228a85
Expose Firefox context parentage to network tests
lahfir Nov 7, 2026
17f86ba
Keep network-stage DevTools setup after merge
lahfir Nov 7, 2026
8a0febd
Allow Firefox accessibility snapshots more time in CI
lahfir Nov 7, 2026
367ff1e
fix(firefox): connect to DevTools once on launch
lahfir Nov 8, 2026
a0f42c4
Merge laf/bidi-snapshot-refs-input into laf/bidi-network-emulation
lahfir Nov 8, 2026
1832f15
Revert the longer Firefox accessibility timeout
lahfir Nov 8, 2026
f8aabc6
refactor(firefox): one intake for recorded events, one allowlist entr…
lahfir Nov 8, 2026
757a2f7
Merge laf/bidi-snapshot-refs-input into laf/bidi-network-emulation
lahfir Nov 8, 2026
4d43f67
Merge remote-tracking branch 'origin/laf/bidi-snapshot-refs-input' in…
lahfir Nov 8, 2026
81ac6ab
docs(firefox): authenticated proxies work, so stop listing them as re…
lahfir Nov 8, 2026
f75c7f5
Merge remote-tracking branch 'origin/laf/bidi-snapshot-refs-input' in…
lahfir Nov 8, 2026
fb567ba
Merge laf/bidi-snapshot-refs-input into laf/bidi-network-emulation
lahfir Nov 8, 2026
66c8806
Merge remote-tracking branch 'origin/laf/bidi-snapshot-refs-input' in…
lahfir Nov 8, 2026
90e0830
Merge remote-tracking branch 'origin/laf/bidi-snapshot-refs-input' in…
lahfir Nov 9, 2026
5c7374e
Merge laf/bidi-snapshot-refs-input into laf/bidi-network-emulation
lahfir Nov 9, 2026
fe42e9a
Merge remote-tracking branch 'origin/laf/bidi-snapshot-refs-input' in…
lahfir Nov 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ jobs:
run: cargo test --profile ci --manifest-path cli/Cargo.toml e2e -- --ignored --test-threads=1 --skip e2e_firefox

- name: Run Firefox e2e tests
run: cargo test --profile ci --manifest-path cli/Cargo.toml e2e_firefox -- --ignored --test-threads=1 --skip e2e_firefox_route_mock --skip e2e_firefox_allowed_domains --skip e2e_firefox_download --skip e2e_firefox_emulation
run: cargo test --profile ci --manifest-path cli/Cargo.toml e2e_firefox -- --ignored --test-threads=1

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Firefox suite now runs without skips, but none of these tests cover origin headers, HAR, console/errors, request detail, response body, offline, user-agent, locale, geolocation, or permissions, so regressions in those new handlers still pass CI.


windows-integration:
name: Windows Integration Test
Expand Down
43 changes: 37 additions & 6 deletions cli/src/connection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -592,16 +592,26 @@ fn apply_daemon_env(cmd: &mut Command, session: &str, opts: &DaemonOptions) {
}
if let Some(p) = opts.proxy {
cmd.env("AGENT_BROWSER_PROXY", p);
match opts.proxy_username {
Some(proxy_username) => {
cmd.env("AGENT_BROWSER_PROXY_USERNAME", proxy_username);
}
None => {
cmd.env_remove("AGENT_BROWSER_PROXY_USERNAME");
}
}
match opts.proxy_password {
Some(proxy_password) => {
cmd.env("AGENT_BROWSER_PROXY_PASSWORD", proxy_password);
}
None => {
cmd.env_remove("AGENT_BROWSER_PROXY_PASSWORD");
}
}
}
if let Some(pb) = opts.proxy_bypass {
cmd.env("AGENT_BROWSER_PROXY_BYPASS", pb);
}
if let Some(pu) = opts.proxy_username {
cmd.env("AGENT_BROWSER_PROXY_USERNAME", pu);
}
if let Some(pp) = opts.proxy_password {
cmd.env("AGENT_BROWSER_PROXY_PASSWORD", pp);
}
if opts.ignore_https_errors {
cmd.env("AGENT_BROWSER_IGNORE_HTTPS_ERRORS", "1");
}
Expand Down Expand Up @@ -1783,6 +1793,27 @@ mod tests {
);
}

#[test]
fn daemon_proxy_credentials_are_scoped_to_the_effective_proxy() {
let mut opts = test_daemon_options(None, false, None);
opts.proxy = Some("http://new-proxy:8080");
let mut cmd = Command::new("agent-browser");
apply_daemon_env(&mut cmd, "session", &opts);
let envs: std::collections::HashMap<_, _> = cmd.get_envs().collect();
assert_eq!(
envs.get(std::ffi::OsStr::new("AGENT_BROWSER_PROXY")),
Some(&Some(std::ffi::OsStr::new("http://new-proxy:8080")))
);
assert_eq!(
envs.get(std::ffi::OsStr::new("AGENT_BROWSER_PROXY_USERNAME")),
Some(&None)
);
assert_eq!(
envs.get(std::ffi::OsStr::new("AGENT_BROWSER_PROXY_PASSWORD")),
Some(&None)
);
}

#[test]
fn test_spawn_race_loser_does_not_overwrite_winner_config() {
let guard = EnvGuard::new(&["AGENT_BROWSER_SOCKET_DIR", "AGENT_BROWSER_NAMESPACE"]);
Expand Down
8 changes: 4 additions & 4 deletions cli/src/mcp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1287,14 +1287,14 @@ fn parity_tools() -> Vec<Value> {
tool(
TOOL_SET_VIEWPORT,
"Set viewport",
"Set viewport size. The optional scale must be finite.",
"Set viewport size. The optional scale must be finite. Firefox does not support mobile mode.",
json!({ "width": int_schema(), "height": int_schema(), "scale": number_schema() }),
&["width", "height"],
),
tool(
TOOL_SET_DEVICE,
"Set device",
"Emulate a device by name.",
"Emulate a device by name. Firefox does not support set device; use set viewport plus the --user-agent launch flag or AGENT_BROWSER_USER_AGENT instead of set device.",
json!({ "device": { "type": "string" } }),
&["device"],
),
Expand Down Expand Up @@ -1329,7 +1329,7 @@ fn parity_tools() -> Vec<Value> {
tool(
TOOL_SET_MEDIA,
"Set media",
"Set media emulation.",
"Set media emulation. Firefox does not support reduced motion.",
json!({ "colorScheme": { "type": "string", "enum": ["dark", "light", "no-preference"] }, "reducedMotion": { "type": "string", "enum": ["reduce", "no-preference"] } }),
&[],
),
Expand Down Expand Up @@ -2168,7 +2168,7 @@ fn shared_property(key: &str) -> Value {
"allowedDomains" => json!({
"type": "array",
"items": { "type": "string" },
"description": "Restrict browser and read traffic to these domain patterns."
"description": "Restrict browser and read traffic to these domain patterns, including non-HTTP document navigations. Chromium sessions also disable RTCPeerConnection while this is active."
}),
"capture" => json!({
"type": "array",
Expand Down
Loading
Loading