From 5347e25d1a42ece2c5fddd5ee3c118adb6da3df2 Mon Sep 17 00:00:00 2001 From: Bastien Orivel Date: Thu, 11 Oct 2018 22:17:46 +0200 Subject: [PATCH] Add support for StorageEvent.initstorageevent() Fixes #21874 --- components/script/dom/storageevent.rs | 40 +++++++++++++------ .../script/dom/webidls/StorageEvent.webidl | 6 +++ .../event_initstorageevent.html.ini | 16 -------- 3 files changed, 33 insertions(+), 29 deletions(-) delete mode 100644 tests/wpt/metadata/webstorage/event_initstorageevent.html.ini 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, - old_value: Option, - new_value: Option, - url: DOMString, + key: DomRefCell>, + old_value: DomRefCell>, + new_value: DomRefCell>, + url: DomRefCell, storage_area: MutNullableDom, } @@ -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 { - self.key.clone() + self.key.borrow().clone() } // https://html.spec.whatwg.org/multipage/#dom-storageevent-oldvalue fn GetOldValue(&self) -> Option { - self.old_value.clone() + self.old_value.borrow().clone() } // https://html.spec.whatwg.org/multipage/#dom-storageevent-newvalue fn GetNewValue(&self) -> Option { - 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, oldValue: Option, newValue: + Option, 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); + } } diff --git a/components/script/dom/webidls/StorageEvent.webidl b/components/script/dom/webidls/StorageEvent.webidl index e838bc9480a..6ea1124b3f2 100644 --- a/components/script/dom/webidls/StorageEvent.webidl +++ b/components/script/dom/webidls/StorageEvent.webidl @@ -16,6 +16,12 @@ interface StorageEvent : Event { readonly attribute DOMString? newValue; readonly attribute DOMString url; readonly attribute Storage? storageArea; + + + void initStorageEvent(DOMString type, optional boolean bubbles = false, + optional boolean cancelable = false, optional DOMString? key = null, optional + DOMString? oldValue = null, optional DOMString? newValue = null, optional + USVString url = "", optional Storage? storageArea = null); }; dictionary StorageEventInit : EventInit { diff --git a/tests/wpt/metadata/webstorage/event_initstorageevent.html.ini b/tests/wpt/metadata/webstorage/event_initstorageevent.html.ini deleted file mode 100644 index cc195181686..00000000000 --- a/tests/wpt/metadata/webstorage/event_initstorageevent.html.ini +++ /dev/null @@ -1,16 +0,0 @@ -[event_initstorageevent.html] - [initStorageEvent with 8 undefined arguments] - expected: FAIL - - [initStorageEvent with 8 sensible arguments] - expected: FAIL - - [initStorageEvent with 8 null arguments] - expected: FAIL - - [initStorageEvent with 1 argument] - expected: FAIL - - [initStorageEvent with 0 arguments] - expected: FAIL -