mirror of
https://github.com/servo/servo.git
synced 2025-07-24 15:50:21 +01:00
Introduce <LayoutDom<HTMLImageElement>>::current_request
This safe helper contains the only source of unsafety from the actual image layout helpers methods, making them completely safe.
This commit is contained in:
parent
fc07a5147c
commit
1cd3d6bd4c
2 changed files with 26 additions and 43 deletions
|
@ -1366,53 +1366,40 @@ impl MicrotaskRunnable for ImageElementMicrotask {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait LayoutHTMLImageElementHelpers {
|
pub trait LayoutHTMLImageElementHelpers {
|
||||||
#[allow(unsafe_code)]
|
fn image(self) -> Option<Arc<Image>>;
|
||||||
unsafe fn image(self) -> Option<Arc<Image>>;
|
fn image_url(self) -> Option<ServoUrl>;
|
||||||
#[allow(unsafe_code)]
|
fn image_density(self) -> Option<f64>;
|
||||||
unsafe fn image_url(self) -> Option<ServoUrl>;
|
fn image_data(self) -> (Option<Arc<Image>>, Option<ImageMetadata>);
|
||||||
#[allow(unsafe_code)]
|
|
||||||
unsafe fn image_density(self) -> Option<f64>;
|
|
||||||
#[allow(unsafe_code)]
|
|
||||||
unsafe fn image_data(self) -> (Option<Arc<Image>>, Option<ImageMetadata>);
|
|
||||||
fn get_width(self) -> LengthOrPercentageOrAuto;
|
fn get_width(self) -> LengthOrPercentageOrAuto;
|
||||||
fn get_height(self) -> LengthOrPercentageOrAuto;
|
fn get_height(self) -> LengthOrPercentageOrAuto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'dom> LayoutDom<'dom, HTMLImageElement> {
|
||||||
|
#[allow(unsafe_code)]
|
||||||
|
fn current_request(self) -> &'dom ImageRequest {
|
||||||
|
unsafe { self.unsafe_get().current_request.borrow_for_layout() }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl LayoutHTMLImageElementHelpers for LayoutDom<'_, HTMLImageElement> {
|
impl LayoutHTMLImageElementHelpers for LayoutDom<'_, HTMLImageElement> {
|
||||||
#[allow(unsafe_code)]
|
fn image(self) -> Option<Arc<Image>> {
|
||||||
unsafe fn image(self) -> Option<Arc<Image>> {
|
self.current_request().image.clone()
|
||||||
(*self.unsafe_get())
|
|
||||||
.current_request
|
|
||||||
.borrow_for_layout()
|
|
||||||
.image
|
|
||||||
.clone()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(unsafe_code)]
|
fn image_url(self) -> Option<ServoUrl> {
|
||||||
unsafe fn image_url(self) -> Option<ServoUrl> {
|
self.current_request().parsed_url.clone()
|
||||||
(*self.unsafe_get())
|
|
||||||
.current_request
|
|
||||||
.borrow_for_layout()
|
|
||||||
.parsed_url
|
|
||||||
.clone()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(unsafe_code)]
|
fn image_data(self) -> (Option<Arc<Image>>, Option<ImageMetadata>) {
|
||||||
unsafe fn image_data(self) -> (Option<Arc<Image>>, Option<ImageMetadata>) {
|
let current_request = self.current_request();
|
||||||
let current_request = (*self.unsafe_get()).current_request.borrow_for_layout();
|
|
||||||
(
|
(
|
||||||
current_request.image.clone(),
|
current_request.image.clone(),
|
||||||
current_request.metadata.clone(),
|
current_request.metadata.clone(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(unsafe_code)]
|
fn image_density(self) -> Option<f64> {
|
||||||
unsafe fn image_density(self) -> Option<f64> {
|
self.current_request().current_pixel_density.clone()
|
||||||
(*self.unsafe_get())
|
|
||||||
.current_request
|
|
||||||
.borrow_for_layout()
|
|
||||||
.current_pixel_density
|
|
||||||
.clone()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_width(self) -> LengthOrPercentageOrAuto {
|
fn get_width(self) -> LengthOrPercentageOrAuto {
|
||||||
|
|
|
@ -1493,25 +1493,21 @@ impl<'dom> LayoutNodeHelpers<'dom> for LayoutDom<'dom, Node> {
|
||||||
|
|
||||||
#[allow(unsafe_code)]
|
#[allow(unsafe_code)]
|
||||||
fn image_url(self) -> Option<ServoUrl> {
|
fn image_url(self) -> Option<ServoUrl> {
|
||||||
unsafe {
|
self.downcast::<HTMLImageElement>()
|
||||||
self.downcast::<HTMLImageElement>()
|
.expect("not an image!")
|
||||||
.expect("not an image!")
|
.image_url()
|
||||||
.image_url()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(unsafe_code)]
|
#[allow(unsafe_code)]
|
||||||
fn image_data(self) -> Option<(Option<StdArc<Image>>, Option<ImageMetadata>)> {
|
fn image_data(self) -> Option<(Option<StdArc<Image>>, Option<ImageMetadata>)> {
|
||||||
unsafe { self.downcast::<HTMLImageElement>().map(|e| e.image_data()) }
|
self.downcast::<HTMLImageElement>().map(|e| e.image_data())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(unsafe_code)]
|
#[allow(unsafe_code)]
|
||||||
fn image_density(self) -> Option<f64> {
|
fn image_density(self) -> Option<f64> {
|
||||||
unsafe {
|
self.downcast::<HTMLImageElement>()
|
||||||
self.downcast::<HTMLImageElement>()
|
.expect("not an image!")
|
||||||
.expect("not an image!")
|
.image_density()
|
||||||
.image_density()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn canvas_data(self) -> Option<HTMLCanvasData> {
|
fn canvas_data(self) -> Option<HTMLCanvasData> {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue