fix: filter chrome:// internal targets from auto-connect discovery (#827)
When using --auto-connect, discover_and_attach_targets() was selecting Chrome internal pages (chrome://, chrome-extension://, devtools://) as the active target. Follow-up commands like `get url` and `snapshot` would then return data from targets like chrome://omnibox-popup.top-chrome/ instead of the actual application tab. Add is_internal_chrome_target() filter to exclude internal Chrome targets from the discovery results. If no user-facing targets remain after filtering, the existing "create a new tab" fallback handles it. Fixes #813 Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
This commit is contained in:
co-authored by
Matt Van Horn
parent
609f32c986
commit
8348b77800
@@ -87,6 +87,14 @@ fn validate_lightpanda_options(options: &LaunchOptions) -> Result<(), String> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Returns true for Chrome internal targets that should not be selected
|
||||
/// during auto-connect (e.g. chrome://, chrome-extension://, devtools://).
|
||||
fn is_internal_chrome_target(url: &str) -> bool {
|
||||
url.starts_with("chrome://")
|
||||
|| url.starts_with("chrome-extension://")
|
||||
|| url.starts_with("devtools://")
|
||||
}
|
||||
|
||||
/// Converts common error messages into AI-friendly, actionable descriptions.
|
||||
pub fn to_ai_friendly_error(error: &str) -> String {
|
||||
let lower = error.to_lowercase();
|
||||
@@ -327,7 +335,9 @@ impl BrowserManager {
|
||||
.target_infos
|
||||
.into_iter()
|
||||
.filter(|t| {
|
||||
(t.target_type == "page" || t.target_type == "webview") && !t.url.is_empty()
|
||||
(t.target_type == "page" || t.target_type == "webview")
|
||||
&& !t.url.is_empty()
|
||||
&& !is_internal_chrome_target(&t.url)
|
||||
})
|
||||
.collect();
|
||||
|
||||
@@ -1442,4 +1452,21 @@ mod tests {
|
||||
));
|
||||
assert!(err.contains("Target.setDiscoverTargets failed"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_is_internal_chrome_target() {
|
||||
assert!(is_internal_chrome_target("chrome://newtab/"));
|
||||
assert!(is_internal_chrome_target(
|
||||
"chrome://omnibox-popup.top-chrome/"
|
||||
));
|
||||
assert!(is_internal_chrome_target(
|
||||
"chrome-extension://abc123/popup.html"
|
||||
));
|
||||
assert!(is_internal_chrome_target(
|
||||
"devtools://devtools/bundled/inspector.html"
|
||||
));
|
||||
assert!(!is_internal_chrome_target("https://example.com"));
|
||||
assert!(!is_internal_chrome_target("http://localhost:3000"));
|
||||
assert!(!is_internal_chrome_target("about:blank"));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user