Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce trait Castable #8041

Merged
merged 5 commits into from Oct 21, 2015
Merged
Changes from 1 commit
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Clean up the cast calls

  • Loading branch information
nox committed Oct 21, 2015
commit 68014af78e8e3f5de4df0f6cc4d63b99c77478f5
@@ -44,12 +44,12 @@ use script::dom::bindings::codegen::InheritTypes::{CharacterDataTypeId, ElementT
use script::dom::bindings::codegen::InheritTypes::{HTMLElementTypeId, NodeTypeId};
use script::dom::bindings::conversions::Castable;
use script::dom::bindings::js::LayoutJS;
use script::dom::characterdata::{CharacterData, LayoutCharacterDataHelpers};
use script::dom::characterdata::LayoutCharacterDataHelpers;
use script::dom::element;
use script::dom::element::{Element, LayoutElementHelpers, RawLayoutElementHelpers};
use script::dom::htmlcanvaselement::{HTMLCanvasElement, LayoutHTMLCanvasElementHelpers};
use script::dom::htmlcanvaselement::LayoutHTMLCanvasElementHelpers;
use script::dom::htmliframeelement::HTMLIFrameElement;
use script::dom::htmlimageelement::{HTMLImageElement, LayoutHTMLImageElementHelpers};
use script::dom::htmlimageelement::LayoutHTMLImageElementHelpers;
use script::dom::htmlinputelement::{HTMLInputElement, LayoutHTMLInputElementHelpers};
use script::dom::htmltextareaelement::{HTMLTextAreaElement, LayoutHTMLTextAreaElementHelpers};
use script::dom::node::{HAS_CHANGED, HAS_DIRTY_DESCENDANTS, HAS_DIRTY_SIBLINGS, IS_DIRTY};
@@ -358,7 +358,7 @@ impl<'le> LayoutElement<'le> {

pub fn as_node(&self) -> LayoutNode<'le> {
LayoutNode {
node: self.element.upcast::<Node>(),
node: self.element.upcast(),
chain: PhantomData,
}
}
@@ -377,7 +377,7 @@ fn as_element<'le>(node: LayoutJS<Node>) -> Option<LayoutElement<'le>> {
impl<'le> ::selectors::Element for LayoutElement<'le> {
fn parent_element(&self) -> Option<LayoutElement<'le>> {
unsafe {
self.element.upcast::<Node>().parent_node_ref().and_then(as_element)
self.element.upcast().parent_node_ref().and_then(as_element)
}
}

@@ -422,7 +422,7 @@ impl<'le> ::selectors::Element for LayoutElement<'le> {
self.as_node().children().all(|node| match node.type_id() {
NodeTypeId::Element(..) => false,
NodeTypeId::CharacterData(CharacterDataTypeId::Text) => unsafe {
node.node.downcast::<CharacterData>().unwrap().data_for_layout().is_empty()
node.node.downcast().unwrap().data_for_layout().is_empty()
},
_ => true
})
@@ -695,7 +695,7 @@ impl<'ln> ThreadSafeLayoutNode<'ln> {
#[inline]
pub fn as_element(&self) -> ThreadSafeLayoutElement<'ln> {
unsafe {
let element = match self.get_jsmanaged().downcast::<Element>() {
let element = match self.get_jsmanaged().downcast() {
Some(e) => e.unsafe_get(),
None => panic!("not an element")
};
@@ -786,12 +786,12 @@ impl<'ln> ThreadSafeLayoutNode<'ln> {

pub fn is_ignorable_whitespace(&self) -> bool {
unsafe {
let text: LayoutJS<Text> = match self.get_jsmanaged().downcast::<Text>() {
let text: LayoutJS<Text> = match self.get_jsmanaged().downcast() {
Some(text) => text,
None => return false
};

if !is_whitespace(text.upcast::<CharacterData>().data_for_layout()) {
if !is_whitespace(text.upcast().data_for_layout()) {
return false
}

@@ -814,8 +814,7 @@ impl<'ln> ThreadSafeLayoutNode<'ln> {
pub fn get_unsigned_integer_attribute(self, attribute: UnsignedIntegerAttribute)
-> Option<u32> {
unsafe {
let elem: Option<LayoutJS<Element>> = self.get_jsmanaged().downcast::<Element>();
match elem {
match self.get_jsmanaged().downcast::<Element>() {
Some(element) => {
element.get_unsigned_integer_attribute_for_layout(attribute)
}
@@ -900,20 +899,17 @@ impl<'ln> ThreadSafeLayoutNode<'ln> {
}

let this = unsafe { self.get_jsmanaged() };
let text = this.downcast::<Text>();
if let Some(text) = text {
if let Some(text) = this.downcast::<Text>() {
let data = unsafe {
text.upcast::<CharacterData>().data_for_layout().to_owned()
text.upcast().data_for_layout().to_owned()
};
return TextContent::Text(data);
}
let input = this.downcast::<HTMLInputElement>();
if let Some(input) = input {
if let Some(input) = this.downcast::<HTMLInputElement>() {
let data = unsafe { input.get_value_for_layout() };
return TextContent::Text(data);
}
let area = this.downcast::<HTMLTextAreaElement>();
if let Some(area) = area {
if let Some(area) = this.downcast::<HTMLTextAreaElement>() {
let data = unsafe { area.get_value_for_layout() };
return TextContent::Text(data);
}
@@ -926,7 +922,7 @@ impl<'ln> ThreadSafeLayoutNode<'ln> {
let this = unsafe {
self.get_jsmanaged()
};
let input = this.downcast::<HTMLInputElement>();
let input = this.downcast();
if let Some(input) = input {
let insertion_point = unsafe {
input.get_insertion_point_for_layout()
@@ -954,36 +950,36 @@ impl<'ln> ThreadSafeLayoutNode<'ln> {
/// FIXME(pcwalton): Don't copy URLs.
pub fn image_url(&self) -> Option<Url> {
unsafe {
self.get_jsmanaged().downcast::<HTMLImageElement>()
self.get_jsmanaged().downcast()
.expect("not an image!")
.image_url()
}
}

pub fn canvas_renderer_id(&self) -> Option<usize> {
unsafe {
let canvas_element = self.get_jsmanaged().downcast::<HTMLCanvasElement>();
let canvas_element = self.get_jsmanaged().downcast();
canvas_element.and_then(|elem| elem.get_renderer_id())
}
}

pub fn canvas_ipc_renderer(&self) -> Option<IpcSender<CanvasMsg>> {
unsafe {
let canvas_element = self.get_jsmanaged().downcast::<HTMLCanvasElement>();
let canvas_element = self.get_jsmanaged().downcast();
canvas_element.and_then(|elem| elem.get_ipc_renderer())
}
}

pub fn canvas_width(&self) -> u32 {
unsafe {
let canvas_element = self.get_jsmanaged().downcast::<HTMLCanvasElement>();
let canvas_element = self.get_jsmanaged().downcast();
canvas_element.unwrap().get_canvas_width()
}
}

pub fn canvas_height(&self) -> u32 {
unsafe {
let canvas_element = self.get_jsmanaged().downcast::<HTMLCanvasElement>();
let canvas_element = self.get_jsmanaged().downcast();
canvas_element.unwrap().get_canvas_height()
}
}
@@ -45,7 +45,7 @@ pub trait Activatable {
// Step 4
// https://html.spec.whatwg.org/multipage/#fire-a-synthetic-mouse-event
let win = window_from_node(element);
let target = element.upcast::<EventTarget>();
let target = element.upcast();
let mouse = MouseEvent::new(win.r(), "click".to_owned(),
EventBubbles::DoesNotBubble, EventCancelable::NotCancelable, Some(win.r()), 1,
0, 0, 0, 0, ctrlKey, shiftKey, altKey, metaKey,
@@ -12,7 +12,6 @@ use dom::bindings::js::{JS, MutNullableHeap};
use dom::bindings::js::{LayoutJS, Root, RootedReference};
use dom::bindings::utils::{Reflector, reflect_dom_object};
use dom::element::{AttributeMutation, Element};
use dom::node::Node;
use dom::values::UNSIGNED_LONG_MAX;
use dom::virtualmethods::vtable_for;
use dom::window::Window;
@@ -288,7 +287,7 @@ impl Attr {
assert!(Some(owner) == self.owner().r());
mem::swap(&mut *self.value.borrow_mut(), &mut value);
if self.namespace == ns!("") {
vtable_for(owner.upcast::<Node>()).attribute_mutated(
vtable_for(owner.upcast()).attribute_mutated(
self, AttributeMutation::Set(Some(&value)));
}
}
@@ -147,9 +147,7 @@ impl CanvasRenderingContext2D {
}

fn mark_as_dirty(&self) {
let canvas = self.canvas.root();
let node = canvas.upcast::<Node>();
node.dirty(NodeDamage::OtherNodeDamage);
self.canvas.root().upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
}

fn update_transform(&self) {
@@ -134,14 +134,12 @@ impl CharacterDataMethods for CharacterData {

// https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-previouselementsibling
fn GetPreviousElementSibling(&self) -> Option<Root<Element>> {
self.upcast::<Node>().preceding_siblings()
.filter_map(Root::downcast::<Element>).next()
self.upcast::<Node>().preceding_siblings().filter_map(Root::downcast).next()
}

// https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-nextelementsibling
fn GetNextElementSibling(&self) -> Option<Root<Element>> {
self.upcast::<Node>().following_siblings()
.filter_map(Root::downcast::<Element>).next()
self.upcast::<Node>().following_siblings().filter_map(Root::downcast).next()
}
}

@@ -89,11 +89,11 @@ pub fn create_element(name: QualName, prefix: Option<Atom>,
macro_rules! make(
($ctor:ident) => ({
let obj = $ctor::new((*name.local).to_owned(), prefix, document);
Root::upcast::<Element>(obj)
Root::upcast(obj)
});
($ctor:ident, $($arg:expr),+) => ({
let obj = $ctor::new((*name.local).to_owned(), prefix, document, $($arg),+);
Root::upcast::<Element>(obj)
Root::upcast(obj)
})
);

@@ -242,7 +242,7 @@ impl CSSStyleDeclarationMethods for CSSStyleDeclaration {
}

let document = document_from_node(element);
let node = element.upcast::<Node>();
let node = element.upcast();
document.r().content_changed(node, NodeDamage::NodeStyleDamaged);
Ok(())
}
@@ -276,7 +276,7 @@ impl CSSStyleDeclarationMethods for CSSStyleDeclaration {
}

let document = document_from_node(element);
let node = element.upcast::<Node>();
let node = element.upcast();
document.r().content_changed(node, NodeDamage::NodeStyleDamaged);
Ok(())
}
@@ -15,7 +15,6 @@ use dom::bindings::js::{Root, RootCollection};
use dom::bindings::refcounted::LiveDOMReferences;
use dom::bindings::structuredclone::StructuredCloneData;
use dom::bindings::utils::Reflectable;
use dom::eventtarget::EventTarget;
use dom::messageevent::MessageEvent;
use dom::worker::{SimpleWorkerErrorHandler, TrustedWorkerAddress, WorkerMessageHandler};
use dom::workerglobalscope::WorkerGlobalScope;
@@ -289,7 +288,7 @@ impl DedicatedWorkerGlobalScope {
match msg {
WorkerScriptMsg::DOMMessage(data) => {
let scope = self.upcast::<WorkerGlobalScope>();
let target = self.upcast::<EventTarget>();
let target = self.upcast();
let _ar = JSAutoRequest::new(scope.get_cx());
let _ac = JSAutoCompartment::new(scope.get_cx(), scope.reflector().get_jsobject().get());
let mut message = RootedValue::new(scope.get_cx(), UndefinedValue());
@@ -323,7 +322,7 @@ impl DedicatedWorkerGlobalScope {
fn handle_event(&self, event: MixedMessage) {
match event {
MixedMessage::FromDevtools(msg) => {
let global_ref = GlobalRef::Worker(self.upcast::<WorkerGlobalScope>());
let global_ref = GlobalRef::Worker(self.upcast());
match msg {
DevtoolScriptControlMsg::EvaluateJS(_pipe_id, string, sender) =>
devtools::handle_evaluate_js(&global_ref, string, sender),
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.