use std::time::Duration;
use chromiumoxide::cdp::js_protocol::runtime::EvaluateParams;
use chromiumoxide::Page;
use crate::error::{AuditError, Result};
pub const DEFAULT_SETTLE_MS: u64 = 150;
pub async fn wait_for_stable(page: &Page, duration_ms: u64) -> Result<()> {
let js = "new Promise(function(r) { requestAnimationFrame(function() { requestAnimationFrame(r); }); })";
let params = EvaluateParams::builder()
.expression(js.to_string())
.await_promise(true)
.build()
.map_err(|e| AuditError::InteractionFailed {
reason: format!("settle build failed: {e}"),
})?;
if page.execute(params).await.is_err() {
tokio::time::sleep(Duration::from_millis(duration_ms)).await;
}
Ok(())
}
pub async fn settle(page: &Page) -> Result<()> {
wait_for_stable(page, DEFAULT_SETTLE_MS).await
}