aboutsummaryrefslogtreecommitdiffstats
path: root/components/net/filemanager_thread.rs
diff options
context:
space:
mode:
authorZhen Zhang <izgzhen@gmail.com>2016-07-08 19:52:10 +0800
committerZhen Zhang <izgzhen@gmail.com>2016-07-09 15:31:00 +0800
commit5e051c08f69cb17d610c14b208c68fc4896c55ba (patch)
tree85a294c6d17493671656f7f32db52c18f824ae71 /components/net/filemanager_thread.rs
parentc2a22bd05e0c8282175422df26e188ef63bcc452 (diff)
downloadservo-5e051c08f69cb17d610c14b208c68fc4896c55ba.tar.gz
servo-5e051c08f69cb17d610c14b208c68fc4896c55ba.zip
Add ability to WPT-test file uploads and fetches, fixes #12322
Diffstat (limited to 'components/net/filemanager_thread.rs')
-rw-r--r--components/net/filemanager_thread.rs41
1 files changed, 33 insertions, 8 deletions
diff --git a/components/net/filemanager_thread.rs b/components/net/filemanager_thread.rs
index 3ff8579e0d2..627dcced0e9 100644
--- a/components/net/filemanager_thread.rs
+++ b/components/net/filemanager_thread.rs
@@ -21,6 +21,7 @@ use std::sync::{Arc, RwLock};
#[cfg(any(target_os = "macos", target_os = "linux"))]
use tinyfiledialogs;
use url::Url;
+use util::prefs::PREFS;
use util::thread::spawn_named;
use uuid::Uuid;
@@ -128,14 +129,14 @@ impl<UI: 'static + UIProvider> FileManager<UI> {
loop {
let store = self.store.clone();
match self.receiver.recv().unwrap() {
- FileManagerThreadMsg::SelectFile(filter, sender, origin) => {
+ FileManagerThreadMsg::SelectFile(filter, sender, origin, opt_test_path) => {
spawn_named("select file".to_owned(), move || {
- store.select_file(filter, sender, origin);
+ store.select_file(filter, sender, origin, opt_test_path);
});
}
- FileManagerThreadMsg::SelectFiles(filter, sender, origin) => {
+ FileManagerThreadMsg::SelectFiles(filter, sender, origin, opt_test_paths) => {
spawn_named("select files".to_owned(), move || {
- store.select_files(filter, sender, origin);
+ store.select_files(filter, sender, origin, opt_test_paths);
})
}
FileManagerThreadMsg::ReadFile(sender, id, origin) => {
@@ -309,8 +310,17 @@ impl <UI: 'static + UIProvider> FileManagerStore<UI> {
fn select_file(&self, patterns: Vec<FilterPattern>,
sender: IpcSender<FileManagerResult<SelectedFile>>,
- origin: FileOrigin) {
- match self.ui.open_file_dialog("", patterns) {
+ origin: FileOrigin, opt_test_path: Option<String>) {
+ // Check if the select_files preference is enabled
+ // to ensure process-level security against compromised script;
+ // Then try applying opt_test_path directly for testing convenience
+ let opt_s = if select_files_pref_enabled() {
+ opt_test_path
+ } else {
+ self.ui.open_file_dialog("", patterns)
+ };
+
+ match opt_s {
Some(s) => {
let selected_path = Path::new(&s);
@@ -328,8 +338,17 @@ impl <UI: 'static + UIProvider> FileManagerStore<UI> {
fn select_files(&self, patterns: Vec<FilterPattern>,
sender: IpcSender<FileManagerResult<Vec<SelectedFile>>>,
- origin: FileOrigin) {
- match self.ui.open_file_dialog_multi("", patterns) {
+ origin: FileOrigin, opt_test_paths: Option<Vec<String>>) {
+ // Check if the select_files preference is enabled
+ // to ensure process-level security against compromised script;
+ // Then try applying opt_test_paths directly for testing convenience
+ let opt_v = if select_files_pref_enabled() {
+ opt_test_paths
+ } else {
+ self.ui.open_file_dialog_multi("", patterns)
+ };
+
+ match opt_v {
Some(v) => {
let mut selected_paths = vec![];
@@ -481,3 +500,9 @@ impl <UI: 'static + UIProvider> FileManagerStore<UI> {
}
}
}
+
+
+fn select_files_pref_enabled() -> bool {
+ PREFS.get("dom.testing.htmlinputelement.select_files.enabled")
+ .as_boolean().unwrap_or(false)
+}