锁定桌面角标不可用响应
桌面角标主窗口缺失转为稳定 host_error 桌面角标设置失败转为稳定不可用响应 桌面角标单测覆盖不可用响应 code 和 message 桌面壳配置检查禁止暴露角标原生窗口错误
This commit is contained in:
@@ -2478,13 +2478,22 @@ for (const snippet of [
|
||||
'BADGE_COUNT_MAX',
|
||||
'fn badge_count_payload',
|
||||
'set_desktop_app_badge_count',
|
||||
'badge_unavailable_response',
|
||||
'ok(request.id.clone(), json!(true))',
|
||||
'"count must be an integer between 0 and 99999"',
|
||||
'"badge unavailable"',
|
||||
'badge_unavailable_response_is_stable',
|
||||
]) {
|
||||
if (!desktopHostBridgeBadgeSource.includes(snippet)) {
|
||||
throw new Error(`desktop shell badge module is missing ${snippet}`);
|
||||
}
|
||||
}
|
||||
if (
|
||||
desktopHostBridgeBadgeSource.includes('error.to_string()') ||
|
||||
desktopHostBridgeBadgeSource.includes('"main window not found"')
|
||||
) {
|
||||
throw new Error('desktop shell badge module must hide native window errors');
|
||||
}
|
||||
if (!desktopHostBridgeBadgeSource.match(/window\s*\.\s*set_badge_count\s*\(\s*count\s*\)/)) {
|
||||
throw new Error('desktop shell badge module must call window.set_badge_count(count)');
|
||||
}
|
||||
|
||||
@@ -39,15 +39,19 @@ pub(crate) fn set_desktop_app_badge_count(
|
||||
Err(response) => return response,
|
||||
};
|
||||
let Some(window) = app.get_webview_window("main") else {
|
||||
return failed(request.id.clone(), "host_error", "main window not found");
|
||||
return badge_unavailable_response(request);
|
||||
};
|
||||
|
||||
match window.set_badge_count(count) {
|
||||
Ok(()) => ok(request.id.clone(), json!(true)),
|
||||
Err(error) => failed(request.id.clone(), "host_error", error.to_string()),
|
||||
Err(_) => badge_unavailable_response(request),
|
||||
}
|
||||
}
|
||||
|
||||
fn badge_unavailable_response(request: &HostBridgeRequest) -> HostBridgeResponse {
|
||||
failed(request.id.clone(), "host_error", "badge unavailable")
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
@@ -80,4 +84,14 @@ mod tests {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn badge_unavailable_response_is_stable() {
|
||||
let response = badge_unavailable_response(&request("app.setBadgeCount"));
|
||||
|
||||
assert!(!response.ok);
|
||||
let error = response.error.expect("badge error");
|
||||
assert_eq!(error.code, "host_error");
|
||||
assert_eq!(error.message, "badge unavailable");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user