mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Auto merge of #19369 - tigercosmos:a1, r=jdm
Remove WrappedHttpResponse abstraction <!-- Please describe your changes on the following line: --> Remove `WrappedHttpResponse` abstraction, and use `HyperResponse` --- <!-- 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 #19361 (github issue number if applicable). <!-- 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. --> <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/19369) <!-- Reviewable:end -->
This commit is contained in:
commit
adfd51c842
1 changed files with 26 additions and 54 deletions
|
@ -94,36 +94,6 @@ fn precise_time_ms() -> u64 {
|
|||
time::precise_time_ns() / (1000 * 1000)
|
||||
}
|
||||
|
||||
pub struct WrappedHttpResponse {
|
||||
pub response: HyperResponse
|
||||
}
|
||||
|
||||
impl Read for WrappedHttpResponse {
|
||||
#[inline]
|
||||
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
|
||||
self.response.read(buf)
|
||||
}
|
||||
}
|
||||
|
||||
impl WrappedHttpResponse {
|
||||
fn headers(&self) -> &Headers {
|
||||
&self.response.headers
|
||||
}
|
||||
|
||||
fn content_encoding(&self) -> Option<Encoding> {
|
||||
let &ContentEncoding(ref encodings) = self.headers().get()?;
|
||||
if encodings.contains(&Encoding::Gzip) {
|
||||
Some(Encoding::Gzip)
|
||||
} else if encodings.contains(&Encoding::Deflate) {
|
||||
Some(Encoding::Deflate)
|
||||
} else if encodings.contains(&Encoding::EncodingExt("br".to_owned())) {
|
||||
Some(Encoding::EncodingExt("br".to_owned()))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Step 3 of https://fetch.spec.whatwg.org/#concept-fetch.
|
||||
pub fn set_default_accept(destination: Destination, headers: &mut Headers) {
|
||||
if headers.has::<Accept>() {
|
||||
|
@ -316,18 +286,21 @@ impl Read for StreamedResponse {
|
|||
}
|
||||
|
||||
impl StreamedResponse {
|
||||
fn from_http_response(response: WrappedHttpResponse) -> io::Result<StreamedResponse> {
|
||||
let decoder = match response.content_encoding() {
|
||||
Some(Encoding::Gzip) => {
|
||||
Decoder::Gzip(GzDecoder::new(response)?)
|
||||
}
|
||||
Some(Encoding::Deflate) => {
|
||||
Decoder::Deflate(DeflateDecoder::new(response))
|
||||
}
|
||||
Some(Encoding::EncodingExt(ref ext)) if ext == "br" => {
|
||||
Decoder::Brotli(Decompressor::new(response, 1024))
|
||||
}
|
||||
_ => {
|
||||
fn from_http_response(response: HyperResponse) -> io::Result<StreamedResponse> {
|
||||
let decoder = {
|
||||
if let Some(ref encoding) = response.headers.get::<ContentEncoding>().cloned() {
|
||||
if encoding.contains(&Encoding::Gzip) {
|
||||
Decoder::Gzip(GzDecoder::new(response)?)
|
||||
}
|
||||
else if encoding.contains(&Encoding::Deflate) {
|
||||
Decoder::Deflate(DeflateDecoder::new(response))
|
||||
}
|
||||
else if encoding.contains(&Encoding::EncodingExt("br".to_owned())) {
|
||||
Decoder::Brotli(Decompressor::new(response, 1024))
|
||||
} else {
|
||||
Decoder::Plain(response)
|
||||
}
|
||||
} else {
|
||||
Decoder::Plain(response)
|
||||
}
|
||||
};
|
||||
|
@ -336,10 +309,10 @@ impl StreamedResponse {
|
|||
}
|
||||
|
||||
enum Decoder {
|
||||
Gzip(GzDecoder<WrappedHttpResponse>),
|
||||
Deflate(DeflateDecoder<WrappedHttpResponse>),
|
||||
Brotli(Decompressor<WrappedHttpResponse>),
|
||||
Plain(WrappedHttpResponse)
|
||||
Gzip(GzDecoder<HyperResponse>),
|
||||
Deflate(DeflateDecoder<HyperResponse>),
|
||||
Brotli(Decompressor<HyperResponse>),
|
||||
Plain(HyperResponse)
|
||||
}
|
||||
|
||||
fn prepare_devtools_request(request_id: String,
|
||||
|
@ -406,7 +379,7 @@ fn obtain_response(connector: &Pool<Connector>,
|
|||
iters: u32,
|
||||
request_id: Option<&str>,
|
||||
is_xhr: bool)
|
||||
-> Result<(WrappedHttpResponse, Option<ChromeToDevtoolsControlMsg>), NetworkError> {
|
||||
-> Result<(HyperResponse, Option<ChromeToDevtoolsControlMsg>), NetworkError> {
|
||||
let null_data = None;
|
||||
|
||||
// loop trying connections in connection pool
|
||||
|
@ -499,8 +472,7 @@ fn obtain_response(connector: &Pool<Connector>,
|
|||
debug!("Not notifying devtools (no request_id)");
|
||||
None
|
||||
};
|
||||
|
||||
return Ok((WrappedHttpResponse { response: response }, msg));
|
||||
return Ok((response, msg));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1078,16 +1050,16 @@ fn http_network_fetch(request: &Request,
|
|||
|
||||
if log_enabled!(log::LogLevel::Info) {
|
||||
info!("response for {}", url);
|
||||
for header in res.response.headers.iter() {
|
||||
for header in res.headers.iter() {
|
||||
info!(" - {}", header);
|
||||
}
|
||||
}
|
||||
|
||||
let mut response = Response::new(url.clone());
|
||||
response.status = Some(res.response.status);
|
||||
response.raw_status = Some((res.response.status_raw().0,
|
||||
res.response.status_raw().1.as_bytes().to_vec()));
|
||||
response.headers = res.response.headers.clone();
|
||||
response.status = Some(res.status);
|
||||
response.raw_status = Some((res.status_raw().0,
|
||||
res.status_raw().1.as_bytes().to_vec()));
|
||||
response.headers = res.headers.clone();
|
||||
response.referrer = request.referrer.to_url().cloned();
|
||||
response.referrer_policy = request.referrer_policy.clone();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue