servo: Merge #15993 - Remove rust-encoding from geckolib (from servo:utf84eva); r=Manishearth
authorSimon Sapin <simon.sapin@exyr.org>
Thu, 16 Mar 2017 20:07:37 -0700
changeset 348165 c679469b5b875be9c9174de840c0f9a7d9ef97d2
parent 348164 cfd64c2b49705b799236cc960150c2b36ed09a96
child 348166 4d074b176f371ae88e20950b48b1b55e632c0f1b
push id88164
push usercbook@mozilla.com
push dateFri, 17 Mar 2017 13:55:35 +0000
treeherdermozilla-inbound@e46c08babe02 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersManishearth
milestone55.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
servo: Merge #15993 - Remove rust-encoding from geckolib (from servo:utf84eva); r=Manishearth It wasn’t used, gecko always passes UTF-8 for parsing stylesheets. Source-Repo: https://github.com/servo/servo Source-Revision: f53692cd03e19c30a2a6a3e0775798ed50d481e9
servo/components/style/Cargo.toml
servo/components/style/encoding_support.rs
servo/components/style/lib.rs
servo/components/style/stylesheets.rs
--- a/servo/components/style/Cargo.toml
+++ b/servo/components/style/Cargo.toml
@@ -12,27 +12,27 @@ name = "style"
 path = "lib.rs"
 doctest = false
 
 [features]
 gecko = ["nsstring_vendor", "rayon/unstable"]
 use_bindgen = ["bindgen", "regex"]
 servo = ["serde/unstable", "serde", "serde_derive", "heapsize_derive",
          "style_traits/servo", "servo_atoms", "html5ever-atoms",
-         "cssparser/heapsize", "cssparser/serde",
+         "cssparser/heapsize", "cssparser/serde", "encoding",
          "rayon/unstable", "servo_url/servo"]
 testing = []
 
 [dependencies]
 app_units = "0.4"
 atomic_refcell = "0.1"
 bitflags = "0.7"
 cfg-if = "0.1.0"
 cssparser = "0.12"
-encoding = "0.2"
+encoding = {version = "0.2", optional = true}
 euclid = "0.11"
 fnv = "1.0"
 heapsize = "0.3.0"
 heapsize_derive = {version = "0.1", optional = true}
 html5ever-atoms = {version = "0.2", optional = true}
 lazy_static = "0.2"
 log = "0.3.5"
 matches = "0.1"
new file mode 100644
--- /dev/null
+++ b/servo/components/style/encoding_support.rs
@@ -0,0 +1,89 @@
+/* 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/. */
+
+//! Parsing stylesheets from bytes (not `&str`).
+
+extern crate encoding;
+
+use cssparser::{stylesheet_encoding, EncodingSupport};
+use error_reporting::ParseErrorReporter;
+use media_queries::MediaList;
+use parser::ParserContextExtraData;
+use self::encoding::{EncodingRef, DecoderTrap};
+use servo_url::ServoUrl;
+use std::str;
+use stylesheets::{Stylesheet, StylesheetLoader, Origin};
+
+struct RustEncoding;
+
+impl EncodingSupport for RustEncoding {
+    type Encoding = EncodingRef;
+
+    fn utf8() -> Self::Encoding {
+        encoding::all::UTF_8
+    }
+
+    fn is_utf16_be_or_le(encoding: &Self::Encoding) -> bool {
+        matches!(encoding.name(), "utf-16be" | "utf-16le")
+    }
+
+    fn from_label(ascii_label: &[u8]) -> Option<Self::Encoding> {
+        str::from_utf8(ascii_label).ok().and_then(encoding::label::encoding_from_whatwg_label)
+    }
+}
+
+fn decode_stylesheet_bytes(css: &[u8], protocol_encoding_label: Option<&str>,
+                           environment_encoding: Option<EncodingRef>)
+                           -> (String, EncodingRef) {
+    let fallback_encoding = stylesheet_encoding::<RustEncoding>(
+        css, protocol_encoding_label.map(str::as_bytes), environment_encoding);
+    let (result, used_encoding) = encoding::decode(css, DecoderTrap::Replace, fallback_encoding);
+    (result.unwrap(), used_encoding)
+}
+
+impl Stylesheet {
+    /// Parse a stylesheet from a set of bytes, potentially received over the
+    /// network.
+    ///
+    /// Takes care of decoding the network bytes and forwards the resulting
+    /// string to `Stylesheet::from_str`.
+    pub fn from_bytes(bytes: &[u8],
+                      base_url: ServoUrl,
+                      protocol_encoding_label: Option<&str>,
+                      environment_encoding: Option<EncodingRef>,
+                      origin: Origin,
+                      media: MediaList,
+                      stylesheet_loader: Option<&StylesheetLoader>,
+                      error_reporter: &ParseErrorReporter,
+                      extra_data: ParserContextExtraData)
+                      -> Stylesheet {
+        let (string, _) = decode_stylesheet_bytes(
+            bytes, protocol_encoding_label, environment_encoding);
+        Stylesheet::from_str(&string,
+                             base_url,
+                             origin,
+                             media,
+                             stylesheet_loader,
+                             error_reporter,
+                             extra_data)
+    }
+
+    /// Updates an empty stylesheet with a set of bytes that reached over the
+    /// network.
+    pub fn update_from_bytes(existing: &Stylesheet,
+                             bytes: &[u8],
+                             protocol_encoding_label: Option<&str>,
+                             environment_encoding: Option<EncodingRef>,
+                             stylesheet_loader: Option<&StylesheetLoader>,
+                             error_reporter: &ParseErrorReporter,
+                             extra_data: ParserContextExtraData) {
+        let (string, _) = decode_stylesheet_bytes(
+            bytes, protocol_encoding_label, environment_encoding);
+        Self::update_from_str(existing,
+                              &string,
+                              stylesheet_loader,
+                              error_reporter,
+                              extra_data)
+    }
+}
--- a/servo/components/style/lib.rs
+++ b/servo/components/style/lib.rs
@@ -38,17 +38,16 @@
 #![recursion_limit = "500"]  // For define_css_keyword_enum! in -moz-appearance
 
 extern crate app_units;
 extern crate atomic_refcell;
 #[macro_use]
 extern crate bitflags;
 #[cfg(feature = "gecko")] #[macro_use] #[no_link] extern crate cfg_if;
 #[macro_use] extern crate cssparser;
-extern crate encoding;
 extern crate euclid;
 extern crate fnv;
 #[cfg(feature = "gecko")] #[macro_use] pub mod gecko_string_cache;
 extern crate heapsize;
 #[cfg(feature = "servo")] #[macro_use] extern crate heapsize_derive;
 #[cfg(feature = "servo")] #[macro_use] extern crate html5ever_atoms;
 #[macro_use]
 extern crate lazy_static;
@@ -84,16 +83,17 @@ pub mod bezier;
 pub mod bloom;
 pub mod cache;
 pub mod cascade_info;
 pub mod context;
 pub mod custom_properties;
 pub mod data;
 pub mod dom;
 pub mod element_state;
+#[cfg(feature = "servo")] mod encoding_support;
 pub mod error_reporting;
 pub mod font_face;
 pub mod font_metrics;
 #[cfg(feature = "gecko")] #[allow(unsafe_code)] pub mod gecko;
 #[cfg(feature = "gecko")] #[allow(unsafe_code)] pub mod gecko_bindings;
 pub mod keyframes;
 #[allow(missing_docs)] // TODO.
 pub mod logical_geometry;
--- a/servo/components/style/stylesheets.rs
+++ b/servo/components/style/stylesheets.rs
@@ -2,34 +2,32 @@
  * 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/. */
 
 //! Style sheets and their CSS rules.
 
 #![deny(missing_docs)]
 
 use {Atom, Prefix, Namespace};
-use cssparser::{AtRuleParser, Parser, QualifiedRuleParser, stylesheet_encoding, EncodingSupport};
+use cssparser::{AtRuleParser, Parser, QualifiedRuleParser};
 use cssparser::{AtRuleType, RuleListParser, SourcePosition, Token, parse_one_rule};
 use cssparser::ToCss as ParserToCss;
-use encoding::{self, EncodingRef, DecoderTrap};
 use error_reporting::ParseErrorReporter;
 use font_face::{FontFaceRule, parse_font_face_block};
 use keyframes::{Keyframe, parse_keyframe_list};
 use media_queries::{Device, MediaList, parse_media_query_list};
 use parking_lot::RwLock;
 use parser::{ParserContext, ParserContextExtraData, log_css_error};
 use properties::{PropertyDeclarationBlock, parse_property_declaration_list};
 use selector_parser::{SelectorImpl, SelectorParser};
 use selectors::parser::SelectorList;
 use servo_config::prefs::PREFS;
 use servo_url::ServoUrl;
 use std::cell::Cell;
 use std::fmt;
-use std::str;
 use std::sync::Arc;
 use std::sync::atomic::{AtomicBool, Ordering};
 use style_traits::ToCss;
 use stylist::FnvHashMap;
 use supports::SupportsCondition;
 use values::specified::url::SpecifiedUrl;
 use viewport::ViewportRule;
 
@@ -535,88 +533,17 @@ impl ToCss for StyleRule {
             try!(write!(dest, " "));
         }
         // Step 5
         try!(dest.write_str("}"));
         Ok(())
     }
 }
 
-struct RustEncoding;
-
-impl EncodingSupport for RustEncoding {
-    type Encoding = EncodingRef;
-
-    fn utf8() -> Self::Encoding {
-        encoding::all::UTF_8
-    }
-
-    fn is_utf16_be_or_le(encoding: &Self::Encoding) -> bool {
-        matches!(encoding.name(), "utf-16be" | "utf-16le")
-    }
-
-    fn from_label(ascii_label: &[u8]) -> Option<Self::Encoding> {
-        str::from_utf8(ascii_label).ok().and_then(encoding::label::encoding_from_whatwg_label)
-    }
-}
-
-fn decode_stylesheet_bytes(css: &[u8], protocol_encoding_label: Option<&str>,
-                           environment_encoding: Option<EncodingRef>)
-                           -> (String, EncodingRef) {
-    let fallback_encoding = stylesheet_encoding::<RustEncoding>(
-        css, protocol_encoding_label.map(str::as_bytes), environment_encoding);
-    let (result, used_encoding) = encoding::decode(css, DecoderTrap::Replace, fallback_encoding);
-    (result.unwrap(), used_encoding)
-}
-
 impl Stylesheet {
-    /// Parse a stylesheet from a set of bytes, potentially received over the
-    /// network.
-    ///
-    /// Takes care of decoding the network bytes and forwards the resulting
-    /// string to `Stylesheet::from_str`.
-    pub fn from_bytes(bytes: &[u8],
-                      base_url: ServoUrl,
-                      protocol_encoding_label: Option<&str>,
-                      environment_encoding: Option<EncodingRef>,
-                      origin: Origin,
-                      media: MediaList,
-                      stylesheet_loader: Option<&StylesheetLoader>,
-                      error_reporter: &ParseErrorReporter,
-                      extra_data: ParserContextExtraData)
-                      -> Stylesheet {
-        let (string, _) = decode_stylesheet_bytes(
-            bytes, protocol_encoding_label, environment_encoding);
-        Stylesheet::from_str(&string,
-                             base_url,
-                             origin,
-                             media,
-                             stylesheet_loader,
-                             error_reporter,
-                             extra_data)
-    }
-
-    /// Updates an empty stylesheet with a set of bytes that reached over the
-    /// network.
-    pub fn update_from_bytes(existing: &Stylesheet,
-                             bytes: &[u8],
-                             protocol_encoding_label: Option<&str>,
-                             environment_encoding: Option<EncodingRef>,
-                             stylesheet_loader: Option<&StylesheetLoader>,
-                             error_reporter: &ParseErrorReporter,
-                             extra_data: ParserContextExtraData) {
-        let (string, _) = decode_stylesheet_bytes(
-            bytes, protocol_encoding_label, environment_encoding);
-        Self::update_from_str(existing,
-                              &string,
-                              stylesheet_loader,
-                              error_reporter,
-                              extra_data)
-    }
-
     /// Updates an empty stylesheet from a given string of text.
     pub fn update_from_str(existing: &Stylesheet,
                            css: &str,
                            stylesheet_loader: Option<&StylesheetLoader>,
                            error_reporter: &ParseErrorReporter,
                            extra_data: ParserContextExtraData) {
         let mut rules = existing.rules.write();
         let mut namespaces = existing.namespaces.write();