diff options
author | Martin Robinson <mrobinson@igalia.com> | 2024-04-29 17:29:47 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-29 15:29:47 +0000 |
commit | adcaf2e881fc22bde15bbf37fd970ad1ab57c28c (patch) | |
tree | 42dbf3485c028a5c496f22463d463a83916258bf /components | |
parent | 4a12c0630927be1ffdedd8f1329081a09337aa1e (diff) | |
download | servo-adcaf2e881fc22bde15bbf37fd970ad1ab57c28c.tar.gz servo-adcaf2e881fc22bde15bbf37fd970ad1ab57c28c.zip |
url: Only truncate data URLs for `Debug` (#32177)
Other types of URLs aren't so long that they need to be truncated.
Diffstat (limited to 'components')
-rw-r--r-- | components/url/lib.rs | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/components/url/lib.rs b/components/url/lib.rs index 6a9f3766021..2dfed250962 100644 --- a/components/url/lib.rs +++ b/components/url/lib.rs @@ -23,6 +23,9 @@ pub use url::Host; use url::{Position, Url}; pub use crate::origin::{ImmutableOrigin, MutableOrigin, OpaqueOrigin}; + +const DATA_URL_DISPLAY_LENGTH: usize = 40; + #[derive(Debug)] pub enum UrlError { SetUsername, @@ -266,14 +269,23 @@ impl fmt::Display for ServoUrl { impl fmt::Debug for ServoUrl { fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - if self.0.as_str().len() > 40 { - let mut hasher = DefaultHasher::new(); - hasher.write(self.0.as_str().as_bytes()); - let truncated: String = self.0.as_str().chars().take(40).collect(); - let result = format!("{}... ({:x})", truncated, hasher.finish()); - return result.fmt(formatter); + let url_string = self.0.as_str(); + if self.scheme() != "data" || url_string.len() <= DATA_URL_DISPLAY_LENGTH { + return url_string.fmt(formatter); } - self.0.fmt(formatter) + + let mut hasher = DefaultHasher::new(); + hasher.write(self.0.as_str().as_bytes()); + + format!( + "{}... ({:x})", + url_string + .chars() + .take(DATA_URL_DISPLAY_LENGTH) + .collect::<String>(), + hasher.finish() + ) + .fmt(formatter) } } |