multitab_concurrent/
multitab_concurrent.rs1use anyhow::Result;
2use headless_engine::browser::engine::BrowserEngine;
3use headless_engine::network::fingerprint::DeviceProfile;
4
5#[tokio::main]
6async fn main() -> Result<()> {
7 println!("================================================================================");
8 println!(">>> MULTI-TAB CONCURRENT ENGINE DEMO (<50MB RAM)");
9 println!("================================================================================\n");
10
11 let mut engine = BrowserEngine::new()?;
12
13 let tab1_id = engine.create_tab(Some(DeviceProfile::ChromeWindows))?;
15 let tab2_id = engine.create_tab(Some(DeviceProfile::SafariMac))?;
16 let tab3_id = engine.create_tab(Some(DeviceProfile::SafariIos))?;
17
18 println!("Created tabs: {}, {}, {}", tab1_id, tab2_id, tab3_id);
19
20 println!("[Tab 1: Chrome Windows] Navigating to Wikipedia...");
21 let r1 = engine
22 .get_tab_mut(&tab1_id)
23 .unwrap()
24 .navigate("https://en.wikipedia.org/wiki/Artificial_intelligence")
25 .await?;
26 println!(" -> Tab 1 Title: {}", r1.page_title);
27
28 println!("[Tab 2: Safari Mac] Navigating to Hacker News...");
29 let r2 = engine
30 .get_tab_mut(&tab2_id)
31 .unwrap()
32 .navigate("https://news.ycombinator.com/")
33 .await?;
34 println!(" -> Tab 2 Title: {}", r2.page_title);
35
36 println!("[Tab 3: iPhone iOS] Navigating to GitHub Explore...");
37 let r3 = engine
38 .get_tab_mut(&tab3_id)
39 .unwrap()
40 .navigate("https://github.com/trending")
41 .await?;
42 println!(" -> Tab 3 Title: {}", r3.page_title);
43
44 println!("\n>>> Active Tabs List:");
45 for tab_info in engine.list_tabs() {
46 println!(
47 " - ID: {:<8} Profile: {:<15} URL: {:?}",
48 tab_info.id,
49 format!("{:?}", tab_info.profile),
50 tab_info.url
51 );
52 }
53
54 println!("\n>>> Closing Tab 2...");
55 engine.close_tab(&tab2_id);
56 println!("Remaining tabs count: {}", engine.list_tabs().len());
57
58 Ok(())
59}