aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/storageevent.rs
diff options
context:
space:
mode:
authorBastien Orivel <eijebong@bananium.fr>2018-10-11 22:17:46 +0200
committerBastien Orivel <eijebong@bananium.fr>2018-10-11 22:17:46 +0200
commit5347e25d1a42ece2c5fddd5ee3c118adb6da3df2 (patch)
treee7108c367c3aa91d64daba05fab8f70c5a4bfa5d /components/script/dom/storageevent.rs
parent61fe737885a63ba79b97d7acf211db5dd8704e4b (diff)
downloadservo-5347e25d1a42ece2c5fddd5ee3c118adb6da3df2.tar.gz
servo-5347e25d1a42ece2c5fddd5ee3c118adb6da3df2.zip
Add support for StorageEvent.initstorageevent()
Fixes #21874
Diffstat (limited to 'components/script/dom/storageevent.rs')
-rw-r--r--components/script/dom/storageevent.rs40
1 files changed, 27 insertions, 13 deletions
diff --git a/components/script/dom/storageevent.rs b/components/script/dom/storageevent.rs
index aee88e95c19..ac61e599dd9 100644
--- a/components/script/dom/storageevent.rs
+++ b/components/script/dom/storageevent.rs
@@ -2,6 +2,7 @@
* 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::cell::DomRefCell;
use dom::bindings::codegen::Bindings::EventBinding::EventMethods;
use dom::bindings::codegen::Bindings::StorageEventBinding;
use dom::bindings::codegen::Bindings::StorageEventBinding::StorageEventMethods;
@@ -9,7 +10,7 @@ use dom::bindings::error::Fallible;
use dom::bindings::inheritance::Castable;
use dom::bindings::reflector::reflect_dom_object;
use dom::bindings::root::{DomRoot, MutNullableDom, RootedReference};
-use dom::bindings::str::DOMString;
+use dom::bindings::str::{DOMString, USVString};
use dom::event::{Event, EventBubbles, EventCancelable};
use dom::storage::Storage;
use dom::window::Window;
@@ -19,10 +20,10 @@ use servo_atoms::Atom;
#[dom_struct]
pub struct StorageEvent {
event: Event,
- key: Option<DOMString>,
- old_value: Option<DOMString>,
- new_value: Option<DOMString>,
- url: DOMString,
+ key: DomRefCell<Option<DOMString>>,
+ old_value: DomRefCell<Option<DOMString>>,
+ new_value: DomRefCell<Option<DOMString>>,
+ url: DomRefCell<DOMString>,
storage_area: MutNullableDom<Storage>,
}
@@ -36,10 +37,10 @@ impl StorageEvent {
) -> StorageEvent {
StorageEvent {
event: Event::new_inherited(),
- key: key,
- old_value: old_value,
- new_value: new_value,
- url: url,
+ key: DomRefCell::new(key),
+ old_value: DomRefCell::new(old_value),
+ new_value: DomRefCell::new(new_value),
+ url: DomRefCell::new(url),
storage_area: MutNullableDom::new(storage_area),
}
}
@@ -111,22 +112,22 @@ impl StorageEvent {
impl StorageEventMethods for StorageEvent {
// https://html.spec.whatwg.org/multipage/#dom-storageevent-key
fn GetKey(&self) -> Option<DOMString> {
- self.key.clone()
+ self.key.borrow().clone()
}
// https://html.spec.whatwg.org/multipage/#dom-storageevent-oldvalue
fn GetOldValue(&self) -> Option<DOMString> {
- self.old_value.clone()
+ self.old_value.borrow().clone()
}
// https://html.spec.whatwg.org/multipage/#dom-storageevent-newvalue
fn GetNewValue(&self) -> Option<DOMString> {
- self.new_value.clone()
+ self.new_value.borrow().clone()
}
// https://html.spec.whatwg.org/multipage/#dom-storageevent-url
fn Url(&self) -> DOMString {
- self.url.clone()
+ self.url.borrow().clone()
}
// https://html.spec.whatwg.org/multipage/#dom-storageevent-storagearea
@@ -138,4 +139,17 @@ impl StorageEventMethods for StorageEvent {
fn IsTrusted(&self) -> bool {
self.event.IsTrusted()
}
+
+ // https://html.spec.whatwg.org/multipage/#dom-storageevent-initstorageevent
+ fn InitStorageEvent(&self, type_: DOMString, bubbles: bool, cancelable: bool, key:
+ Option<DOMString>, oldValue: Option<DOMString>, newValue:
+ Option<DOMString>, url: USVString, storageArea: Option<&Storage>)
+ {
+ self.event.init_event(Atom::from(type_), bool::from(bubbles), bool::from(cancelable));
+ *self.key.borrow_mut() = key;
+ *self.old_value.borrow_mut() = oldValue;
+ *self.new_value.borrow_mut() = newValue;
+ *self.url.borrow_mut() = DOMString::from_string(url.0);
+ self.storage_area.set(storageArea);
+ }
}