Store the pointer of reusable sheets in StylesheetLoader.

MozReview-Commit-ID: DZP2bChjj3k
This commit is contained in:
KuoE0 2017-05-18 17:15:16 +08:00
parent d767e6046b
commit 3a15cbd5c3
2 changed files with 13 additions and 9 deletions

View file

@ -65,12 +65,12 @@ use style::gecko_bindings::bindings::nsTimingFunctionBorrowed;
use style::gecko_bindings::bindings::nsTimingFunctionBorrowedMut; use style::gecko_bindings::bindings::nsTimingFunctionBorrowedMut;
use style::gecko_bindings::structs; use style::gecko_bindings::structs;
use style::gecko_bindings::structs::{CSSPseudoElementType, CompositeOperation}; use style::gecko_bindings::structs::{CSSPseudoElementType, CompositeOperation};
use style::gecko_bindings::structs::{Loader, LoaderReusableStyleSheets};
use style::gecko_bindings::structs::{RawServoStyleRule, ServoStyleSheet}; use style::gecko_bindings::structs::{RawServoStyleRule, ServoStyleSheet};
use style::gecko_bindings::structs::{SheetParsingMode, nsIAtom, nsCSSPropertyID}; use style::gecko_bindings::structs::{SheetParsingMode, nsIAtom, nsCSSPropertyID};
use style::gecko_bindings::structs::{nsCSSFontFaceRule, nsCSSCounterStyleRule}; use style::gecko_bindings::structs::{nsCSSFontFaceRule, nsCSSCounterStyleRule};
use style::gecko_bindings::structs::{nsRestyleHint, nsChangeHint, PropertyValuePair}; use style::gecko_bindings::structs::{nsRestyleHint, nsChangeHint, PropertyValuePair};
use style::gecko_bindings::structs::IterationCompositeOperation; use style::gecko_bindings::structs::IterationCompositeOperation;
use style::gecko_bindings::structs::Loader;
use style::gecko_bindings::structs::MallocSizeOf; use style::gecko_bindings::structs::MallocSizeOf;
use style::gecko_bindings::structs::RawGeckoPresContextOwned; use style::gecko_bindings::structs::RawGeckoPresContextOwned;
use style::gecko_bindings::structs::ServoElementSnapshotTable; use style::gecko_bindings::structs::ServoElementSnapshotTable;
@ -721,7 +721,7 @@ pub extern "C" fn Servo_StyleSheet_FromUTF8Bytes(loader: *mut Loader,
let loader = if loader.is_null() { let loader = if loader.is_null() {
None None
} else { } else {
Some(StylesheetLoader::new(loader, stylesheet)) Some(StylesheetLoader::new(loader, stylesheet, ptr::null_mut()))
}; };
// FIXME(emilio): loader.as_ref() doesn't typecheck for some reason? // FIXME(emilio): loader.as_ref() doesn't typecheck for some reason?
@ -750,7 +750,8 @@ pub extern "C" fn Servo_StyleSheet_ClearAndUpdate(stylesheet: RawServoStyleSheet
gecko_stylesheet: *mut ServoStyleSheet, gecko_stylesheet: *mut ServoStyleSheet,
data: *const nsACString, data: *const nsACString,
extra_data: *mut URLExtraData, extra_data: *mut URLExtraData,
line_number_offset: u32) line_number_offset: u32,
reusable_sheets: *mut LoaderReusableStyleSheets)
{ {
let input = unsafe { data.as_ref().unwrap().as_str_unchecked() }; let input = unsafe { data.as_ref().unwrap().as_str_unchecked() };
let url_data = unsafe { RefPtr::from_ptr_ref(&extra_data) }; let url_data = unsafe { RefPtr::from_ptr_ref(&extra_data) };
@ -758,7 +759,7 @@ pub extern "C" fn Servo_StyleSheet_ClearAndUpdate(stylesheet: RawServoStyleSheet
let loader = if loader.is_null() { let loader = if loader.is_null() {
None None
} else { } else {
Some(StylesheetLoader::new(loader, gecko_stylesheet)) Some(StylesheetLoader::new(loader, gecko_stylesheet, reusable_sheets))
}; };
// FIXME(emilio): loader.as_ref() doesn't typecheck for some reason? // FIXME(emilio): loader.as_ref() doesn't typecheck for some reason?
@ -950,7 +951,7 @@ pub extern "C" fn Servo_CssRules_InsertRule(rules: ServoCssRulesBorrowed,
let loader = if loader.is_null() { let loader = if loader.is_null() {
None None
} else { } else {
Some(StylesheetLoader::new(loader, gecko_stylesheet)) Some(StylesheetLoader::new(loader, gecko_stylesheet, 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

@ -3,18 +3,20 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use style::gecko_bindings::bindings::Gecko_LoadStyleSheet; use style::gecko_bindings::bindings::Gecko_LoadStyleSheet;
use style::gecko_bindings::structs::{Loader, ServoStyleSheet}; use style::gecko_bindings::structs::{Loader, ServoStyleSheet, LoaderReusableStyleSheets};
use style::gecko_bindings::sugar::ownership::{HasArcFFI, FFIArcHelpers}; use style::gecko_bindings::sugar::ownership::{HasArcFFI, FFIArcHelpers};
use style::media_queries::MediaList; use style::media_queries::MediaList;
use style::shared_lock::Locked; use style::shared_lock::Locked;
use style::stylearc::Arc; use style::stylearc::Arc;
use style::stylesheets::{ImportRule, Stylesheet, StylesheetLoader as StyleStylesheetLoader}; use style::stylesheets::{ImportRule, Stylesheet, StylesheetLoader as StyleStylesheetLoader};
pub struct StylesheetLoader(*mut Loader, *mut ServoStyleSheet); pub struct StylesheetLoader(*mut Loader, *mut ServoStyleSheet, *mut LoaderReusableStyleSheets);
impl StylesheetLoader { impl StylesheetLoader {
pub fn new(loader: *mut Loader, parent: *mut ServoStyleSheet) -> Self { pub fn new(loader: *mut Loader,
StylesheetLoader(loader, parent) parent: *mut ServoStyleSheet,
reusable_sheets: *mut LoaderReusableStyleSheets) -> Self {
StylesheetLoader(loader, parent, reusable_sheets)
} }
} }
@ -37,6 +39,7 @@ impl StyleStylesheetLoader for StylesheetLoader {
unsafe { unsafe {
Gecko_LoadStyleSheet(self.0, Gecko_LoadStyleSheet(self.0,
self.1, self.1,
self.2,
Stylesheet::arc_as_borrowed(&import.stylesheet), Stylesheet::arc_as_borrowed(&import.stylesheet),
base_url_data, base_url_data,
spec_bytes, spec_bytes,