Skip to main content

multitab_concurrent/
multitab_concurrent.rs

1use 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    // Create 3 isolated tabs with different device profiles
14    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}