diff options
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/document.rs | 40 | ||||
-rw-r--r-- | components/script/dom/htmltitleelement.rs | 4 | ||||
-rw-r--r-- | components/script/dom/window.rs | 5 |
3 files changed, 34 insertions, 15 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 999d759df79..a153d462772 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -213,6 +213,7 @@ pub trait DocumentHelpers<'a> { fn begin_focus_transaction(self); fn request_focus(self, elem: JSRef<Element>); fn commit_focus_transaction(self); + fn title_changed(self); fn send_title_to_compositor(self); fn dirty_all_nodes(self); fn handle_click_event(self, js_runtime: *mut JSRuntime, _button: uint, point: Point2D<f32>); @@ -222,6 +223,7 @@ pub trait DocumentHelpers<'a> { fn handle_mouse_move_event(self, js_runtime: *mut JSRuntime, point: Point2D<f32>, prev_mouse_over_targets: &mut Vec<JS<Node>>) -> bool; fn set_current_script(self, script: Option<JSRef<HTMLScriptElement>>); + fn trigger_mozbrowser_event(self, event_name: String, event_detail: Option<String>); } impl<'a> DocumentHelpers<'a> for JSRef<'a, Document> { @@ -453,6 +455,14 @@ impl<'a> DocumentHelpers<'a> for JSRef<'a, Document> { self.focused.assign(self.possibly_focused.get()); } + /// Handles any updates when the document's title has changed. + fn title_changed(self) { + // https://developer.mozilla.org/en-US/docs/Web/Events/mozbrowsertitlechange + self.trigger_mozbrowser_event("mozbrowsertitlechange".to_owned(), Some(self.Title())); + + self.send_title_to_compositor(); + } + /// Sends this document's title to the compositor. fn send_title_to_compositor(self) { let window = self.window().root(); @@ -672,6 +682,21 @@ impl<'a> DocumentHelpers<'a> for JSRef<'a, Document> { fn set_current_script(self, script: Option<JSRef<HTMLScriptElement>>) { self.current_script.assign(script); } + + fn trigger_mozbrowser_event(self, event_name: String, event_detail: Option<String>) { + if opts::experimental_enabled() { + let window = self.window.root(); + + if let Some((containing_pipeline_id, subpage_id)) = window.r().parent_info() { + let ConstellationChan(ref chan) = window.r().constellation_chan(); + let event = ConstellationMsg::MozBrowserEvent(containing_pipeline_id, + subpage_id, + event_name, + event_detail); + chan.send(event).unwrap(); + } + } + } } #[derive(PartialEq)] @@ -1438,19 +1463,8 @@ impl DocumentProgressHandler { event.r().fire(target); }); - if opts::experimental_enabled() { - // If this is a child frame, and experimental mode is enabled, - // send the mozbrowserloadend event. For details, see - // https://developer.mozilla.org/en-US/docs/Web/Events/mozbrowserloadend - if let Some((containing_pipeline_id, subpage_id)) = window_ref.parent_info() { - let ConstellationChan(ref chan) = window_ref.constellation_chan(); - let event = ConstellationMsg::MozBrowserEvent(containing_pipeline_id, - subpage_id, - "mozbrowserloadend".to_owned(), - None); - chan.send(event).unwrap(); - } - } + // https://developer.mozilla.org/en-US/docs/Web/Events/mozbrowserloadend + document.r().trigger_mozbrowser_event("mozbrowserloadend".to_owned(), None); window_ref.reflow(ReflowGoal::ForDisplay, ReflowQueryType::NoQuery, diff --git a/components/script/dom/htmltitleelement.rs b/components/script/dom/htmltitleelement.rs index 71352d742db..85a1390bffa 100644 --- a/components/script/dom/htmltitleelement.rs +++ b/components/script/dom/htmltitleelement.rs @@ -78,7 +78,7 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLTitleElement> { let node: JSRef<Node> = NodeCast::from_ref(*self); if node.is_in_doc() { let document = node.owner_doc().root(); - document.r().send_title_to_compositor(); + document.r().title_changed(); } } @@ -86,7 +86,7 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLTitleElement> { let node: JSRef<Node> = NodeCast::from_ref(*self); if is_in_doc { let document = node.owner_doc().root(); - document.r().send_title_to_compositor() + document.r().title_changed(); } } } diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 8a915cbc998..bb7a5563d0f 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -761,6 +761,11 @@ impl<'a> WindowHelpers for JSRef<'a, Window> { fn thaw(self) { self.timers.resume(); + + // Push the document title to the compositor since we are + // activating this document due to a navigation. + let document = self.Document().root(); + document.r().title_changed(); } fn freeze(self) { |