use std::ops::Deref;
use crate::Result;
use crate::cdp::{ChromiumBrowser, ChromiumOptions, ChromiumTab};
pub struct ChromiumPage {
browser: ChromiumBrowser,
tab: ChromiumTab,
}
impl ChromiumPage {
pub async fn new() -> Result<Self> {
Self::from_browser(ChromiumBrowser::launch_default().await?).await
}
pub async fn headless() -> Result<Self> {
Self::with(ChromiumOptions::new().headless(true)).await
}
pub async fn with(opts: ChromiumOptions) -> Result<Self> {
Self::from_browser(ChromiumBrowser::launch(opts).await?).await
}
pub async fn connect(debug_http_url: &str) -> Result<Self> {
Self::from_browser(ChromiumBrowser::connect(debug_http_url).await?).await
}
pub async fn connect_with(debug_http_url: &str, opts: ChromiumOptions) -> Result<Self> {
Self::from_browser(ChromiumBrowser::connect_with(debug_http_url, opts).await?).await
}
pub async fn from_browser(browser: ChromiumBrowser) -> Result<Self> {
let tab = browser.latest_tab().await?;
Ok(Self { browser, tab })
}
pub fn browser(&self) -> &ChromiumBrowser {
&self.browser
}
pub fn tab(&self) -> &ChromiumTab {
&self.tab
}
pub async fn new_tab(&self, url: Option<&str>) -> Result<ChromiumTab> {
self.browser.new_tab(url).await
}
pub async fn quit(&self) -> Result<()> {
self.browser.quit().await
}
}
impl Deref for ChromiumPage {
type Target = ChromiumTab;
fn deref(&self) -> &ChromiumTab {
&self.tab
}
}