mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
net: Use RequestId
to cancel fetches instead of creating an IPC channel (#34883)
Instead of creating an IPC channel for every fetch, allow cancelling fetches based on the `RequestId` of the original request. This requires that `RequestId`s be UUIDs so that they are unique between processes that might communicating with the resource process. In addition, the resource process loop now keeps a `HashMap` or `Weak` handles to cancellers and cleans them up. This allows for creating mutiple `FetchCanceller`s in `script` for a single fetch request, allowing integration of the media and video elements to integrate with the `Document` canceller list -- meaning these fetches also get cancelled when the `Document` unloads. Signed-off-by: Martin Robinson <mrobinson@igalia.com>
This commit is contained in:
parent
e2be55b873
commit
748954d610
23 changed files with 179 additions and 226 deletions
|
@ -3242,13 +3242,12 @@ impl GlobalScope {
|
|||
request_builder: RequestBuilder,
|
||||
context: Arc<Mutex<Listener>>,
|
||||
task_source: SendableTaskSource,
|
||||
cancellation_sender: Option<ipc::IpcReceiver<()>>,
|
||||
) {
|
||||
let network_listener = NetworkListener {
|
||||
context,
|
||||
task_source,
|
||||
};
|
||||
self.fetch_with_network_listener(request_builder, network_listener, cancellation_sender);
|
||||
self.fetch_with_network_listener(request_builder, network_listener);
|
||||
}
|
||||
|
||||
pub(crate) fn fetch_with_network_listener<
|
||||
|
@ -3257,13 +3256,11 @@ impl GlobalScope {
|
|||
&self,
|
||||
request_builder: RequestBuilder,
|
||||
network_listener: NetworkListener<Listener>,
|
||||
cancellation_receiver: Option<ipc::IpcReceiver<()>>,
|
||||
) {
|
||||
fetch_async(
|
||||
&self.core_resource_thread(),
|
||||
request_builder,
|
||||
None,
|
||||
cancellation_receiver,
|
||||
network_listener.into_callback(),
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue