From 33d26b9149d63e02a691130983f80b2d41fac45d Mon Sep 17 00:00:00 2001 From: David Wendt Date: Fri, 17 Jan 2020 23:11:09 -0500 Subject: [PATCH] Shorten `Pin> + 'static>>` into `OwnedFuture`. This is technically stricter on `fetch` impls, but right now we can't support non-`'static` futures at all. --- core/src/backend/navigator.rs | 6 +----- core/src/loader.rs | 27 +++++++++++++-------------- desktop/src/navigator.rs | 17 +++++------------ web/src/navigator.rs | 14 +++++--------- 4 files changed, 24 insertions(+), 40 deletions(-) diff --git a/core/src/backend/navigator.rs b/core/src/backend/navigator.rs index 36ec31627..70ca4c2d2 100644 --- a/core/src/backend/navigator.rs +++ b/core/src/backend/navigator.rs @@ -283,11 +283,7 @@ impl NavigatorBackend for NullNavigatorBackend { ) { } - fn fetch( - &self, - url: String, - _opts: RequestOptions, - ) -> Pin, Error>>>> { + fn fetch(&self, url: String, _opts: RequestOptions) -> OwnedFuture, Error> { let mut path = self.relative_base_path.clone(); path.push(url); diff --git a/core/src/loader.rs b/core/src/loader.rs index 8ef763306..6ea0e40e0 100644 --- a/core/src/loader.rs +++ b/core/src/loader.rs @@ -1,6 +1,7 @@ //! Management of async loaders use crate::avm1::{Object, TObject, Value}; +use crate::backend::navigator::OwnedFuture; use crate::context::{ActionQueue, ActionType}; use crate::display_object::{DisplayObject, MorphShape, TDisplayObject}; use crate::player::{Player, NEWEST_PLAYER_VERSION}; @@ -8,8 +9,6 @@ use crate::tag_utils::SwfMovie; use crate::xml::XMLNode; use gc_arena::{Collect, CollectionContext}; use generational_arena::{Arena, Index}; -use std::future::Future; -use std::pin::Pin; use std::sync::{Arc, Mutex, Weak}; use url::form_urlencoded; @@ -67,9 +66,9 @@ impl<'gc> LoadManager<'gc> { &mut self, player: Weak>, target_clip: DisplayObject<'gc>, - fetch: Pin, Error>>>>, + fetch: OwnedFuture, Error>, target_broadcaster: Option>, - ) -> Pin> + 'static>> { + ) -> OwnedFuture<(), Error> { let loader = Loader::Movie { self_handle: None, target_clip, @@ -113,8 +112,8 @@ impl<'gc> LoadManager<'gc> { &mut self, player: Weak>, target_object: Object<'gc>, - fetch: Pin, Error>>>>, - ) -> Pin> + 'static>> { + fetch: OwnedFuture, Error>, + ) -> OwnedFuture<(), Error> { let loader = Loader::Form { self_handle: None, target_object, @@ -135,8 +134,8 @@ impl<'gc> LoadManager<'gc> { player: Weak>, target_node: XMLNode<'gc>, active_clip: DisplayObject<'gc>, - fetch: Pin, Error>>>>, - ) -> Pin> + 'static>> { + fetch: OwnedFuture, Error>, + ) -> OwnedFuture<(), Error> { let loader = Loader::XML { self_handle: None, active_clip, @@ -239,8 +238,8 @@ impl<'gc> Loader<'gc> { pub fn movie_loader( &mut self, player: Weak>, - fetch: Pin, Error>>>>, - ) -> Pin> + 'static>> { + fetch: OwnedFuture, Error>, + ) -> OwnedFuture<(), Error> { let handle = match self { Loader::Movie { self_handle, .. } => self_handle.expect("Loader not self-introduced"), _ => return Box::pin(async { Err("Non-movie loader spawned as movie loader".into()) }), @@ -394,8 +393,8 @@ impl<'gc> Loader<'gc> { pub fn form_loader( &mut self, player: Weak>, - fetch: Pin, Error>>>>, - ) -> Pin> + 'static>> { + fetch: OwnedFuture, Error>, + ) -> OwnedFuture<(), Error> { let handle = match self { Loader::Form { self_handle, .. } => self_handle.expect("Loader not self-introduced"), _ => return Box::pin(async { Err("Non-form loader spawned as form loader".into()) }), @@ -472,8 +471,8 @@ impl<'gc> Loader<'gc> { pub fn xml_loader( &mut self, player: Weak>, - fetch: Pin, Error>>>>, - ) -> Pin> + 'static>> { + fetch: OwnedFuture, Error>, + ) -> OwnedFuture<(), Error> { let handle = match self { Loader::XML { self_handle, .. } => self_handle.expect("Loader not self-introduced"), _ => return Box::pin(async { Err("Non-XML loader spawned as XML loader".into()) }), diff --git a/desktop/src/navigator.rs b/desktop/src/navigator.rs index 38137aaa1..9de72e381 100644 --- a/desktop/src/navigator.rs +++ b/desktop/src/navigator.rs @@ -1,10 +1,10 @@ //! Navigator backend for web use log; -use ruffle_core::backend::navigator::{Error, NavigationMethod, NavigatorBackend, RequestOptions}; +use ruffle_core::backend::navigator::{ + Error, NavigationMethod, NavigatorBackend, OwnedFuture, RequestOptions, +}; use std::collections::HashMap; -use std::future::Future; -use std::pin::Pin; use url::Url; use webbrowser; @@ -63,18 +63,11 @@ impl NavigatorBackend for ExternalNavigatorBackend { }; } - fn fetch( - &self, - _url: String, - _options: RequestOptions, - ) -> Pin, Error>>>> { + fn fetch(&self, _url: String, _options: RequestOptions) -> OwnedFuture, Error> { Box::pin(async { Err("Fetch not implemented on desktop!".into()) }) } - fn spawn_future( - &mut self, - _future: Pin> + 'static>>, - ) { + fn spawn_future(&mut self, _future: OwnedFuture<(), Error>) { unimplemented!(); } } diff --git a/web/src/navigator.rs b/web/src/navigator.rs index 5f399f085..23a1becb3 100644 --- a/web/src/navigator.rs +++ b/web/src/navigator.rs @@ -1,10 +1,10 @@ //! Navigator backend for web use js_sys::{Array, ArrayBuffer, Uint8Array}; -use ruffle_core::backend::navigator::{Error, NavigationMethod, NavigatorBackend, RequestOptions}; +use ruffle_core::backend::navigator::{ + Error, NavigationMethod, NavigatorBackend, OwnedFuture, RequestOptions, +}; use std::collections::HashMap; -use std::future::Future; -use std::pin::Pin; use wasm_bindgen::JsCast; use wasm_bindgen_futures::{spawn_local, JsFuture}; use web_sys::{window, Blob, BlobPropertyBag, Request, RequestInit, Response}; @@ -77,11 +77,7 @@ impl NavigatorBackend for WebNavigatorBackend { } } - fn fetch( - &self, - url: String, - options: RequestOptions, - ) -> Pin, Error>>>> { + fn fetch(&self, url: String, options: RequestOptions) -> OwnedFuture, Error> { Box::pin(async move { let mut init = RequestInit::new(); @@ -135,7 +131,7 @@ impl NavigatorBackend for WebNavigatorBackend { }) } - fn spawn_future(&mut self, future: Pin> + 'static>>) { + fn spawn_future(&mut self, future: OwnedFuture<(), Error>) { spawn_local(async move { if let Err(e) = future.await { log::error!("Asynchronous error occured: {}", e);