cdp_core/network/
cookies.rs1use crate::error::Result;
2use crate::page::Page;
3use async_trait::async_trait;
4use serde::{Deserialize, Serialize};
5
6pub use cdp_protocol::network::{Cookie, CookiePriority, CookieSameSite};
8
9#[derive(Debug, Serialize, Deserialize, Clone, Default)]
12pub struct SetCookieParams {
13 pub name: String,
14 pub value: String,
15 pub url: Option<String>,
16 pub domain: Option<String>,
17 pub path: Option<String>,
18 pub secure: Option<bool>,
19 pub http_only: Option<bool>,
20 pub same_site: Option<cdp_protocol::network::CookieSameSite>,
21 pub expires: Option<f64>, pub priority: Option<cdp_protocol::network::CookiePriority>,
23}
24
25#[async_trait]
26pub trait CookieManager {
27 async fn get_cookies(&self, urls: Option<Vec<String>>) -> Result<Vec<Cookie>>;
29
30 async fn set_cookie(&self, cookie: SetCookieParams) -> Result<bool>;
32
33 async fn delete_cookies(
35 &self,
36 name: &str,
37 url: Option<String>,
38 domain: Option<String>,
39 path: Option<String>,
40 ) -> Result<()>;
41
42 async fn clear_browser_cookies(&self) -> Result<()>;
44}
45
46#[async_trait]
47impl CookieManager for Page {
48 async fn get_cookies(&self, urls: Option<Vec<String>>) -> Result<Vec<Cookie>> {
49 use cdp_protocol::network::{GetCookies, GetCookiesReturnObject};
50
51 let params = GetCookies { urls };
52 let result: GetCookiesReturnObject = self.session.send_command(params, None).await?;
53 Ok(result.cookies)
54 }
55
56 async fn set_cookie(&self, cookie: SetCookieParams) -> Result<bool> {
57 use cdp_protocol::network::{SetCookie, SetCookieReturnObject};
58
59 let params = SetCookie {
60 name: cookie.name,
61 value: cookie.value,
62 url: cookie.url,
63 domain: cookie.domain,
64 path: cookie.path,
65 secure: cookie.secure,
66 http_only: cookie.http_only,
67 same_site: cookie.same_site,
68 expires: cookie.expires,
69 priority: cookie.priority,
70 same_party: None,
71 source_scheme: None,
72 source_port: None,
73 partition_key: None,
74 };
75
76 let result: SetCookieReturnObject = self.session.send_command(params, None).await?;
77 Ok(result.success)
78 }
79
80 async fn delete_cookies(
81 &self,
82 name: &str,
83 url: Option<String>,
84 domain: Option<String>,
85 path: Option<String>,
86 ) -> Result<()> {
87 use cdp_protocol::network::{DeleteCookies, DeleteCookiesReturnObject};
88
89 let params = DeleteCookies {
90 name: name.to_string(),
91 url,
92 domain,
93 path,
94 partition_key: None,
95 };
96
97 self.session
98 .send_command::<_, DeleteCookiesReturnObject>(params, None)
99 .await?;
100 Ok(())
101 }
102
103 async fn clear_browser_cookies(&self) -> Result<()> {
104 use cdp_protocol::network::{ClearBrowserCookies, ClearBrowserCookiesReturnObject};
105
106 let params = ClearBrowserCookies(None);
107 self.session
108 .send_command::<_, ClearBrowserCookiesReturnObject>(params, None)
109 .await?;
110 Ok(())
111 }
112}