--- a/servo/ports/geckolib/glue.rs
+++ b/servo/ports/geckolib/glue.rs
@@ -113,16 +113,17 @@ use style::sequential;
use style::shared_lock::{SharedRwLockReadGuard, StylesheetGuards, ToCssWithGuard, Locked};
use style::string_cache::Atom;
use style::style_adjuster::StyleAdjuster;
use style::stylesheets::{CssRule, CssRules, CssRuleType, CssRulesHelpers, DocumentRule};
use style::stylesheets::{FontFeatureValuesRule, ImportRule, KeyframesRule, MallocSizeOfWithGuard};
use style::stylesheets::{MallocSizeOfWithRepeats, MediaRule};
use style::stylesheets::{NamespaceRule, Origin, PageRule, SizeOfState, StyleRule, SupportsRule};
use style::stylesheets::StylesheetContents;
+use style::stylesheets::StylesheetInDocument;
use style::stylesheets::StylesheetLoader as StyleStylesheetLoader;
use style::stylesheets::keyframes_rule::{Keyframe, KeyframeSelector, KeyframesStepValue};
use style::stylesheets::supports_rule::parse_condition_or_declaration;
use style::stylist::RuleInclusion;
use style::thread_state;
use style::timer::Timer;
use style::traversal::{DomTraversal, TraversalDriver};
use style::traversal::resolve_style;
@@ -844,22 +845,20 @@ pub extern "C" fn Servo_StyleSheet_FromU
pub extern "C" fn Servo_StyleSet_AppendStyleSheet(
raw_data: RawServoStyleSetBorrowed,
sheet: *const ServoStyleSheet,
) {
let global_style_data = &*GLOBAL_STYLE_DATA;
let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut();
let mut data = &mut *data;
let guard = global_style_data.shared_lock.read();
- data.stylesheets.append_stylesheet(
- &data.stylist,
- unsafe { GeckoStyleSheet::new(sheet) },
- &guard
- );
- data.clear_stylist();
+ let sheet = unsafe { GeckoStyleSheet::new(sheet) };
+ let origin = sheet.contents(&guard).origin;
+ data.stylesheets.append_stylesheet(&data.stylist, sheet, &guard);
+ data.clear_stylist_origin(&origin);
}
#[no_mangle]
pub extern "C" fn Servo_StyleSet_MediumFeaturesChanged(
raw_data: RawServoStyleSetBorrowed,
viewport_units_used: *mut bool,
) -> bool {
let global_style_data = &*GLOBAL_STYLE_DATA;
@@ -893,58 +892,56 @@ pub extern "C" fn Servo_StyleSet_MediumF
pub extern "C" fn Servo_StyleSet_PrependStyleSheet(
raw_data: RawServoStyleSetBorrowed,
sheet: *const ServoStyleSheet,
) {
let global_style_data = &*GLOBAL_STYLE_DATA;
let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut();
let mut data = &mut *data;
let guard = global_style_data.shared_lock.read();
- data.stylesheets.prepend_stylesheet(
- &data.stylist,
- unsafe { GeckoStyleSheet::new(sheet) },
- &guard,
- );
- data.clear_stylist();
+ let sheet = unsafe { GeckoStyleSheet::new(sheet) };
+ let origin = sheet.contents(&guard).origin;
+ data.stylesheets.prepend_stylesheet(&data.stylist, sheet, &guard);
+ data.clear_stylist_origin(&origin);
}
#[no_mangle]
pub extern "C" fn Servo_StyleSet_InsertStyleSheetBefore(
raw_data: RawServoStyleSetBorrowed,
sheet: *const ServoStyleSheet,
before_sheet: *const ServoStyleSheet
) {
let global_style_data = &*GLOBAL_STYLE_DATA;
let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut();
let mut data = &mut *data;
let guard = global_style_data.shared_lock.read();
+ let sheet = unsafe { GeckoStyleSheet::new(sheet) };
+ let origin = sheet.contents(&guard).origin;
data.stylesheets.insert_stylesheet_before(
&data.stylist,
- unsafe { GeckoStyleSheet::new(sheet) },
+ sheet,
unsafe { GeckoStyleSheet::new(before_sheet) },
&guard,
);
- data.clear_stylist();
+ data.clear_stylist_origin(&origin);
}
#[no_mangle]
pub extern "C" fn Servo_StyleSet_RemoveStyleSheet(
raw_data: RawServoStyleSetBorrowed,
sheet: *const ServoStyleSheet
) {
let global_style_data = &*GLOBAL_STYLE_DATA;
let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut();
let mut data = &mut *data;
let guard = global_style_data.shared_lock.read();
- data.stylesheets.remove_stylesheet(
- &data.stylist,
- unsafe { GeckoStyleSheet::new(sheet) },
- &guard,
- );
- data.clear_stylist();
+ let sheet = unsafe { GeckoStyleSheet::new(sheet) };
+ let origin = sheet.contents(&guard).origin;
+ data.stylesheets.remove_stylesheet(&data.stylist, sheet, &guard);
+ data.clear_stylist_origin(&origin);
}
#[no_mangle]
pub extern "C" fn Servo_StyleSet_FlushStyleSheets(
raw_data: RawServoStyleSetBorrowed,
doc_element: RawGeckoElementBorrowedOrNull,
) {
let global_style_data = &*GLOBAL_STYLE_DATA;