diff --git a/components/script/webdriver_handlers.rs b/components/script/webdriver_handlers.rs index 5be9ce33765..cbd0788cd18 100644 --- a/components/script/webdriver_handlers.rs +++ b/components/script/webdriver_handlers.rs @@ -59,6 +59,7 @@ use crate::dom::bindings::error::{Error, report_pending_exception, throw_dom_exc use crate::dom::bindings::inheritance::Castable; use crate::dom::bindings::reflector::{DomGlobal, DomObject}; use crate::dom::bindings::root::DomRoot; +use crate::dom::bindings::settings_stack::AutoEntryScript; use crate::dom::bindings::str::DOMString; use crate::dom::document::Document; use crate::dom::domrect::DOMRect; @@ -345,6 +346,7 @@ pub(crate) fn jsval_to_webdriver( realm: InRealm, can_gc: CanGc, ) -> WebDriverJSResult { + let _aes = AutoEntryScript::new(global_scope); let mut seen = HashSet::new(); let result = unsafe { jsval_to_webdriver_inner(*cx, global_scope, val, &mut seen) }; if result.is_err() { diff --git a/components/servo/tests/webview.rs b/components/servo/tests/webview.rs index dbcc4f9fcb5..ccaa05d3ca3 100644 --- a/components/servo/tests/webview.rs +++ b/components/servo/tests/webview.rs @@ -134,6 +134,19 @@ fn test_evaluate_javascript_basic(servo_test: &ServoTest) -> Result<(), anyhow:: Ok(()) } +fn test_evaluate_javascript_panic(servo_test: &ServoTest) -> Result<(), anyhow::Error> { + let delegate = Rc::new(WebViewDelegateImpl::default()); + let webview = WebViewBuilder::new(servo_test.servo()) + .delegate(delegate.clone()) + .build(); + + let input = "location"; + let result = evaluate_javascript(servo_test, webview.clone(), input); + ensure!(matches!(result, Ok(JSValue::Object(..)))); + + Ok(()) +} + fn test_create_webview_and_immediately_drop_webview_before_shutdown( servo_test: &ServoTest, ) -> Result<(), anyhow::Error> { @@ -174,6 +187,7 @@ fn main() { run_api_tests!( test_create_webview, test_evaluate_javascript_basic, + test_evaluate_javascript_panic, test_theme_change, // This test needs to be last, as it tests creating and dropping // a WebView right before shutdown.