mirror of
https://github.com/servo/servo.git
synced 2025-07-24 15:50:21 +01:00
integrate readablestream with fetch and blob
This commit is contained in:
parent
0281acea95
commit
bd5796c90b
74 changed files with 2219 additions and 899 deletions
|
@ -36,14 +36,12 @@ use net_traits::{FetchChannels, FetchResponseListener, NetworkError};
|
|||
use net_traits::{FetchMetadata, FilteredMetadata, Metadata};
|
||||
use net_traits::{ResourceFetchTiming, ResourceTimingType};
|
||||
use servo_url::ServoUrl;
|
||||
use std::mem;
|
||||
use std::rc::Rc;
|
||||
use std::sync::{Arc, Mutex};
|
||||
|
||||
struct FetchContext {
|
||||
fetch_promise: Option<TrustedPromise>,
|
||||
response_object: Trusted<Response>,
|
||||
body: Vec<u8>,
|
||||
resource_timing: ResourceFetchTiming,
|
||||
}
|
||||
|
||||
|
@ -149,6 +147,7 @@ pub fn Fetch(
|
|||
// Step 2
|
||||
let request = match Request::Constructor(global, input, init) {
|
||||
Err(e) => {
|
||||
response.error_stream(e.clone());
|
||||
promise.reject_error(e);
|
||||
return promise;
|
||||
},
|
||||
|
@ -172,7 +171,6 @@ pub fn Fetch(
|
|||
let fetch_context = Arc::new(Mutex::new(FetchContext {
|
||||
fetch_promise: Some(TrustedPromise::new(promise.clone())),
|
||||
response_object: Trusted::new(&*response),
|
||||
body: vec![],
|
||||
resource_timing: ResourceFetchTiming::new(timing_type),
|
||||
}));
|
||||
let listener = NetworkListener {
|
||||
|
@ -222,7 +220,9 @@ impl FetchResponseListener for FetchContext {
|
|||
Err(_) => {
|
||||
promise.reject_error(Error::Type("Network error occurred".to_string()));
|
||||
self.fetch_promise = Some(TrustedPromise::new(promise));
|
||||
self.response_object.root().set_type(DOMResponseType::Error);
|
||||
let response = self.response_object.root();
|
||||
response.set_type(DOMResponseType::Error);
|
||||
response.error_stream(Error::Type("Network error occurred".to_string()));
|
||||
return;
|
||||
},
|
||||
// Step 4.2
|
||||
|
@ -260,15 +260,15 @@ impl FetchResponseListener for FetchContext {
|
|||
self.fetch_promise = Some(TrustedPromise::new(promise));
|
||||
}
|
||||
|
||||
fn process_response_chunk(&mut self, mut chunk: Vec<u8>) {
|
||||
self.response_object.root().stream_chunk(chunk.as_slice());
|
||||
self.body.append(&mut chunk);
|
||||
fn process_response_chunk(&mut self, chunk: Vec<u8>) {
|
||||
let response = self.response_object.root();
|
||||
response.stream_chunk(chunk);
|
||||
}
|
||||
|
||||
fn process_response_eof(&mut self, _response: Result<ResourceFetchTiming, NetworkError>) {
|
||||
let response = self.response_object.root();
|
||||
let _ac = enter_realm(&*response);
|
||||
response.finish(mem::replace(&mut self.body, vec![]));
|
||||
response.finish();
|
||||
// TODO
|
||||
// ... trailerObject is not supported in Servo yet.
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue