aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-08-02 16:57:46 -0500
committerGitHub <noreply@github.com>2016-08-02 16:57:46 -0500
commitb2f69f363574d5dea3cb96d4ef00c1d4e56bdd63 (patch)
tree419954a6061f18b47448b3a4e5a29c1ab639d83c /components/script
parent7807895d5839ddd8e042b7e741961a75b70c37d8 (diff)
parent17ae38a31880e32afe8458a132b838241579f073 (diff)
downloadservo-b2f69f363574d5dea3cb96d4ef00c1d4e56bdd63.tar.gz
servo-b2f69f363574d5dea3cb96d4ef00c1d4e56bdd63.zip
Auto merge of #12684 - izgzhen:cancel-file-manager, r=Manishearth
Add cancellability to file manager load and related refactoring Fixes #12589. r? @Manishearth --- - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [x] These changes fix #12589 - [x] There are tests for these changes OR <!-- 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/12684) <!-- Reviewable:end -->
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/bindings/global.rs6
-rw-r--r--components/script/dom/blob.rs25
-rw-r--r--components/script/dom/htmlinputelement.rs8
-rw-r--r--components/script/dom/url.rs6
4 files changed, 21 insertions, 24 deletions
diff --git a/components/script/dom/bindings/global.rs b/components/script/dom/bindings/global.rs
index fe81b8a14de..bfc3212a9c4 100644
--- a/components/script/dom/bindings/global.rs
+++ b/components/script/dom/bindings/global.rs
@@ -19,7 +19,6 @@ use js::jsapi::{CurrentGlobalOrNull, GetGlobalForObjectCrossCompartment};
use js::jsapi::{JSContext, JSObject, JS_GetClass, MutableHandleValue};
use js::{JSCLASS_IS_DOMJSCLASS, JSCLASS_IS_GLOBAL};
use msg::constellation_msg::PipelineId;
-use net_traits::filemanager_thread::FileManagerThreadMsg;
use net_traits::{ResourceThreads, CoreResourceThread, IpcSend};
use profile_traits::{mem, time};
use script_runtime::{CommonScriptMsg, ScriptChan, ScriptPort};
@@ -133,11 +132,6 @@ impl<'a> GlobalRef<'a> {
self.resource_threads().sender()
}
- /// Get the port to file manager for this global scope
- pub fn filemanager_thread(&self) -> IpcSender<FileManagerThreadMsg> {
- self.resource_threads().sender()
- }
-
/// Get the worker's id.
pub fn get_worker_id(&self) -> Option<WorkerId> {
match *self {
diff --git a/components/script/dom/blob.rs b/components/script/dom/blob.rs
index 2f3865b7ce0..4711da80010 100644
--- a/components/script/dom/blob.rs
+++ b/components/script/dom/blob.rs
@@ -14,9 +14,9 @@ use dom::bindings::str::DOMString;
use encoding::all::UTF_8;
use encoding::types::{EncoderTrap, Encoding};
use ipc_channel::ipc;
-use net_traits::IpcSend;
use net_traits::blob_url_store::{BlobBuf, get_blob_origin};
use net_traits::filemanager_thread::{FileManagerThreadMsg, SelectedFileId, RelativePos, ReadFileProgress};
+use net_traits::{CoreResourceMsg, IpcSend};
use std::cell::Cell;
use std::mem;
use std::ops::Index;
@@ -197,11 +197,10 @@ impl Blob {
if set_valid {
let global = self.global();
let origin = get_blob_origin(&global.r().get_url());
- let filemanager = global.r().resource_threads().sender();
let (tx, rx) = ipc::channel().unwrap();
let msg = FileManagerThreadMsg::ActivateBlobURL(f.id.clone(), tx, origin.clone());
- let _ = filemanager.send(msg);
+ self.send_to_file_manager(msg);
match rx.recv().unwrap() {
Ok(_) => return f.id.clone(),
@@ -218,7 +217,6 @@ impl Blob {
let global = self.global();
let origin = get_blob_origin(&global.r().get_url());
- let filemanager = global.r().resource_threads().sender();
let blob_buf = BlobBuf {
filename: None,
@@ -228,7 +226,8 @@ impl Blob {
};
let (tx, rx) = ipc::channel().unwrap();
- let _ = filemanager.send(FileManagerThreadMsg::PromoteMemory(blob_buf, set_valid, tx, origin.clone()));
+ let msg = FileManagerThreadMsg::PromoteMemory(blob_buf, set_valid, tx, origin.clone());
+ self.send_to_file_manager(msg);
match rx.recv().unwrap() {
Ok(id) => {
@@ -253,12 +252,11 @@ impl Blob {
let origin = get_blob_origin(&global.r().get_url());
- let filemanager = global.r().resource_threads().sender();
let (tx, rx) = ipc::channel().unwrap();
let msg = FileManagerThreadMsg::AddSlicedURLEntry(parent_id.clone(),
rel_pos.clone(),
tx, origin.clone());
- let _ = filemanager.send(msg);
+ self.send_to_file_manager(msg);
match rx.recv().expect("File manager thread is down") {
Ok(new_id) => {
let new_id = SelectedFileId(new_id.0);
@@ -286,14 +284,19 @@ impl Blob {
let global = self.global();
let origin = get_blob_origin(&global.r().get_url());
- let filemanager = global.r().resource_threads().sender();
let (tx, rx) = ipc::channel().unwrap();
let msg = FileManagerThreadMsg::DecRef(f.id.clone(), origin, tx);
- let _ = filemanager.send(msg);
+ self.send_to_file_manager(msg);
let _ = rx.recv().unwrap();
}
}
+
+ fn send_to_file_manager(&self, msg: FileManagerThreadMsg) {
+ let global = self.global();
+ let resource_threads = global.r().resource_threads();
+ let _ = resource_threads.send(CoreResourceMsg::ToFileManager(msg));
+ }
}
impl Drop for Blob {
@@ -305,12 +308,12 @@ impl Drop for Blob {
}
fn read_file(global: GlobalRef, id: SelectedFileId) -> Result<Vec<u8>, ()> {
- let file_manager = global.filemanager_thread();
+ let resource_threads = global.resource_threads();
let (chan, recv) = ipc::channel().map_err(|_|())?;
let origin = get_blob_origin(&global.get_url());
let check_url_validity = false;
let msg = FileManagerThreadMsg::ReadFile(chan, id, check_url_validity, origin);
- let _ = file_manager.send(msg);
+ let _ = resource_threads.send(CoreResourceMsg::ToFileManager(msg));
let mut bytes = vec![];
diff --git a/components/script/dom/htmlinputelement.rs b/components/script/dom/htmlinputelement.rs
index 6f7a7a755f5..a98fcbcfb4e 100644
--- a/components/script/dom/htmlinputelement.rs
+++ b/components/script/dom/htmlinputelement.rs
@@ -34,9 +34,9 @@ use dom::virtualmethods::VirtualMethods;
use ipc_channel::ipc::{self, IpcSender};
use mime_guess;
use msg::constellation_msg::Key;
-use net_traits::IpcSend;
use net_traits::blob_url_store::get_blob_origin;
use net_traits::filemanager_thread::{FileManagerThreadMsg, FilterPattern};
+use net_traits::{IpcSend, CoreResourceMsg};
use script_traits::ScriptMsg as ConstellationMsg;
use std::borrow::ToOwned;
use std::cell::Cell;
@@ -780,7 +780,7 @@ impl HTMLInputElement {
fn select_files(&self, opt_test_paths: Option<Vec<DOMString>>) {
let window = window_from_node(self);
let origin = get_blob_origin(&window.get_url());
- let filemanager = window.resource_threads().sender();
+ let resource_threads = window.resource_threads();
let mut files: Vec<Root<File>> = vec![];
let mut error = None;
@@ -793,7 +793,7 @@ impl HTMLInputElement {
let (chan, recv) = ipc::channel().expect("Error initializing channel");
let msg = FileManagerThreadMsg::SelectFiles(filter, chan, origin, opt_test_paths);
- let _ = filemanager.send(msg).unwrap();
+ let _ = resource_threads.send(CoreResourceMsg::ToFileManager(msg)).unwrap();
match recv.recv().expect("IpcSender side error") {
Ok(selected_files) => {
@@ -817,7 +817,7 @@ impl HTMLInputElement {
let (chan, recv) = ipc::channel().expect("Error initializing channel");
let msg = FileManagerThreadMsg::SelectFile(filter, chan, origin, opt_test_path);
- let _ = filemanager.send(msg).unwrap();
+ let _ = resource_threads.send(CoreResourceMsg::ToFileManager(msg)).unwrap();
match recv.recv().expect("IpcSender side error") {
Ok(selected) => {
diff --git a/components/script/dom/url.rs b/components/script/dom/url.rs
index 81c806de806..768dabf1475 100644
--- a/components/script/dom/url.rs
+++ b/components/script/dom/url.rs
@@ -14,9 +14,9 @@ use dom::blob::Blob;
use dom::urlhelper::UrlHelper;
use dom::urlsearchparams::URLSearchParams;
use ipc_channel::ipc;
-use net_traits::IpcSend;
use net_traits::blob_url_store::{get_blob_origin, parse_blob_url};
use net_traits::filemanager_thread::{SelectedFileId, FileManagerThreadMsg};
+use net_traits::{IpcSend, CoreResourceMsg};
use std::borrow::ToOwned;
use std::default::Default;
use url::quirks::domain_to_unicode;
@@ -145,11 +145,11 @@ impl URL {
if let Ok(url) = Url::parse(&url) {
if let Ok((id, _, _)) = parse_blob_url(&url) {
- let filemanager = global.resource_threads().sender();
+ let resource_threads = global.resource_threads();
let id = SelectedFileId(id.simple().to_string());
let (tx, rx) = ipc::channel().unwrap();
let msg = FileManagerThreadMsg::RevokeBlobURL(id, origin, tx);
- let _ = filemanager.send(msg);
+ let _ = resource_threads.send(CoreResourceMsg::ToFileManager(msg));
let _ = rx.recv().unwrap();
}