mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Auto merge of #13571 - servo:simplify-fetching, r=nox
Simplify fetching code. <!-- Reviewable:start --> This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/13571) <!-- Reviewable:end -->
This commit is contained in:
commit
b80769dbf5
5 changed files with 48 additions and 114 deletions
|
@ -9,8 +9,8 @@ use dom::bindings::js::JS;
|
|||
use dom::document::Document;
|
||||
use ipc_channel::ipc::IpcSender;
|
||||
use msg::constellation_msg::{PipelineId, ReferrerPolicy};
|
||||
use net_traits::{AsyncResponseTarget, PendingAsyncLoad, LoadContext};
|
||||
use net_traits::{FetchResponseMsg, ResourceThreads, IpcSend};
|
||||
use net_traits::{AsyncResponseTarget, CoreResourceMsg, load_async};
|
||||
use net_traits::{FetchResponseMsg, LoadContext, ResourceThreads, IpcSend};
|
||||
use net_traits::request::RequestInit;
|
||||
use std::thread;
|
||||
use url::Url;
|
||||
|
@ -49,7 +49,7 @@ impl LoadType {
|
|||
}
|
||||
|
||||
/// Canary value ensuring that manually added blocking loads (ie. ones that weren't
|
||||
/// created via DocumentLoader::prepare_async_load) are always removed by the time
|
||||
/// created via DocumentLoader::{load_async, fetch_async}) are always removed by the time
|
||||
/// that the owner is destroyed.
|
||||
#[derive(JSTraceable, HeapSizeOf)]
|
||||
#[must_root]
|
||||
|
@ -63,7 +63,7 @@ pub struct LoadBlocker {
|
|||
impl LoadBlocker {
|
||||
/// Mark the document's load event as blocked on this new load.
|
||||
pub fn new(doc: &Document, load: LoadType) -> LoadBlocker {
|
||||
doc.add_blocking_load(load.clone());
|
||||
doc.mut_loader().add_blocking_load(load.clone());
|
||||
LoadBlocker {
|
||||
doc: JS::from_ref(doc),
|
||||
load: Some(load),
|
||||
|
@ -119,46 +119,35 @@ impl DocumentLoader {
|
|||
}
|
||||
|
||||
/// Add a load to the list of blocking loads.
|
||||
pub fn add_blocking_load(&mut self, load: LoadType) {
|
||||
fn add_blocking_load(&mut self, load: LoadType) {
|
||||
self.blocking_loads.push(load);
|
||||
}
|
||||
|
||||
/// Create a new pending network request, which can be initiated at some point in
|
||||
/// the future.
|
||||
pub fn prepare_async_load(&mut self,
|
||||
load: LoadType,
|
||||
referrer: &Document,
|
||||
referrer_policy: Option<ReferrerPolicy>) -> PendingAsyncLoad {
|
||||
let context = load.to_load_context();
|
||||
let url = load.url().clone();
|
||||
self.add_blocking_load(load);
|
||||
PendingAsyncLoad::new(context,
|
||||
self.resource_threads.sender(),
|
||||
url,
|
||||
self.pipeline,
|
||||
referrer_policy.or(referrer.get_referrer_policy()),
|
||||
Some(referrer.url().clone()))
|
||||
}
|
||||
|
||||
/// Create and initiate a new network request.
|
||||
pub fn load_async(&mut self,
|
||||
load: LoadType,
|
||||
listener: AsyncResponseTarget,
|
||||
referrer: &Document,
|
||||
referrer_policy: Option<ReferrerPolicy>) {
|
||||
let pending = self.prepare_async_load(load, referrer, referrer_policy);
|
||||
pending.load_async(listener)
|
||||
let context = load.to_load_context();
|
||||
let url = load.url().clone();
|
||||
self.add_blocking_load(load);
|
||||
load_async(context,
|
||||
self.resource_threads.sender(),
|
||||
url,
|
||||
self.pipeline,
|
||||
referrer_policy.or(referrer.get_referrer_policy()),
|
||||
Some(referrer.url().clone()),
|
||||
listener);
|
||||
}
|
||||
|
||||
/// Initiate a new fetch.
|
||||
pub fn fetch_async(&mut self,
|
||||
load: LoadType,
|
||||
request: RequestInit,
|
||||
fetch_target: IpcSender<FetchResponseMsg>,
|
||||
referrer: &Document,
|
||||
referrer_policy: Option<ReferrerPolicy>) {
|
||||
let pending = self.prepare_async_load(load, referrer, referrer_policy);
|
||||
pending.fetch_async(request, fetch_target);
|
||||
fetch_target: IpcSender<FetchResponseMsg>) {
|
||||
self.add_blocking_load(load);
|
||||
self.resource_threads.sender().send(CoreResourceMsg::Fetch(request, fetch_target)).unwrap();
|
||||
}
|
||||
|
||||
/// Mark an in-progress network request complete.
|
||||
|
|
|
@ -96,7 +96,7 @@ use js::jsapi::JS_GetRuntime;
|
|||
use msg::constellation_msg::{ALT, CONTROL, SHIFT, SUPER};
|
||||
use msg::constellation_msg::{Key, KeyModifiers, KeyState};
|
||||
use msg::constellation_msg::{PipelineId, ReferrerPolicy};
|
||||
use net_traits::{AsyncResponseTarget, FetchResponseMsg, IpcSend, PendingAsyncLoad};
|
||||
use net_traits::{AsyncResponseTarget, FetchResponseMsg, IpcSend};
|
||||
use net_traits::CookieSource::NonHTTP;
|
||||
use net_traits::CoreResourceMsg::{GetCookiesForUrl, SetCookiesForUrl};
|
||||
use net_traits::request::RequestInit;
|
||||
|
@ -1423,17 +1423,6 @@ impl Document {
|
|||
ReflowReason::RequestAnimationFrame);
|
||||
}
|
||||
|
||||
/// Add a load to the list of loads blocking this document's load.
|
||||
pub fn add_blocking_load(&self, load: LoadType) {
|
||||
let mut loader = self.loader.borrow_mut();
|
||||
loader.add_blocking_load(load)
|
||||
}
|
||||
|
||||
pub fn prepare_async_load(&self, load: LoadType, referrer_policy: Option<ReferrerPolicy>) -> PendingAsyncLoad {
|
||||
let mut loader = self.loader.borrow_mut();
|
||||
loader.prepare_async_load(load, self, referrer_policy)
|
||||
}
|
||||
|
||||
pub fn load_async(&self, load: LoadType, listener: AsyncResponseTarget, referrer_policy: Option<ReferrerPolicy>) {
|
||||
let mut loader = self.loader.borrow_mut();
|
||||
loader.load_async(load, listener, self, referrer_policy);
|
||||
|
@ -1441,10 +1430,9 @@ impl Document {
|
|||
|
||||
pub fn fetch_async(&self, load: LoadType,
|
||||
request: RequestInit,
|
||||
fetch_target: IpcSender<FetchResponseMsg>,
|
||||
referrer_policy: Option<ReferrerPolicy>) {
|
||||
fetch_target: IpcSender<FetchResponseMsg>) {
|
||||
let mut loader = self.loader.borrow_mut();
|
||||
loader.fetch_async(load, request, fetch_target, self, referrer_policy);
|
||||
loader.fetch_async(load, request, fetch_target);
|
||||
}
|
||||
|
||||
pub fn finish_load(&self, load: LoadType) {
|
||||
|
|
|
@ -269,7 +269,7 @@ fn fetch_a_classic_script(script: &HTMLScriptElement,
|
|||
ROUTER.add_route(action_receiver.to_opaque(), box move |message| {
|
||||
listener.notify_fetch(message.to().unwrap());
|
||||
});
|
||||
doc.fetch_async(LoadType::Script(url), request, action_sender, None);
|
||||
doc.fetch_async(LoadType::Script(url), request, action_sender);
|
||||
}
|
||||
|
||||
impl HTMLScriptElement {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue