mirror of
https://github.com/servo/servo.git
synced 2025-08-16 10:55:34 +01:00
make protocol handlers registrable (#33104)
Signed-off-by: webbeef <me@webbeef.org>
This commit is contained in:
parent
562d32c051
commit
663a92a5df
19 changed files with 516 additions and 219 deletions
46
ports/servoshell/desktop/protocols/urlinfo.rs
Normal file
46
ports/servoshell/desktop/protocols/urlinfo.rs
Normal file
|
@ -0,0 +1,46 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
|
||||
use std::future::Future;
|
||||
use std::pin::Pin;
|
||||
|
||||
use headers::{ContentType, HeaderMapExt};
|
||||
use http::StatusCode;
|
||||
use net::fetch::methods::{DoneChannel, FetchContext};
|
||||
use net::protocols::ProtocolHandler;
|
||||
use net_traits::request::Request;
|
||||
use net_traits::response::{Response, ResponseBody};
|
||||
use net_traits::ResourceFetchTiming;
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct UrlInfoProtocolHander {}
|
||||
|
||||
// A simple protocol handler that displays information about the url itself.
|
||||
impl ProtocolHandler for UrlInfoProtocolHander {
|
||||
fn load(
|
||||
&self,
|
||||
request: &mut Request,
|
||||
_done_chan: &mut DoneChannel,
|
||||
_context: &FetchContext,
|
||||
) -> Pin<Box<dyn Future<Output = Response> + Send>> {
|
||||
let url = request.current_url();
|
||||
|
||||
let content = format!(
|
||||
r#"Full url: {url}
|
||||
scheme: {}
|
||||
path: {}
|
||||
query: {:?}"#,
|
||||
url.scheme(),
|
||||
url.path(),
|
||||
url.query()
|
||||
);
|
||||
let mut response = Response::new(url, ResourceFetchTiming::new(request.timing_type()));
|
||||
*response.body.lock().unwrap() = ResponseBody::Done(content.as_bytes().to_vec());
|
||||
response.headers.typed_insert(ContentType::text());
|
||||
response.status = Some((StatusCode::OK, "OK".to_string()));
|
||||
response.raw_status = Some((StatusCode::OK.as_u16(), b"OK".to_vec()));
|
||||
|
||||
Box::pin(std::future::ready(response))
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue