aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
Diffstat (limited to 'components/script')
-rw-r--r--components/script/Cargo.toml36
-rw-r--r--components/script/cors.rs2
-rw-r--r--components/script/dom/bindings/error.rs1
-rw-r--r--components/script/dom/bindings/js.rs2
-rw-r--r--components/script/dom/bindings/str.rs1
-rw-r--r--components/script/dom/bindings/utils.rs2
-rw-r--r--components/script/dom/bindings/weakref.rs2
-rw-r--r--components/script/dom/crypto.rs1
-rw-r--r--components/script/dom/element.rs1
-rw-r--r--components/script/dom/eventtarget.rs6
-rw-r--r--components/script/dom/node.rs51
-rw-r--r--components/script/dom/range.rs2
-rw-r--r--components/script/dom/websocket.rs4
-rw-r--r--components/script/dom/xmlhttprequest.rs3
-rw-r--r--components/script/lib.rs3
-rw-r--r--components/script/mem.rs2
-rw-r--r--components/script/textinput.rs1
-rw-r--r--components/script/timers.rs2
18 files changed, 78 insertions, 44 deletions
diff --git a/components/script/Cargo.toml b/components/script/Cargo.toml
index 67cfdedae6a..b06ae8e8e48 100644
--- a/components/script/Cargo.toml
+++ b/components/script/Cargo.toml
@@ -64,27 +64,29 @@ path = "../gfx_traits"
[dependencies]
app_units = {version = "0.2", features = ["plugins"]}
-cssparser = { version = "0.5", features = [ "serde-serialization" ] }
-log = "0.3"
+bitflags = "0.3"
+caseless = "0.1.0"
+cssparser = {version = "0.5.2", features = ["heap_size", "serde-serialization"]}
encoding = "0.2"
+euclid = {version = "0.6.1", features = ["plugins"]}
fnv = "1.0"
+heapsize = "0.2.5"
+heapsize_plugin = "0.1.2"
+html5ever = {version = "0.4.2", features = ["heap_size", "unstable"]}
hyper = { version = "0.7", features = [ "serde-serialization" ] }
-time = "0.1.12"
-bitflags = "0.3"
-rustc-serialize = "0.3"
+image = "0.5.0"
libc = "0.2"
-unicase = "1.0"
+log = "0.3"
num = "0.1.24"
-websocket = "0.14.0"
-uuid = "0.1.16"
-smallvec = "0.1"
-html5ever = { version = "0.4", features = ["unstable"] }
-selectors = "0.4.1"
-string_cache = { version = "0.2", features = ["unstable"] }
-euclid = {version = "0.6.1", features = ["plugins"]}
rand = "0.3"
-serde = "0.6"
-caseless = "0.1.0"
-image = "0.5.0"
-url = "0.5.4"
ref_slice = "0.1.0"
+rustc-serialize = "0.3"
+selectors = {version = "0.4.1", features = ["heap_size"]}
+serde = "0.6"
+smallvec = "0.1"
+string_cache = {version = "0.2.7", features = ["heap_size", "unstable"]}
+time = "0.1.12"
+unicase = "1.0"
+url = {version = "0.5.4", features = ["heap_size"]}
+uuid = "0.1.16"
+websocket = "0.14.0"
diff --git a/components/script/cors.rs b/components/script/cors.rs
index 7bf5127a22e..e64583e0a58 100644
--- a/components/script/cors.rs
+++ b/components/script/cors.rs
@@ -27,7 +27,6 @@ use std::sync::{Arc, Mutex};
use time::{self, Timespec, now};
use unicase::UniCase;
use url::{SchemeData, Url};
-use util::mem::HeapSizeOf;
use util::thread::spawn_named;
/// Interface for network listeners concerned with CORS checks. Proper network requests
@@ -41,6 +40,7 @@ pub struct CORSRequest {
pub origin: Url,
pub destination: Url,
pub mode: RequestMode,
+ #[ignore_heap_size_of = "Defined in hyper"]
pub method: Method,
#[ignore_heap_size_of = "Defined in hyper"]
pub headers: Headers,
diff --git a/components/script/dom/bindings/error.rs b/components/script/dom/bindings/error.rs
index 95f22e693e5..dafd14f58c9 100644
--- a/components/script/dom/bindings/error.rs
+++ b/components/script/dom/bindings/error.rs
@@ -14,7 +14,6 @@ use js::jsapi::{JSContext, JSObject, RootedValue};
use js::jsapi::{JS_IsExceptionPending, JS_ReportPendingException, JS_SetPendingException};
use js::jsapi::{JS_RestoreFrameChain, JS_SaveFrameChain};
use js::jsval::UndefinedValue;
-use util::mem::HeapSizeOf;
/// DOM exceptions that can be thrown by a native DOM method.
#[derive(Debug, Clone, HeapSizeOf)]
diff --git a/components/script/dom/bindings/js.rs b/components/script/dom/bindings/js.rs
index 6abf5f9b4e5..37d673f3c26 100644
--- a/components/script/dom/bindings/js.rs
+++ b/components/script/dom/bindings/js.rs
@@ -30,6 +30,7 @@ use dom::bindings::reflector::{Reflectable, Reflector};
use dom::bindings::trace::JSTraceable;
use dom::bindings::trace::trace_reflector;
use dom::node::Node;
+use heapsize::HeapSizeOf;
use js::jsapi::{Heap, JSObject, JSTracer};
use js::jsval::JSVal;
use layout_interface::TrustedNodeAddress;
@@ -40,7 +41,6 @@ use std::hash::{Hash, Hasher};
use std::mem;
use std::ops::Deref;
use std::ptr;
-use util::mem::HeapSizeOf;
use util::thread_state;
/// A traced reference to a DOM object
diff --git a/components/script/dom/bindings/str.rs b/components/script/dom/bindings/str.rs
index df69bc77fd0..26c8568eadf 100644
--- a/components/script/dom/bindings/str.rs
+++ b/components/script/dom/bindings/str.rs
@@ -10,7 +10,6 @@ use std::hash::{Hash, Hasher};
use std::ops;
use std::str;
use std::str::FromStr;
-use util::mem::HeapSizeOf;
use util::str::is_token;
/// Encapsulates the IDL `ByteString` type.
diff --git a/components/script/dom/bindings/utils.rs b/components/script/dom/bindings/utils.rs
index d34d8f3f9f4..83e7a2e4cb2 100644
--- a/components/script/dom/bindings/utils.rs
+++ b/components/script/dom/bindings/utils.rs
@@ -13,6 +13,7 @@ use dom::bindings::inheritance::TopTypeId;
use dom::bindings::trace::trace_object;
use dom::browsingcontext;
use dom::window;
+use heapsize::HeapSizeOf;
use js;
use js::error::throw_type_error;
use js::glue::{CallJitGetterOp, CallJitMethodOp, CallJitSetterOp, IsWrapper};
@@ -36,7 +37,6 @@ use libc::{self, c_uint};
use std::default::Default;
use std::ffi::CString;
use std::ptr;
-use util::mem::HeapSizeOf;
use util::non_geckolib::jsstring_to_str;
/// Proxy handler for a WindowProxy.
diff --git a/components/script/dom/bindings/weakref.rs b/components/script/dom/bindings/weakref.rs
index e311d4a40bb..99adb8a0c02 100644
--- a/components/script/dom/bindings/weakref.rs
+++ b/components/script/dom/bindings/weakref.rs
@@ -15,6 +15,7 @@ use core::nonzero::NonZero;
use dom::bindings::js::Root;
use dom::bindings::reflector::Reflectable;
use dom::bindings::trace::JSTraceable;
+use heapsize::HeapSizeOf;
use js::jsapi::{JSTracer, JS_GetReservedSlot, JS_SetReservedSlot};
use js::jsval::PrivateValue;
use libc::c_void;
@@ -22,7 +23,6 @@ use std::cell::{Cell, UnsafeCell};
use std::iter::Iterator;
use std::mem;
use std::ops::{Deref, DerefMut, Drop};
-use util::mem::HeapSizeOf;
/// The index of the slot wherein a pointer to the weak holder cell is
/// stored for weak-referenceable bindings. We use slot 1 for holding it,
diff --git a/components/script/dom/crypto.rs b/components/script/dom/crypto.rs
index b8c595f3aa4..6e0351d37ee 100644
--- a/components/script/dom/crypto.rs
+++ b/components/script/dom/crypto.rs
@@ -20,6 +20,7 @@ no_jsmanaged_fields!(OsRng);
#[dom_struct]
pub struct Crypto {
reflector_: Reflector,
+ #[ignore_heap_size_of = "Defined in rand"]
rng: DOMRefCell<OsRng>,
}
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index d093380b008..3cdf3f6ba43 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -84,7 +84,6 @@ use style::properties::{PropertyDeclaration, PropertyDeclarationBlock, parse_sty
use style::selector_impl::{NonTSPseudoClass, ServoSelectorImpl};
use style::values::CSSFloat;
use style::values::specified::{self, CSSColor, CSSRGBA, LengthOrPercentage};
-use util::mem::HeapSizeOf;
use util::str::{DOMString, LengthOrPercentageOrAuto};
// TODO: Update focus state when the top-level browsing context gains or loses system focus,
diff --git a/components/script/dom/eventtarget.rs b/components/script/dom/eventtarget.rs
index 48682ec2211..91afac1bf1c 100644
--- a/components/script/dom/eventtarget.rs
+++ b/components/script/dom/eventtarget.rs
@@ -21,6 +21,7 @@ use dom::eventdispatcher::dispatch_event;
use dom::virtualmethods::VirtualMethods;
use dom::window::Window;
use fnv::FnvHasher;
+use heapsize::HeapSizeOf;
use js::jsapi::{CompileFunction, JS_GetFunctionObject, RootedValue};
use js::jsapi::{HandleObject, JSContext, RootedFunction};
use js::jsapi::{JSAutoCompartment, JSAutoRequest};
@@ -28,14 +29,13 @@ use js::rust::{AutoObjectVectorWrapper, CompileOptionsWrapper};
use libc::{c_char, size_t};
use std::collections::HashMap;
use std::collections::hash_map::Entry::{Occupied, Vacant};
-use std::collections::hash_state::DefaultState;
use std::default::Default;
use std::ffi::CString;
+use std::hash::BuildHasherDefault;
use std::rc::Rc;
use std::{intrinsics, ptr};
use string_cache::Atom;
use url::Url;
-use util::mem::HeapSizeOf;
use util::str::DOMString;
#[derive(PartialEq, Clone, JSTraceable)]
@@ -161,7 +161,7 @@ pub struct EventListenerEntry {
#[dom_struct]
pub struct EventTarget {
reflector_: Reflector,
- handlers: DOMRefCell<HashMap<Atom, Vec<EventListenerEntry>, DefaultState<FnvHasher>>>,
+ handlers: DOMRefCell<HashMap<Atom, Vec<EventListenerEntry>, BuildHasherDefault<FnvHasher>>>,
}
impl EventTarget {
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index 9c4e52b495d..a50aad1a78e 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -9,7 +9,6 @@ use core::nonzero::NonZero;
use devtools_traits::NodeInfo;
use document_loader::DocumentLoader;
use dom::attr::Attr;
-use dom::bindings::cell::DOMRefCell;
use dom::bindings::codegen::Bindings::AttrBinding::AttrMethods;
use dom::bindings::codegen::Bindings::CharacterDataBinding::CharacterDataMethods;
use dom::bindings::codegen::Bindings::DocumentBinding::DocumentMethods;
@@ -47,6 +46,7 @@ use dom::text::Text;
use dom::virtualmethods::{VirtualMethods, vtable_for};
use dom::window::Window;
use euclid::rect::Rect;
+use heapsize::{HeapSizeOf, heap_size_of};
use js::jsapi::{JSContext, JSObject, JSRuntime};
use layout_interface::{LayoutChan, Msg};
use libc::{self, c_void, uintptr_t};
@@ -57,7 +57,7 @@ use selectors::matching::matches;
use selectors::parser::Selector;
use selectors::parser::parse_author_origin_selector_list_from_str;
use std::borrow::ToOwned;
-use std::cell::Cell;
+use std::cell::{Cell, UnsafeCell};
use std::cmp::max;
use std::default::Default;
use std::iter::{self, FilterMap, Peekable};
@@ -120,7 +120,7 @@ pub struct Node {
/// node is finalized.
style_and_layout_data: Cell<Option<OpaqueStyleAndLayoutData>>,
- unique_id: DOMRefCell<Option<Box<Uuid>>>,
+ unique_id: UniqueId,
}
bitflags! {
@@ -755,11 +755,7 @@ impl Node {
}
pub fn get_unique_id(&self) -> String {
- if self.unique_id.borrow().is_none() {
- let mut unique_id = self.unique_id.borrow_mut();
- *unique_id = Some(Box::new(Uuid::new_v4()));
- }
- self.unique_id.borrow().as_ref().unwrap().to_simple_string()
+ self.unique_id.borrow().to_simple_string()
}
pub fn summarize(&self) -> NodeInfo {
@@ -1266,7 +1262,7 @@ impl Node {
style_and_layout_data: Cell::new(None),
- unique_id: DOMRefCell::new(None),
+ unique_id: UniqueId::new(),
}
}
@@ -2438,3 +2434,40 @@ impl<'a> UnbindContext<'a> {
index
}
}
+
+/// A node's unique ID, for devtools.
+struct UniqueId {
+ cell: UnsafeCell<Option<Box<Uuid>>>,
+}
+
+no_jsmanaged_fields!(UniqueId);
+
+impl HeapSizeOf for UniqueId {
+ #[allow(unsafe_code)]
+ fn heap_size_of_children(&self) -> usize {
+ if let &Some(ref uuid) = unsafe { &*self.cell.get() } {
+ heap_size_of(&** uuid as *const Uuid as *const c_void)
+ } else {
+ 0
+ }
+ }
+}
+
+impl UniqueId {
+ /// Create a new `UniqueId` value. The underlying `Uuid` is lazily created.
+ fn new() -> UniqueId {
+ UniqueId { cell: UnsafeCell::new(None) }
+ }
+
+ /// The Uuid of that unique ID.
+ #[allow(unsafe_code)]
+ fn borrow(&self) -> &Uuid {
+ unsafe {
+ let ptr = self.cell.get();
+ if (*ptr).is_none() {
+ *ptr = Some(box Uuid::new_v4());
+ }
+ &(&*ptr).as_ref().unwrap()
+ }
+ }
+}
diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs
index 03db51ba0d8..6807a7a2d3c 100644
--- a/components/script/dom/range.rs
+++ b/components/script/dom/range.rs
@@ -23,10 +23,10 @@ use dom::document::Document;
use dom::documentfragment::DocumentFragment;
use dom::node::{Node, UnbindContext};
use dom::text::Text;
+use heapsize::HeapSizeOf;
use js::jsapi::JSTracer;
use std::cell::{Cell, UnsafeCell};
use std::cmp::{Ord, Ordering, PartialEq, PartialOrd};
-use util::mem::HeapSizeOf;
use util::str::DOMString;
#[dom_struct]
diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs
index c9658a1b5c2..c8544698ecb 100644
--- a/components/script/dom/websocket.rs
+++ b/components/script/dom/websocket.rs
@@ -8,7 +8,6 @@ use dom::bindings::codegen::Bindings::EventHandlerBinding::EventHandlerNonNull;
use dom::bindings::codegen::Bindings::LocationBinding::LocationMethods;
use dom::bindings::codegen::Bindings::WebSocketBinding;
use dom::bindings::codegen::Bindings::WebSocketBinding::{BinaryType, WebSocketMethods};
-use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods;
use dom::bindings::codegen::UnionTypes::StringOrStringSequence::{self, eString, eStringSequence};
use dom::bindings::conversions::{ToJSValConvertible};
use dom::bindings::error::{Error, Fallible};
@@ -24,6 +23,7 @@ use dom::closeevent::CloseEvent;
use dom::event::{Event, EventBubbles, EventCancelable};
use dom::eventtarget::EventTarget;
use dom::messageevent::MessageEvent;
+use dom::urlhelper::UrlHelper;
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
use js::jsapi::{JSAutoCompartment, JSAutoRequest, RootedValue};
use js::jsapi::{JS_GetArrayBufferData, JS_NewArrayBuffer};
@@ -233,7 +233,7 @@ impl WebSocket {
}
// Step 6: Origin.
- let origin = global.as_window().Location().Origin().0;
+ let origin = UrlHelper::Origin(&global.get_url()).0;
// Step 7.
let ws = WebSocket::new(global, resource_url.clone());
diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs
index 74051dd6692..93e46d14510 100644
--- a/components/script/dom/xmlhttprequest.rs
+++ b/components/script/dom/xmlhttprequest.rs
@@ -62,7 +62,6 @@ use string_cache::Atom;
use time;
use timers::{ScheduledCallback, TimerHandle};
use url::Url;
-use util::mem::HeapSizeOf;
use util::str::DOMString;
pub type SendParam = BlobOrStringOrURLSearchParams;
@@ -127,11 +126,13 @@ pub struct XMLHttpRequest {
response_xml: MutNullableHeap<JS<Document>>,
#[ignore_heap_size_of = "Defined in hyper"]
response_headers: DOMRefCell<Headers>,
+ #[ignore_heap_size_of = "Defined in hyper"]
override_mime_type: DOMRefCell<Option<Mime>>,
#[ignore_heap_size_of = "Defined in rust-encoding"]
override_charset: DOMRefCell<Option<EncodingRef>>,
// Associated concepts
+ #[ignore_heap_size_of = "Defined in hyper"]
request_method: DOMRefCell<Method>,
request_url: DOMRefCell<Option<Url>>,
#[ignore_heap_size_of = "Defined in hyper"]
diff --git a/components/script/lib.rs b/components/script/lib.rs
index 6365c03c5b7..dfd11938075 100644
--- a/components/script/lib.rs
+++ b/components/script/lib.rs
@@ -12,7 +12,6 @@
#![feature(custom_attribute)]
#![feature(custom_derive)]
#![feature(fnbox)]
-#![feature(hashmap_hasher)]
#![feature(mpsc_select)]
#![feature(nonzero)]
#![feature(on_unimplemented)]
@@ -26,6 +25,7 @@
#![doc = "The script crate contains all matters DOM."]
+#![plugin(heapsize_plugin)]
#![plugin(plugins)]
extern crate angle;
@@ -42,6 +42,7 @@ extern crate encoding;
extern crate euclid;
extern crate fnv;
extern crate gfx_traits;
+extern crate heapsize;
extern crate html5ever;
extern crate hyper;
extern crate image;
diff --git a/components/script/mem.rs b/components/script/mem.rs
index 113f03b8396..e276b1a5c3d 100644
--- a/components/script/mem.rs
+++ b/components/script/mem.rs
@@ -6,8 +6,8 @@
use dom::bindings::conversions::get_dom_class;
use dom::bindings::reflector::Reflectable;
+use heapsize::{HeapSizeOf, heap_size_of};
use libc::c_void;
-use util::mem::{HeapSizeOf, heap_size_of};
// This is equivalent to measuring a Box<T>, except that DOM objects lose their
// associated box in order to stash their pointers in a reserved slot of their
diff --git a/components/script/textinput.rs b/components/script/textinput.rs
index 5d533f0e419..02fb79e04a8 100644
--- a/components/script/textinput.rs
+++ b/components/script/textinput.rs
@@ -12,7 +12,6 @@ use std::borrow::ToOwned;
use std::cmp::{max, min};
use std::default::Default;
use std::usize;
-use util::mem::HeapSizeOf;
use util::str::DOMString;
#[derive(Copy, Clone, PartialEq)]
diff --git a/components/script/timers.rs b/components/script/timers.rs
index 7f608f98f46..1c1157d30ae 100644
--- a/components/script/timers.rs
+++ b/components/script/timers.rs
@@ -9,6 +9,7 @@ use dom::bindings::reflector::Reflectable;
use dom::bindings::trace::JSTraceable;
use dom::window::ScriptHelpers;
use euclid::length::Length;
+use heapsize::HeapSizeOf;
use ipc_channel::ipc::IpcSender;
use js::jsapi::{HandleValue, Heap, RootedValue};
use js::jsval::{JSVal, UndefinedValue};
@@ -19,7 +20,6 @@ use std::cell::Cell;
use std::cmp::{self, Ord, Ordering};
use std::default::Default;
use std::rc::Rc;
-use util::mem::HeapSizeOf;
use util::str::DOMString;
#[derive(JSTraceable, PartialEq, Eq, Copy, Clone, HeapSizeOf, Hash, PartialOrd, Ord, Debug)]