aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/script_task.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/script_task.rs')
-rw-r--r--components/script/script_task.rs62
1 files changed, 38 insertions, 24 deletions
diff --git a/components/script/script_task.rs b/components/script/script_task.rs
index 4b64700b8bc..8573efa9d3f 100644
--- a/components/script/script_task.rs
+++ b/components/script/script_task.rs
@@ -31,7 +31,7 @@ use dom::htmlelement::HTMLElementTypeId;
use dom::htmliframeelement::HTMLIFrameElement;
use dom::keyboardevent::KeyboardEvent;
use dom::mouseevent::MouseEvent;
-use dom::node::{self, Node, NodeHelpers, NodeDamage, NodeTypeId};
+use dom::node::{self, Node, NodeHelpers, NodeDamage, NodeTypeId, window_from_node};
use dom::window::{Window, WindowHelpers, ScriptHelpers};
use dom::worker::{Worker, TrustedWorkerAddress};
use parse::html::{HTMLInput, parse_html};
@@ -41,9 +41,8 @@ use page::{Page, IterablePage, Frame};
use timers::TimerId;
use devtools;
-use devtools_traits::{DevtoolsControlChan, DevtoolsControlPort, NewGlobal, GetRootNode, DevtoolsPageInfo};
-use devtools_traits::{DevtoolScriptControlMsg, EvaluateJS, GetDocumentElement};
-use devtools_traits::{GetChildren, GetLayout, ModifyAttribute, WantsLiveNotifications};
+use devtools_traits::{DevtoolsControlChan, DevtoolsControlPort, DevtoolsPageInfo};
+use devtools_traits::{DevtoolsControlMsg, DevtoolScriptControlMsg};
use script_traits::CompositorEvent;
use script_traits::CompositorEvent::{ResizeEvent, ReflowEvent, ClickEvent};
use script_traits::CompositorEvent::{MouseDownEvent, MouseUpEvent};
@@ -71,7 +70,7 @@ use util::task_state;
use geom::point::Point2D;
use hyper::header::{Header, Headers, HeaderFormat};
-use hyper::header::shared::util as header_util;
+use hyper::header::parsing as header_parsing;
use js::jsapi::{JS_SetWrapObjectCallbacks, JS_SetGCZeal, JS_DEFAULT_ZEAL_FREQ, JS_GC};
use js::jsapi::{JSContext, JSRuntime, JSObject};
use js::jsapi::{JS_SetGCParameter, JSGC_MAX_BYTES};
@@ -84,7 +83,7 @@ use libc;
use std::any::Any;
use std::borrow::ToOwned;
use std::cell::Cell;
-use std::fmt::{self, Show};
+use std::fmt::{self, Display};
use std::mem::replace;
use std::num::ToPrimitive;
use std::rc::Rc;
@@ -109,7 +108,7 @@ pub trait Runnable {
pub enum ScriptMsg {
/// Acts on a fragment URL load on the specified pipeline (only dispatched
/// to ScriptTask).
- TriggerFragment(PipelineId, Url),
+ TriggerFragment(PipelineId, String),
/// Begins a content-initiated load on the specified pipeline (only
/// dispatched to ScriptTask).
TriggerLoad(PipelineId, LoadData),
@@ -610,8 +609,8 @@ impl ScriptTask {
match msg {
ScriptMsg::TriggerLoad(id, load_data) =>
self.trigger_load(id, load_data),
- ScriptMsg::TriggerFragment(id, url) =>
- self.trigger_fragment(id, url),
+ ScriptMsg::TriggerFragment(id, fragment) =>
+ self.trigger_fragment(id, fragment),
ScriptMsg::FireTimer(TimerSource::FromWindow(id), timer_id) =>
self.handle_fire_timer_msg(id, timer_id),
ScriptMsg::FireTimer(TimerSource::FromWorker, _) =>
@@ -633,19 +632,19 @@ impl ScriptTask {
fn handle_msg_from_devtools(&self, msg: DevtoolScriptControlMsg) {
match msg {
- EvaluateJS(id, s, reply) =>
+ DevtoolScriptControlMsg::EvaluateJS(id, s, reply) =>
devtools::handle_evaluate_js(&*self.page.borrow(), id, s, reply),
- GetRootNode(id, reply) =>
+ DevtoolScriptControlMsg::GetRootNode(id, reply) =>
devtools::handle_get_root_node(&*self.page.borrow(), id, reply),
- GetDocumentElement(id, reply) =>
+ DevtoolScriptControlMsg::GetDocumentElement(id, reply) =>
devtools::handle_get_document_element(&*self.page.borrow(), id, reply),
- GetChildren(id, node_id, reply) =>
+ DevtoolScriptControlMsg::GetChildren(id, node_id, reply) =>
devtools::handle_get_children(&*self.page.borrow(), id, node_id, reply),
- GetLayout(id, node_id, reply) =>
+ DevtoolScriptControlMsg::GetLayout(id, node_id, reply) =>
devtools::handle_get_layout(&*self.page.borrow(), id, node_id, reply),
- ModifyAttribute(id, node_id, modifications) =>
+ DevtoolScriptControlMsg::ModifyAttribute(id, node_id, modifications) =>
devtools::handle_modify_attribute(&*self.page.borrow(), id, node_id, modifications),
- WantsLiveNotifications(pipeline_id, to_send) =>
+ DevtoolScriptControlMsg::WantsLiveNotifications(pipeline_id, to_send) =>
devtools::handle_wants_live_notifications(&*self.page.borrow(), pipeline_id, to_send),
}
}
@@ -947,8 +946,9 @@ impl ScriptTask {
title: document.r().Title(),
url: final_url
};
- chan.send(NewGlobal(pipeline_id, self.devtools_sender.clone(),
- page_info)).unwrap();
+ chan.send(DevtoolsControlMsg::NewGlobal(pipeline_id,
+ self.devtools_sender.clone(),
+ page_info)).unwrap();
}
}
}
@@ -1113,9 +1113,9 @@ impl ScriptTask {
/// The entry point for content to notify that a fragment url has been requested
/// for the given pipeline.
- fn trigger_fragment(&self, pipeline_id: PipelineId, url: Url) {
+ fn trigger_fragment(&self, pipeline_id: PipelineId, fragment: String) {
let page = get_page(&*self.page.borrow(), pipeline_id);
- match page.find_fragment_node(url.fragment.unwrap()).root() {
+ match page.find_fragment_node(fragment).root() {
Some(node) => {
self.scroll_fragment_point(pipeline_id, node.r());
}
@@ -1363,13 +1363,13 @@ struct LastModified(pub Tm);
impl Header for LastModified {
#[inline]
- fn header_name(_: Option<LastModified>) -> &'static str {
+ fn header_name() -> &'static str {
"Last-Modified"
}
// Parses an RFC 2616 compliant date/time string,
fn parse_header(raw: &[Vec<u8>]) -> Option<LastModified> {
- header_util::from_one_raw_str(raw).and_then(|s: String| {
+ header_parsing::from_one_raw_str(raw).and_then(|s: String| {
let s = s.as_slice();
strptime(s, "%a, %d %b %Y %T %Z").or_else(|_| {
strptime(s, "%A, %d-%b-%y %T %Z")
@@ -1386,8 +1386,8 @@ impl HeaderFormat for LastModified {
fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result {
let LastModified(ref tm) = *self;
match tm.tm_utcoff {
- 0 => tm.rfc822().fmt(f),
- _ => tm.to_utc().rfc822().fmt(f)
+ 0 => <_ as Display>::fmt(&tm.rfc822(), f),
+ _ => <_ as Display>::fmt(&tm.to_utc().rfc822(), f)
}
}
}
@@ -1432,6 +1432,20 @@ impl DocumentProgressHandler {
let doctarget: JSRef<EventTarget> = EventTargetCast::from_ref(document.r());
event.r().set_trusted(true);
let _ = wintarget.dispatch_event_with_target(doctarget, event.r());
+
+ let window_ref = window.r();
+ let browser_context = window_ref.browser_context();
+ let browser_context = browser_context.as_ref().unwrap();
+
+ browser_context.frame_element().map(|frame_element| {
+ let frame_element = frame_element.root();
+ let frame_window = window_from_node(frame_element.r()).root();
+ let event = Event::new(GlobalRef::Window(frame_window.r()), "load".to_owned(),
+ EventBubbles::DoesNotBubble,
+ EventCancelable::NotCancelable).root();
+ let target: JSRef<EventTarget> = EventTargetCast::from_ref(frame_element.r());
+ event.r().fire(target);
+ });
}
}