pub mod api;
pub mod bridge;
pub mod browser;
pub mod connection;
pub mod error;
pub mod transport;
pub mod types;
pub use browser::Browser;
pub use bridge::BridgeError;
pub use error::{CdpError, ConnectError, Result};
pub use transport::{
CdpEvent, InMemoryBridge, InMemoryBridgeResponse, InMemoryTransport, Transport, TransportKind,
WebSocketTransport,
};
pub use api::accessibility::{AXNode, Accessibility};
pub use api::browser::{Browser as HighLevelBrowser, BrowserOptions, Pid};
pub use api::browser_context::{BrowserContext, ContextOptions, PermissionOverride};
pub use api::console_message::ConsoleMessage;
pub use api::coverage::Coverage;
pub use api::dialog::{Dialog, DialogType};
pub use api::element_handle::{BoundingBox, ElementHandle};
pub use api::frame::{ExecutionContext, Frame};
pub use api::js_handle::JSHandle;
pub use api::keyboard::Keyboard;
pub use api::mouse::{Mouse, MouseButton};
pub use api::page::{Page, TargetInfo as PageTargetInfo, Viewport as PageViewport, Worker};
pub use api::request::Request;
pub use api::response::Response;
pub use api::touchscreen::Touchscreen;
pub use api::tracing::Tracing;
pub use api::event_emitter::{
EventEmitter, EventEmitterInner, EventHandler, HandlerId, SubscriptionResult,
};
pub use bridge::{
dispatch_command, translate as translate_event, ConsoleLevel, EventSubscriber, ServoEvent,
};
pub fn translate_servo_event(event: ServoEvent) -> Vec<crate::CdpEvent> {
translate_event(event)
}
pub use bridge::{
BoxModel, CDPRdpBridge, CSSProperty, CSSStyle, DeviceMetrics, EvaluateResult, ExceptionDetails,
Frame as BridgeFrame, FrameTree, KeyEvent, LayoutMetrics, MatchedRule, MatchedStyles,
MockServoBackend, MouseEvent, NavigateResult, NavigationEntry, NavigationHistory,
NodeDescriptor, PropertyDescriptor, RemoteObject, ResponseBody, ServoBackend, TargetInfo,
TouchPoint,
};
pub use bridge::ScreenshotFormat as BridgeScreenshotFormat;
pub use connection::{
Connection, ConnectionConfig, EventListener, EventListenerId, ParsedConnectUrl,
};
pub use types::{Cookie, DeviceDescriptor, ScreenshotFormat, Viewport, WaitUntilState};
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
pub fn version() -> &'static str {
VERSION
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn version_is_non_empty() {
assert!(!VERSION.is_empty());
assert!(VERSION.contains('.'));
assert_eq!(version(), VERSION);
}
#[test]
fn reexport_browser_callable() {
let b = Browser::connect("memory://bao").unwrap();
assert!(b.is_in_memory());
}
#[test]
fn reexport_connect_error_matches() {
let err = Browser::connect("ftp://x").unwrap_err();
assert!(matches!(err, ConnectError::InvalidScheme(_)));
}
#[test]
fn reexport_transport_kind() {
let b = Browser::connect("memory://bao").unwrap();
assert_eq!(b.transport_kind(), TransportKind::InMemory);
let p = Browser::route("ws://127.0.0.1:9222").unwrap();
assert_eq!(p.transport_kind, TransportKind::WebSocket);
}
#[test]
fn public_api_surface_compiles() {
let _ = Browser::connect;
let _: Option<CdpError> = None;
let _: Option<ConnectError> = None;
let _: Option<BridgeError> = None;
let _: Option<Box<dyn Transport>> = None;
let _: TransportKind = TransportKind::InMemory;
let _: Option<CdpEvent> = None;
fn _assert_types(
_: HighLevelBrowser,
_: BrowserOptions,
_: Pid,
_: BrowserContext,
_: ContextOptions,
_: PermissionOverride,
_: Page,
_: PageTargetInfo,
_: PageViewport,
_: Worker,
_: Frame,
_: ExecutionContext,
_: ElementHandle,
_: BoundingBox,
_: JSHandle,
_: Request,
_: Response,
_: Dialog,
_: DialogType,
_: ConsoleMessage,
_: Keyboard,
_: MouseButton,
_: Mouse,
_: Touchscreen,
_: Coverage,
_: Tracing,
_: Accessibility,
_: AXNode,
_: HandlerId,
_: Cookie,
_: Viewport,
_: DeviceDescriptor,
_: ScreenshotFormat,
_: WaitUntilState,
) {
}
let _ = _assert_types;
let _: &'static str = VERSION;
}
#[test]
fn public_types_basic_roundtrip() {
let c = Cookie::new("name", "value").with_domain("example.com");
let json = serde_json::to_string(&c).unwrap();
let back: Cookie = serde_json::from_str(&json).unwrap();
assert_eq!(c, back);
assert_eq!(ScreenshotFormat::Png.as_cdp_str(), "png");
assert_eq!(WaitUntilState::Load.as_str(), "load");
}
}