Skip to content

Commit

Permalink
Auto merge of #20146 - bholley:explicit_load_data, r=bholley
Browse files Browse the repository at this point in the history
Stylo: Pass an explicit parent SheetLoadData for child stylesheet loads

https://bugzilla.mozilla.org/show_bug.cgi?id=1441896
  • Loading branch information
bors-servo committed Feb 28, 2018
2 parents 2d4caaf + 0236a6c commit e8f7786
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 6 deletions.
3 changes: 3 additions & 0 deletions components/style/gecko/generated/bindings.rs
Expand Up @@ -235,6 +235,7 @@ use gecko_bindings::structs::nscoord;
use gecko_bindings::structs::nsresult;
use gecko_bindings::structs::Loader;
use gecko_bindings::structs::LoaderReusableStyleSheets;
use gecko_bindings::structs::SheetLoadData;
use gecko_bindings::structs::ServoStyleSheet;
use gecko_bindings::structs::ServoComputedData;
use gecko_bindings::structs::ServoStyleContext;
Expand Down Expand Up @@ -664,6 +665,7 @@ extern "C" {
pub fn Gecko_LoadStyleSheet(
loader: *mut Loader,
parent: *mut ServoStyleSheet,
parent_load_data: *mut SheetLoadData,
reusable_sheets: *mut LoaderReusableStyleSheets,
base_url_data: *mut RawGeckoURLExtraData,
url_bytes: *const u8,
Expand Down Expand Up @@ -2093,6 +2095,7 @@ extern "C" {
pub fn Servo_StyleSheet_FromUTF8Bytes(
loader: *mut Loader,
gecko_stylesheet: *mut ServoStyleSheet,
load_data: *mut SheetLoadData,
data: *const u8,
data_len: usize,
parsing_mode: SheetParsingMode,
Expand Down
10 changes: 7 additions & 3 deletions ports/geckolib/glue.rs
Expand Up @@ -90,7 +90,7 @@ use style::gecko_bindings::structs;
use style::gecko_bindings::structs::{CallerType, CSSPseudoElementType, CompositeOperation};
use style::gecko_bindings::structs::{Loader, LoaderReusableStyleSheets};
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::{nsRestyleHint, nsChangeHint, PropertyValuePair};
use style::gecko_bindings::structs::AtomArray;
Expand Down Expand Up @@ -1067,10 +1067,14 @@ pub extern "C" fn Servo_StyleSheet_Empty(mode: SheetParsingMode) -> RawServoStyl
).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]
pub extern "C" fn Servo_StyleSheet_FromUTF8Bytes(
loader: *mut Loader,
stylesheet: *mut ServoStyleSheet,
load_data: *mut SheetLoadData,
data: *const u8,
data_len: usize,
mode: SheetParsingMode,
Expand All @@ -1094,7 +1098,7 @@ pub extern "C" fn Servo_StyleSheet_FromUTF8Bytes(
let loader = if loader.is_null() {
None
} 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?
Expand Down Expand Up @@ -1538,7 +1542,7 @@ pub extern "C" fn Servo_CssRules_InsertRule(
let loader = if loader.is_null() {
None
} 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 rule = unsafe { rule.as_ref().unwrap().as_str_unchecked() };
Expand Down
8 changes: 5 additions & 3 deletions ports/geckolib/stylesheet_loader.rs
Expand Up @@ -6,7 +6,7 @@ use cssparser::SourceLocation;
use servo_arc::Arc;
use style::gecko::data::GeckoStyleSheet;
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::media_queries::MediaList;
use style::parser::ParserContext;
Expand All @@ -15,13 +15,14 @@ use style::stylesheets::{ImportRule, StylesheetLoader as StyleStylesheetLoader};
use style::stylesheets::import_rule::ImportSheet;
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 {
pub fn new(loader: *mut Loader,
parent: *mut ServoStyleSheet,
parent_load_data: *mut SheetLoadData,
reusable_sheets: *mut LoaderReusableStyleSheets) -> Self {
StylesheetLoader(loader, parent, reusable_sheets)
StylesheetLoader(loader, parent, parent_load_data, reusable_sheets)
}
}

Expand All @@ -45,6 +46,7 @@ impl StyleStylesheetLoader for StylesheetLoader {
Gecko_LoadStyleSheet(self.0,
self.1,
self.2,
self.3,
base_url_data,
spec_bytes,
spec_len as u32,
Expand Down

0 comments on commit e8f7786

Please sign in to comment.