mirror of
https://github.com/servo/servo.git
synced 2025-06-19 14:48:59 +01:00
Merge functionality of WebsocketConnect into Fetch
This commit is contained in:
parent
a65253a11a
commit
99f9696a24
11 changed files with 90 additions and 78 deletions
|
@ -9,7 +9,8 @@
|
|||
use dom::bindings::root::Dom;
|
||||
use dom::document::Document;
|
||||
use ipc_channel::ipc::IpcSender;
|
||||
use net_traits::{CoreResourceMsg, FetchResponseMsg, ResourceThreads, IpcSend};
|
||||
use net_traits::{CoreResourceMsg, FetchChannels, FetchResponseMsg};
|
||||
use net_traits::{ResourceThreads, IpcSend};
|
||||
use net_traits::request::RequestInit;
|
||||
use servo_url::ServoUrl;
|
||||
use std::thread;
|
||||
|
@ -124,7 +125,8 @@ impl DocumentLoader {
|
|||
pub fn fetch_async_background(&self,
|
||||
request: RequestInit,
|
||||
fetch_target: IpcSender<FetchResponseMsg>) {
|
||||
self.resource_threads.sender().send(CoreResourceMsg::Fetch(request, fetch_target)).unwrap();
|
||||
self.resource_threads.sender().send(
|
||||
CoreResourceMsg::Fetch(request, FetchChannels::ResponseMsg(fetch_target))).unwrap();
|
||||
}
|
||||
|
||||
/// Mark an in-progress network request complete.
|
||||
|
|
|
@ -23,7 +23,8 @@ use js::conversions::ToJSValConvertible;
|
|||
use js::jsapi::JSAutoCompartment;
|
||||
use js::jsval::UndefinedValue;
|
||||
use mime::{Mime, TopLevel, SubLevel};
|
||||
use net_traits::{CoreResourceMsg, FetchMetadata, FetchResponseMsg, FetchResponseListener, NetworkError};
|
||||
use net_traits::{CoreResourceMsg, FetchChannels, FetchMetadata};
|
||||
use net_traits::{FetchResponseMsg, FetchResponseListener, NetworkError};
|
||||
use net_traits::request::{CacheMode, CorsSettings, CredentialsMode};
|
||||
use net_traits::request::{RequestInit, RequestMode};
|
||||
use network_listener::{NetworkListener, PreInvoke};
|
||||
|
@ -489,7 +490,8 @@ impl EventSource {
|
|||
ROUTER.add_route(action_receiver.to_opaque(), Box::new(move |message| {
|
||||
listener.notify_fetch(message.to().unwrap());
|
||||
}));
|
||||
global.core_resource_thread().send(CoreResourceMsg::Fetch(request, action_sender)).unwrap();
|
||||
global.core_resource_thread().send(
|
||||
CoreResourceMsg::Fetch(request, FetchChannels::ResponseMsg(action_sender))).unwrap();
|
||||
// Step 13
|
||||
Ok(ev)
|
||||
}
|
||||
|
@ -552,6 +554,7 @@ impl EventSourceTimeoutCallback {
|
|||
request.headers.set(LastEventId(String::from(event_source.last_event_id.borrow().clone())));
|
||||
}
|
||||
// Step 5.4
|
||||
global.core_resource_thread().send(CoreResourceMsg::Fetch(request, self.action_sender)).unwrap();
|
||||
global.core_resource_thread().send(
|
||||
CoreResourceMsg::Fetch(request, FetchChannels::ResponseMsg(self.action_sender))).unwrap();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -549,7 +549,7 @@ impl RequestMethods for Request {
|
|||
|
||||
// https://fetch.spec.whatwg.org/#dom-request-mode
|
||||
fn Mode(&self) -> RequestMode {
|
||||
self.request.borrow().mode.into()
|
||||
self.request.borrow().mode.clone().into()
|
||||
}
|
||||
|
||||
// https://fetch.spec.whatwg.org/#dom-request-credentials
|
||||
|
@ -758,7 +758,8 @@ impl Into<RequestMode> for NetTraitsRequestMode {
|
|||
NetTraitsRequestMode::SameOrigin => RequestMode::Same_origin,
|
||||
NetTraitsRequestMode::NoCors => RequestMode::No_cors,
|
||||
NetTraitsRequestMode::CorsMode => RequestMode::Cors,
|
||||
NetTraitsRequestMode::WebSocket => unreachable!("Websocket request mode should never be exposed to Dom"),
|
||||
NetTraitsRequestMode::WebSocket { .. } =>
|
||||
unreachable!("Websocket request mode should never be exposed to Dom"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,15 +20,15 @@ use dom::event::{Event, EventBubbles, EventCancelable};
|
|||
use dom::eventtarget::EventTarget;
|
||||
use dom::globalscope::GlobalScope;
|
||||
use dom::messageevent::MessageEvent;
|
||||
use dom::urlhelper::UrlHelper;
|
||||
use dom_struct::dom_struct;
|
||||
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
|
||||
use js::jsapi::JSAutoCompartment;
|
||||
use js::jsval::UndefinedValue;
|
||||
use js::typedarray::{ArrayBuffer, CreateWith};
|
||||
use net_traits::{WebSocketCommunicate, WebSocketConnectData, WebSocketDomAction, WebSocketNetworkEvent};
|
||||
use net_traits::CoreResourceMsg::WebsocketConnect;
|
||||
use net_traits::{CoreResourceMsg, FetchChannels};
|
||||
use net_traits::{WebSocketDomAction, WebSocketNetworkEvent};
|
||||
use net_traits::MessageData;
|
||||
use net_traits::request::{RequestInit, RequestMode};
|
||||
use script_runtime::CommonScriptMsg;
|
||||
use script_runtime::ScriptThreadEventCategory::WebSocketEvent;
|
||||
use servo_url::ServoUrl;
|
||||
|
@ -176,12 +176,6 @@ impl WebSocket {
|
|||
let ws = WebSocket::new(global, url_record.clone());
|
||||
let address = Trusted::new(&*ws);
|
||||
|
||||
let connect_data = WebSocketConnectData {
|
||||
resource_url: url_record,
|
||||
origin: UrlHelper::Origin(&global.get_url()).0,
|
||||
protocols: protocols,
|
||||
};
|
||||
|
||||
// Create the interface for communication with the resource thread
|
||||
let (dom_action_sender, resource_action_receiver):
|
||||
(IpcSender<WebSocketDomAction>,
|
||||
|
@ -190,13 +184,18 @@ impl WebSocket {
|
|||
(IpcSender<WebSocketNetworkEvent>,
|
||||
IpcReceiver<WebSocketNetworkEvent>) = ipc::channel().unwrap();
|
||||
|
||||
let connect = WebSocketCommunicate {
|
||||
// Step 8.
|
||||
let request = RequestInit {
|
||||
url: url_record,
|
||||
origin: global.origin().immutable().clone(),
|
||||
mode: RequestMode::WebSocket { protocols },
|
||||
..RequestInit::default()
|
||||
};
|
||||
let channels = FetchChannels::WebSocket {
|
||||
event_sender: resource_event_sender,
|
||||
action_receiver: resource_action_receiver,
|
||||
};
|
||||
|
||||
// Step 8.
|
||||
let _ = global.core_resource_thread().send(WebsocketConnect(connect, connect_data));
|
||||
let _ = global.core_resource_thread().send(CoreResourceMsg::Fetch(request, channels));
|
||||
|
||||
*ws.sender.borrow_mut() = Some(dom_action_sender);
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ use ipc_channel::router::ROUTER;
|
|||
use js::jsapi::{Heap, JSContext, JS_ParseJSON};
|
||||
use js::jsapi::JS_ClearPendingException;
|
||||
use js::jsval::{JSVal, NullValue, UndefinedValue};
|
||||
use net_traits::{FetchMetadata, FilteredMetadata};
|
||||
use net_traits::{FetchChannels, FetchMetadata, FilteredMetadata};
|
||||
use net_traits::{FetchResponseListener, NetworkError, ReferrerPolicy};
|
||||
use net_traits::CoreResourceMsg::Fetch;
|
||||
use net_traits::request::{CredentialsMode, Destination, RequestInit, RequestMode};
|
||||
|
@ -266,7 +266,8 @@ impl XMLHttpRequest {
|
|||
ROUTER.add_route(action_receiver.to_opaque(), Box::new(move |message| {
|
||||
listener.notify_fetch(message.to().unwrap());
|
||||
}));
|
||||
global.core_resource_thread().send(Fetch(init, action_sender)).unwrap();
|
||||
global.core_resource_thread().send(
|
||||
Fetch(init, FetchChannels::ResponseMsg(action_sender))).unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ use dom::serviceworkerglobalscope::ServiceWorkerGlobalScope;
|
|||
use ipc_channel::ipc;
|
||||
use ipc_channel::router::ROUTER;
|
||||
use js::jsapi::JSAutoCompartment;
|
||||
use net_traits::{FetchResponseListener, NetworkError};
|
||||
use net_traits::{FetchChannels, FetchResponseListener, NetworkError};
|
||||
use net_traits::{FilteredMetadata, FetchMetadata, Metadata};
|
||||
use net_traits::CoreResourceMsg::Fetch as NetTraitsFetch;
|
||||
use net_traits::request::{Request as NetTraitsRequest, ServiceWorkersMode};
|
||||
|
@ -51,7 +51,7 @@ fn request_init_from_request(request: NetTraitsRequest) -> NetTraitsRequestInit
|
|||
body: request.body.clone(),
|
||||
destination: request.destination,
|
||||
synchronous: request.synchronous,
|
||||
mode: request.mode,
|
||||
mode: request.mode.clone(),
|
||||
use_cors_preflight: request.use_cors_preflight,
|
||||
credentials_mode: request.credentials_mode,
|
||||
use_url_credentials: request.use_url_credentials,
|
||||
|
@ -107,7 +107,8 @@ pub fn Fetch(global: &GlobalScope, input: RequestInfo, init: RootedTraceableBox<
|
|||
ROUTER.add_route(action_receiver.to_opaque(), Box::new(move |message| {
|
||||
listener.notify_fetch(message.to().unwrap());
|
||||
}));
|
||||
core_resource_thread.send(NetTraitsFetch(request_init, action_sender)).unwrap();
|
||||
core_resource_thread.send(
|
||||
NetTraitsFetch(request_init, FetchChannels::ResponseMsg(action_sender))).unwrap();
|
||||
|
||||
promise
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue