mirror of
https://github.com/servo/servo.git
synced 2025-08-05 21:50:18 +01:00
stylo: Create error reporters linked to documents (bug 1352669)
This commit is contained in:
parent
4b91014b14
commit
a08371e8eb
19 changed files with 5536 additions and 4324 deletions
|
@ -219,9 +219,6 @@ pub struct LayoutThread {
|
|||
/// All the other elements of this struct are read-only.
|
||||
rw_data: Arc<Mutex<LayoutThreadData>>,
|
||||
|
||||
/// The CSS error reporter for all CSS loaded in this layout thread
|
||||
error_reporter: CSSErrorReporter,
|
||||
|
||||
webrender_image_cache: Arc<RwLock<FnvHashMap<(ServoUrl, UsePlaceholder),
|
||||
WebRenderImageInfo>>>,
|
||||
/// The executor for paint worklets.
|
||||
|
@ -532,10 +529,6 @@ impl LayoutThread {
|
|||
text_index_response: TextIndexResponse(None),
|
||||
nodes_from_point_response: vec![],
|
||||
})),
|
||||
error_reporter: CSSErrorReporter {
|
||||
pipelineid: id,
|
||||
script_chan: Arc::new(Mutex::new(script_chan)),
|
||||
},
|
||||
webrender_image_cache:
|
||||
Arc::new(RwLock::new(FnvHashMap::default())),
|
||||
timer:
|
||||
|
@ -580,7 +573,6 @@ impl LayoutThread {
|
|||
guards: guards,
|
||||
running_animations: self.running_animations.clone(),
|
||||
expired_animations: self.expired_animations.clone(),
|
||||
error_reporter: &self.error_reporter,
|
||||
local_context_creation_data: Mutex::new(thread_local_style_context_creation_data),
|
||||
timer: self.timer.clone(),
|
||||
quirks_mode: self.quirks_mode.unwrap(),
|
||||
|
|
|
@ -508,7 +508,6 @@ fn compute_style_for_animation_step(context: &SharedStyleContext,
|
|||
previous_style,
|
||||
/* cascade_info = */ None,
|
||||
/* visited_style = */ None,
|
||||
&*context.error_reporter,
|
||||
font_metrics_provider,
|
||||
CascadeFlags::empty(),
|
||||
context.quirks_mode);
|
||||
|
|
|
@ -12,7 +12,6 @@ use bloom::StyleBloom;
|
|||
use cache::LRUCache;
|
||||
use data::{EagerPseudoStyles, ElementData};
|
||||
use dom::{OpaqueNode, TNode, TElement, SendElement};
|
||||
use error_reporting::ParseErrorReporter;
|
||||
use euclid::Size2D;
|
||||
use fnv::FnvHashMap;
|
||||
use font_metrics::FontMetricsProvider;
|
||||
|
@ -122,9 +121,6 @@ pub struct SharedStyleContext<'a> {
|
|||
/// Guards for pre-acquired locks
|
||||
pub guards: StylesheetGuards<'a>,
|
||||
|
||||
///The CSS error reporter for all CSS loaded in this layout thread
|
||||
pub error_reporter: &'a ParseErrorReporter,
|
||||
|
||||
/// The current timer for transitions and animations. This is needed to test
|
||||
/// them.
|
||||
pub timer: Timer,
|
||||
|
|
|
@ -139,7 +139,7 @@ impl<'a> ContextualParseError<'a> {
|
|||
}
|
||||
|
||||
/// A generic trait for an error reporter.
|
||||
pub trait ParseErrorReporter : Sync {
|
||||
pub trait ParseErrorReporter {
|
||||
/// Called when the style engine detects an error.
|
||||
///
|
||||
/// Returns the current input being parsed, the source position it was
|
||||
|
@ -188,8 +188,3 @@ impl ParseErrorReporter for NullReporter {
|
|||
// do nothing
|
||||
}
|
||||
}
|
||||
|
||||
/// Create an instance of the default error reporter.
|
||||
pub fn create_error_reporter() -> RustLogReporter {
|
||||
RustLogReporter
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ use gecko_bindings::structs::nsTArray;
|
|||
type nsACString_internal = nsACString;
|
||||
type nsAString_internal = nsAString;
|
||||
use gecko_bindings::structs::mozilla::css::GridTemplateAreasValue;
|
||||
use gecko_bindings::structs::mozilla::css::ErrorReporter;
|
||||
use gecko_bindings::structs::mozilla::css::ImageValue;
|
||||
use gecko_bindings::structs::mozilla::css::URLValue;
|
||||
use gecko_bindings::structs::mozilla::css::URLValueData;
|
||||
|
@ -71,6 +72,7 @@ use gecko_bindings::structs::nsChangeHint;
|
|||
use gecko_bindings::structs::nsCursorImage;
|
||||
use gecko_bindings::structs::nsFont;
|
||||
use gecko_bindings::structs::nsIAtom;
|
||||
use gecko_bindings::structs::nsIURI;
|
||||
use gecko_bindings::structs::nsCompatibility;
|
||||
use gecko_bindings::structs::nsMediaFeature;
|
||||
use gecko_bindings::structs::nsRestyleHint;
|
||||
|
@ -2262,7 +2264,8 @@ extern "C" {
|
|||
value: *const nsACString,
|
||||
data: *mut RawGeckoURLExtraData,
|
||||
parsing_mode: ParsingMode,
|
||||
quirks_mode: nsCompatibility)
|
||||
quirks_mode: nsCompatibility,
|
||||
loader: *mut Loader)
|
||||
-> RawServoDeclarationBlockStrong;
|
||||
}
|
||||
extern "C" {
|
||||
|
@ -2411,7 +2414,8 @@ extern "C" {
|
|||
extern "C" {
|
||||
pub fn Servo_ParseStyleAttribute(data: *const nsACString,
|
||||
extra_data: *mut RawGeckoURLExtraData,
|
||||
quirks_mode: nsCompatibility)
|
||||
quirks_mode: nsCompatibility,
|
||||
loader: *mut Loader)
|
||||
-> RawServoDeclarationBlockStrong;
|
||||
}
|
||||
extern "C" {
|
||||
|
@ -2480,8 +2484,8 @@ extern "C" {
|
|||
is_important: bool,
|
||||
data: *mut RawGeckoURLExtraData,
|
||||
parsing_mode: ParsingMode,
|
||||
quirks_mode: nsCompatibility)
|
||||
-> bool;
|
||||
quirks_mode: nsCompatibility,
|
||||
loader: *mut Loader) -> bool;
|
||||
}
|
||||
extern "C" {
|
||||
pub fn Servo_DeclarationBlock_SetPropertyById(declarations:
|
||||
|
@ -2493,7 +2497,8 @@ extern "C" {
|
|||
*mut RawGeckoURLExtraData,
|
||||
parsing_mode: ParsingMode,
|
||||
quirks_mode:
|
||||
nsCompatibility)
|
||||
nsCompatibility,
|
||||
loader: *mut Loader)
|
||||
-> bool;
|
||||
}
|
||||
extern "C" {
|
||||
|
@ -2891,3 +2896,23 @@ extern "C" {
|
|||
ServoComputedValuesBorrowedOrNull)
|
||||
-> *const nsStyleEffects;
|
||||
}
|
||||
extern "C" {
|
||||
pub fn Gecko_CreateCSSErrorReporter(sheet: *mut ServoStyleSheet,
|
||||
loader: *mut Loader, uri: *mut nsIURI)
|
||||
-> *mut ErrorReporter;
|
||||
}
|
||||
extern "C" {
|
||||
pub fn Gecko_DestroyCSSErrorReporter(reporter: *mut ErrorReporter);
|
||||
}
|
||||
extern "C" {
|
||||
pub fn Gecko_ReportUnexpectedCSSError(reporter: *mut ErrorReporter,
|
||||
message:
|
||||
*const ::std::os::raw::c_char,
|
||||
param:
|
||||
*const ::std::os::raw::c_char,
|
||||
paramLen: u32,
|
||||
source:
|
||||
*const ::std::os::raw::c_char,
|
||||
sourceLen: u32, lineNumber: u32,
|
||||
colNumber: u32, aURI: *mut nsIURI);
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -23,7 +23,7 @@ use data::ElementData;
|
|||
use dom::{self, DescendantsBit, LayoutIterator, NodeInfo, TElement, TNode, UnsafeNode};
|
||||
use dom::{OpaqueNode, PresentationalHintsSynthesizer};
|
||||
use element_state::{ElementState, DocumentState, NS_DOCUMENT_STATE_WINDOW_INACTIVE};
|
||||
use error_reporting::create_error_reporter;
|
||||
use error_reporting::ParseErrorReporter;
|
||||
use font_metrics::{FontMetrics, FontMetricsProvider, FontMetricsQueryResult};
|
||||
use gecko::data::PerDocumentStyleData;
|
||||
use gecko::global_style_data::GLOBAL_STYLE_DATA;
|
||||
|
@ -478,8 +478,9 @@ impl<'le> GeckoElement<'le> {
|
|||
/// Parse the style attribute of an element.
|
||||
pub fn parse_style_attribute(value: &str,
|
||||
url_data: &UrlExtraData,
|
||||
quirks_mode: QuirksMode) -> PropertyDeclarationBlock {
|
||||
parse_style_attribute(value, url_data, &create_error_reporter(), quirks_mode)
|
||||
quirks_mode: QuirksMode,
|
||||
reporter: &ParseErrorReporter) -> PropertyDeclarationBlock {
|
||||
parse_style_attribute(value, url_data, reporter, quirks_mode)
|
||||
}
|
||||
|
||||
fn flags(&self) -> u32 {
|
||||
|
|
|
@ -401,7 +401,6 @@ trait PrivateMatchMethods: TElement {
|
|||
layout_parent_style,
|
||||
visited_values_to_insert,
|
||||
Some(&mut cascade_info),
|
||||
&*shared_context.error_reporter,
|
||||
font_metrics_provider,
|
||||
cascade_flags,
|
||||
shared_context.quirks_mode));
|
||||
|
|
|
@ -314,8 +314,7 @@
|
|||
default_style: &ComputedValues,
|
||||
context: &mut computed::Context,
|
||||
cacheable: &mut bool,
|
||||
cascade_info: &mut Option<<&mut CascadeInfo>,
|
||||
error_reporter: &ParseErrorReporter) {
|
||||
cascade_info: &mut Option<<&mut CascadeInfo>) {
|
||||
let declared_value = match *declaration {
|
||||
PropertyDeclaration::${property.camel_case}(ref value) => {
|
||||
DeclaredValue::Value(value)
|
||||
|
@ -424,15 +423,14 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
}, error_reporter, quirks_mode);
|
||||
}, quirks_mode);
|
||||
}
|
||||
|
||||
% if property.custom_cascade:
|
||||
cascade_property_custom(declaration,
|
||||
inherited_style,
|
||||
context,
|
||||
cacheable,
|
||||
error_reporter);
|
||||
cacheable);
|
||||
% endif
|
||||
% else:
|
||||
// Do not allow stylesheets to set derived properties.
|
||||
|
|
|
@ -523,7 +523,6 @@ impl AnimationValue {
|
|||
/// Construct an AnimationValue from a property declaration
|
||||
pub fn from_declaration(decl: &PropertyDeclaration, context: &mut Context,
|
||||
initial: &ComputedValues) -> Option<Self> {
|
||||
use error_reporting::create_error_reporter;
|
||||
use properties::LonghandId;
|
||||
use properties::DeclaredValue;
|
||||
|
||||
|
@ -587,7 +586,6 @@ impl AnimationValue {
|
|||
},
|
||||
PropertyDeclaration::WithVariables(id, ref variables) => {
|
||||
let custom_props = context.style().custom_properties();
|
||||
let reporter = create_error_reporter();
|
||||
match id {
|
||||
% for prop in data.longhands:
|
||||
% if prop.animatable:
|
||||
|
@ -612,7 +610,6 @@ impl AnimationValue {
|
|||
};
|
||||
result = AnimationValue::from_declaration(&declaration, context, initial);
|
||||
},
|
||||
&reporter,
|
||||
quirks_mode);
|
||||
result
|
||||
},
|
||||
|
|
|
@ -136,8 +136,7 @@
|
|||
fn cascade_property_custom(_declaration: &PropertyDeclaration,
|
||||
_inherited_style: &ComputedValues,
|
||||
context: &mut computed::Context,
|
||||
_cacheable: &mut bool,
|
||||
_error_reporter: &ParseErrorReporter) {
|
||||
_cacheable: &mut bool) {
|
||||
longhands::_servo_display_for_hypothetical_box::derive_from_display(context);
|
||||
longhands::_servo_text_decorations_in_effect::derive_from_display(context);
|
||||
longhands::_servo_under_display_none::derive_from_display(context);
|
||||
|
|
|
@ -261,8 +261,7 @@ ${helpers.single_keyword("unicode-bidi",
|
|||
fn cascade_property_custom(_declaration: &PropertyDeclaration,
|
||||
_inherited_style: &ComputedValues,
|
||||
context: &mut computed::Context,
|
||||
_cacheable: &mut bool,
|
||||
_error_reporter: &ParseErrorReporter) {
|
||||
_cacheable: &mut bool) {
|
||||
longhands::_servo_text_decorations_in_effect::derive_from_text_decoration(context);
|
||||
}
|
||||
% endif
|
||||
|
|
|
@ -21,10 +21,10 @@ use app_units::Au;
|
|||
#[cfg(feature = "servo")] use cssparser::RGBA;
|
||||
use cssparser::{Parser, TokenSerializationType, serialize_identifier};
|
||||
use cssparser::{ParserInput, CompactCowStr};
|
||||
use error_reporting::ParseErrorReporter;
|
||||
#[cfg(feature = "servo")] use euclid::SideOffsets2D;
|
||||
use computed_values;
|
||||
use context::QuirksMode;
|
||||
use error_reporting::NullReporter;
|
||||
use font_metrics::FontMetricsProvider;
|
||||
#[cfg(feature = "gecko")] use gecko_bindings::bindings;
|
||||
#[cfg(feature = "gecko")] use gecko_bindings::structs::{self, nsCSSPropertyID};
|
||||
|
@ -377,7 +377,6 @@ impl PropertyDeclarationIdSet {
|
|||
% endif
|
||||
custom_properties: &Option<Arc<::custom_properties::CustomPropertiesMap>>,
|
||||
f: &mut F,
|
||||
error_reporter: &ParseErrorReporter,
|
||||
quirks_mode: QuirksMode)
|
||||
% if property.boxed:
|
||||
where F: FnMut(&DeclaredValue<Box<longhands::${property.ident}::SpecifiedValue>>)
|
||||
|
@ -392,7 +391,6 @@ impl PropertyDeclarationIdSet {
|
|||
with_variables.from_shorthand,
|
||||
custom_properties,
|
||||
f,
|
||||
error_reporter,
|
||||
quirks_mode);
|
||||
} else {
|
||||
f(value);
|
||||
|
@ -408,7 +406,6 @@ impl PropertyDeclarationIdSet {
|
|||
from_shorthand: Option<ShorthandId>,
|
||||
custom_properties: &Option<Arc<::custom_properties::CustomPropertiesMap>>,
|
||||
f: &mut F,
|
||||
error_reporter: &ParseErrorReporter,
|
||||
quirks_mode: QuirksMode)
|
||||
% if property.boxed:
|
||||
where F: FnMut(&DeclaredValue<Box<longhands::${property.ident}::SpecifiedValue>>)
|
||||
|
@ -421,12 +418,10 @@ impl PropertyDeclarationIdSet {
|
|||
.ok()
|
||||
.and_then(|css| {
|
||||
// As of this writing, only the base URL is used for property values:
|
||||
//
|
||||
// FIXME(pcwalton): Cloning the error reporter is slow! But so are custom
|
||||
// properties, so whatever...
|
||||
let reporter = NullReporter;
|
||||
let context = ParserContext::new(Origin::Author,
|
||||
url_data,
|
||||
error_reporter,
|
||||
&reporter,
|
||||
None,
|
||||
PARSING_MODE_DEFAULT,
|
||||
quirks_mode);
|
||||
|
@ -2514,8 +2509,7 @@ pub type CascadePropertyFn =
|
|||
default_style: &ComputedValues,
|
||||
context: &mut computed::Context,
|
||||
cacheable: &mut bool,
|
||||
cascade_info: &mut Option<<&mut CascadeInfo>,
|
||||
error_reporter: &ParseErrorReporter);
|
||||
cascade_info: &mut Option<<&mut CascadeInfo>);
|
||||
|
||||
/// A per-longhand array of functions to perform the CSS cascade on each of
|
||||
/// them, effectively doing virtual dispatch.
|
||||
|
@ -2577,7 +2571,6 @@ pub fn cascade(device: &Device,
|
|||
layout_parent_style: Option<<&ComputedValues>,
|
||||
visited_style: Option<Arc<ComputedValues>>,
|
||||
cascade_info: Option<<&mut CascadeInfo>,
|
||||
error_reporter: &ParseErrorReporter,
|
||||
font_metrics_provider: &FontMetricsProvider,
|
||||
flags: CascadeFlags,
|
||||
quirks_mode: QuirksMode)
|
||||
|
@ -2625,7 +2618,6 @@ pub fn cascade(device: &Device,
|
|||
layout_parent_style,
|
||||
visited_style,
|
||||
cascade_info,
|
||||
error_reporter,
|
||||
font_metrics_provider,
|
||||
flags,
|
||||
quirks_mode)
|
||||
|
@ -2641,7 +2633,6 @@ pub fn apply_declarations<'a, F, I>(device: &Device,
|
|||
layout_parent_style: &ComputedValues,
|
||||
visited_style: Option<Arc<ComputedValues>>,
|
||||
mut cascade_info: Option<<&mut CascadeInfo>,
|
||||
error_reporter: &ParseErrorReporter,
|
||||
font_metrics_provider: &FontMetricsProvider,
|
||||
flags: CascadeFlags,
|
||||
quirks_mode: QuirksMode)
|
||||
|
@ -2795,8 +2786,7 @@ pub fn apply_declarations<'a, F, I>(device: &Device,
|
|||
default_style,
|
||||
&mut context,
|
||||
&mut cacheable,
|
||||
&mut cascade_info,
|
||||
error_reporter);
|
||||
&mut cascade_info);
|
||||
}
|
||||
% if category_to_cascade_now == "early":
|
||||
let writing_mode = get_writing_mode(context.style.get_inheritedbox());
|
||||
|
@ -2869,8 +2859,7 @@ pub fn apply_declarations<'a, F, I>(device: &Device,
|
|||
default_style,
|
||||
&mut context,
|
||||
&mut cacheable,
|
||||
&mut cascade_info,
|
||||
error_reporter);
|
||||
&mut cascade_info);
|
||||
% if product == "gecko":
|
||||
context.style.mutate_font().fixup_none_generic(context.device);
|
||||
% endif
|
||||
|
@ -2884,8 +2873,7 @@ pub fn apply_declarations<'a, F, I>(device: &Device,
|
|||
default_style,
|
||||
&mut context,
|
||||
&mut cacheable,
|
||||
&mut cascade_info,
|
||||
error_reporter);
|
||||
&mut cascade_info);
|
||||
% if product == "gecko":
|
||||
// Font size must be explicitly inherited to handle lang changes and
|
||||
// scriptlevel changes.
|
||||
|
@ -2902,8 +2890,7 @@ pub fn apply_declarations<'a, F, I>(device: &Device,
|
|||
default_style,
|
||||
&mut context,
|
||||
&mut cacheable,
|
||||
&mut cascade_info,
|
||||
error_reporter);
|
||||
&mut cascade_info);
|
||||
% endif
|
||||
}
|
||||
% endif
|
||||
|
|
|
@ -10,7 +10,6 @@ use bit_vec::BitVec;
|
|||
use context::{CascadeInputs, QuirksMode};
|
||||
use dom::TElement;
|
||||
use element_state::ElementState;
|
||||
use error_reporting::create_error_reporter;
|
||||
use font_metrics::FontMetricsProvider;
|
||||
#[cfg(feature = "gecko")]
|
||||
use gecko_bindings::structs::{nsIAtom, StyleRuleInclusion};
|
||||
|
@ -639,7 +638,6 @@ impl Stylist {
|
|||
parent.map(|p| &**p),
|
||||
None,
|
||||
None,
|
||||
&create_error_reporter(),
|
||||
font_metrics,
|
||||
cascade_flags,
|
||||
self.quirks_mode);
|
||||
|
@ -748,7 +746,6 @@ impl Stylist {
|
|||
Some(inherited_style),
|
||||
None,
|
||||
None,
|
||||
&create_error_reporter(),
|
||||
font_metrics,
|
||||
CascadeFlags::empty(),
|
||||
self.quirks_mode);
|
||||
|
@ -780,7 +777,6 @@ impl Stylist {
|
|||
Some(parent_style),
|
||||
visited_values,
|
||||
None,
|
||||
&create_error_reporter(),
|
||||
font_metrics,
|
||||
CascadeFlags::empty(),
|
||||
self.quirks_mode);
|
||||
|
@ -1367,7 +1363,6 @@ impl Stylist {
|
|||
Some(parent_style),
|
||||
None,
|
||||
None,
|
||||
&create_error_reporter(),
|
||||
&metrics,
|
||||
CascadeFlags::empty(),
|
||||
self.quirks_mode))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue