From d4816762fa9db76d56014caa50243f40f481265b Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Sat, 16 Jul 2016 12:33:40 -0700 Subject: [PATCH] Add fetch_async to PendingAsyncLoad, DocumentLoader and Document --- components/net_traits/lib.rs | 7 +++++++ components/script/document_loader.rs | 17 +++++++++++++++-- components/script/dom/document.rs | 11 ++++++++++- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/components/net_traits/lib.rs b/components/net_traits/lib.rs index 036fb54d940..bd3436d9f00 100644 --- a/components/net_traits/lib.rs +++ b/components/net_traits/lib.rs @@ -520,6 +520,13 @@ impl PendingAsyncLoad { let consumer = LoadConsumer::Listener(listener); self.core_resource_thread.send(CoreResourceMsg::Load(load_data, consumer, None)).unwrap(); } + + /// Initiate the fetch associated with this pending load. + pub fn fetch_async(mut self, request: RequestInit, fetch_target: IpcSender) { + self.guard.neuter(); + + self.core_resource_thread.send(CoreResourceMsg::Fetch(request, fetch_target)).unwrap(); + } } /// Message sent in response to `Load`. Contains metadata, and a port diff --git a/components/script/document_loader.rs b/components/script/document_loader.rs index 0fc1e5e06c5..c38a234b2c1 100644 --- a/components/script/document_loader.rs +++ b/components/script/document_loader.rs @@ -7,9 +7,11 @@ use dom::bindings::js::JS; use dom::document::Document; +use ipc_channel::ipc::IpcSender; use msg::constellation_msg::{PipelineId, ReferrerPolicy}; -use net_traits::{PendingAsyncLoad, AsyncResponseTarget, LoadContext}; -use net_traits::{ResourceThreads, IpcSend}; +use net_traits::request::RequestInit; +use net_traits::{AsyncResponseTarget, PendingAsyncLoad, LoadContext}; +use net_traits::{FetchResponseMsg, ResourceThreads, IpcSend}; use std::thread; use url::Url; @@ -148,6 +150,17 @@ impl DocumentLoader { pending.load_async(listener) } + /// Initiate a new fetch. + pub fn fetch_async(&mut self, + load: LoadType, + request: RequestInit, + fetch_target: IpcSender, + referrer: &Document, + referrer_policy: Option) { + let pending = self.prepare_async_load(load, referrer, referrer_policy); + pending.fetch_async(request, fetch_target); + } + /// Mark an in-progress network request complete. pub fn finish_load(&mut self, load: &LoadType) { let idx = self.blocking_loads.iter().position(|unfinished| *unfinished == *load); diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 50eeeeeb3d5..2cca84a625a 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -95,9 +95,10 @@ 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, IpcSend, PendingAsyncLoad}; +use net_traits::{AsyncResponseTarget, FetchResponseMsg, IpcSend, PendingAsyncLoad}; use net_traits::CookieSource::NonHTTP; use net_traits::CoreResourceMsg::{GetCookiesForUrl, SetCookiesForUrl}; +use net_traits::request::RequestInit; use net_traits::response::HttpsState; use num_traits::ToPrimitive; use origin::Origin; @@ -1433,6 +1434,14 @@ impl Document { loader.load_async(load, listener, self, referrer_policy); } + pub fn fetch_async(&self, load: LoadType, + request: RequestInit, + fetch_target: IpcSender, + referrer_policy: Option) { + let mut loader = self.loader.borrow_mut(); + loader.fetch_async(load, request, fetch_target, self, referrer_policy); + } + pub fn finish_load(&self, load: LoadType) { debug!("Document got finish_load: {:?}", load); // The parser might need the loader, so restrict the lifetime of the borrow.