aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2014-05-08 20:40:17 +0530
committerManish Goregaokar <manishsmail@gmail.com>2014-05-08 20:41:51 +0530
commit2f376a11048ac0c06e8e9880a18e2d16b992edee (patch)
treec7ed767e6627ca69458ab329567b8c44c06c240e
parent6cbcd98132389c7914c232ea8c25365a96df49d5 (diff)
downloadservo-2f376a11048ac0c06e8e9880a18e2d16b992edee.tar.gz
servo-2f376a11048ac0c06e8e9880a18e2d16b992edee.zip
Add ProgressEvent interface
-rw-r--r--src/components/script/dom/bindings/codegen/Bindings.conf1
-rw-r--r--src/components/script/dom/event.rs3
-rw-r--r--src/components/script/dom/progressevent.rs78
-rw-r--r--src/components/script/dom/webidls/ProgressEvent.webidl28
-rw-r--r--src/components/script/script.rs1
5 files changed, 110 insertions, 1 deletions
diff --git a/src/components/script/dom/bindings/codegen/Bindings.conf b/src/components/script/dom/bindings/codegen/Bindings.conf
index eb8778432d9..f7fa2bee6b2 100644
--- a/src/components/script/dom/bindings/codegen/Bindings.conf
+++ b/src/components/script/dom/bindings/codegen/Bindings.conf
@@ -43,6 +43,7 @@ DOMInterfaces = {
'NodeList': {},
'Performance': {},
'PerformanceTiming': {},
+'ProgressEvent': {},
'UIEvent': {},
'ValidityState': {},
'Window': {
diff --git a/src/components/script/dom/event.rs b/src/components/script/dom/event.rs
index 95fc7de3430..11eec04df39 100644
--- a/src/components/script/dom/event.rs
+++ b/src/components/script/dom/event.rs
@@ -37,7 +37,8 @@ pub enum EventTypeId {
HTMLEventTypeId,
UIEventTypeId,
MouseEventTypeId,
- KeyEventTypeId
+ KeyEventTypeId,
+ ProgressEventTypeId
}
#[deriving(Encodable)]
diff --git a/src/components/script/dom/progressevent.rs b/src/components/script/dom/progressevent.rs
new file mode 100644
index 00000000000..8f2710b49f4
--- /dev/null
+++ b/src/components/script/dom/progressevent.rs
@@ -0,0 +1,78 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use dom::bindings::codegen::BindingDeclarations::ProgressEventBinding;
+use dom::bindings::codegen::InheritTypes::ProgressEventDerived;
+use dom::bindings::error::Fallible;
+use dom::bindings::js::{JSRef, Temporary};
+use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
+use dom::event::{Event, ProgressEventTypeId};
+use dom::window::Window;
+use servo_util::str::DOMString;
+
+#[deriving(Encodable)]
+pub struct ProgressEvent {
+ event: Event,
+ length_computable: bool,
+ loaded: u64,
+ total: u64
+}
+
+impl ProgressEventDerived for Event {
+ fn is_progressevent(&self) -> bool {
+ self.type_id == ProgressEventTypeId
+ }
+}
+
+impl ProgressEvent {
+ pub fn new_inherited(length_computable: bool, loaded: u64, total: u64) -> ProgressEvent {
+ ProgressEvent {
+ event: Event::new_inherited(ProgressEventTypeId),
+ length_computable: length_computable,
+ loaded: loaded,
+ total: total
+ }
+ }
+ pub fn new(window: &JSRef<Window>, length_computable: bool,
+ loaded: u64, total: u64) -> Temporary<ProgressEvent> {
+ reflect_dom_object(~ProgressEvent::new_inherited(length_computable, loaded, total),
+ window,
+ ProgressEventBinding::Wrap)
+ }
+ pub fn Constructor(owner: &JSRef<Window>,
+ type_: DOMString,
+ init: &ProgressEventBinding::ProgressEventInit)
+ -> Fallible<Temporary<ProgressEvent>> {
+ let ev = ProgressEvent::new(owner, init.lengthComputable, init.loaded, init.total);
+ Ok(ev)
+ }
+}
+
+pub trait ProgressEventMethods {
+ fn LengthComputable(&self) -> bool;
+ fn Loaded(&self) -> u64;
+ fn Total(&self) -> u64;
+}
+
+impl<'a> ProgressEventMethods for JSRef<'a, ProgressEvent> {
+ fn LengthComputable(&self) -> bool {
+ self.length_computable
+ }
+ fn Loaded(&self) -> u64{
+ self.loaded
+ }
+ fn Total(&self) -> u64 {
+ self.total
+ }
+}
+
+impl Reflectable for ProgressEvent {
+ fn reflector<'a>(&'a self) -> &'a Reflector {
+ self.event.reflector()
+ }
+
+ fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
+ self.event.mut_reflector()
+ }
+} \ No newline at end of file
diff --git a/src/components/script/dom/webidls/ProgressEvent.webidl b/src/components/script/dom/webidls/ProgressEvent.webidl
new file mode 100644
index 00000000000..ff9854a3f0d
--- /dev/null
+++ b/src/components/script/dom/webidls/ProgressEvent.webidl
@@ -0,0 +1,28 @@
+/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * The origin of this IDL file is
+ * http://xhr.spec.whatwg.org/#interface-progressevent
+ *
+ * To the extent possible under law, the editor has waived all copyright
+ * and related or neighboring rights to this work. In addition, as of 1 May 2014,
+ * the editor has made this specification available under the Open Web Foundation
+ * Agreement Version 1.0, which is available at
+ * http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0.
+ */
+
+[Constructor(DOMString type, optional ProgressEventInit eventInitDict),
+ Exposed=Window,Worker]
+interface ProgressEvent : Event {
+ readonly attribute boolean lengthComputable;
+ readonly attribute unsigned long long loaded;
+ readonly attribute unsigned long long total;
+};
+
+dictionary ProgressEventInit : EventInit {
+ boolean lengthComputable = false;
+ unsigned long long loaded = 0;
+ unsigned long long total = 0;
+}; \ No newline at end of file
diff --git a/src/components/script/script.rs b/src/components/script/script.rs
index 5c8ed13d05d..fcc8ad0a51d 100644
--- a/src/components/script/script.rs
+++ b/src/components/script/script.rs
@@ -156,6 +156,7 @@ pub mod dom {
pub mod processinginstruction;
pub mod performance;
pub mod performancetiming;
+ pub mod progressevent;
pub mod uievent;
pub mod text;
pub mod validitystate;