Auto merge of #20146 - bholley:explicit_load_data, r=bholley

Stylo: Pass an explicit parent SheetLoadData for child stylesheet loads

https://bugzilla.mozilla.org/show_bug.cgi?id=1441896
This commit is contained in:
bors-servo 2018-02-28 11:32:00 -05:00 committed by GitHub
commit e8f77861a9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 6 deletions

View file

@ -235,6 +235,7 @@ use gecko_bindings::structs::nscoord;
use gecko_bindings::structs::nsresult; use gecko_bindings::structs::nsresult;
use gecko_bindings::structs::Loader; use gecko_bindings::structs::Loader;
use gecko_bindings::structs::LoaderReusableStyleSheets; use gecko_bindings::structs::LoaderReusableStyleSheets;
use gecko_bindings::structs::SheetLoadData;
use gecko_bindings::structs::ServoStyleSheet; use gecko_bindings::structs::ServoStyleSheet;
use gecko_bindings::structs::ServoComputedData; use gecko_bindings::structs::ServoComputedData;
use gecko_bindings::structs::ServoStyleContext; use gecko_bindings::structs::ServoStyleContext;
@ -664,6 +665,7 @@ extern "C" {
pub fn Gecko_LoadStyleSheet( pub fn Gecko_LoadStyleSheet(
loader: *mut Loader, loader: *mut Loader,
parent: *mut ServoStyleSheet, parent: *mut ServoStyleSheet,
parent_load_data: *mut SheetLoadData,
reusable_sheets: *mut LoaderReusableStyleSheets, reusable_sheets: *mut LoaderReusableStyleSheets,
base_url_data: *mut RawGeckoURLExtraData, base_url_data: *mut RawGeckoURLExtraData,
url_bytes: *const u8, url_bytes: *const u8,
@ -2093,6 +2095,7 @@ extern "C" {
pub fn Servo_StyleSheet_FromUTF8Bytes( pub fn Servo_StyleSheet_FromUTF8Bytes(
loader: *mut Loader, loader: *mut Loader,
gecko_stylesheet: *mut ServoStyleSheet, gecko_stylesheet: *mut ServoStyleSheet,
load_data: *mut SheetLoadData,
data: *const u8, data: *const u8,
data_len: usize, data_len: usize,
parsing_mode: SheetParsingMode, parsing_mode: SheetParsingMode,

View file

@ -90,7 +90,7 @@ use style::gecko_bindings::structs;
use style::gecko_bindings::structs::{CallerType, CSSPseudoElementType, CompositeOperation}; use style::gecko_bindings::structs::{CallerType, CSSPseudoElementType, CompositeOperation};
use style::gecko_bindings::structs::{Loader, LoaderReusableStyleSheets}; use style::gecko_bindings::structs::{Loader, LoaderReusableStyleSheets};
use style::gecko_bindings::structs::{RawServoStyleRule, ServoStyleContextStrong, RustString}; use style::gecko_bindings::structs::{RawServoStyleRule, ServoStyleContextStrong, RustString};
use style::gecko_bindings::structs::{ServoStyleSheet, SheetParsingMode, nsAtom, nsCSSPropertyID}; use style::gecko_bindings::structs::{ServoStyleSheet, SheetLoadData, SheetParsingMode, nsAtom, nsCSSPropertyID};
use style::gecko_bindings::structs::{nsCSSFontDesc, nsCSSFontFaceRule, nsCSSCounterStyleRule}; use style::gecko_bindings::structs::{nsCSSFontDesc, nsCSSFontFaceRule, nsCSSCounterStyleRule};
use style::gecko_bindings::structs::{nsRestyleHint, nsChangeHint, PropertyValuePair}; use style::gecko_bindings::structs::{nsRestyleHint, nsChangeHint, PropertyValuePair};
use style::gecko_bindings::structs::AtomArray; use style::gecko_bindings::structs::AtomArray;
@ -1067,10 +1067,14 @@ pub extern "C" fn Servo_StyleSheet_Empty(mode: SheetParsingMode) -> RawServoStyl
).into_strong() ).into_strong()
} }
/// Note: The load_data corresponds to this sheet, and is passed as the parent
/// load data for child sheet loads. It may be null for certain cases where we
/// know we won't have child loads.
#[no_mangle] #[no_mangle]
pub extern "C" fn Servo_StyleSheet_FromUTF8Bytes( pub extern "C" fn Servo_StyleSheet_FromUTF8Bytes(
loader: *mut Loader, loader: *mut Loader,
stylesheet: *mut ServoStyleSheet, stylesheet: *mut ServoStyleSheet,
load_data: *mut SheetLoadData,
data: *const u8, data: *const u8,
data_len: usize, data_len: usize,
mode: SheetParsingMode, mode: SheetParsingMode,
@ -1094,7 +1098,7 @@ pub extern "C" fn Servo_StyleSheet_FromUTF8Bytes(
let loader = if loader.is_null() { let loader = if loader.is_null() {
None None
} else { } else {
Some(StylesheetLoader::new(loader, stylesheet, reusable_sheets)) Some(StylesheetLoader::new(loader, stylesheet, load_data, reusable_sheets))
}; };
// FIXME(emilio): loader.as_ref() doesn't typecheck for some reason? // FIXME(emilio): loader.as_ref() doesn't typecheck for some reason?
@ -1538,7 +1542,7 @@ pub extern "C" fn Servo_CssRules_InsertRule(
let loader = if loader.is_null() { let loader = if loader.is_null() {
None None
} else { } else {
Some(StylesheetLoader::new(loader, gecko_stylesheet, ptr::null_mut())) Some(StylesheetLoader::new(loader, gecko_stylesheet, ptr::null_mut(), ptr::null_mut()))
}; };
let loader = loader.as_ref().map(|loader| loader as &StyleStylesheetLoader); let loader = loader.as_ref().map(|loader| loader as &StyleStylesheetLoader);
let rule = unsafe { rule.as_ref().unwrap().as_str_unchecked() }; let rule = unsafe { rule.as_ref().unwrap().as_str_unchecked() };

View file

@ -6,7 +6,7 @@ use cssparser::SourceLocation;
use servo_arc::Arc; use servo_arc::Arc;
use style::gecko::data::GeckoStyleSheet; use style::gecko::data::GeckoStyleSheet;
use style::gecko_bindings::bindings::Gecko_LoadStyleSheet; use style::gecko_bindings::bindings::Gecko_LoadStyleSheet;
use style::gecko_bindings::structs::{Loader, ServoStyleSheet, LoaderReusableStyleSheets}; use style::gecko_bindings::structs::{Loader, ServoStyleSheet, SheetLoadData, LoaderReusableStyleSheets};
use style::gecko_bindings::sugar::ownership::FFIArcHelpers; use style::gecko_bindings::sugar::ownership::FFIArcHelpers;
use style::media_queries::MediaList; use style::media_queries::MediaList;
use style::parser::ParserContext; use style::parser::ParserContext;
@ -15,13 +15,14 @@ use style::stylesheets::{ImportRule, StylesheetLoader as StyleStylesheetLoader};
use style::stylesheets::import_rule::ImportSheet; use style::stylesheets::import_rule::ImportSheet;
use style::values::specified::url::SpecifiedUrl; use style::values::specified::url::SpecifiedUrl;
pub struct StylesheetLoader(*mut Loader, *mut ServoStyleSheet, *mut LoaderReusableStyleSheets); pub struct StylesheetLoader(*mut Loader, *mut ServoStyleSheet, *mut SheetLoadData, *mut LoaderReusableStyleSheets);
impl StylesheetLoader { impl StylesheetLoader {
pub fn new(loader: *mut Loader, pub fn new(loader: *mut Loader,
parent: *mut ServoStyleSheet, parent: *mut ServoStyleSheet,
parent_load_data: *mut SheetLoadData,
reusable_sheets: *mut LoaderReusableStyleSheets) -> Self { reusable_sheets: *mut LoaderReusableStyleSheets) -> Self {
StylesheetLoader(loader, parent, reusable_sheets) StylesheetLoader(loader, parent, parent_load_data, reusable_sheets)
} }
} }
@ -45,6 +46,7 @@ impl StyleStylesheetLoader for StylesheetLoader {
Gecko_LoadStyleSheet(self.0, Gecko_LoadStyleSheet(self.0,
self.1, self.1,
self.2, self.2,
self.3,
base_url_data, base_url_data,
spec_bytes, spec_bytes,
spec_len as u32, spec_len as u32,