diff options
author | bors-servo <release+servo@mozilla.com> | 2014-02-28 11:07:43 -0500 |
---|---|---|
committer | bors-servo <release+servo@mozilla.com> | 2014-02-28 11:07:43 -0500 |
commit | def5483579fad1e7f77ca96bd10fc5eb85e37740 (patch) | |
tree | 9caaf99a679ab9a1b4fb8fe56c4a9daba0557c4a /src | |
parent | 83ff59e5f14b3f8a69c27a6d43cb9e04f0f0eb5c (diff) | |
parent | b3536d1d974f145d291991c22e382ad75a3089eb (diff) | |
download | servo-def5483579fad1e7f77ca96bd10fc5eb85e37740.tar.gz servo-def5483579fad1e7f77ca96bd10fc5eb85e37740.zip |
auto merge of #1783 : saneyuki/servo/resize, r=jdm
#1715
Diffstat (limited to 'src')
-rw-r--r-- | src/components/script/script_task.rs | 21 | ||||
-rw-r--r-- | src/test/html/test_UIEvent_resize.html | 26 |
2 files changed, 46 insertions, 1 deletions
diff --git a/src/components/script/script_task.rs b/src/components/script/script_task.rs index a4fc38f1d28..61aa7074eb5 100644 --- a/src/components/script/script_task.rs +++ b/src/components/script/script_task.rs @@ -6,16 +6,18 @@ //! and layout tasks. use dom::bindings::codegen::RegisterBindings; -use dom::bindings::codegen::InheritTypes::{EventTargetCast, NodeCast, ElementCast}; +use dom::bindings::codegen::InheritTypes::{EventTargetCast, NodeCast, ElementCast, EventCast}; use dom::bindings::js::JS; use dom::bindings::utils::{Reflectable, GlobalStaticData, with_gc_enabled}; use dom::document::{Document, HTMLDocument}; use dom::element::Element; use dom::event::{Event_, ResizeEvent, ReflowEvent, ClickEvent, MouseDownEvent, MouseMoveEvent, MouseUpEvent}; use dom::event::Event; +use dom::uievent::UIEvent; use dom::eventtarget::EventTarget; use dom::node::{Node, NodeHelpers}; use dom::window::{TimerData, TimerHandle, Window}; +use dom::windowproxy::WindowProxy; use html::hubbub_html_parser::HtmlParserResult; use html::hubbub_html_parser::{HtmlDiscoveredStyle, HtmlDiscoveredIFrame, HtmlDiscoveredScript}; use html::hubbub_html_parser; @@ -863,6 +865,23 @@ impl ScriptTask { Some(node) => self.scroll_fragment_point(pipeline_id, page, node), None => {} } + + match page.frame { + Some(ref frame) => { + // http://dev.w3.org/csswg/cssom-view/#resizing-viewports + // https://dvcs.w3.org/hg/dom3events/raw-file/tip/html/DOM3-Events.html#event-type-resize + let window_proxy: JS<WindowProxy> = WindowProxy::new(frame.window.clone()); + let mut uievent = UIEvent::new(&frame.window); + uievent.get_mut().InitUIEvent(~"resize", false, false, Some(window_proxy), 0i32); + let event: &mut JS<Event> = &mut EventCast::from(&uievent); + + // FIXME: this event should be dispatch on WindowProxy. See #1715 + let mut wintarget: JS<EventTarget> = EventTargetCast::from(&frame.window); + let winclone = wintarget.clone(); + wintarget.get_mut().dispatch_event_with_target(&winclone, None, event); + } + None =>() + } } // FIXME(pcwalton): This reflows the entire document and is not incremental-y. diff --git a/src/test/html/test_UIEvent_resize.html b/src/test/html/test_UIEvent_resize.html new file mode 100644 index 00000000000..08a4532f340 --- /dev/null +++ b/src/test/html/test_UIEvent_resize.html @@ -0,0 +1,26 @@ +<html> +<head> + <title></title> + <script src="./content/harness.js"></script> +</head> +<body> +<script> +window.addEventListener("resize", function (aEvent) { + // https://dvcs.w3.org/hg/dom3events/raw-file/tip/html/DOM3-Events.html#event-type-resize + is_a(aEvent, UIEvent, "event should be UIEvent."); + is(aEvent.bubbles, false, "Bubbles should be No."); + is(aEvent.cancelable, false, "Cancelable should be No."); + + // FIXME: + // Target should be defaultView (WindowProxy) by D3E + // But we set Window instead of WindowProxy now. See: #1715 + is(aEvent.target, window, "Target should be defaultView."); + is_a(aEvent.target, Window, "UIEvent.target should be instance of Window."); + + //is(aEvent.view, document.defaultView, "UIEvent.view should be defaultView."); + is_a(aEvent.view, WindowProxy, "UIEvent.view should be instance of WindowProxy."); + is(aEvent.detail, 0, "UIEvent.view should be 0."); +}, false); +</script> +</body> +</html> |