1use crate::sys::{CHROME, Chrome};
2use js_sys::{Function, Object};
3use wasm_bindgen::prelude::*;
4
5pub fn get_manifest() -> Object {
6 CHROME.with(Chrome::runtime).get_manifest()
7}
8
9pub async fn send_message(message: &JsValue) -> Result<JsValue, JsValue> {
10 CHROME
11 .with(Chrome::runtime)
12 .send_message(None, message, None)
13 .await
14}
15
16pub fn on_message<F>(callback: F)
17where
18 F: Fn(JsValue, Object, Function) -> bool + 'static,
19{
20 type OnMessageCallback = Closure<dyn Fn(JsValue, Object, Function) -> bool>;
21 let closure = OnMessageCallback::new(callback);
22 let closure_ref = closure.as_ref().unchecked_ref::<Function>();
23
24 CHROME
25 .with(Chrome::runtime)
26 .on_message()
27 .add_listener(closure_ref);
28
29 closure.forget();
30}
31
32pub fn on_startup(callback: &Function) {
33 CHROME
34 .with(Chrome::runtime)
35 .on_startup()
36 .add_listener(callback);
37}
38
39pub fn on_suspend(callback: &Function) {
40 CHROME
41 .with(Chrome::runtime)
42 .on_suspend()
43 .add_listener(callback);
44}
45
46pub fn on_suspend_canceled(callback: &Function) {
47 CHROME
48 .with(Chrome::runtime)
49 .on_suspend_canceled()
50 .add_listener(callback);
51}