diff options
Diffstat (limited to 'components/script/script_task.rs')
-rw-r--r-- | components/script/script_task.rs | 30 |
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()); } } |