diff options
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/Cargo.toml | 36 | ||||
-rw-r--r-- | components/script/cors.rs | 2 | ||||
-rw-r--r-- | components/script/dom/bindings/error.rs | 1 | ||||
-rw-r--r-- | components/script/dom/bindings/js.rs | 2 | ||||
-rw-r--r-- | components/script/dom/bindings/str.rs | 1 | ||||
-rw-r--r-- | components/script/dom/bindings/utils.rs | 2 | ||||
-rw-r--r-- | components/script/dom/bindings/weakref.rs | 2 | ||||
-rw-r--r-- | components/script/dom/crypto.rs | 1 | ||||
-rw-r--r-- | components/script/dom/element.rs | 1 | ||||
-rw-r--r-- | components/script/dom/eventtarget.rs | 6 | ||||
-rw-r--r-- | components/script/dom/node.rs | 51 | ||||
-rw-r--r-- | components/script/dom/range.rs | 2 | ||||
-rw-r--r-- | components/script/dom/websocket.rs | 4 | ||||
-rw-r--r-- | components/script/dom/xmlhttprequest.rs | 3 | ||||
-rw-r--r-- | components/script/lib.rs | 3 | ||||
-rw-r--r-- | components/script/mem.rs | 2 | ||||
-rw-r--r-- | components/script/textinput.rs | 1 | ||||
-rw-r--r-- | components/script/timers.rs | 2 |
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)] |