diff options
14 files changed, 44 insertions, 54 deletions
diff --git a/src/components/script/dom/webidls/WorkerGlobalScope.webidl b/src/components/script/dom/webidls/WorkerGlobalScope.webidl index 52aaed9e203..9c50682b056 100644 --- a/src/components/script/dom/webidls/WorkerGlobalScope.webidl +++ b/src/components/script/dom/webidls/WorkerGlobalScope.webidl @@ -18,7 +18,8 @@ interface WorkerGlobalScope : EventTarget { // http://www.whatwg.org/html/#WorkerGlobalScope-partial //[Exposed=Worker] partial interface WorkerGlobalScope { // not obsolete - //void importScripts(DOMString... urls); + [Throws] + void importScripts(DOMString... urls); readonly attribute WorkerNavigator navigator; }; //WorkerGlobalScope implements WindowTimers; diff --git a/src/components/script/dom/workerglobalscope.rs b/src/components/script/dom/workerglobalscope.rs index e6adc3182d5..dcf205cf3a9 100644 --- a/src/components/script/dom/workerglobalscope.rs +++ b/src/components/script/dom/workerglobalscope.rs @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use dom::bindings::codegen::Bindings::WorkerGlobalScopeBinding::WorkerGlobalScopeMethods; +use dom::bindings::error::{ErrorResult, Syntax, Network, FailureUnknown}; use dom::bindings::trace::Untraceable; use dom::bindings::global; use dom::bindings::js::{JS, JSRef, Temporary, OptionalSettable}; @@ -13,14 +14,15 @@ use dom::workerlocation::WorkerLocation; use dom::workernavigator::WorkerNavigator; use script_task::ScriptChan; -use servo_net::resource_task::ResourceTask; +use servo_net::resource_task::{ResourceTask, load_whole_resource}; +use servo_util::str::DOMString; use js::jsapi::JSContext; use js::rust::Cx; use std::cell::Cell; use std::rc::Rc; -use url::Url; +use url::{Url, UrlParser}; #[deriving(PartialEq,Encodable)] pub enum WorkerGlobalScopeId { @@ -87,6 +89,38 @@ impl<'a> WorkerGlobalScopeMethods for JSRef<'a, WorkerGlobalScope> { Temporary::new(self.location.get().get_ref().clone()) } + fn ImportScripts(&self, url_strings: Vec<DOMString>) -> ErrorResult { + let mut urls = Vec::with_capacity(url_strings.len()); + for url in url_strings.move_iter() { + let url = UrlParser::new().base_url(&*self.worker_url) + .parse(url.as_slice()); + match url { + Ok(url) => urls.push(url), + Err(_) => return Err(Syntax), + }; + } + + for url in urls.move_iter() { + let (url, source) = match load_whole_resource(&*self.resource_task, url) { + Err(_) => return Err(Network), + Ok((metadata, bytes)) => { + (metadata.final_url, String::from_utf8(bytes).unwrap()) + } + }; + + match self.js_context.evaluate_script( + self.reflector().get_jsobject(), source, url.serialize(), 1) { + Ok(_) => (), + Err(_) => { + println!("evaluate_script failed"); + return Err(FailureUnknown); + } + } + } + + Ok(()) + } + fn Navigator(&self) -> Temporary<WorkerNavigator> { if self.navigator.get().is_none() { let navigator = WorkerNavigator::new(self); diff --git a/src/test/wpt/metadata/workers/WorkerGlobalScope_importScripts.htm.ini b/src/test/wpt/metadata/workers/WorkerGlobalScope_importScripts.htm.ini deleted file mode 100644 index 49d6cdb031e..00000000000 --- a/src/test/wpt/metadata/workers/WorkerGlobalScope_importScripts.htm.ini +++ /dev/null @@ -1,5 +0,0 @@ -[WorkerGlobalScope_importScripts.htm] - type: testharness - [Test Description: WorkerGlobalScope API: importScripts().] - expected: FAIL - diff --git a/src/test/wpt/metadata/workers/WorkerGlobalScope_importScripts_NetworkErr.htm.ini b/src/test/wpt/metadata/workers/WorkerGlobalScope_importScripts_NetworkErr.htm.ini index f07449d062e..ad0c47e1308 100644 --- a/src/test/wpt/metadata/workers/WorkerGlobalScope_importScripts_NetworkErr.htm.ini +++ b/src/test/wpt/metadata/workers/WorkerGlobalScope_importScripts_NetworkErr.htm.ini @@ -1,5 +1,6 @@ [WorkerGlobalScope_importScripts_NetworkErr.htm] type: testharness + expected: TIMEOUT [Test Description: importScripts(): Throw NETWORK_ERR exception whenever attempt to fetch script is failed.] - expected: FAIL + expected: NOTRUN diff --git a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/001.html.ini b/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/001.html.ini deleted file mode 100644 index d0e0d45767c..00000000000 --- a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/001.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[001.html] - type: testharness - [importScripts no arguments] - expected: FAIL - diff --git a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/002.html.ini b/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/002.html.ini deleted file mode 100644 index 674f251a4ab..00000000000 --- a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/002.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[002.html] - type: testharness - [importScripts resolving urls] - expected: FAIL - diff --git a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/003.html.ini b/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/003.html.ini deleted file mode 100644 index ca90e1b9f8b..00000000000 --- a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/003.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[003.html] - type: testharness - [importScripts running scripts] - expected: FAIL - diff --git a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/004.html.ini b/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/004.html.ini index 2cf2189cd1a..8736045067f 100644 --- a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/004.html.ini +++ b/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/004.html.ini @@ -1,5 +1,6 @@ [004.html] type: testharness + expected: TIMEOUT [importScripts broken script] - expected: FAIL + expected: TIMEOUT diff --git a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/007.html.ini b/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/005.html.ini index d6e2766fb13..ae10d0f5f3d 100644 --- a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/007.html.ini +++ b/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/005.html.ini @@ -1,6 +1,6 @@ -[007.html] +[005.html] type: testharness expected: TIMEOUT - [postMessage in importScripts] + [importScripts separate scripts] expected: TIMEOUT diff --git a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/008.html.ini b/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/008.html.ini deleted file mode 100644 index ca4ffb14526..00000000000 --- a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/008.html.ini +++ /dev/null @@ -1,6 +0,0 @@ -[008.html] - type: testharness - expected: TIMEOUT - [variables and functions crossing importScripts boundary] - expected: TIMEOUT - diff --git a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/009.html.ini b/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/009.html.ini deleted file mode 100644 index 3d27f0c9c57..00000000000 --- a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/009.html.ini +++ /dev/null @@ -1,6 +0,0 @@ -[009.html] - type: testharness - expected: TIMEOUT - [variables and functions crossing importScripts boundary, take 2] - expected: TIMEOUT - diff --git a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/010.html.ini b/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/010.html.ini deleted file mode 100644 index 9f9e8454aed..00000000000 --- a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/010.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[010.html] - type: testharness - [importScripts(undefined)] - expected: FAIL - diff --git a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/011.html.ini b/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/011.html.ini deleted file mode 100644 index 38b5d04afde..00000000000 --- a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/011.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[011.html] - type: testharness - [importScripts(null)] - expected: FAIL - diff --git a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/012.html.ini b/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/012.html.ini deleted file mode 100644 index 9a3eb333e1f..00000000000 --- a/src/test/wpt/metadata/workers/interfaces/WorkerUtils/importScripts/012.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[012.html] - type: testharness - [importScripts(1)] - expected: FAIL - |