diff options
Diffstat (limited to 'components/shared/net/request.rs')
-rw-r--r-- | components/shared/net/request.rs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/components/shared/net/request.rs b/components/shared/net/request.rs index 259132b55c4..7b39ac7b78d 100644 --- a/components/shared/net/request.rs +++ b/components/shared/net/request.rs @@ -9,6 +9,7 @@ use content_security_policy::{self as csp}; use http::header::{AUTHORIZATION, HeaderName}; use http::{HeaderMap, Method}; use ipc_channel::ipc::{self, IpcReceiver, IpcSender, IpcSharedMemory}; +use ipc_channel::router::ROUTER; use malloc_size_of_derive::MallocSizeOf; use mime::Mime; use serde::{Deserialize, Serialize}; @@ -925,3 +926,22 @@ pub fn convert_header_names_to_sorted_lowercase_set( ordered_set.dedup(); ordered_set.into_iter().cloned().collect() } + +pub fn create_request_body_with_content(content: &str) -> RequestBody { + let content_bytes = IpcSharedMemory::from_bytes(content.as_bytes()); + let content_len = content_bytes.len(); + + let (chunk_request_sender, chunk_request_receiver) = ipc::channel().unwrap(); + ROUTER.add_typed_route( + chunk_request_receiver, + Box::new(move |message| { + let request = message.unwrap(); + if let BodyChunkRequest::Connect(sender) = request { + let _ = sender.send(BodyChunkResponse::Chunk(content_bytes.clone())); + let _ = sender.send(BodyChunkResponse::Done); + } + }), + ); + + RequestBody::new(chunk_request_sender, BodySource::Object, Some(content_len)) +} |