mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Double key image cache by requesting origin, and store CORS status with cached images.
This commit is contained in:
parent
ea46008288
commit
81a67aed9e
11 changed files with 132 additions and 57 deletions
|
@ -47,7 +47,7 @@ use net_traits::image_cache::UsePlaceholder;
|
|||
use pixels::PixelFormat;
|
||||
use profile_traits::ipc as profiled_ipc;
|
||||
use script_traits::ScriptMsg;
|
||||
use servo_url::ServoUrl;
|
||||
use servo_url::{ImmutableOrigin, ServoUrl};
|
||||
use std::cell::Cell;
|
||||
use std::str::FromStr;
|
||||
use std::sync::Arc;
|
||||
|
@ -126,6 +126,7 @@ pub struct CanvasState {
|
|||
/// The base URL for resolving CSS image URL values.
|
||||
/// Needed because of https://github.com/servo/servo/issues/17625
|
||||
base_url: ServoUrl,
|
||||
origin: ImmutableOrigin,
|
||||
/// Any missing image URLs.
|
||||
missing_image_urls: DomRefCell<Vec<ServoUrl>>,
|
||||
saved_states: DomRefCell<Vec<CanvasContextState>>,
|
||||
|
@ -152,6 +153,7 @@ impl CanvasState {
|
|||
base_url: global.api_base_url(),
|
||||
missing_image_urls: DomRefCell::new(Vec::new()),
|
||||
saved_states: DomRefCell::new(Vec::new()),
|
||||
origin: global.origin().immutable().clone(),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -222,6 +224,7 @@ impl CanvasState {
|
|||
fn request_image_from_cache(&self, url: ServoUrl) -> ImageResponse {
|
||||
let response = self.image_cache.find_image_or_metadata(
|
||||
url.clone(),
|
||||
self.origin.clone(),
|
||||
UsePlaceholder::No,
|
||||
CanRequestImages::No,
|
||||
);
|
||||
|
|
|
@ -448,6 +448,7 @@ pub mod utils {
|
|||
let image_cache = window.image_cache();
|
||||
let response = image_cache.find_image_or_metadata(
|
||||
url.into(),
|
||||
window.origin().immutable().clone(),
|
||||
UsePlaceholder::No,
|
||||
CanRequestImages::No,
|
||||
);
|
||||
|
|
|
@ -56,7 +56,7 @@ use mime::{self, Mime};
|
|||
use msg::constellation_msg::PipelineId;
|
||||
use net_traits::image::base::{Image, ImageMetadata};
|
||||
use net_traits::image_cache::UsePlaceholder;
|
||||
use net_traits::image_cache::{CanRequestImages, ImageCache, ImageOrMetadataAvailable};
|
||||
use net_traits::image_cache::{CanRequestImages, CorsStatus, ImageCache, ImageOrMetadataAvailable};
|
||||
use net_traits::image_cache::{ImageResponder, ImageResponse, ImageState, PendingImageId};
|
||||
use net_traits::request::RequestBuilder;
|
||||
use net_traits::{FetchMetadata, FetchResponseListener, FetchResponseMsg, NetworkError};
|
||||
|
@ -281,6 +281,7 @@ impl HTMLImageElement {
|
|||
let image_cache = window.image_cache();
|
||||
let response = image_cache.find_image_or_metadata(
|
||||
img_url.clone().into(),
|
||||
window.origin().immutable().clone(),
|
||||
UsePlaceholder::Yes,
|
||||
CanRequestImages::Yes,
|
||||
);
|
||||
|
@ -907,6 +908,7 @@ impl HTMLImageElement {
|
|||
let image_cache = window.image_cache();
|
||||
let response = image_cache.find_image_or_metadata(
|
||||
img_url.clone().into(),
|
||||
window.origin().immutable().clone(),
|
||||
UsePlaceholder::No,
|
||||
CanRequestImages::No,
|
||||
);
|
||||
|
@ -1062,6 +1064,7 @@ impl HTMLImageElement {
|
|||
// Step 14
|
||||
let response = image_cache.find_image_or_metadata(
|
||||
img_url.clone().into(),
|
||||
window.origin().immutable().clone(),
|
||||
UsePlaceholder::No,
|
||||
CanRequestImages::Yes,
|
||||
);
|
||||
|
@ -1268,6 +1271,10 @@ impl HTMLImageElement {
|
|||
}
|
||||
|
||||
pub fn same_origin(&self, origin: &MutableOrigin) -> bool {
|
||||
if let Some(ref image) = self.current_request.borrow().image {
|
||||
return image.cors_status == CorsStatus::Safe;
|
||||
}
|
||||
|
||||
self.current_request
|
||||
.borrow()
|
||||
.final_url
|
||||
|
|
|
@ -132,6 +132,7 @@ impl HTMLVideoElement {
|
|||
let image_cache = window.image_cache();
|
||||
let response = image_cache.find_image_or_metadata(
|
||||
poster_url.clone().into(),
|
||||
window.origin().immutable().clone(),
|
||||
UsePlaceholder::No,
|
||||
CanRequestImages::Yes,
|
||||
);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue