diff --git a/core/src/backend/navigator.rs b/core/src/backend/navigator.rs index 9bfbfa4f2e16..30c6d267427b 100644 --- a/core/src/backend/navigator.rs +++ b/core/src/backend/navigator.rs @@ -56,24 +56,6 @@ pub enum SocketMode { Ask, } -/// The handling mode of links opening a new website. -#[cfg_attr(feature = "clap", derive(clap::ValueEnum))] -#[derive(Clone, Copy, Debug, PartialEq)] -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -pub enum OpenURLMode { - /// Allow all links to open a new website. - #[cfg_attr(feature = "serde", serde(rename = "allow"))] - Allow, - - /// A confirmation dialog opens with every link trying to open a new website. - #[cfg_attr(feature = "serde", serde(rename = "confirm"))] - Confirm, - - /// Deny all links to open a new website. - #[cfg_attr(feature = "serde", serde(rename = "deny"))] - Deny, -} - impl NavigationMethod { /// Convert an SWF method enum into a NavigationMethod. pub fn from_send_vars_method(s: SendVarsMethod) -> Option { diff --git a/desktop/src/cli.rs b/desktop/src/cli.rs index 59603628ca54..c93654ee113f 100644 --- a/desktop/src/cli.rs +++ b/desktop/src/cli.rs @@ -2,7 +2,7 @@ use crate::preferences::storage::StorageBackend; use crate::RUFFLE_VERSION; use anyhow::{anyhow, Error}; use clap::{Parser, ValueEnum}; -use ruffle_core::backend::navigator::{OpenURLMode, SocketMode}; +use ruffle_core::backend::navigator::SocketMode; use ruffle_core::config::Letterbox; use ruffle_core::events::{GamepadButton, KeyCode}; use ruffle_core::{LoadBehavior, PlayerRuntime, StageAlign, StageScaleMode}; @@ -372,16 +372,6 @@ impl FromStr for OpenUrlMode { } } -impl From for OpenURLMode { - fn from(value: OpenUrlMode) -> Self { - match value { - OpenUrlMode::Confirm => OpenURLMode::Confirm, - OpenUrlMode::Allow => OpenURLMode::Allow, - OpenUrlMode::Deny => OpenURLMode::Deny, - } - } -} - // TODO The following enum exists in order to preserve // the behavior of mapping gamepad buttons, // We should probably do something smarter here. diff --git a/web/src/builder.rs b/web/src/builder.rs index 10be813ccd2c..953d08bf0e4a 100644 --- a/web/src/builder.rs +++ b/web/src/builder.rs @@ -1,12 +1,11 @@ use crate::external_interface::JavascriptInterface; -use crate::navigator::WebNavigatorBackend; +use crate::navigator::{OpenUrlMode, WebNavigatorBackend}; use crate::{ audio, log_adapter, storage, ui, JavascriptPlayer, RuffleHandle, SocketProxy, RUFFLE_GLOBAL_PANIC, }; use js_sys::Promise; use ruffle_core::backend::audio::{AudioBackend, NullAudioBackend}; -use ruffle_core::backend::navigator::OpenURLMode; use ruffle_core::backend::storage::{MemoryStorageBackend, StorageBackend}; use ruffle_core::backend::ui::FontDefinition; use ruffle_core::compatibility_rules::CompatibilityRules; @@ -54,7 +53,7 @@ pub struct RuffleInstanceBuilder { pub(crate) max_execution_duration: Duration, pub(crate) player_version: Option, pub(crate) preferred_renderer: Option, // TODO: Enumify? - pub(crate) open_url_mode: OpenURLMode, + pub(crate) open_url_mode: OpenUrlMode, pub(crate) allow_networking: NetworkingAccessMode, pub(crate) socket_proxy: Vec, pub(crate) credential_allow_list: Vec, @@ -90,7 +89,7 @@ impl Default for RuffleInstanceBuilder { max_execution_duration: Duration::from_secs_f64(15.0), player_version: None, preferred_renderer: None, - open_url_mode: OpenURLMode::Allow, + open_url_mode: OpenUrlMode::Allow, allow_networking: NetworkingAccessMode::All, socket_proxy: vec![], credential_allow_list: vec![], @@ -248,9 +247,9 @@ impl RuffleInstanceBuilder { #[wasm_bindgen(js_name = "setOpenUrlMode")] pub fn set_open_url_mode(&mut self, value: &str) { self.open_url_mode = match value { - "allow" => OpenURLMode::Allow, - "confirm" => OpenURLMode::Confirm, - "deny" => OpenURLMode::Deny, + "allow" => OpenUrlMode::Allow, + "confirm" => OpenUrlMode::Confirm, + "deny" => OpenUrlMode::Deny, _ => return, }; } diff --git a/web/src/navigator.rs b/web/src/navigator.rs index 9d36ea425aa0..4bd5a1a5678e 100644 --- a/web/src/navigator.rs +++ b/web/src/navigator.rs @@ -7,7 +7,7 @@ use gloo_net::websocket::{futures::WebSocket, Message}; use js_sys::{Array, Promise, Uint8Array}; use ruffle_core::backend::navigator::{ async_return, create_fetch_error, create_specific_fetch_error, get_encoding, ErrorResponse, - NavigationMethod, NavigatorBackend, OpenURLMode, OwnedFuture, Request, SuccessResponse, + NavigationMethod, NavigatorBackend, OwnedFuture, Request, SuccessResponse, }; use ruffle_core::config::NetworkingAccessMode; use ruffle_core::indexmap::IndexMap; @@ -32,13 +32,29 @@ use web_sys::{ RequestCredentials, RequestInit, Response as WebResponse, }; +/// The handling mode of links opening a new website. +#[derive(Clone, Copy, Debug, PartialEq, serde::Serialize, serde::Deserialize)] +pub enum OpenUrlMode { + /// Allow all links to open a new website. + #[serde(rename = "allow")] + Allow, + + /// A confirmation dialog opens with every link trying to open a new website. + #[serde(rename = "confirm")] + Confirm, + + /// Deny all links to open a new website. + #[serde(rename = "deny")] + Deny, +} + pub struct WebNavigatorBackend { log_subscriber: Arc>, allow_script_access: bool, allow_networking: NetworkingAccessMode, upgrade_to_https: bool, base_url: Option, - open_url_mode: OpenURLMode, + open_url_mode: OpenUrlMode, socket_proxies: Vec, credential_allow_list: Vec, player: Weak>, @@ -52,7 +68,7 @@ impl WebNavigatorBackend { upgrade_to_https: bool, base_url: Option, log_subscriber: Arc>, - open_url_mode: OpenURLMode, + open_url_mode: OpenUrlMode, socket_proxies: Vec, credential_allow_list: Vec, ) -> Self { @@ -168,7 +184,7 @@ impl NavigatorBackend for WebNavigatorBackend { let window = window().expect("window()"); if url.scheme() != "javascript" { - if self.open_url_mode == OpenURLMode::Confirm { + if self.open_url_mode == OpenUrlMode::Confirm { let message = format!("The SWF file wants to open the website {}", &url); // TODO: Add a checkbox with a GUI toolkit let confirm = window @@ -180,7 +196,7 @@ impl NavigatorBackend for WebNavigatorBackend { ); return; } - } else if self.open_url_mode == OpenURLMode::Deny { + } else if self.open_url_mode == OpenUrlMode::Deny { tracing::warn!("SWF tried to open a website, but opening a website is not allowed"); return; }