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.rs30
1 files changed, 20 insertions, 10 deletions
diff --git a/components/script/script_task.rs b/components/script/script_task.rs
index 287b6c61adf..11245f59dfa 100644
--- a/components/script/script_task.rs
+++ b/components/script/script_task.rs
@@ -16,7 +16,7 @@ use dom::bindings::codegen::InheritTypes::{ElementCast, EventTargetCast, NodeCas
use dom::bindings::conversions::FromJSValConvertible;
use dom::bindings::conversions::StringificationBehavior;
use dom::bindings::global::GlobalRef;
-use dom::bindings::js::{JS, JSRef, Temporary, OptionalRootable};
+use dom::bindings::js::{JS, JSRef, Temporary, OptionalRootable, RootedReference};
use dom::bindings::js::{RootCollection, RootCollectionPtr};
use dom::bindings::refcounted::{LiveDOMReferences, Trusted, TrustedReference};
use dom::bindings::structuredclone::StructuredCloneData;
@@ -32,6 +32,7 @@ use dom::keyboardevent::KeyboardEvent;
use dom::mouseevent::MouseEvent;
use dom::node::{self, Node, NodeHelpers, NodeDamage, NodeTypeId};
use dom::window::{Window, WindowHelpers, ScriptHelpers};
+use dom::worker::{Worker, TrustedWorkerAddress};
use parse::html::{HTMLInput, parse_html};
use layout_interface::{ScriptLayoutChan, LayoutChan, ReflowGoal, ReflowQueryType};
use layout_interface;
@@ -41,7 +42,7 @@ use devtools;
use devtools_traits::{DevtoolsControlChan, DevtoolsControlPort, NewGlobal, GetRootNode, DevtoolsPageInfo};
use devtools_traits::{DevtoolScriptControlMsg, EvaluateJS, GetDocumentElement};
-use devtools_traits::{GetChildren, GetLayout, ModifyAttribute};
+use devtools_traits::{GetChildren, GetLayout, ModifyAttribute, WantsLiveNotifications};
use script_traits::CompositorEvent;
use script_traits::CompositorEvent::{ResizeEvent, ReflowEvent, ClickEvent};
use script_traits::CompositorEvent::{MouseDownEvent, MouseUpEvent};
@@ -63,6 +64,7 @@ use servo_net::resource_task::LoadData as NetLoadData;
use servo_net::storage_task::StorageTask;
use util::geometry::to_frac_px;
use util::smallvec::SmallVec;
+use util::str::DOMString;
use util::task::spawn_named_with_send_on_failure;
use util::task_state;
@@ -123,6 +125,8 @@ pub enum ScriptMsg {
/// Message sent through Worker.postMessage (only dispatched to
/// DedicatedWorkerGlobalScope).
DOMMessage(StructuredCloneData),
+ /// Sends a message to the Worker object (dispatched to all tasks) regarding error.
+ WorkerDispatchErrorEvent(TrustedWorkerAddress, DOMString, DOMString, u32, u32),
/// Generic message that encapsulates event handling.
RunnableMsg(Box<Runnable+Send>),
/// A DOM object's last pinned reference was removed (dispatched to all tasks).
@@ -379,7 +383,8 @@ impl ScriptTask {
resource_task.clone(),
storage_task,
constellation_chan.clone(),
- js_context.clone());
+ js_context.clone(),
+ devtools_chan.clone());
let (devtools_sender, devtools_receiver) = channel();
ScriptTask {
@@ -616,6 +621,8 @@ impl ScriptTask {
self.handle_exit_window_msg(id),
ScriptMsg::DOMMessage(..) =>
panic!("unexpected message"),
+ ScriptMsg::WorkerDispatchErrorEvent(addr, msg, file_name,line_num, col_num) =>
+ Worker::handle_error_message(addr, msg, file_name, line_num, col_num),
ScriptMsg::RunnableMsg(runnable) =>
runnable.handler(),
ScriptMsg::RefcountCleanup(addr) =>
@@ -637,6 +644,8 @@ impl ScriptTask {
devtools::handle_get_layout(&*self.page.borrow(), id, node_id, reply),
ModifyAttribute(id, node_id, modifications) =>
devtools::handle_modify_attribute(&*self.page.borrow(), id, node_id, modifications),
+ WantsLiveNotifications(pipeline_id, to_send) =>
+ devtools::handle_wants_live_notifications(&*self.page.borrow(), pipeline_id, to_send),
}
}
@@ -660,7 +669,8 @@ impl ScriptTask {
parent_page.resource_task.clone(),
parent_page.storage_task.clone(),
self.constellation_chan.clone(),
- self.js_context.borrow().as_ref().unwrap().clone())
+ self.js_context.borrow().as_ref().unwrap().clone(),
+ self.devtools_chan.clone())
};
parent_page.children.borrow_mut().push(Rc::new(new_page));
}
@@ -772,7 +782,7 @@ impl ScriptTask {
// denies access to most properties (per
// https://github.com/servo/servo/issues/3939#issuecomment-62287025).
borrowed_page.find(pid).and_then(|page| {
- Some(*page.frame.borrow().as_ref().unwrap().window.root())
+ Some(page.frame.borrow().as_ref().unwrap().window.root())
})
});
@@ -853,9 +863,9 @@ impl ScriptTask {
IsHTMLDocument::HTMLDocument, None,
DocumentSource::FromParser).root();
if let Some(tm) = last_modified {
- document.set_last_modified(dom_last_modified(&tm));
+ document.r().set_last_modified(dom_last_modified(&tm));
}
- window.r().init_browser_context(document.r(), parent_window);
+ window.r().init_browser_context(document.r(), parent_window.r());
{
@@ -1252,9 +1262,9 @@ impl ScriptTask {
for node_address in node_address.iter() {
let temp_node =
- node::from_untrusted_node_address(self.js_runtime.ptr, *node_address);
+ node::from_untrusted_node_address(self.js_runtime.ptr, *node_address).root();
- let maybe_node = temp_node.root().ancestors().find(|node| node.is_element());
+ let maybe_node = temp_node.r().ancestors().find(|node| node.is_element());
match maybe_node {
Some(node) => {
node.set_hover_state(true);
@@ -1406,7 +1416,7 @@ impl DocumentProgressHandler {
EventCancelable::NotCancelable).root();
let wintarget: JSRef<EventTarget> = EventTargetCast::from_ref(window.r());
let doctarget: JSRef<EventTarget> = EventTargetCast::from_ref(document.r());
- event.set_trusted(true);
+ event.r().set_trusted(true);
let _ = wintarget.dispatch_event_with_target(doctarget, event.r());
}
}