use crate::actor::Page;
use crate::browser::cdp::CdpClient;
use crate::browser::views::{SessionInfo, TabInfo};
use crate::error::Result;
use async_trait::async_trait;
use std::sync::Arc;
#[async_trait]
pub trait BrowserClient: Send + Sync {
async fn start(&mut self) -> Result<()>;
async fn stop(&mut self) -> Result<()> {
Ok(())
}
async fn navigate(&mut self, url: &str) -> Result<()>;
async fn get_current_url(&self) -> Result<String>;
async fn create_tab(&mut self, url: Option<&str>) -> Result<String>;
async fn switch_to_tab(&mut self, target_id: &str) -> Result<()>;
async fn close_tab(&mut self, target_id: &str) -> Result<()>;
async fn get_tabs(&self) -> Result<Vec<TabInfo>>;
async fn get_target_id_from_tab_id(&self, tab_id: &str) -> Result<String>;
fn get_page(&self) -> Result<Page>;
async fn take_screenshot(&self, path: Option<&str>, full_page: bool) -> Result<Vec<u8>>;
#[deprecated(since = "0.1.2", note = "Use get_session_info() instead")]
async fn get_current_page_title(&self) -> Result<String>;
fn get_cdp_client(&self) -> Result<Arc<CdpClient>>;
fn cookie_manager(&self) -> Result<crate::browser::cookies::CookieManager> {
let client = self.get_cdp_client()?;
Ok(crate::browser::cookies::CookieManager::new(client))
}
fn console_manager(&self) -> Result<crate::browser::console::ConsoleManager> {
let client = self.get_cdp_client()?;
Ok(crate::browser::console::ConsoleManager::new(client))
}
fn storage_manager(&self) -> crate::browser::storage::StorageManager {
crate::browser::storage::StorageManager::new()
}
fn viewport_manager(&self) -> crate::error::Result<crate::browser::viewport::ViewportManager> {
let client = self.get_cdp_client()?;
Ok(crate::browser::viewport::ViewportManager::new(client))
}
fn pdf_manager(&self) -> crate::error::Result<crate::browser::pdf::PdfManager> {
let client = self.get_cdp_client()?;
Ok(crate::browser::pdf::PdfManager::new(client))
}
fn download_manager(&self) -> crate::error::Result<crate::browser::download::DownloadManager> {
let client = self.get_cdp_client()?;
Ok(crate::browser::download::DownloadManager::new(client))
}
fn auth_manager(&self) -> crate::error::Result<crate::browser::auth::AuthManager> {
let client = self.get_cdp_client()?;
Ok(crate::browser::auth::AuthManager::new(client))
}
fn performance_manager(&self) -> crate::error::Result<crate::browser::performance::PerformanceManager> {
let client = self.get_cdp_client()?;
Ok(crate::browser::performance::PerformanceManager::new(client))
}
fn har_manager(&self) -> crate::error::Result<crate::browser::har::HarManager> {
let client = self.get_cdp_client()?;
Ok(crate::browser::har::HarManager::new(client))
}
fn coverage_manager(&self) -> crate::error::Result<crate::browser::coverage::CoverageManager> {
let client = self.get_cdp_client()?;
Ok(crate::browser::coverage::CoverageManager::new(client))
}
fn network_interceptor(&self) -> crate::error::Result<crate::browser::interceptor::NetworkInterceptor> {
let client = self.get_cdp_client()?;
Ok(crate::browser::interceptor::NetworkInterceptor::new(client))
}
fn dialog_manager(&self) -> crate::error::Result<crate::browser::dialog::DialogManager> {
let client = self.get_cdp_client()?;
Ok(crate::browser::dialog::DialogManager::new(client))
}
fn filechooser_manager(&self) -> crate::error::Result<crate::browser::filechooser::FileChooserManager> {
let client = self.get_cdp_client()?;
Ok(crate::browser::filechooser::FileChooserManager::new(client))
}
fn permissions_manager(&self) -> crate::error::Result<crate::browser::permissions::PermissionsManager> {
let client = self.get_cdp_client()?;
Ok(crate::browser::permissions::PermissionsManager::new(client))
}
fn tracing_manager(&self) -> crate::error::Result<crate::browser::tracing::TracingManager> {
let client = self.get_cdp_client()?;
Ok(crate::browser::tracing::TracingManager::new(client))
}
async fn raw_cdp_command(&self, method: &str, params: serde_json::Value) -> crate::error::Result<serde_json::Value> {
let client = self.get_cdp_client()?;
client.send_command(method, params).await
}
fn touch_manager(&self) -> crate::error::Result<crate::browser::touch::TouchManager> {
let client = self.get_cdp_client()?;
Ok(crate::browser::touch::TouchManager::new(client))
}
fn worker_manager(&self) -> crate::error::Result<crate::browser::worker::WorkerManager> {
let client = self.get_cdp_client()?;
Ok(crate::browser::worker::WorkerManager::new(client))
}
fn service_worker_manager(&self) -> crate::error::Result<crate::browser::serviceworker::ServiceWorkerManager> {
let client = self.get_cdp_client()?;
Ok(crate::browser::serviceworker::ServiceWorkerManager::new(client))
}
#[deprecated(since = "0.1.2", note = "Use get_session_info() instead")]
fn get_session_id(&self) -> Result<String>;
#[deprecated(since = "0.1.2", note = "Use get_session_info() instead")]
fn get_current_target_id(&self) -> Result<String>;
async fn get_session_info(&self) -> Result<SessionInfo>;
}