From 3a15cbd5c36f9289d619ecc543b25859aaeae50e Mon Sep 17 00:00:00 2001 From: KuoE0 Date: Thu, 18 May 2017 17:15:16 +0800 Subject: [PATCH] Store the pointer of reusable sheets in StylesheetLoader. MozReview-Commit-ID: DZP2bChjj3k --- ports/geckolib/glue.rs | 11 ++++++----- ports/geckolib/stylesheet_loader.rs | 11 +++++++---- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 02e476c63cfd..6937d4fff105 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -65,12 +65,12 @@ use style::gecko_bindings::bindings::nsTimingFunctionBorrowed; use style::gecko_bindings::bindings::nsTimingFunctionBorrowedMut; use style::gecko_bindings::structs; 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::{SheetParsingMode, nsIAtom, nsCSSPropertyID}; use style::gecko_bindings::structs::{nsCSSFontFaceRule, nsCSSCounterStyleRule}; use style::gecko_bindings::structs::{nsRestyleHint, nsChangeHint, PropertyValuePair}; use style::gecko_bindings::structs::IterationCompositeOperation; -use style::gecko_bindings::structs::Loader; use style::gecko_bindings::structs::MallocSizeOf; use style::gecko_bindings::structs::RawGeckoPresContextOwned; 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() { None } 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? @@ -750,7 +750,8 @@ pub extern "C" fn Servo_StyleSheet_ClearAndUpdate(stylesheet: RawServoStyleSheet gecko_stylesheet: *mut ServoStyleSheet, data: *const nsACString, 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 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() { None } 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? @@ -950,7 +951,7 @@ pub extern "C" fn Servo_CssRules_InsertRule(rules: ServoCssRulesBorrowed, let loader = if loader.is_null() { None } 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 rule = unsafe { rule.as_ref().unwrap().as_str_unchecked() }; diff --git a/ports/geckolib/stylesheet_loader.rs b/ports/geckolib/stylesheet_loader.rs index 87fdc4d39f3a..88a6866539cc 100644 --- a/ports/geckolib/stylesheet_loader.rs +++ b/ports/geckolib/stylesheet_loader.rs @@ -3,18 +3,20 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 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::media_queries::MediaList; use style::shared_lock::Locked; use style::stylearc::Arc; 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 { - pub fn new(loader: *mut Loader, parent: *mut ServoStyleSheet) -> Self { - StylesheetLoader(loader, parent) + pub fn new(loader: *mut Loader, + parent: *mut ServoStyleSheet, + reusable_sheets: *mut LoaderReusableStyleSheets) -> Self { + StylesheetLoader(loader, parent, reusable_sheets) } } @@ -37,6 +39,7 @@ impl StyleStylesheetLoader for StylesheetLoader { unsafe { Gecko_LoadStyleSheet(self.0, self.1, + self.2, Stylesheet::arc_as_borrowed(&import.stylesheet), base_url_data, spec_bytes,