mirror of
https://github.com/servo/servo.git
synced 2025-07-01 04:23:39 +01:00
Auto merge of #21922 - Eijebong:storage, r=SimonSapin
Add support for StorageEvent.initstorageevent() Fixes #21874 <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/21922) <!-- Reviewable:end -->
This commit is contained in:
commit
fa94fc7146
3 changed files with 33 additions and 29 deletions
|
@ -2,6 +2,7 @@
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
* 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/. */
|
* 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::EventBinding::EventMethods;
|
||||||
use dom::bindings::codegen::Bindings::StorageEventBinding;
|
use dom::bindings::codegen::Bindings::StorageEventBinding;
|
||||||
use dom::bindings::codegen::Bindings::StorageEventBinding::StorageEventMethods;
|
use dom::bindings::codegen::Bindings::StorageEventBinding::StorageEventMethods;
|
||||||
|
@ -9,7 +10,7 @@ use dom::bindings::error::Fallible;
|
||||||
use dom::bindings::inheritance::Castable;
|
use dom::bindings::inheritance::Castable;
|
||||||
use dom::bindings::reflector::reflect_dom_object;
|
use dom::bindings::reflector::reflect_dom_object;
|
||||||
use dom::bindings::root::{DomRoot, MutNullableDom, RootedReference};
|
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::event::{Event, EventBubbles, EventCancelable};
|
||||||
use dom::storage::Storage;
|
use dom::storage::Storage;
|
||||||
use dom::window::Window;
|
use dom::window::Window;
|
||||||
|
@ -19,10 +20,10 @@ use servo_atoms::Atom;
|
||||||
#[dom_struct]
|
#[dom_struct]
|
||||||
pub struct StorageEvent {
|
pub struct StorageEvent {
|
||||||
event: Event,
|
event: Event,
|
||||||
key: Option<DOMString>,
|
key: DomRefCell<Option<DOMString>>,
|
||||||
old_value: Option<DOMString>,
|
old_value: DomRefCell<Option<DOMString>>,
|
||||||
new_value: Option<DOMString>,
|
new_value: DomRefCell<Option<DOMString>>,
|
||||||
url: DOMString,
|
url: DomRefCell<DOMString>,
|
||||||
storage_area: MutNullableDom<Storage>,
|
storage_area: MutNullableDom<Storage>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,10 +37,10 @@ impl StorageEvent {
|
||||||
) -> StorageEvent {
|
) -> StorageEvent {
|
||||||
StorageEvent {
|
StorageEvent {
|
||||||
event: Event::new_inherited(),
|
event: Event::new_inherited(),
|
||||||
key: key,
|
key: DomRefCell::new(key),
|
||||||
old_value: old_value,
|
old_value: DomRefCell::new(old_value),
|
||||||
new_value: new_value,
|
new_value: DomRefCell::new(new_value),
|
||||||
url: url,
|
url: DomRefCell::new(url),
|
||||||
storage_area: MutNullableDom::new(storage_area),
|
storage_area: MutNullableDom::new(storage_area),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -111,22 +112,22 @@ impl StorageEvent {
|
||||||
impl StorageEventMethods for StorageEvent {
|
impl StorageEventMethods for StorageEvent {
|
||||||
// https://html.spec.whatwg.org/multipage/#dom-storageevent-key
|
// https://html.spec.whatwg.org/multipage/#dom-storageevent-key
|
||||||
fn GetKey(&self) -> Option<DOMString> {
|
fn GetKey(&self) -> Option<DOMString> {
|
||||||
self.key.clone()
|
self.key.borrow().clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/#dom-storageevent-oldvalue
|
// https://html.spec.whatwg.org/multipage/#dom-storageevent-oldvalue
|
||||||
fn GetOldValue(&self) -> Option<DOMString> {
|
fn GetOldValue(&self) -> Option<DOMString> {
|
||||||
self.old_value.clone()
|
self.old_value.borrow().clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/#dom-storageevent-newvalue
|
// https://html.spec.whatwg.org/multipage/#dom-storageevent-newvalue
|
||||||
fn GetNewValue(&self) -> Option<DOMString> {
|
fn GetNewValue(&self) -> Option<DOMString> {
|
||||||
self.new_value.clone()
|
self.new_value.borrow().clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/#dom-storageevent-url
|
// https://html.spec.whatwg.org/multipage/#dom-storageevent-url
|
||||||
fn Url(&self) -> DOMString {
|
fn Url(&self) -> DOMString {
|
||||||
self.url.clone()
|
self.url.borrow().clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/#dom-storageevent-storagearea
|
// https://html.spec.whatwg.org/multipage/#dom-storageevent-storagearea
|
||||||
|
@ -138,4 +139,17 @@ impl StorageEventMethods for StorageEvent {
|
||||||
fn IsTrusted(&self) -> bool {
|
fn IsTrusted(&self) -> bool {
|
||||||
self.event.IsTrusted()
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,12 @@ interface StorageEvent : Event {
|
||||||
readonly attribute DOMString? newValue;
|
readonly attribute DOMString? newValue;
|
||||||
readonly attribute DOMString url;
|
readonly attribute DOMString url;
|
||||||
readonly attribute Storage? storageArea;
|
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 {
|
dictionary StorageEventInit : EventInit {
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue