cbf_chrome/data/
tab_open.rs1use super::{
4 browsing_context_open::{ChromeBrowsingContextOpenHint, ChromeBrowsingContextOpenResult},
5 ids::TabId,
6};
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq)]
10pub enum TabOpenHint {
11 Unknown,
12 CurrentTab,
13 NewForegroundTab,
14 NewBackgroundTab,
15 NewWindow,
16 Popup,
17}
18
19impl TabOpenHint {
20 pub const fn to_browsing_context_open_hint(self) -> Option<ChromeBrowsingContextOpenHint> {
22 match self {
23 TabOpenHint::Unknown => Some(ChromeBrowsingContextOpenHint::Unknown),
24 TabOpenHint::CurrentTab => Some(ChromeBrowsingContextOpenHint::CurrentContext),
25 TabOpenHint::NewForegroundTab => {
26 Some(ChromeBrowsingContextOpenHint::NewForegroundContext)
27 }
28 TabOpenHint::NewBackgroundTab => {
29 Some(ChromeBrowsingContextOpenHint::NewBackgroundContext)
30 }
31 TabOpenHint::NewWindow | TabOpenHint::Popup => None,
32 }
33 }
34}
35
36impl From<ChromeBrowsingContextOpenHint> for TabOpenHint {
37 fn from(value: ChromeBrowsingContextOpenHint) -> Self {
38 match value {
39 ChromeBrowsingContextOpenHint::Unknown => Self::Unknown,
40 ChromeBrowsingContextOpenHint::CurrentContext => Self::CurrentTab,
41 ChromeBrowsingContextOpenHint::NewForegroundContext => Self::NewForegroundTab,
42 ChromeBrowsingContextOpenHint::NewBackgroundContext => Self::NewBackgroundTab,
43 }
44 }
45}
46
47#[derive(Debug, Clone, Copy, PartialEq, Eq)]
49pub enum TabOpenResult {
50 OpenedNewTab { tab_id: TabId },
51 OpenedExistingTab { tab_id: TabId },
52 Denied,
53 Aborted,
54}
55
56impl From<TabOpenResult> for ChromeBrowsingContextOpenResult {
57 fn from(value: TabOpenResult) -> Self {
58 match value {
59 TabOpenResult::OpenedNewTab { tab_id } => Self::OpenedNewContext { tab_id },
60 TabOpenResult::OpenedExistingTab { tab_id } => Self::OpenedExistingContext { tab_id },
61 TabOpenResult::Denied => Self::Denied,
62 TabOpenResult::Aborted => Self::Aborted,
63 }
64 }
65}
66
67impl From<ChromeBrowsingContextOpenResult> for TabOpenResult {
68 fn from(value: ChromeBrowsingContextOpenResult) -> Self {
69 match value {
70 ChromeBrowsingContextOpenResult::OpenedNewContext { tab_id } => {
71 Self::OpenedNewTab { tab_id }
72 }
73 ChromeBrowsingContextOpenResult::OpenedExistingContext { tab_id } => {
74 Self::OpenedExistingTab { tab_id }
75 }
76 ChromeBrowsingContextOpenResult::Denied => Self::Denied,
77 ChromeBrowsingContextOpenResult::Aborted => Self::Aborted,
78 }
79 }
80}
81
82#[cfg(test)]
83mod tests {
84 use crate::data::{
85 browsing_context_open::{ChromeBrowsingContextOpenHint, ChromeBrowsingContextOpenResult},
86 ids::TabId,
87 };
88
89 use super::{TabOpenHint, TabOpenResult};
90
91 #[test]
92 fn tab_open_hint_round_trip() {
93 assert_eq!(
94 TabOpenHint::from(ChromeBrowsingContextOpenHint::CurrentContext),
95 TabOpenHint::CurrentTab
96 );
97 assert_eq!(
98 TabOpenHint::NewBackgroundTab.to_browsing_context_open_hint(),
99 Some(ChromeBrowsingContextOpenHint::NewBackgroundContext)
100 );
101 assert_eq!(TabOpenHint::Popup.to_browsing_context_open_hint(), None);
102 }
103
104 #[test]
105 fn tab_open_result_round_trip() {
106 let raw = TabOpenResult::OpenedExistingTab {
107 tab_id: TabId::new(42),
108 };
109 let chrome_result = ChromeBrowsingContextOpenResult::from(raw);
110 let round_trip = TabOpenResult::from(chrome_result);
111
112 assert_eq!(round_trip, raw);
113 }
114}