diff options
author | marmeladema <xademax@gmail.com> | 2019-07-22 22:14:11 +0100 |
---|---|---|
committer | marmeladema <xademax@gmail.com> | 2019-07-24 09:53:10 +0100 |
commit | 88cacfb0098e20be70c27bfde6b74cd3290f1fe4 (patch) | |
tree | 95d7cd9ffad7eaff05114946a1e12f8e49d55fab /components/script/body.rs | |
parent | 2c5d0a6ebc39ad263e2bbe623e357a11b4cec5aa (diff) | |
download | servo-88cacfb0098e20be70c27bfde6b74cd3290f1fe4.tar.gz servo-88cacfb0098e20be70c27bfde6b74cd3290f1fe4.zip |
Modify *::get_cx methods to return a safe JSContext instead of a raw one
Diffstat (limited to 'components/script/body.rs')
-rw-r--r-- | components/script/body.rs | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/components/script/body.rs b/components/script/body.rs index 1e18bc565a6..728315bf1fa 100644 --- a/components/script/body.rs +++ b/components/script/body.rs @@ -13,8 +13,8 @@ use crate::dom::blob::{Blob, BlobImpl}; use crate::dom::formdata::FormData; use crate::dom::globalscope::GlobalScope; use crate::dom::promise::Promise; +use crate::script_runtime::JSContext; use js::jsapi::Heap; -use js::jsapi::JSContext; use js::jsapi::JSObject; use js::jsapi::JS_ClearPendingException; use js::jsapi::Value as JSValue; @@ -122,7 +122,7 @@ fn run_package_data_algorithm<T: BodyOperations + DomObject>( BodyType::Json => run_json_data_algorithm(cx, bytes), BodyType::Blob => run_blob_data_algorithm(&global, bytes, mime), BodyType::FormData => run_form_data_algorithm(&global, bytes, mime), - BodyType::ArrayBuffer => unsafe { run_array_buffer_data_algorithm(cx, bytes) }, + BodyType::ArrayBuffer => run_array_buffer_data_algorithm(cx, bytes), } } @@ -133,20 +133,20 @@ fn run_text_data_algorithm(bytes: Vec<u8>) -> Fallible<FetchedData> { } #[allow(unsafe_code)] -fn run_json_data_algorithm(cx: *mut JSContext, bytes: Vec<u8>) -> Fallible<FetchedData> { +fn run_json_data_algorithm(cx: JSContext, bytes: Vec<u8>) -> Fallible<FetchedData> { let json_text = String::from_utf8_lossy(&bytes); let json_text: Vec<u16> = json_text.encode_utf16().collect(); - rooted!(in(cx) let mut rval = UndefinedValue()); + rooted!(in(*cx) let mut rval = UndefinedValue()); unsafe { if !JS_ParseJSON( - cx, + *cx, json_text.as_ptr(), json_text.len() as u32, rval.handle_mut(), ) { - rooted!(in(cx) let mut exception = UndefinedValue()); - assert!(JS_GetPendingException(cx, exception.handle_mut())); - JS_ClearPendingException(cx); + rooted!(in(*cx) let mut exception = UndefinedValue()); + assert!(JS_GetPendingException(*cx, exception.handle_mut())); + JS_ClearPendingException(*cx); return Ok(FetchedData::JSException(RootedTraceableBox::from_box( Heap::boxed(exception.get()), ))); @@ -200,13 +200,15 @@ fn run_form_data_algorithm( } #[allow(unsafe_code)] -unsafe fn run_array_buffer_data_algorithm( - cx: *mut JSContext, - bytes: Vec<u8>, -) -> Fallible<FetchedData> { - rooted!(in(cx) let mut array_buffer_ptr = ptr::null_mut::<JSObject>()); - let arraybuffer = - ArrayBuffer::create(cx, CreateWith::Slice(&bytes), array_buffer_ptr.handle_mut()); +fn run_array_buffer_data_algorithm(cx: JSContext, bytes: Vec<u8>) -> Fallible<FetchedData> { + rooted!(in(*cx) let mut array_buffer_ptr = ptr::null_mut::<JSObject>()); + let arraybuffer = unsafe { + ArrayBuffer::create( + *cx, + CreateWith::Slice(&bytes), + array_buffer_ptr.handle_mut(), + ) + }; if arraybuffer.is_err() { return Err(Error::JSFailed); } |