From 93bdb6d133b89d990ddd5470536edfe4cb617e89 Mon Sep 17 00:00:00 2001 From: FabianLars Date: Tue, 16 Jul 2024 13:22:21 +0200 Subject: [PATCH] Revert "fix(notification/windows): Grant permission without invoking backend" This reverts commit 4c120d4176d9a59f22bd215a7cec09d92ceab6da. --- .changes/fix-notification-access-violation.md | 5 ----- plugins/notification/guest-js/init.ts | 13 ++++++------- plugins/notification/src/init-iife.js | 2 +- plugins/notification/src/lib.rs | 5 +---- 4 files changed, 8 insertions(+), 17 deletions(-) delete mode 100644 .changes/fix-notification-access-violation.md diff --git a/.changes/fix-notification-access-violation.md b/.changes/fix-notification-access-violation.md deleted file mode 100644 index 7bf51e39..00000000 --- a/.changes/fix-notification-access-violation.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -notification: patch ---- - -Fixed an issue that caused the `notification` plugin's initialization script to cause the WebView on Windows to throw a `STATUS_ACCESS_VIOLATION` error on remote websites. diff --git a/plugins/notification/guest-js/init.ts b/plugins/notification/guest-js/init.ts index 15d976d4..650720c5 100644 --- a/plugins/notification/guest-js/init.ts +++ b/plugins/notification/guest-js/init.ts @@ -10,17 +10,16 @@ import type { Options } from "./index"; let permissionValue = "default"; async function isPermissionGranted(): Promise { - // @ts-expect-error __TEMPLATE_windows__ will be replaced in rust before it's injected. - if (window.Notification.permission !== "default" || __TEMPLATE_windows__) { + if (window.Notification.permission !== "default") { return await Promise.resolve( - window.Notification.permission === "granted" + window.Notification.permission === "granted", ); } return await invoke("plugin:notification|is_permission_granted"); } function setNotificationPermission( - value: "granted" | "denied" | "default" + value: "granted" | "denied" | "default", ): void { permissionSettable = true; // @ts-expect-error we can actually set this value on the webview @@ -32,10 +31,10 @@ import type { Options } from "./index"; "default" | "denied" | "granted" | "prompt" > { return await invoke<"prompt" | "default" | "granted" | "denied">( - "plugin:notification|request_permission" + "plugin:notification|request_permission", ).then((permission) => { setNotificationPermission( - permission === "prompt" ? "default" : permission + permission === "prompt" ? "default" : permission, ); return permission; }); @@ -65,7 +64,7 @@ import type { Options } from "./index"; Object.assign(opts, { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment title, - }) + }), ); }; diff --git a/plugins/notification/src/init-iife.js b/plugins/notification/src/init-iife.js index eb3b0cce..eddbeb05 100644 --- a/plugins/notification/src/init-iife.js +++ b/plugins/notification/src/init-iife.js @@ -1 +1 @@ -!function(){"use strict";async function i(i,n={},t){return window.__TAURI_INTERNALS__.invoke(i,n,t)}"function"==typeof SuppressedError&&SuppressedError,function(){let n=!1,t="default";function o(i){n=!0,window.Notification.permission=i,n=!1}window.Notification=function(n,t){const o=t||{};!async function(n){"object"==typeof n&&Object.freeze(n),await i("plugin:notification|notify",{options:"string"==typeof n?{title:n}:n})}(Object.assign(o,{title:n}))},window.Notification.requestPermission=async function(){return await i("plugin:notification|request_permission").then((i=>(o("prompt"===i?"default":i),i)))},Object.defineProperty(window.Notification,"permission",{enumerable:!0,get:()=>t,set:i=>{if(!n)throw new Error("Readonly property");t=i}}),async function(){return"default"!==window.Notification.permission||__TEMPLATE_windows__?await Promise.resolve("granted"===window.Notification.permission):await i("plugin:notification|is_permission_granted")}().then((function(i){o(null===i?"default":i?"granted":"denied")}))}()}(); +!function(){"use strict";async function i(i,n={},t){return window.__TAURI_INTERNALS__.invoke(i,n,t)}"function"==typeof SuppressedError&&SuppressedError,function(){let n=!1,t="default";function o(i){n=!0,window.Notification.permission=i,n=!1}window.Notification=function(n,t){const o=t||{};!async function(n){"object"==typeof n&&Object.freeze(n),await i("plugin:notification|notify",{options:"string"==typeof n?{title:n}:n})}(Object.assign(o,{title:n}))},window.Notification.requestPermission=async function(){return await i("plugin:notification|request_permission").then((i=>(o("prompt"===i?"default":i),i)))},Object.defineProperty(window.Notification,"permission",{enumerable:!0,get:()=>t,set:i=>{if(!n)throw new Error("Readonly property");t=i}}),async function(){return"default"!==window.Notification.permission?await Promise.resolve("granted"===window.Notification.permission):await i("plugin:notification|is_permission_granted")}().then((function(i){o(null===i?"default":i?"granted":"denied")}))}()}(); diff --git a/plugins/notification/src/lib.rs b/plugins/notification/src/lib.rs index 35304a6b..e4a902cc 100644 --- a/plugins/notification/src/lib.rs +++ b/plugins/notification/src/lib.rs @@ -227,10 +227,7 @@ pub fn init() -> TauriPlugin { commands::request_permission, commands::is_permission_granted ]) - .js_init_script(include_str!("init-iife.js").replace( - "__TEMPLATE_windows__", - if cfg!(windows) { "true" } else { "false" }, - )) + .js_init_script(include_str!("init-iife.js").to_string()) .setup(|app, api| { #[cfg(mobile)] let notification = mobile::init(app, api)?;