pub struct CssUrl {
original: Option<Arc<String>>,
resolved: Option<Arc<Url>>,
}
Expand description
A CSS url() value for servo.
Servo eagerly resolves SpecifiedUrls, which it can then take advantage of when computing values. In contrast, Gecko uses a different URL backend, so eagerly resolving with rust-url would be duplicated work.
However, this approach is still not necessarily optimal: See https://bugzilla.mozilla.org/show_bug.cgi?id=1347435#c6
TODO(emilio): This should be shrunk by making CssUrl a wrapper type of an arc, and keep the serialization in that Arc. See gecko/url.rs for example.
Fields§
§original: Option<Arc<String>>
The original URI. This might be optional since we may insert computed values of images into the cascade directly, and we don’t bother to convert their serialization.
Refcounted since cloning this should be cheap and data: uris can be really large.
resolved: Option<Arc<Url>>
The resolved value for the url, if valid.
Implementations§
source§impl CssUrl
impl CssUrl
sourcepub fn parse_from_string(
url: String,
context: &ParserContext<'_>,
_: CorsMode,
) -> Self
pub fn parse_from_string( url: String, context: &ParserContext<'_>, _: CorsMode, ) -> Self
Try to parse a URL from a string value that is a valid CSS token for a URL.
FIXME(emilio): Should honor CorsMode.
sourcepub fn is_invalid(&self) -> bool
pub fn is_invalid(&self) -> bool
Returns true if the URL is definitely invalid. For Servo URLs, we can use its |resolved| status.
sourcepub fn is_fragment(&self) -> bool
pub fn is_fragment(&self) -> bool
Returns true if this URL looks like a fragment. See https://drafts.csswg.org/css-values/#local-urls
Since Servo currently stores resolved URLs, this is hard to implement. We either need to change servo to lazily resolve (like Gecko), or note this information in the tokenizer.
sourcepub fn as_str(&self) -> &str
pub fn as_str(&self) -> &str
Return the resolved url as string, or the empty string if it’s invalid.
TODO(emilio): Should we return the original one if needed?
sourcepub fn for_cascade(url: Arc<Url>) -> Self
pub fn for_cascade(url: Arc<Url>) -> Self
Creates an already specified url value from an already resolved URL for insertion in the cascade.
sourcepub fn new_for_testing(url: &str) -> Self
pub fn new_for_testing(url: &str) -> Self
Gets a new url from a string for unit tests.
sourcepub fn parse_with_cors_mode<'i, 't>(
context: &ParserContext<'_>,
input: &mut Parser<'i, 't>,
cors_mode: CorsMode,
) -> Result<Self, ParseError<'i>>
pub fn parse_with_cors_mode<'i, 't>( context: &ParserContext<'_>, input: &mut Parser<'i, 't>, cors_mode: CorsMode, ) -> Result<Self, ParseError<'i>>
Parses a URL request and records that the corresponding request needs to be CORS-enabled.
This is only for shape images and masks in Gecko, thus unimplemented for now so somebody notices when trying to do so.
Trait Implementations§
source§impl<'de> Deserialize<'de> for CssUrl
impl<'de> Deserialize<'de> for CssUrl
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
source§impl MallocSizeOf for CssUrl
impl MallocSizeOf for CssUrl
source§fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize
fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize
source§impl Parse for CssUrl
impl Parse for CssUrl
source§fn parse<'i, 't>(
context: &ParserContext<'_>,
input: &mut Parser<'i, 't>,
) -> Result<Self, ParseError<'i>>
fn parse<'i, 't>( context: &ParserContext<'_>, input: &mut Parser<'i, 't>, ) -> Result<Self, ParseError<'i>>
source§impl PartialEq for CssUrl
impl PartialEq for CssUrl
source§impl SpecifiedValueInfo for CssUrl
impl SpecifiedValueInfo for CssUrl
source§const SUPPORTED_TYPES: u8 = 0u8
const SUPPORTED_TYPES: u8 = 0u8
impl Eq for CssUrl
Auto Trait Implementations§
impl Freeze for CssUrl
impl RefUnwindSafe for CssUrl
impl Send for CssUrl
impl Sync for CssUrl
impl Unpin for CssUrl
impl UnwindSafe for CssUrl
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more