diff options
Diffstat (limited to 'components/script/dom/url.rs')
-rw-r--r-- | components/script/dom/url.rs | 40 |
1 files changed, 8 insertions, 32 deletions
diff --git a/components/script/dom/url.rs b/components/script/dom/url.rs index 2a41f7c7bae..9a47be034f8 100644 --- a/components/script/dom/url.rs +++ b/components/script/dom/url.rs @@ -13,10 +13,9 @@ use dom::bindings::str::{DOMString, USVString}; use dom::blob::Blob; use dom::urlhelper::UrlHelper; use dom::urlsearchparams::URLSearchParams; -use ipc_channel::ipc; use net_traits::IpcSend; -use net_traits::blob_url_store::{BlobURLStoreEntry, BlobURLStoreMsg, parse_blob_url}; -use net_traits::filemanager_thread::FileManagerThreadMsg; +use net_traits::blob_url_store::parse_blob_url; +use net_traits::filemanager_thread::{SelectedFileId, FileManagerThreadMsg}; use std::borrow::ToOwned; use std::default::Default; use url::quirks::domain_to_unicode; @@ -125,34 +124,9 @@ impl URL { return DOMString::from(URL::unicode_serialization_blob_url(&origin, &id)); } - let filemanager = global.resource_threads().sender(); + let id = blob.get_id(); - let slice = blob.get_slice_or_empty(); - let bytes = slice.get_bytes(); - - let entry = BlobURLStoreEntry { - type_string: blob.Type().to_string(), - filename: None, // XXX: the filename is currently only in File object now - size: blob.Size(), - bytes: bytes.to_vec(), - }; - - let (tx, rx) = ipc::channel().unwrap(); - - let msg = BlobURLStoreMsg::AddEntry(entry, origin.clone(), tx); - - let _ = filemanager.send(FileManagerThreadMsg::BlobURLStoreMsg(msg)); - - match rx.recv().unwrap() { - Ok(id) => { - DOMString::from(URL::unicode_serialization_blob_url(&origin, &id)) - } - Err(_) => { - // Generate a dummy id - let id = Uuid::new_v4().simple().to_string(); - DOMString::from(URL::unicode_serialization_blob_url(&origin, &id)) - } - } + DOMString::from(URL::unicode_serialization_blob_url(&origin, &id.0)) } // https://w3c.github.io/FileAPI/#dfn-revokeObjectURL @@ -166,13 +140,15 @@ impl URL { NOTE: The first step is unnecessary, since closed blobs do not exist in the store */ + let origin = global.get_url().origin().unicode_serialization(); match Url::parse(&url) { Ok(url) => match parse_blob_url(&url) { Some((id, _)) => { let filemanager = global.resource_threads().sender(); - let msg = BlobURLStoreMsg::DeleteEntry(id.simple().to_string()); - let _ = filemanager.send(FileManagerThreadMsg::BlobURLStoreMsg(msg)); + let id = SelectedFileId(id.simple().to_string()); + let msg = FileManagerThreadMsg::DecRef(id, origin); + let _ = filemanager.send(msg); } None => {} }, |