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