diff --git a/components/script/stylesheet_loader.rs b/components/script/stylesheet_loader.rs index 9185bb7f134..cdafde510c9 100644 --- a/components/script/stylesheet_loader.rs +++ b/components/script/stylesheet_loader.rs @@ -161,6 +161,7 @@ impl FetchResponseListener for StylesheetContext { &data, protocol_encoding_label, Some(environment_encoding), + &final_url, Some(&loader), win.css_error_reporter()); } diff --git a/components/style/encoding_support.rs b/components/style/encoding_support.rs index 6712af0387e..ce7aa43c1fd 100644 --- a/components/style/encoding_support.rs +++ b/components/style/encoding_support.rs @@ -74,12 +74,14 @@ impl Stylesheet { bytes: &[u8], protocol_encoding_label: Option<&str>, environment_encoding: Option, + url_data: &UrlExtraData, stylesheet_loader: Option<&StylesheetLoader>, error_reporter: &ParseErrorReporter) { let (string, _) = decode_stylesheet_bytes( bytes, protocol_encoding_label, environment_encoding); Self::update_from_str(existing, &string, + url_data, stylesheet_loader, error_reporter) } diff --git a/components/style/stylesheets.rs b/components/style/stylesheets.rs index c0ac68cf922..f59aceb9e61 100644 --- a/components/style/stylesheets.rs +++ b/components/style/stylesheets.rs @@ -595,11 +595,14 @@ impl Stylesheet { /// Updates an empty stylesheet from a given string of text. pub fn update_from_str(existing: &Stylesheet, css: &str, + url_data: &UrlExtraData, stylesheet_loader: Option<&StylesheetLoader>, error_reporter: &ParseErrorReporter) { let mut namespaces = Namespaces::default(); + // FIXME: we really should update existing.url_data with the given url_data, + // otherwise newly inserted rule may not have the right base url. let (rules, dirty_on_viewport_size_change) = Stylesheet::parse_rules( - css, &existing.url_data, existing.origin, &mut namespaces, + css, url_data, existing.origin, &mut namespaces, &existing.shared_lock, stylesheet_loader, error_reporter, ); diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 14a313b4187..ffebdb38b56 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -364,9 +364,10 @@ pub extern "C" fn Servo_StyleSheet_ClearAndUpdate(stylesheet: RawServoStyleSheet loader: *mut Loader, gecko_stylesheet: *mut ServoStyleSheet, data: *const nsACString, - _extra_data: *mut URLExtraData) + extra_data: *mut URLExtraData) { let input = unsafe { data.as_ref().unwrap().as_str_unchecked() }; + let url_data = unsafe { RefPtr::from_ptr_ref(&extra_data) }; let loader = if loader.is_null() { None @@ -381,7 +382,8 @@ pub extern "C" fn Servo_StyleSheet_ClearAndUpdate(stylesheet: RawServoStyleSheet }; let sheet = Stylesheet::as_arc(&stylesheet); - Stylesheet::update_from_str(&sheet, input, loader, &StdoutErrorReporter); + Stylesheet::update_from_str(&sheet, input, url_data, + loader, &StdoutErrorReporter); } #[no_mangle]