#![allow(clippy::all, missing_docs, unused_imports)]
use serde::{Deserialize, Serialize};
use super::*;
use crate::playwright::connection::{
Binary, Channel, ChannelType, ObjectRef, ProtocolError, ProtocolEvent, Ref,
};
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum BrowserInitializerBrowserName {
#[default]
#[serde(rename = "chromium")]
Chromium,
#[serde(rename = "firefox")]
Firefox,
#[serde(rename = "webkit")]
Webkit,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct BrowserInitializer {
#[serde(rename = "version")]
pub version: String,
#[serde(rename = "name")]
pub name: String,
#[serde(rename = "browserName")]
pub browser_name: BrowserInitializerBrowserName,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct BrowserStartServerParams {
#[serde(rename = "title")]
pub title: String,
#[serde(rename = "workspaceDir", default, skip_serializing_if = "Option::is_none")]
pub workspace_dir: Option<String>,
#[serde(rename = "metadata", default, skip_serializing_if = "Option::is_none")]
pub metadata: Option<serde_json::Value>,
#[serde(rename = "host", default, skip_serializing_if = "Option::is_none")]
pub host: Option<String>,
#[serde(rename = "port", default, skip_serializing_if = "Option::is_none")]
pub port: Option<i64>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct BrowserStartServerResult {
#[serde(rename = "endpoint")]
pub endpoint: String,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct BrowserCloseParams {
#[serde(rename = "reason", default, skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct BrowserDefaultUserAgentForTestResult {
#[serde(rename = "userAgent")]
pub user_agent: String,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct BrowserNewContextParamsProxy {
#[serde(rename = "server")]
pub server: String,
#[serde(rename = "bypass", default, skip_serializing_if = "Option::is_none")]
pub bypass: Option<String>,
#[serde(rename = "username", default, skip_serializing_if = "Option::is_none")]
pub username: Option<String>,
#[serde(rename = "password", default, skip_serializing_if = "Option::is_none")]
pub password: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct BrowserNewContextParamsStorageState {
#[serde(rename = "cookies", default, skip_serializing_if = "Option::is_none")]
pub cookies: Option<Vec<SetNetworkCookie>>,
#[serde(rename = "origins", default, skip_serializing_if = "Option::is_none")]
pub origins: Option<Vec<SetOriginStorage>>,
#[serde(rename = "credentials", default, skip_serializing_if = "Option::is_none")]
pub credentials: Option<Vec<VirtualCredential>>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct BrowserNewContextParams {
#[serde(flatten)]
pub context_options: ContextOptions,
#[serde(rename = "proxy", default, skip_serializing_if = "Option::is_none")]
pub proxy: Option<BrowserNewContextParamsProxy>,
#[serde(rename = "storageState", default, skip_serializing_if = "Option::is_none")]
pub storage_state: Option<BrowserNewContextParamsStorageState>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct BrowserNewContextResult {
#[serde(rename = "context")]
pub context: Ref<BrowserContext>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct BrowserNewContextForReuseParamsProxy {
#[serde(rename = "server")]
pub server: String,
#[serde(rename = "bypass", default, skip_serializing_if = "Option::is_none")]
pub bypass: Option<String>,
#[serde(rename = "username", default, skip_serializing_if = "Option::is_none")]
pub username: Option<String>,
#[serde(rename = "password", default, skip_serializing_if = "Option::is_none")]
pub password: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct BrowserNewContextForReuseParamsStorageState {
#[serde(rename = "cookies", default, skip_serializing_if = "Option::is_none")]
pub cookies: Option<Vec<SetNetworkCookie>>,
#[serde(rename = "origins", default, skip_serializing_if = "Option::is_none")]
pub origins: Option<Vec<SetOriginStorage>>,
#[serde(rename = "credentials", default, skip_serializing_if = "Option::is_none")]
pub credentials: Option<Vec<VirtualCredential>>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct BrowserNewContextForReuseParams {
#[serde(flatten)]
pub context_options: ContextOptions,
#[serde(rename = "proxy", default, skip_serializing_if = "Option::is_none")]
pub proxy: Option<BrowserNewContextForReuseParamsProxy>,
#[serde(rename = "storageState", default, skip_serializing_if = "Option::is_none")]
pub storage_state: Option<BrowserNewContextForReuseParamsStorageState>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct BrowserNewContextForReuseResult {
#[serde(rename = "context")]
pub context: Ref<BrowserContext>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct BrowserDisconnectFromReusedContextParams {
#[serde(rename = "reason")]
pub reason: String,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct BrowserNewBrowserCDPSessionResult {
#[serde(rename = "session")]
pub session: Ref<CDPSession>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct BrowserStartTracingParams {
#[serde(rename = "page", default, skip_serializing_if = "Option::is_none")]
pub page: Option<Ref<Page>>,
#[serde(rename = "screenshots", default, skip_serializing_if = "Option::is_none")]
pub screenshots: Option<bool>,
#[serde(rename = "categories", default, skip_serializing_if = "Option::is_none")]
pub categories: Option<Vec<String>>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct BrowserStopTracingResult {
#[serde(rename = "artifact")]
pub artifact: Ref<Artifact>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct BrowserContextEventParams {
#[serde(rename = "context")]
pub context: Ref<BrowserContext>,
}
#[derive(Debug, Clone, PartialEq)]
pub enum BrowserEvent {
Context(BrowserContextEventParams),
Close,
Unknown {
method: String,
params: serde_json::Value,
},
}
impl ProtocolEvent for BrowserEvent {
fn parse(method: &str, params: serde_json::Value) -> Result<Self, serde_json::Error> {
match method {
"context" => Ok(Self::Context(serde_json::from_value(params)?)),
"close" => Ok(Self::Close),
_ => Ok(Self::Unknown { method: method.to_string(), params }),
}
}
}
#[derive(Debug, Clone)]
pub struct Browser {
channel: Channel,
}
impl ChannelType for Browser {
const INTERFACE: &'static str = "Browser";
type Initializer = BrowserInitializer;
type Event = BrowserEvent;
fn accepts(interface: &str) -> bool {
matches!(interface, "Browser")
}
fn from_channel(channel: Channel) -> Self {
Self { channel }
}
fn channel(&self) -> &Channel {
&self.channel
}
}
impl Browser {
pub async fn start_server(&self, params: BrowserStartServerParams) -> Result<BrowserStartServerResult, ProtocolError> {
self.channel.send("startServer", ¶ms).await
}
pub async fn stop_server(&self) -> Result<(), ProtocolError> {
self.channel.send_no_result("stopServer", &serde_json::json!({})).await
}
pub async fn close(&self, params: BrowserCloseParams) -> Result<(), ProtocolError> {
self.channel.send_no_result("close", ¶ms).await
}
pub async fn kill_for_tests(&self) -> Result<(), ProtocolError> {
self.channel.send_no_result("killForTests", &serde_json::json!({})).await
}
pub async fn default_user_agent_for_test(&self) -> Result<BrowserDefaultUserAgentForTestResult, ProtocolError> {
self.channel.send("defaultUserAgentForTest", &serde_json::json!({})).await
}
pub async fn new_context(&self, params: BrowserNewContextParams) -> Result<BrowserNewContextResult, ProtocolError> {
self.channel.send("newContext", ¶ms).await
}
pub async fn new_context_for_reuse(&self, params: BrowserNewContextForReuseParams) -> Result<BrowserNewContextForReuseResult, ProtocolError> {
self.channel.send("newContextForReuse", ¶ms).await
}
pub async fn disconnect_from_reused_context(&self, params: BrowserDisconnectFromReusedContextParams) -> Result<(), ProtocolError> {
self.channel.send_no_result("disconnectFromReusedContext", ¶ms).await
}
pub async fn new_browser_cdp_session(&self) -> Result<BrowserNewBrowserCDPSessionResult, ProtocolError> {
self.channel.send("newBrowserCDPSession", &serde_json::json!({})).await
}
pub async fn start_tracing(&self, params: BrowserStartTracingParams) -> Result<(), ProtocolError> {
self.channel.send_no_result("startTracing", ¶ms).await
}
pub async fn stop_tracing(&self) -> Result<BrowserStopTracingResult, ProtocolError> {
self.channel.send("stopTracing", &serde_json::json!({})).await
}
}