[librsvg: 16/18] Images::lookup() - take an AllowedUrl, not a &str



commit a34a632957c9d51f711caec34a2e9caf8123e92e
Author: Federico Mena Quintero <federico gnome org>
Date:   Fri Dec 6 19:35:53 2019 -0600

    Images::lookup() - take an AllowedUrl, not a &str
    
    This moves the creation of the AllowedUrl one level up.  I'd like it
    to happen closer to set_atts(), but we don't have access to
    LoadOptions there to create the AllowedUrl.

 rsvg_internals/src/allowed_url.rs |  2 +-
 rsvg_internals/src/document.rs    | 12 ++++++------
 rsvg_internals/src/handle.rs      |  2 +-
 3 files changed, 8 insertions(+), 8 deletions(-)
---
diff --git a/rsvg_internals/src/allowed_url.rs b/rsvg_internals/src/allowed_url.rs
index 16a3a330..5d6e8f2f 100644
--- a/rsvg_internals/src/allowed_url.rs
+++ b/rsvg_internals/src/allowed_url.rs
@@ -14,7 +14,7 @@ use crate::error::HrefError;
 /// a specified `href` (a possibly-relative filename, for example)
 /// should be allowed to be loaded, given the base URL of the SVG
 /// being loaded.
-#[derive(Debug, PartialEq, Eq, Hash)]
+#[derive(Debug, Clone, PartialEq, Eq, Hash)]
 pub struct AllowedUrl(Url);
 
 #[derive(Debug, PartialEq)]
diff --git a/rsvg_internals/src/document.rs b/rsvg_internals/src/document.rs
index d541f191..f2a7e58e 100644
--- a/rsvg_internals/src/document.rs
+++ b/rsvg_internals/src/document.rs
@@ -72,7 +72,10 @@ impl Document {
     }
 
     pub fn lookup_image(&self, href: &str) -> Result<SharedImageSurface, LoadingError> {
-        self.images.borrow_mut().lookup(&self.load_options, href)
+        let aurl = AllowedUrl::from_href(href, self.load_options.base_url.as_ref())
+            .map_err(|_| LoadingError::BadUrl)?;
+
+        self.images.borrow_mut().lookup(&self.load_options, &aurl)
     }
 
     pub fn get_intrinsic_dimensions(&self) -> IntrinsicDimensions {
@@ -154,12 +157,9 @@ impl Images {
     fn lookup(
         &mut self,
         load_options: &LoadOptions,
-        href: &str,
+        aurl: &AllowedUrl,
     ) -> Result<SharedImageSurface, LoadingError> {
-        let aurl = AllowedUrl::from_href(href, load_options.base_url.as_ref())
-            .map_err(|_| LoadingError::BadUrl)?;
-
-        match self.images.entry(aurl) {
+        match self.images.entry(aurl.clone()) {
             Entry::Occupied(e) => e.get().clone(),
             Entry::Vacant(e) => {
                 let surface = load_image(load_options, e.key());
diff --git a/rsvg_internals/src/handle.rs b/rsvg_internals/src/handle.rs
index 6f50844a..d2da4a8b 100644
--- a/rsvg_internals/src/handle.rs
+++ b/rsvg_internals/src/handle.rs
@@ -55,7 +55,7 @@ impl LoadOptions {
 
     pub fn copy_with_base_url(&self, base_url: &AllowedUrl) -> Self {
         LoadOptions {
-            base_url: Some((*base_url).clone()),
+            base_url: Some((**base_url).clone()),
             unlimited_size: self.unlimited_size,
             keep_image_data: self.keep_image_data,
             locale: self.locale.clone(),


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]