Remove Untraceable from workerglobalscope.rs

This commit is contained in:
Manish Goregaokar 2014-09-29 05:25:35 +05:30
parent 16d12d0a82
commit 0fdee70cbf
2 changed files with 14 additions and 13 deletions

View file

@ -44,6 +44,7 @@ use style::PropertyDeclarationBlock;
use std::comm::{Receiver, Sender}; use std::comm::{Receiver, Sender};
use hubbub::hubbub::QuirksMode; use hubbub::hubbub::QuirksMode;
use string_cache::{Atom, Namespace}; use string_cache::{Atom, Namespace};
use js::rust::Cx;
impl<T: Reflectable> JSTraceable for JS<T> { impl<T: Reflectable> JSTraceable for JS<T> {
fn trace(&self, trc: *mut JSTracer) { fn trace(&self, trc: *mut JSTracer) {
@ -233,6 +234,7 @@ untraceable!(PropertyDeclarationBlock)
// in one of these make sure it is propagated properly to containing structs // in one of these make sure it is propagated properly to containing structs
untraceable!(SubpageId, WindowSizeData, PipelineId) untraceable!(SubpageId, WindowSizeData, PipelineId)
untraceable!(QuirksMode) untraceable!(QuirksMode)
untraceable!(Cx)
impl<'a> JSTraceable for &'a str { impl<'a> JSTraceable for &'a str {
#[inline] #[inline]

View file

@ -4,7 +4,6 @@
use dom::bindings::codegen::Bindings::WorkerGlobalScopeBinding::WorkerGlobalScopeMethods; use dom::bindings::codegen::Bindings::WorkerGlobalScopeBinding::WorkerGlobalScopeMethods;
use dom::bindings::error::{ErrorResult, Fallible, Syntax, Network, FailureUnknown}; use dom::bindings::error::{ErrorResult, Fallible, Syntax, Network, FailureUnknown};
use dom::bindings::trace::Untraceable;
use dom::bindings::global; use dom::bindings::global;
use dom::bindings::js::{MutNullableJS, JSRef, Temporary, OptionalSettable}; use dom::bindings::js::{MutNullableJS, JSRef, Temporary, OptionalSettable};
use dom::bindings::utils::{Reflectable, Reflector}; use dom::bindings::utils::{Reflectable, Reflector};
@ -35,9 +34,9 @@ pub enum WorkerGlobalScopeId {
#[must_root] #[must_root]
pub struct WorkerGlobalScope { pub struct WorkerGlobalScope {
pub eventtarget: EventTarget, pub eventtarget: EventTarget,
worker_url: Untraceable<Url>, worker_url: Url,
js_context: Untraceable<Rc<Cx>>, js_context: Rc<Cx>,
resource_task: Untraceable<ResourceTask>, resource_task: ResourceTask,
script_chan: ScriptChan, script_chan: ScriptChan,
location: MutNullableJS<WorkerLocation>, location: MutNullableJS<WorkerLocation>,
navigator: MutNullableJS<WorkerNavigator>, navigator: MutNullableJS<WorkerNavigator>,
@ -52,9 +51,9 @@ impl WorkerGlobalScope {
script_chan: ScriptChan) -> WorkerGlobalScope { script_chan: ScriptChan) -> WorkerGlobalScope {
WorkerGlobalScope { WorkerGlobalScope {
eventtarget: EventTarget::new_inherited(WorkerGlobalScopeTypeId(type_id)), eventtarget: EventTarget::new_inherited(WorkerGlobalScopeTypeId(type_id)),
worker_url: Untraceable::new(worker_url), worker_url: worker_url,
js_context: Untraceable::new(cx), js_context: cx,
resource_task: Untraceable::new(resource_task), resource_task: resource_task,
script_chan: script_chan, script_chan: script_chan,
location: Default::default(), location: Default::default(),
navigator: Default::default(), navigator: Default::default(),
@ -67,11 +66,11 @@ impl WorkerGlobalScope {
} }
pub fn resource_task<'a>(&'a self) -> &'a ResourceTask { pub fn resource_task<'a>(&'a self) -> &'a ResourceTask {
&*self.resource_task & self.resource_task
} }
pub fn get_url<'a>(&'a self) -> &'a Url { pub fn get_url<'a>(&'a self) -> &'a Url {
&*self.worker_url &self.worker_url
} }
pub fn script_chan<'a>(&'a self) -> &'a ScriptChan { pub fn script_chan<'a>(&'a self) -> &'a ScriptChan {
@ -86,7 +85,7 @@ impl<'a> WorkerGlobalScopeMethods for JSRef<'a, WorkerGlobalScope> {
fn Location(self) -> Temporary<WorkerLocation> { fn Location(self) -> Temporary<WorkerLocation> {
if self.location.get().is_none() { if self.location.get().is_none() {
let location = WorkerLocation::new(self, self.worker_url.deref().clone()); let location = WorkerLocation::new(self, self.worker_url.clone());
self.location.assign(Some(location)); self.location.assign(Some(location));
} }
self.location.get().unwrap() self.location.get().unwrap()
@ -95,7 +94,7 @@ impl<'a> WorkerGlobalScopeMethods for JSRef<'a, WorkerGlobalScope> {
fn ImportScripts(self, url_strings: Vec<DOMString>) -> ErrorResult { fn ImportScripts(self, url_strings: Vec<DOMString>) -> ErrorResult {
let mut urls = Vec::with_capacity(url_strings.len()); let mut urls = Vec::with_capacity(url_strings.len());
for url in url_strings.into_iter() { for url in url_strings.into_iter() {
let url = UrlParser::new().base_url(&*self.worker_url) let url = UrlParser::new().base_url(&self.worker_url)
.parse(url.as_slice()); .parse(url.as_slice());
match url { match url {
Ok(url) => urls.push(url), Ok(url) => urls.push(url),
@ -104,14 +103,14 @@ impl<'a> WorkerGlobalScopeMethods for JSRef<'a, WorkerGlobalScope> {
} }
for url in urls.into_iter() { for url in urls.into_iter() {
let (url, source) = match load_whole_resource(&*self.resource_task, url) { let (url, source) = match load_whole_resource(&self.resource_task, url) {
Err(_) => return Err(Network), Err(_) => return Err(Network),
Ok((metadata, bytes)) => { Ok((metadata, bytes)) => {
(metadata.final_url, String::from_utf8(bytes).unwrap()) (metadata.final_url, String::from_utf8(bytes).unwrap())
} }
}; };
match self.js_context.deref().evaluate_script( match self.js_context.evaluate_script(
self.reflector().get_jsobject(), source, url.serialize(), 1) { self.reflector().get_jsobject(), source, url.serialize(), 1) {
Ok(_) => (), Ok(_) => (),
Err(_) => { Err(_) => {