Auto merge of #24685 - shnmorimoto:fix_revoke_blob_url, r=jdm

Fix revoke blob url

<!-- Please describe your changes on the following line: -->

fix #24290

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [x] These changes fix #24290 (GitHub issue number if applicable)

<!-- Either: -->
- [ ] There are tests for these changes OR
- [ ] These changes do not require tests because ___

<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
This commit is contained in:
bors-servo 2019-11-18 21:41:21 -05:00 committed by GitHub
commit d553158e95
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 18 additions and 47 deletions

View file

@ -40,9 +40,17 @@ pub struct BlobBuf {
/// <https://w3c.github.io/FileAPI/#DefinitionOfScheme>
pub fn parse_blob_url(url: &ServoUrl) -> Result<(Uuid, FileOrigin), ()> {
let url_inner = Url::parse(url.path()).map_err(|_| ())?;
let segs = url_inner
.path_segments()
.map(|c| c.collect::<Vec<_>>())
.ok_or(())?;
if url.query().is_some() || segs.len() > 1 {
return Err(());
}
let id = {
let mut segs = url_inner.path_segments().ok_or(())?;
let id = segs.nth(0).ok_or(())?;
let id = segs.first().ok_or(())?;
Uuid::from_str(id).map_err(|_| ())?
};
Ok((id, get_blob_origin(&ServoUrl::from_url(url_inner))))

View file

@ -129,13 +129,15 @@ impl URL {
let origin = get_blob_origin(&global.get_url());
if let Ok(url) = ServoUrl::parse(&url) {
if let Ok((id, _)) = parse_blob_url(&url) {
let resource_threads = global.resource_threads();
let (tx, rx) = ipc::channel(global.time_profiler_chan().clone()).unwrap();
let msg = FileManagerThreadMsg::RevokeBlobURL(id, origin, tx);
let _ = resource_threads.send(CoreResourceMsg::ToFileManager(msg));
if url.fragment().is_none() && origin == get_blob_origin(&url) {
if let Ok((id, _)) = parse_blob_url(&url) {
let resource_threads = global.resource_threads();
let (tx, rx) = ipc::channel(global.time_profiler_chan().clone()).unwrap();
let msg = FileManagerThreadMsg::RevokeBlobURL(id, origin, tx);
let _ = resource_threads.send(CoreResourceMsg::ToFileManager(msg));
let _ = rx.recv().unwrap();
let _ = rx.recv().unwrap();
}
}
}
}

View file

@ -1,36 +1,9 @@
[url-with-fetch.any.worker.html]
[url-with-fetch]
expected: FAIL
[Only exact matches should revoke URLs, using fetch]
expected: FAIL
[Appending a query string should cause fetch to fail]
expected: FAIL
[Appending a path should cause fetch to fail]
expected: FAIL
[Revoke blob URL after creating Request, will fetch]
expected: FAIL
[url-with-fetch.any.html]
[Untitled]
expected: FAIL
[url-with-fetch]
expected: FAIL
[Only exact matches should revoke URLs, using fetch]
expected: FAIL
[Appending a query string should cause fetch to fail]
expected: FAIL
[Appending a path should cause fetch to fail]
expected: FAIL
[Revoke blob URL after creating Request, will fetch]
expected: FAIL

View file

@ -1,21 +1,9 @@
[url-with-xhr.any.html]
[Only exact matches should revoke URLs, using XHR]
expected: FAIL
[Appending a query string should cause XHR to fail]
expected: FAIL
[Appending a path should cause XHR to fail]
expected: FAIL
[Revoke blob URL after open(), will fetch]
expected: FAIL
[url-with-xhr.any.worker.html]
[Only exact matches should revoke URLs, using XHR]
expected: FAIL
[Appending a query string should cause XHR to fail]
expected: FAIL
[Appending a path should cause XHR to fail]
expected: FAIL
[Revoke blob URL after open(), will fetch]
expected: FAIL