aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/htmliframeelement.rs
diff options
context:
space:
mode:
authorPaul Rouget <me@paulrouget.com>2015-11-12 12:10:22 +0100
committerPaul Rouget <me@paulrouget.com>2015-11-14 09:59:50 +0100
commit5263a4c4c9bef5e53e13042ba764e75bdae95d3f (patch)
tree11ec7efff6af773ce3ba041148772d6d63a3b3c1 /components/script/dom/htmliframeelement.rs
parent27e104aa1a62978bf2dd8b6a65963a2466af936a (diff)
downloadservo-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.rs45
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() {