diff options
author | Paul Rouget <me@paulrouget.com> | 2015-11-12 12:10:22 +0100 |
---|---|---|
committer | Paul Rouget <me@paulrouget.com> | 2015-11-14 09:59:50 +0100 |
commit | 5263a4c4c9bef5e53e13042ba764e75bdae95d3f (patch) | |
tree | 11ec7efff6af773ce3ba041148772d6d63a3b3c1 /components/script/dom/htmliframeelement.rs | |
parent | 27e104aa1a62978bf2dd8b6a65963a2466af936a (diff) | |
download | servo-5263a4c4c9bef5e53e13042ba764e75bdae95d3f.tar.gz servo-5263a4c4c9bef5e53e13042ba764e75bdae95d3f.zip |
[Browser API] implement mozbrowsericonchange event
Diffstat (limited to 'components/script/dom/htmliframeelement.rs')
-rw-r--r-- | components/script/dom/htmliframeelement.rs | 45 |
1 files changed, 41 insertions, 4 deletions
diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs index 2281c9e371f..edb45fbb14b 100644 --- a/components/script/dom/htmliframeelement.rs +++ b/components/script/dom/htmliframeelement.rs @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use dom::attr::{Attr, AttrValue}; +use dom::bindings::codegen::Bindings::BrowserElementBinding::BrowserElementIconChangeEventDetail; use dom::bindings::codegen::Bindings::HTMLIFrameElementBinding; use dom::bindings::codegen::Bindings::HTMLIFrameElementBinding::HTMLIFrameElementMethods; use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; @@ -21,8 +22,8 @@ use dom::node::{Node, window_from_node}; use dom::urlhelper::UrlHelper; use dom::virtualmethods::VirtualMethods; use dom::window::Window; -use js::jsapi::{JSAutoCompartment, JSAutoRequest, RootedValue}; -use js::jsval::UndefinedValue; +use js::jsapi::{JSAutoCompartment, JSAutoRequest, RootedValue, JSContext, MutableHandleValue}; +use js::jsval::{UndefinedValue, NullValue}; use msg::constellation_msg::IFrameSandboxState::{IFrameSandboxed, IFrameUnsandboxed}; use msg::constellation_msg::Msg as ConstellationMsg; use msg::constellation_msg::{ConstellationChan, IframeLoadInfo, MozBrowserEvent}; @@ -143,9 +144,10 @@ impl HTMLIFrameElement { let _ar = JSAutoRequest::new(cx); let _ac = JSAutoCompartment::new(cx, window.reflector().get_jsobject().get()); let mut detail = RootedValue::new(cx, UndefinedValue()); - event.detail().to_jsval(cx, detail.handle_mut()); + let event_name = DOMString::from(event.name().to_owned()); + self.build_mozbrowser_event_detail(event, cx, detail.handle_mut()); CustomEvent::new(GlobalRef::Window(window.r()), - DOMString::from(event.name()), + event_name, true, true, detail.handle()) @@ -225,6 +227,41 @@ impl HTMLIFrameElementLayoutMethods for LayoutJS<HTMLIFrameElement> { } } +pub trait MozBrowserEventDetailBuilder { + #[allow(unsafe_code)] + unsafe fn build_mozbrowser_event_detail(&self, + event: MozBrowserEvent, + cx: *mut JSContext, + rval: MutableHandleValue); +} + +impl MozBrowserEventDetailBuilder for HTMLIFrameElement { + #[allow(unsafe_code)] + unsafe fn build_mozbrowser_event_detail(&self, + event: MozBrowserEvent, + cx: *mut JSContext, + rval: MutableHandleValue) { + match event { + MozBrowserEvent::AsyncScroll | MozBrowserEvent::Close | MozBrowserEvent::ContextMenu | + MozBrowserEvent::Error | MozBrowserEvent::LoadEnd | MozBrowserEvent::LoadStart | + MozBrowserEvent::OpenWindow | MozBrowserEvent::SecurityChange | MozBrowserEvent::OpenSearch | + MozBrowserEvent::ShowModalPrompt | MozBrowserEvent::UsernameAndPasswordRequired => { + rval.set(NullValue()); + } + MozBrowserEvent::LocationChange(ref string) | MozBrowserEvent::TitleChange(ref string) => { + string.to_jsval(cx, rval); + } + MozBrowserEvent::IconChange(rel, href, sizes) => { + BrowserElementIconChangeEventDetail { + rel: Some(DOMString::from(rel)), + href: Some(DOMString::from(href)), + sizes: Some(DOMString::from(sizes)), + }.to_jsval(cx, rval); + } + } + } +} + pub fn Navigate(iframe: &HTMLIFrameElement, direction: NavigationDirection) -> Fallible<()> { if iframe.Mozbrowser() { if iframe.upcast::<Node>().is_in_doc() { |