aboutsummaryrefslogtreecommitdiffstats
path: root/components/script_layout_interface/reporter.rs
diff options
context:
space:
mode:
authorMs2ger <Ms2ger@gmail.com>2016-06-16 16:01:50 +0100
committerMs2ger <Ms2ger@gmail.com>2016-06-20 19:08:13 +0200
commitb56821a01f8ec8f28c37cb46568340ecb145834c (patch)
tree731e8125469db94c077624521dc5e20a0483cbc0 /components/script_layout_interface/reporter.rs
parent9e2e0ff98c7c42b6bfb24f0846dc0c82e36e7d2c (diff)
downloadservo-b56821a01f8ec8f28c37cb46568340ecb145834c.tar.gz
servo-b56821a01f8ec8f28c37cb46568340ecb145834c.zip
Move CSSErrorReporter to script_layout_interface.
Diffstat (limited to 'components/script_layout_interface/reporter.rs')
-rw-r--r--components/script_layout_interface/reporter.rs44
1 files changed, 44 insertions, 0 deletions
diff --git a/components/script_layout_interface/reporter.rs b/components/script_layout_interface/reporter.rs
new file mode 100644
index 00000000000..4561f2d63ca
--- /dev/null
+++ b/components/script_layout_interface/reporter.rs
@@ -0,0 +1,44 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use cssparser::{Parser, SourcePosition};
+use ipc_channel::ipc::IpcSender;
+use log;
+use msg::constellation_msg::PipelineId;
+use script_traits::ConstellationControlMsg;
+use std::sync::{Mutex, Arc};
+use style::error_reporting::ParseErrorReporter;
+
+#[derive(HeapSizeOf)]
+pub struct CSSErrorReporter {
+ pub pipelineid: PipelineId,
+ // Arc+Mutex combo is necessary to make this struct Sync,
+ // which is necessary to fulfill the bounds required by the
+ // uses of the ParseErrorReporter trait.
+ #[ignore_heap_size_of = "Arc is defined in libstd"]
+ pub script_chan: Arc<Mutex<IpcSender<ConstellationControlMsg>>>,
+}
+
+impl ParseErrorReporter for CSSErrorReporter {
+ fn report_error(&self, input: &mut Parser, position: SourcePosition, message: &str) {
+ let location = input.source_location(position);
+ if log_enabled!(log::LogLevel::Info) {
+ info!("{}:{} {}", location.line, location.column, message)
+ }
+ //TODO: report a real filename
+ let _ = self.script_chan.lock().unwrap().send(
+ ConstellationControlMsg::ReportCSSError(self.pipelineid,
+ "".to_owned(),
+ location.line,
+ location.column,
+ message.to_owned()));
+ }
+
+ fn clone(&self) -> Box<ParseErrorReporter + Send + Sync> {
+ box CSSErrorReporter {
+ pipelineid: self.pipelineid,
+ script_chan: self.script_chan.clone(),
+ }
+ }
+}