aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <release+servo@mozilla.com>2014-02-28 11:07:43 -0500
committerbors-servo <release+servo@mozilla.com>2014-02-28 11:07:43 -0500
commitdef5483579fad1e7f77ca96bd10fc5eb85e37740 (patch)
tree9caaf99a679ab9a1b4fb8fe56c4a9daba0557c4a
parent83ff59e5f14b3f8a69c27a6d43cb9e04f0f0eb5c (diff)
parentb3536d1d974f145d291991c22e382ad75a3089eb (diff)
downloadservo-def5483579fad1e7f77ca96bd10fc5eb85e37740.tar.gz
servo-def5483579fad1e7f77ca96bd10fc5eb85e37740.zip
auto merge of #1783 : saneyuki/servo/resize, r=jdm
#1715
-rw-r--r--src/components/script/script_task.rs21
-rw-r--r--src/test/html/test_UIEvent_resize.html26
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>