diff options
author | Martin Robinson <mrobinson@igalia.com> | 2024-02-16 12:56:35 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-16 11:56:35 +0000 |
commit | 9a6973d629a6560367db8542cc958a41a1c83902 (patch) | |
tree | 4ad7acc99c1346a15e6c9a38b8a5b514dcebea0c /components/script/dom | |
parent | 29e1dfe1e4191a26708b2edee60823af2a6960bf (diff) | |
download | servo-9a6973d629a6560367db8542cc958a41a1c83902.tar.gz servo-9a6973d629a6560367db8542cc958a41a1c83902.zip |
style: Remove dependency on servo_url (#31358)
In order for stylo to be a separate crate, it needs to depend on less
things from Servo. This change makes it so that stylo no longer depends
on servo_url.
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/css.rs | 10 | ||||
-rw-r--r-- | components/script/dom/cssstyledeclaration.rs | 21 | ||||
-rw-r--r-- | components/script/dom/dommatrixreadonly.rs | 5 | ||||
-rw-r--r-- | components/script/dom/element.rs | 16 | ||||
-rw-r--r-- | components/script/dom/htmlbodyelement.rs | 14 | ||||
-rw-r--r-- | components/script/dom/htmlimageelement.rs | 11 | ||||
-rw-r--r-- | components/script/dom/htmllinkelement.rs | 6 | ||||
-rw-r--r-- | components/script/dom/htmlscriptelement.rs | 2 | ||||
-rw-r--r-- | components/script/dom/htmlstyleelement.rs | 8 | ||||
-rw-r--r-- | components/script/dom/medialist.rs | 14 | ||||
-rw-r--r-- | components/script/dom/node.rs | 12 | ||||
-rw-r--r-- | components/script/dom/window.rs | 17 |
12 files changed, 81 insertions, 55 deletions
diff --git a/components/script/dom/css.rs b/components/script/dom/css.rs index dbbfe0ef404..e4f93979c5b 100644 --- a/components/script/dom/css.rs +++ b/components/script/dom/css.rs @@ -7,7 +7,7 @@ use dom_struct::dom_struct; use style::context::QuirksMode; use style::parser::ParserContext; use style::stylesheets::supports_rule::{parse_condition_or_declaration, Declaration}; -use style::stylesheets::{CssRuleType, Origin}; +use style::stylesheets::{CssRuleType, Origin, UrlExtraData}; use style_traits::ParsingMode; use crate::dom::bindings::codegen::Bindings::WindowBinding::Window_Binding::WindowMethods; @@ -39,10 +39,10 @@ impl CSS { decl.push_str(": "); decl.push_str(&value); let decl = Declaration(decl); - let url = win.Document().url(); + let url_data = UrlExtraData(win.Document().url().get_arc()); let context = ParserContext::new( Origin::Author, - &url, + &url_data, Some(CssRuleType::Style), ParsingMode::DEFAULT, QuirksMode::NoQuirks, @@ -62,10 +62,10 @@ impl CSS { Err(..) => return false, }; - let url = win.Document().url(); + let url_data = UrlExtraData(win.Document().url().get_arc()); let context = ParserContext::new( Origin::Author, - &url, + &url_data, Some(CssRuleType::Style), ParsingMode::DEFAULT, QuirksMode::NoQuirks, diff --git a/components/script/dom/cssstyledeclaration.rs b/components/script/dom/cssstyledeclaration.rs index 73787cd4c72..d6c6892c431 100644 --- a/components/script/dom/cssstyledeclaration.rs +++ b/components/script/dom/cssstyledeclaration.rs @@ -13,7 +13,7 @@ use style::properties::{ }; use style::selector_parser::PseudoElement; use style::shared_lock::Locked; -use style::stylesheets::{CssRuleType, Origin}; +use style::stylesheets::{CssRuleType, Origin, UrlExtraData}; use style_traits::ParsingMode; use crate::dom::bindings::codegen::Bindings::CSSStyleDeclarationBinding::CSSStyleDeclarationMethods; @@ -160,12 +160,15 @@ impl CSSStyleOwner { fn base_url(&self) -> ServoUrl { match *self { CSSStyleOwner::Element(ref el) => window_from_node(&**el).Document().base_url(), - CSSStyleOwner::CSSRule(ref rule, _) => (*rule - .parent_stylesheet() - .style_stylesheet() - .contents - .url_data - .read()) + CSSStyleOwner::CSSRule(ref rule, _) => ServoUrl::from( + rule.parent_stylesheet() + .style_stylesheet() + .contents + .url_data + .read() + .0 + .clone(), + ) .clone(), } } @@ -307,7 +310,7 @@ impl CSSStyleDeclaration { id, &value, Origin::Author, - &self.owner.base_url(), + &UrlExtraData(self.owner.base_url().get_arc()), window.css_error_reporter(), ParsingMode::DEFAULT, quirks_mode, @@ -458,7 +461,7 @@ impl CSSStyleDeclarationMethods for CSSStyleDeclaration { // Step 3 *pdb = parse_style_attribute( &value, - &self.owner.base_url(), + &UrlExtraData(self.owner.base_url().get_arc()), window.css_error_reporter(), quirks_mode, CssRuleType::Style, diff --git a/components/script/dom/dommatrixreadonly.rs b/components/script/dom/dommatrixreadonly.rs index 9f4138f6f26..12e4e8c8acd 100644 --- a/components/script/dom/dommatrixreadonly.rs +++ b/components/script/dom/dommatrixreadonly.rs @@ -13,6 +13,7 @@ use js::jsapi::JSObject; use js::rust::{CustomAutoRooterGuard, HandleObject}; use js::typedarray::{Float32Array, Float64Array}; use style::parser::ParserContext; +use url::Url; use crate::dom::bindings::cell::{DomRefCell, Ref}; use crate::dom::bindings::codegen::Bindings::DOMMatrixBinding::{DOMMatrixInit, DOMMatrixMethods}; @@ -830,10 +831,10 @@ pub fn transform_to_matrix(value: String) -> Fallible<(bool, Transform3D<f64>)> let mut input = ParserInput::new(&value); let mut parser = Parser::new(&mut input); - let url = ::servo_url::ServoUrl::parse("about:blank").unwrap(); + let url_data = Url::parse("about:blank").unwrap().into(); let context = ParserContext::new( ::style::stylesheets::Origin::Author, - &url, + &url_data, Some(::style::stylesheets::CssRuleType::Style), ::style_traits::ParsingMode::DEFAULT, ::style::context::QuirksMode::NoQuirks, diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index 7d2c9afb2aa..f3d3ebecb69 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -53,7 +53,7 @@ use style::selector_parser::{ }; use style::shared_lock::{Locked, SharedRwLock}; use style::stylesheets::layer_rule::LayerOrder; -use style::stylesheets::CssRuleType; +use style::stylesheets::{CssRuleType, UrlExtraData}; use style::values::generics::NonNegative; use style::values::{computed, specified, AtomIdent, AtomString, CSSFloat}; use style::{dom_apis, thread_state, CaseSensitivityExt}; @@ -724,7 +724,7 @@ impl<'dom> LayoutElementHelpers<'dom> for LayoutDom<'dom, Element> { hints.push(from_declaration( shared_lock, PropertyDeclaration::BackgroundImage(background_image::SpecifiedValue( - vec![specified::Image::for_cascade(url.into())].into(), + vec![specified::Image::for_cascade(url.get_arc())].into(), )), )); } @@ -2752,7 +2752,10 @@ impl ElementMethods for Element { fn Matches(&self, selectors: DOMString) -> Fallible<bool> { let doc = document_from_node(self); let url = doc.url(); - let selectors = match SelectorParser::parse_author_origin_no_namespace(&selectors, &url) { + let selectors = match SelectorParser::parse_author_origin_no_namespace( + &selectors, + &UrlExtraData(url.get_arc()), + ) { Err(_) => return Err(Error::Syntax), Ok(selectors) => selectors, }; @@ -2772,7 +2775,10 @@ impl ElementMethods for Element { fn Closest(&self, selectors: DOMString) -> Fallible<Option<DomRoot<Element>>> { let doc = document_from_node(self); let url = doc.url(); - let selectors = match SelectorParser::parse_author_origin_no_namespace(&selectors, &url) { + let selectors = match SelectorParser::parse_author_origin_no_namespace( + &selectors, + &UrlExtraData(url.get_arc()), + ) { Err(_) => return Err(Error::Syntax), Ok(selectors) => selectors, }; @@ -2926,7 +2932,7 @@ impl VirtualMethods for Element { let win = window_from_node(self); Arc::new(doc.style_shared_lock().wrap(parse_style_attribute( &attr.value(), - &doc.base_url(), + &UrlExtraData(doc.base_url().get_arc()), win.css_error_reporter(), doc.quirks_mode(), CssRuleType::Style, diff --git a/components/script/dom/htmlbodyelement.rs b/components/script/dom/htmlbodyelement.rs index e2275c4a095..0ecd130914f 100644 --- a/components/script/dom/htmlbodyelement.rs +++ b/components/script/dom/htmlbodyelement.rs @@ -87,8 +87,10 @@ impl HTMLBodyElementMethods for HTMLBodyElement { // https://html.spec.whatwg.org/multipage/#dom-body-background fn SetBackground(&self, input: DOMString) { - let value = - AttrValue::from_resolved_url(&document_from_node(self).base_url(), input.into()); + let value = AttrValue::from_resolved_url( + &document_from_node(self).base_url().get_arc(), + input.into(), + ); self.upcast::<Element>() .set_attribute(&local_name!("background"), value); } @@ -123,6 +125,7 @@ impl HTMLBodyElementLayoutHelpers for LayoutDom<'_, HTMLBodyElement> { .get_attr_for_layout(&ns!(), &local_name!("background")) .and_then(AttrValue::as_resolved_url) .cloned() + .map(Into::into) } } @@ -164,9 +167,10 @@ impl VirtualMethods for HTMLBodyElement { local_name!("bgcolor") | local_name!("text") => { AttrValue::from_legacy_color(value.into()) }, - local_name!("background") => { - AttrValue::from_resolved_url(&document_from_node(self).base_url(), value.into()) - }, + local_name!("background") => AttrValue::from_resolved_url( + &document_from_node(self).base_url().get_arc(), + value.into(), + ), _ => self .super_type() .unwrap() diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs index baef87bff4c..48746ba987c 100644 --- a/components/script/dom/htmlimageelement.rs +++ b/components/script/dom/htmlimageelement.rs @@ -40,11 +40,12 @@ use style::context::QuirksMode; use style::media_queries::MediaList; use style::parser::ParserContext; use style::str::is_ascii_digit; -use style::stylesheets::{CssRuleType, Origin}; +use style::stylesheets::{CssRuleType, Origin, UrlExtraData}; use style::values::specified::length::{Length, NoCalcLength}; use style::values::specified::source_size_list::SourceSizeList; use style::values::specified::AbsoluteLength; use style_traits::ParsingMode; +use url::Url; use crate::document_loader::{LoadBlocker, LoadType}; use crate::dom::activation::Activatable; @@ -678,7 +679,7 @@ impl HTMLImageElement { fn matches_environment(&self, media_query: String) -> bool { let document = document_from_node(self); let quirks_mode = document.quirks_mode(); - let document_url = &document.url(); + let document_url_data = UrlExtraData(document.url().get_arc()); // FIXME(emilio): This should do the same that we do for other media // lists regarding the rule type and such, though it doesn't really // matter right now... @@ -686,7 +687,7 @@ impl HTMLImageElement { // Also, ParsingMode::all() is wrong, and should be DEFAULT. let context = ParserContext::new( Origin::Author, - document_url, + &document_url_data, Some(CssRuleType::Style), ParsingMode::all(), quirks_mode, @@ -1434,10 +1435,10 @@ impl LayoutHTMLImageElementHelpers for LayoutDom<'_, HTMLImageElement> { pub fn parse_a_sizes_attribute(value: DOMString) -> SourceSizeList { let mut input = ParserInput::new(&value); let mut parser = Parser::new(&mut input); - let url = ServoUrl::parse("about:blank").unwrap(); + let url_data = Url::parse("about:blank").unwrap().into(); let context = ParserContext::new( Origin::Author, - &url, + &url_data, Some(CssRuleType::Style), // FIXME(emilio): why ::empty() instead of ::DEFAULT? Also, what do // browsers do regarding quirks-mode in a media list? diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index d77212e2621..83fafe6a00e 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -18,7 +18,7 @@ use style::attr::AttrValue; use style::media_queries::MediaList; use style::parser::ParserContext as CssParserContext; use style::str::HTML_SPACE_CHARACTERS; -use style::stylesheets::{CssRuleType, Origin, Stylesheet}; +use style::stylesheets::{CssRuleType, Origin, Stylesheet, UrlExtraData}; use style_traits::ParsingMode; use crate::dom::attr::Attr; @@ -310,14 +310,14 @@ impl HTMLLinkElement { let mut input = ParserInput::new(&mq_str); let mut css_parser = CssParser::new(&mut input); - let doc_url = document.url(); + let document_url_data = &UrlExtraData(document.url().get_arc()); let window = document.window(); // FIXME(emilio): This looks somewhat fishy, since we use the context // only to parse the media query list, CssRuleType::Media doesn't make // much sense. let context = CssParserContext::new( Origin::Author, - &doc_url, + &document_url_data, Some(CssRuleType::Media), ParsingMode::DEFAULT, document.quirks_mode(), diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs index 398214de1a4..7362b3f905d 100644 --- a/components/script/dom/htmlscriptelement.rs +++ b/components/script/dom/htmlscriptelement.rs @@ -1117,7 +1117,7 @@ impl HTMLScriptElement { if let Some(record) = record { rooted!(in(*GlobalScope::get_cx()) let mut rval = UndefinedValue()); let evaluated = - module_tree.execute_module(global, record, rval.handle_mut().into()); + module_tree.execute_module(&global, record, rval.handle_mut().into()); if let Err(exception) = evaluated { module_tree.set_rethrow_error(exception); diff --git a/components/script/dom/htmlstyleelement.rs b/components/script/dom/htmlstyleelement.rs index 6d8a4f8769d..ad7977000fe 100644 --- a/components/script/dom/htmlstyleelement.rs +++ b/components/script/dom/htmlstyleelement.rs @@ -12,7 +12,7 @@ use net_traits::ReferrerPolicy; use servo_arc::Arc; use style::media_queries::MediaList; use style::parser::ParserContext as CssParserContext; -use style::stylesheets::{AllowImportRules, CssRuleType, Origin, Stylesheet}; +use style::stylesheets::{AllowImportRules, CssRuleType, Origin, Stylesheet, UrlExtraData}; use style_traits::ParsingMode; use crate::dom::bindings::cell::DomRefCell; @@ -100,11 +100,11 @@ impl HTMLStyleElement { let data = node .GetTextContent() .expect("Element.textContent must be a string"); - let url = window.get_url(); + let url_data = UrlExtraData(window.get_url().get_arc()); let css_error_reporter = window.css_error_reporter(); let context = CssParserContext::new( Origin::Author, - &url, + &url_data, Some(CssRuleType::Media), ParsingMode::DEFAULT, doc.quirks_mode(), @@ -119,7 +119,7 @@ impl HTMLStyleElement { let loader = StylesheetLoader::for_element(self.upcast()); let sheet = Stylesheet::from_str( &data, - window.get_url(), + UrlExtraData(window.get_url().get_arc()), Origin::Author, mq, shared_lock, diff --git a/components/script/dom/medialist.rs b/components/script/dom/medialist.rs index 4874e044bca..f8baedb4e5a 100644 --- a/components/script/dom/medialist.rs +++ b/components/script/dom/medialist.rs @@ -8,7 +8,7 @@ use servo_arc::Arc; use style::media_queries::{MediaList as StyleMediaList, MediaQuery}; use style::parser::ParserContext; use style::shared_lock::{Locked, SharedRwLock}; -use style::stylesheets::{CssRuleType, Origin}; +use style::stylesheets::{CssRuleType, Origin, UrlExtraData}; use style_traits::{ParsingMode, ToCss}; use crate::dom::bindings::codegen::Bindings::MediaListBinding::MediaListMethods; @@ -80,11 +80,11 @@ impl MediaListMethods for MediaList { let mut parser = Parser::new(&mut input); let global = self.global(); let window = global.as_window(); - let url = window.get_url(); + let url_data = UrlExtraData(window.get_url().get_arc()); let quirks_mode = window.Document().quirks_mode(); let context = ParserContext::new( Origin::Author, - &url, + &url_data, Some(CssRuleType::Media), ParsingMode::DEFAULT, quirks_mode, @@ -123,11 +123,11 @@ impl MediaListMethods for MediaList { let mut parser = Parser::new(&mut input); let global = self.global(); let win = global.as_window(); - let url = win.get_url(); + let url_data = UrlExtraData(win.get_url().get_arc()); let quirks_mode = win.Document().quirks_mode(); let context = ParserContext::new( Origin::Author, - &url, + &url_data, Some(CssRuleType::Media), ParsingMode::DEFAULT, quirks_mode, @@ -162,11 +162,11 @@ impl MediaListMethods for MediaList { let mut parser = Parser::new(&mut input); let global = self.global(); let win = global.as_window(); - let url = win.get_url(); + let url_data = UrlExtraData(win.get_url().get_arc()); let quirks_mode = win.Document().quirks_mode(); let context = ParserContext::new( Origin::Author, - &url, + &url_data, Some(CssRuleType::Media), ParsingMode::DEFAULT, quirks_mode, diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index c50ee80164f..5fcfa16f937 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -41,7 +41,7 @@ use style::context::QuirksMode; use style::dom::OpaqueNode; use style::properties::ComputedValues; use style::selector_parser::{SelectorImpl, SelectorParser}; -use style::stylesheets::Stylesheet; +use style::stylesheets::{Stylesheet, UrlExtraData}; use uuid::Uuid; use crate::document_loader::DocumentLoader; @@ -961,7 +961,10 @@ impl Node { pub fn query_selector(&self, selectors: DOMString) -> Fallible<Option<DomRoot<Element>>> { // Step 1. let doc = self.owner_doc(); - match SelectorParser::parse_author_origin_no_namespace(&selectors, &doc.url()) { + match SelectorParser::parse_author_origin_no_namespace( + &selectors, + &UrlExtraData(doc.url().get_arc()), + ) { // Step 2. Err(_) => Err(Error::Syntax), // Step 3. @@ -989,7 +992,10 @@ impl Node { pub fn query_selector_iter(&self, selectors: DOMString) -> Fallible<QuerySelectorIterator> { // Step 1. let url = self.owner_doc().url(); - match SelectorParser::parse_author_origin_no_namespace(&selectors, &url) { + match SelectorParser::parse_author_origin_no_namespace( + &selectors, + &UrlExtraData(url.get_arc()), + ) { // Step 2. Err(_) => Err(Error::Syntax), // Step 3. diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 83bdc3363ed..cbdb3412cc4 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -73,7 +73,7 @@ use style::properties::style_structs::Font; use style::properties::{PropertyId, ShorthandId}; use style::selector_parser::PseudoElement; use style::str::HTML_SPACE_CHARACTERS; -use style::stylesheets::{CssRuleType, Origin}; +use style::stylesheets::{CssRuleType, Origin, UrlExtraData}; use style_traits::{CSSPixel, DevicePixel, ParsingMode}; use url::Position; use webrender_api::units::{DeviceIntPoint, DeviceIntSize, LayoutPixel}; @@ -1328,11 +1328,11 @@ impl WindowMethods for Window { fn MatchMedia(&self, query: DOMString) -> DomRoot<MediaQueryList> { let mut input = ParserInput::new(&query); let mut parser = Parser::new(&mut input); - let url = self.get_url(); + let url_data = UrlExtraData(self.get_url().get_arc()); let quirks_mode = self.Document().quirks_mode(); let context = CssParserContext::new( Origin::Author, - &url, + &url_data, Some(CssRuleType::Media), ParsingMode::DEFAULT, quirks_mode, @@ -2826,11 +2826,16 @@ pub struct CSSErrorReporter { unsafe_no_jsmanaged_fields!(CSSErrorReporter); impl ParseErrorReporter for CSSErrorReporter { - fn report_error(&self, url: &ServoUrl, location: SourceLocation, error: ContextualParseError) { + fn report_error( + &self, + url: &UrlExtraData, + location: SourceLocation, + error: ContextualParseError, + ) { if log_enabled!(log::Level::Info) { info!( "Url:\t{}\n{}:{} {}", - url.as_str(), + url.0.as_str(), location.line, location.column, error @@ -2844,7 +2849,7 @@ impl ParseErrorReporter for CSSErrorReporter { .unwrap() .send(ConstellationControlMsg::ReportCSSError( self.pipelineid, - url.to_string(), + url.0.to_string(), location.line, location.column, error.to_string(), |