aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/document.rs40
-rw-r--r--components/script/dom/htmltitleelement.rs4
-rw-r--r--components/script/dom/window.rs5
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) {