aboutsummaryrefslogtreecommitdiffstats
path: root/components/shared/net/request.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/shared/net/request.rs')
-rw-r--r--components/shared/net/request.rs20
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))
+}