aboutsummaryrefslogtreecommitdiffstats
path: root/src/components
diff options
context:
space:
mode:
Diffstat (limited to 'src/components')
-rw-r--r--src/components/gfx/buffer_map.rs6
-rw-r--r--src/components/gfx/display_list.rs22
-rw-r--r--src/components/gfx/font.rs4
-rw-r--r--src/components/gfx/gfx.rs5
-rw-r--r--src/components/gfx/platform/linux/font.rs6
-rw-r--r--src/components/gfx/render_task.rs16
-rw-r--r--src/components/gfx/text/glyph.rs6
-rw-r--r--src/components/gfx/text/shaping/harfbuzz.rs6
-rw-r--r--src/components/gfx/text/text_run.rs2
-rw-r--r--src/components/main/compositing/compositor.rs42
-rw-r--r--src/components/main/compositing/compositor_layer.rs95
-rw-r--r--src/components/main/compositing/compositor_task.rs22
-rw-r--r--src/components/main/compositing/headless.rs8
-rw-r--r--src/components/main/compositing/quadtree.rs40
-rw-r--r--src/components/main/constellation.rs265
-rw-r--r--src/components/main/css/matching.rs17
-rw-r--r--src/components/main/css/node_util.rs16
-rw-r--r--src/components/main/css/select.rs2
-rw-r--r--src/components/main/layout/block.rs11
-rw-r--r--src/components/main/layout/box_.rs45
-rw-r--r--src/components/main/layout/construct.rs32
-rw-r--r--src/components/main/layout/context.rs2
-rw-r--r--src/components/main/layout/extra.rs4
-rw-r--r--src/components/main/layout/flow.rs2
-rw-r--r--src/components/main/layout/inline.rs25
-rw-r--r--src/components/main/layout/layout_task.rs24
-rw-r--r--src/components/main/layout/parallel.rs12
-rw-r--r--src/components/main/layout/table_row.rs4
-rw-r--r--src/components/main/layout/text.rs13
-rw-r--r--src/components/main/layout/util.rs2
-rw-r--r--src/components/main/layout/wrapper.rs10
-rw-r--r--src/components/main/pipeline.rs26
-rw-r--r--src/components/main/platform/common/glfw_windowing.rs37
-rwxr-xr-xsrc/components/main/servo.rs15
-rw-r--r--src/components/msg/constellation_msg.rs14
-rw-r--r--src/components/msg/msg.rs2
-rw-r--r--src/components/net/data_loader.rs7
-rw-r--r--src/components/net/file_loader.rs4
-rw-r--r--src/components/net/http_loader.rs10
-rw-r--r--src/components/net/image/holder.rs2
-rw-r--r--src/components/net/image_cache_task.rs105
-rw-r--r--src/components/net/local_image_cache.rs18
-rw-r--r--src/components/net/net.rs6
-rw-r--r--src/components/net/resource_task.rs38
-rw-r--r--src/components/script/dom/bindings/codegen/CodegenRust.py18
-rw-r--r--src/components/script/dom/bindings/conversions.rs1
-rw-r--r--src/components/script/dom/bindings/js.rs4
-rw-r--r--src/components/script/dom/bindings/utils.rs8
-rw-r--r--src/components/script/dom/document.rs19
-rw-r--r--src/components/script/dom/element.rs4
-rw-r--r--src/components/script/dom/htmliframeelement.rs2
-rw-r--r--src/components/script/dom/htmlimageelement.rs6
-rw-r--r--src/components/script/dom/htmlobjectelement.rs2
-rw-r--r--src/components/script/dom/location.rs4
-rw-r--r--src/components/script/dom/node.rs8
-rw-r--r--src/components/script/dom/window.rs30
-rw-r--r--src/components/script/html/cssparse.rs12
-rw-r--r--src/components/script/html/hubbub_html_parser.rs37
-rw-r--r--src/components/script/layout_interface.rs24
-rw-r--r--src/components/script/script.rs8
-rw-r--r--src/components/script/script_task.rs197
-rw-r--r--src/components/style/media_queries.rs2
-rw-r--r--src/components/style/properties.rs.mako4
-rw-r--r--src/components/style/selectors.rs27
-rw-r--r--src/components/style/style.rs5
-rw-r--r--src/components/style/stylesheets.rs2
-rw-r--r--src/components/util/cache.rs14
-rw-r--r--src/components/util/concurrentmap.rs15
-rw-r--r--src/components/util/cowarc.rs6
-rw-r--r--src/components/util/debug.rs6
-rw-r--r--src/components/util/opts.rs2
-rw-r--r--src/components/util/sort.rs4
-rw-r--r--src/components/util/task.rs4
-rw-r--r--src/components/util/time.rs20
-rw-r--r--src/components/util/url.rs17
-rw-r--r--src/components/util/util.rs7
-rw-r--r--src/components/util/workqueue.rs16
77 files changed, 741 insertions, 844 deletions
diff --git a/src/components/gfx/buffer_map.rs b/src/components/gfx/buffer_map.rs
index 47c86e5070e..b061362829c 100644
--- a/src/components/gfx/buffer_map.rs
+++ b/src/components/gfx/buffer_map.rs
@@ -43,6 +43,12 @@ impl Eq for BufferKey {
}
}
+impl TotalEq for BufferKey {
+ fn equals(&self, other: &BufferKey) -> bool {
+ self.eq(other)
+ }
+}
+
/// Create a key from a given size
impl BufferKey {
fn get(input: Size2D<uint>) -> BufferKey {
diff --git a/src/components/gfx/display_list.rs b/src/components/gfx/display_list.rs
index abb22e56863..65d7e414b06 100644
--- a/src/components/gfx/display_list.rs
+++ b/src/components/gfx/display_list.rs
@@ -25,7 +25,7 @@ use servo_util::range::Range;
use servo_util::smallvec::{SmallVec, SmallVec0, SmallVecIterator};
use std::libc::uintptr_t;
use std::mem;
-use std::vec::Items;
+use std::slice::Items;
use style::computed_values::border_style;
use sync::Arc;
@@ -351,18 +351,18 @@ impl DisplayItem {
let text_run = text.text_run.get();
let font = render_context.font_ctx.get_font_by_descriptor(&text_run.font_descriptor).unwrap();
- let font_metrics = font.borrow().with(|font| {
- font.metrics.clone()
- });
+ let font_metrics = {
+ font.borrow().metrics.clone()
+ };
let origin = text.base.bounds.origin;
let baseline_origin = Point2D(origin.x, origin.y + font_metrics.ascent);
- font.borrow().with_mut(|font| {
- font.draw_text_into_context(render_context,
- text.text_run.get(),
- &text.range,
- baseline_origin,
- text.text_color);
- });
+ {
+ font.borrow_mut().draw_text_into_context(render_context,
+ text.text_run.get(),
+ &text.range,
+ baseline_origin,
+ text.text_color);
+ }
let width = text.base.bounds.size.width;
let underline_size = font_metrics.underline_size;
let underline_offset = font_metrics.underline_offset;
diff --git a/src/components/gfx/font.rs b/src/components/gfx/font.rs
index fa9ee901d6e..6149588d002 100644
--- a/src/components/gfx/font.rs
+++ b/src/components/gfx/font.rs
@@ -166,9 +166,7 @@ impl FontGroup {
assert!(self.fonts.len() > 0);
// TODO(Issue #177): Actually fall back through the FontGroup when a font is unsuitable.
- self.fonts[0].borrow().with_mut(|font| {
- TextRun::new(font, text.clone(), decoration)
- })
+ TextRun::new(&mut *self.fonts[0].borrow_mut(), text.clone(), decoration)
}
}
diff --git a/src/components/gfx/gfx.rs b/src/components/gfx/gfx.rs
index d2a50d8f46c..de02ece7fbd 100644
--- a/src/components/gfx/gfx.rs
+++ b/src/components/gfx/gfx.rs
@@ -7,9 +7,12 @@
#[feature(globs, managed_boxes, macro_rules, phase)];
+#[feature(phase)];
+#[phase(syntax, link)]
+extern crate log;
+
extern crate azure;
extern crate collections;
-extern crate extra;
extern crate geom;
extern crate layers;
extern crate stb_image;
diff --git a/src/components/gfx/platform/linux/font.rs b/src/components/gfx/platform/linux/font.rs
index 46205f57ffb..ad6228c7533 100644
--- a/src/components/gfx/platform/linux/font.rs
+++ b/src/components/gfx/platform/linux/font.rs
@@ -76,7 +76,7 @@ impl FontHandleMethods for FontHandle {
buf: ~[u8],
style: &SpecifiedFontStyle)
-> Result<FontHandle, ()> {
- let ft_ctx: FT_Library = fctx.ctx.borrow().ctx;
+ let ft_ctx: FT_Library = fctx.ctx.ctx;
if ft_ctx.is_null() { return Err(()); }
let face_result = create_face_from_buffer(ft_ctx, buf.as_ptr(), buf.len(), style.pt_size);
@@ -279,7 +279,7 @@ impl<'a> FontHandle {
pub fn new_from_file(fctx: &FontContextHandle, file: &str,
style: &SpecifiedFontStyle) -> Result<FontHandle, ()> {
unsafe {
- let ft_ctx: FT_Library = fctx.ctx.borrow().ctx;
+ let ft_ctx: FT_Library = fctx.ctx.ctx;
if ft_ctx.is_null() { return Err(()); }
let mut face: FT_Face = ptr::null();
@@ -306,7 +306,7 @@ impl<'a> FontHandle {
pub fn new_from_file_unstyled(fctx: &FontContextHandle, file: ~str)
-> Result<FontHandle, ()> {
unsafe {
- let ft_ctx: FT_Library = fctx.ctx.borrow().ctx;
+ let ft_ctx: FT_Library = fctx.ctx.ctx;
if ft_ctx.is_null() { return Err(()); }
let mut face: FT_Face = ptr::null();
diff --git a/src/components/gfx/render_task.rs b/src/components/gfx/render_task.rs
index 24e3580eb33..03c49adcd1f 100644
--- a/src/components/gfx/render_task.rs
+++ b/src/components/gfx/render_task.rs
@@ -29,7 +29,7 @@ use servo_util::time::{ProfilerChan, profile};
use servo_util::time;
use servo_util::task::send_on_failure;
-use std::comm::{Chan, Port};
+use std::comm::{channel, Receiver, Sender};
use std::task;
use sync::Arc;
@@ -53,7 +53,7 @@ pub enum Msg {
UnusedBufferMsg(~[~LayerBuffer]),
PaintPermissionGranted,
PaintPermissionRevoked,
- ExitMsg(Option<Chan<()>>),
+ ExitMsg(Option<Sender<()>>),
}
/// A request from the compositor to the renderer for tiles that need to be (re)displayed.
@@ -75,7 +75,7 @@ pub fn BufferRequest(screen_rect: Rect<uint>, page_rect: Rect<f32>) -> BufferReq
// FIXME(#2005, pcwalton): This should be a newtype struct.
pub struct RenderChan {
- chan: Chan<Msg>,
+ chan: Sender<Msg>,
}
impl Clone for RenderChan {
@@ -87,8 +87,8 @@ impl Clone for RenderChan {
}
impl RenderChan {
- pub fn new() -> (Port<Msg>, RenderChan) {
- let (port, chan) = Chan::new();
+ pub fn new() -> (Receiver<Msg>, RenderChan) {
+ let (chan, port) = channel();
let render_chan = RenderChan {
chan: chan,
};
@@ -113,7 +113,7 @@ enum GraphicsContext {
pub struct RenderTask<C> {
id: PipelineId,
- port: Port<Msg>,
+ port: Receiver<Msg>,
compositor: C,
constellation_chan: ConstellationChan,
font_ctx: ~FontContext,
@@ -167,13 +167,13 @@ fn initialize_layers<C:RenderListener>(
impl<C: RenderListener + Send> RenderTask<C> {
pub fn create(id: PipelineId,
- port: Port<Msg>,
+ port: Receiver<Msg>,
compositor: C,
constellation_chan: ConstellationChan,
failure_msg: Failure,
opts: Opts,
profiler_chan: ProfilerChan,
- shutdown_chan: Chan<()>) {
+ shutdown_chan: Sender<()>) {
let mut builder = task::task().named("RenderTask");
let ConstellationChan(c) = constellation_chan.clone();
send_on_failure(&mut builder, FailureMsg(failure_msg), c);
diff --git a/src/components/gfx/text/glyph.rs b/src/components/gfx/text/glyph.rs
index f23b4d88eaf..b9008d3e589 100644
--- a/src/components/gfx/text/glyph.rs
+++ b/src/components/gfx/text/glyph.rs
@@ -11,7 +11,7 @@ use std::cmp::{Ord, Eq};
use std::num::NumCast;
use std::mem;
use std::u16;
-use std::vec;
+use std::slice;
use std::iter;
use geom::point::Point2D;
@@ -514,7 +514,7 @@ impl<'a> GlyphStore {
assert!(length > 0);
GlyphStore {
- entry_buffer: vec::from_elem(length, GlyphEntry::initial()),
+ entry_buffer: slice::from_elem(length, GlyphEntry::initial()),
detail_store: DetailedGlyphStore::new(),
is_whitespace: is_whitespace,
}
@@ -566,7 +566,7 @@ impl<'a> GlyphStore {
let entry = match first_glyph_data.is_missing {
true => GlyphEntry::missing(glyph_count),
false => {
- let glyphs_vec = vec::from_fn(glyph_count, |i| {
+ let glyphs_vec = slice::from_fn(glyph_count, |i| {
DetailedGlyph::new(data_for_glyphs[i].index,
data_for_glyphs[i].advance,
data_for_glyphs[i].offset)
diff --git a/src/components/gfx/text/shaping/harfbuzz.rs b/src/components/gfx/text/shaping/harfbuzz.rs
index 8090dd68989..b976e9a5d09 100644
--- a/src/components/gfx/text/shaping/harfbuzz.rs
+++ b/src/components/gfx/text/shaping/harfbuzz.rs
@@ -42,7 +42,7 @@ use std::char;
use std::cmp;
use std::libc::{c_uint, c_int, c_void, c_char};
use std::ptr::null;
-use std::vec;
+use std::slice;
static NO_GLYPH: i32 = -1;
static CONTINUATION_BYTE: i32 = -2;
@@ -246,9 +246,9 @@ impl Shaper {
// fast path: all chars are single-byte.
if byte_max == char_max {
- byteToGlyph = vec::from_elem(byte_max, NO_GLYPH);
+ byteToGlyph = slice::from_elem(byte_max, NO_GLYPH);
} else {
- byteToGlyph = vec::from_elem(byte_max, CONTINUATION_BYTE);
+ byteToGlyph = slice::from_elem(byte_max, CONTINUATION_BYTE);
for (i, _) in text.char_indices() {
byteToGlyph[i] = NO_GLYPH;
}
diff --git a/src/components/gfx/text/text_run.rs b/src/components/gfx/text/text_run.rs
index 0198a9f32f2..91ff60e8cac 100644
--- a/src/components/gfx/text/text_run.rs
+++ b/src/components/gfx/text/text_run.rs
@@ -5,7 +5,7 @@
use font::{Font, FontDescriptor, RunMetrics, FontStyle, FontMetrics};
use servo_util::geometry::Au;
use servo_util::range::Range;
-use std::vec::Items;
+use std::slice::Items;
use style::computed_values::text_decoration;
use sync::Arc;
use text::glyph::GlyphStore;
diff --git a/src/components/main/compositing/compositor.rs b/src/components/main/compositing/compositor.rs
index fe4e386eaae..1901a9e93f3 100644
--- a/src/components/main/compositing/compositor.rs
+++ b/src/components/main/compositing/compositor.rs
@@ -34,8 +34,7 @@ use servo_msg::constellation_msg;
use servo_util::opts::Opts;
use servo_util::time::{profile, ProfilerChan, Timer};
use servo_util::{time, url};
-use std::cmp;
-use std::comm::{Empty, Disconnected, Data, Port};
+use std::comm::{Empty, Disconnected, Data, Sender, Receiver};
use std::path::Path;
use std::rc::Rc;
use time::precise_time_s;
@@ -46,7 +45,7 @@ pub struct IOCompositor {
window: Rc<Window>,
/// The port on which we receive messages.
- port: Port<Msg>,
+ port: Receiver<Msg>,
/// The render context.
context: RenderContext,
@@ -114,7 +113,7 @@ pub struct IOCompositor {
impl IOCompositor {
pub fn new(app: &Application,
opts: Opts,
- port: Port<Msg>,
+ port: Receiver<Msg>,
constellation_chan: ConstellationChan,
profiler_chan: ProfilerChan) -> IOCompositor {
let window: Rc<Window> = WindowMethods::new(app);
@@ -124,7 +123,7 @@ impl IOCompositor {
// TODO: There should be no initial layer tree until the renderer creates one from the display
// list. This is only here because we don't have that logic in the renderer yet.
let root_layer = Rc::new(ContainerLayer());
- let window_size = window.borrow().size();
+ let window_size = window.size();
IOCompositor {
window: window,
@@ -154,7 +153,7 @@ impl IOCompositor {
pub fn create(app: &Application,
opts: Opts,
- port: Port<Msg>,
+ port: Receiver<Msg>,
constellation_chan: ConstellationChan,
profiler_chan: ProfilerChan) {
let mut compositor = IOCompositor::new(app,
@@ -187,7 +186,7 @@ impl IOCompositor {
}
// Check for messages coming from the windowing system.
- let msg = self.window.borrow().recv();
+ let msg = self.window.recv();
self.handle_window_message(msg);
// If asked to recomposite and renderer has run at least once
@@ -247,7 +246,7 @@ impl IOCompositor {
}
(Data(ChangeReadyState(ready_state)), false) => {
- self.window.borrow().set_ready_state(ready_state);
+ self.window.set_ready_state(ready_state);
self.ready_state = ready_state;
}
@@ -320,7 +319,7 @@ impl IOCompositor {
}
fn change_render_state(&mut self, render_state: RenderState) {
- self.window.borrow().set_render_state(render_state);
+ self.window.set_render_state(render_state);
if render_state == IdleRenderState {
self.composite_ready = true;
}
@@ -336,14 +335,14 @@ impl IOCompositor {
fn set_ids(&mut self,
frame_tree: SendableFrameTree,
- response_chan: Chan<()>,
+ response_chan: Sender<()>,
new_constellation_chan: ConstellationChan) {
response_chan.send(());
self.root_pipeline = Some(frame_tree.pipeline.clone());
// Initialize the new constellation channel by sending it the root window size.
- let window_size = self.window.borrow().size();
+ let window_size = self.window.size();
let window_size = Size2D(window_size.width as uint,
window_size.height as uint);
{
@@ -378,13 +377,10 @@ impl IOCompositor {
self.opts.tile_size,
self.opts.cpu_painting);
- {
- let current_child = self.root_layer.borrow().first_child.borrow();
- match *current_child.get() {
- None => {}
- Some(ref old_layer) => {
- ContainerLayer::remove_child(self.root_layer.clone(), old_layer.clone())
- }
+ match self.root_layer.first_child.get() {
+ None => {}
+ Some(ref old_layer) => {
+ ContainerLayer::remove_child(self.root_layer.clone(), old_layer.clone())
}
}
@@ -685,10 +681,12 @@ impl IOCompositor {
let window_size = &self.window_size;
// Determine zoom amount
- self.world_zoom = cmp::max(self.world_zoom * magnification, 1.0);
+ self.world_zoom = (self.world_zoom * magnification).max(1.0);
let world_zoom = self.world_zoom;
- self.root_layer.borrow().common.with_mut(|common| common.set_transform(identity().scale(world_zoom, world_zoom, 1f32)));
+ {
+ self.root_layer.common.borrow_mut().set_transform(identity().scale(world_zoom, world_zoom, 1f32));
+ }
// Scroll as needed
let page_delta = Point2D(window_size.width as f32 * (1.0 / world_zoom - 1.0 / old_world_zoom) * 0.5,
@@ -736,7 +734,7 @@ impl IOCompositor {
profile(time::CompositingCategory, self.profiler_chan.clone(), || {
debug!("compositor: compositing");
// Adjust the layer dimensions as necessary to correspond to the size of the window.
- self.scene.size = self.window.borrow().size();
+ self.scene.size = self.window.size();
// Render the scene.
match self.compositor_layer {
Some(ref mut layer) => {
@@ -786,7 +784,7 @@ impl IOCompositor {
self.shutting_down = true;
}
- self.window.borrow().present();
+ self.window.present();
let exit = self.opts.exit_after_load;
if exit {
diff --git a/src/components/main/compositing/compositor_layer.rs b/src/components/main/compositing/compositor_layer.rs
index 971e7c096d8..c0477048e9f 100644
--- a/src/components/main/compositing/compositor_layer.rs
+++ b/src/components/main/compositing/compositor_layer.rs
@@ -23,7 +23,6 @@ use script::script_task::{ScriptChan, SendEventMsg};
use servo_msg::compositor_msg::{Epoch, FixedPosition, LayerBuffer, LayerBufferSet, LayerId};
use servo_msg::compositor_msg::{ScrollPolicy, Tile};
use servo_msg::constellation_msg::PipelineId;
-use std::cmp;
use std::rc::Rc;
#[cfg(target_os="macos")]
@@ -129,10 +128,9 @@ pub enum WantsScrollEventsFlag {
fn create_container_layer_from_rect(rect: Rect<f32>) -> Rc<ContainerLayer> {
let container = Rc::new(ContainerLayer());
- container.borrow().scissor.set(Some(rect));
- container.borrow().common.with_mut(|common| {
- common.transform = identity().translate(rect.origin.x, rect.origin.y, 0f32);
- });
+ container.scissor.set(Some(rect));
+ container.common.borrow_mut().transform =
+ identity().translate(rect.origin.x, rect.origin.y, 0f32);
container
}
@@ -305,9 +303,7 @@ impl CompositorLayer {
// Allow children to scroll.
let cursor = cursor - self.scroll_offset;
for child in self.children.mut_iter() {
- // NOTE: work around borrowchk
- let tmp = child.container.borrow().scissor.borrow();
- match *tmp.get() {
+ match child.container.scissor.get() {
None => {
error!("CompositorLayer: unable to perform cursor hit test for layer");
}
@@ -333,9 +329,9 @@ impl CompositorLayer {
Some(size) => size,
None => fail!("CompositorLayer: tried to scroll with no page size set"),
};
- let min_x = cmp::min(window_size.width - page_size.width, 0.0);
+ let min_x = (window_size.width - page_size.width).min(0.0);
self.scroll_offset.x = self.scroll_offset.x.clamp(&min_x, &0.0);
- let min_y = cmp::min(window_size.height - page_size.height, 0.0);
+ let min_y = (window_size.height - page_size.height).min(0.0);
self.scroll_offset.y = self.scroll_offset.y.clamp(&min_y, &0.0);
if old_origin - self.scroll_offset == Point2D(0f32, 0f32) {
@@ -347,11 +343,8 @@ impl CompositorLayer {
#[allow(dead_code)]
fn dump_layer_tree(&self, layer: Rc<ContainerLayer>, indent: ~str) {
- {
- let scissor = layer.borrow().scissor.borrow();
- println!("{}scissor {:?}", indent, *scissor.get());
- }
- for kid in layer.borrow().children() {
+ println!("{}scissor {:?}", indent, layer.scissor.get());
+ for kid in layer.children() {
match kid {
ContainerLayerKind(ref container_layer) => {
self.dump_layer_tree((*container_layer).clone(), indent + " ");
@@ -373,14 +366,8 @@ impl CompositorLayer {
// Scroll this layer!
self.scroll_offset = scroll_offset;
- self.root_layer
- .borrow()
- .common
- .with_mut(|common| {
- common.set_transform(identity().translate(self.scroll_offset.x,
- self.scroll_offset.y,
- 0.0))
- });
+ self.root_layer.common.borrow_mut().set_transform(
+ identity().translate(self.scroll_offset.x, self.scroll_offset.y, 0.0));
result = true
}
@@ -398,9 +385,7 @@ impl CompositorLayer {
pub fn send_mouse_event(&self, event: MouseWindowEvent, cursor: Point2D<f32>) {
let cursor = cursor - self.scroll_offset;
for child in self.children.iter().filter(|&x| !x.child.hidden) {
- // NOTE: work around borrowchk
- let tmp = child.container.borrow().scissor.borrow();
- match *tmp.get() {
+ match child.container.scissor.get() {
None => {
error!("CompositorLayer: unable to perform cursor hit test for layer");
}
@@ -465,9 +450,7 @@ impl CompositorLayer {
}
let transform = |x: &mut CompositorLayerChild| -> bool {
- // NOTE: work around borrowchk
- let tmp = x.container.borrow().scissor.borrow();
- match *tmp.get() {
+ match x.container.scissor.get() {
Some(scissor) => {
let mut new_rect = window_rect;
new_rect.origin.x = new_rect.origin.x - x.child.scroll_offset.x;
@@ -512,17 +495,10 @@ impl CompositorLayer {
Some(i) => {
debug!("compositor_layer: node found for set_clipping_rect()");
let child_node = &mut self.children[i];
- child_node.container.borrow().common.with_mut(|common|
- common.set_transform(identity().translate(new_rect.origin.x,
- new_rect.origin.y,
- 0.0)));
- let old_rect = {
- // NOTE: work around borrowchk
- let tmp = child_node.container.borrow().scissor.borrow();
- tmp.get().clone()
- };
-
- child_node.container.borrow().scissor.set(Some(new_rect));
+ child_node.container.common.borrow_mut().set_transform(
+ identity().translate(new_rect.origin.x, new_rect.origin.y, 0.0));
+ let old_rect = child_node.container.scissor.get().clone();
+ child_node.container.scissor.set(Some(new_rect));
match self.quadtree {
NoTree(..) => {} // Nothing to do
Tree(ref mut quadtree) => {
@@ -618,9 +594,9 @@ impl CompositorLayer {
Some(size) => size,
None => fail!("CompositorLayer: tried to scroll with no page size set"),
};
- let min_x = cmp::min(window_size.width - page_size.width, 0.0);
+ let min_x = (window_size.width - page_size.width).min(0.0);
self.scroll_offset.x = self.scroll_offset.x.clamp(&min_x, &0.0);
- let min_y = cmp::min(window_size.height - page_size.height, 0.0);
+ let min_y = (window_size.height - page_size.height).min(0.0);
self.scroll_offset.y = self.scroll_offset.y.clamp(&min_y, &0.0);
// check to see if we scrolled
@@ -689,9 +665,7 @@ impl CompositorLayer {
max_mem))
}
}
- // NOTE: work around borrowchk
- let tmp = child_node.container.borrow().scissor.borrow();
- match *tmp.get() {
+ match child_node.container.scissor.get() {
Some(scissor) => {
// Call scroll for bounds checking if the page shrunk. Use (-1, -1) as the
// cursor position to make sure the scroll isn't propagated downwards.
@@ -724,13 +698,7 @@ impl CompositorLayer {
// are not rebuilt directly from this method.
pub fn build_layer_tree(&mut self, graphics_context: &NativeCompositingGraphicsContext) {
// Iterate over the children of the container layer.
- let mut current_layer_child;
-
- // NOTE: work around borrowchk
- {
- let tmp = self.root_layer.borrow().first_child.borrow();
- current_layer_child = tmp.get().clone();
- }
+ let mut current_layer_child = self.root_layer.first_child.get().clone();
// Delete old layer.
while current_layer_child.is_some() {
@@ -784,7 +752,7 @@ impl CompositorLayer {
Some(TextureLayerKind(existing_texture_layer)) => {
texture_layer = existing_texture_layer.clone();
- let texture = &existing_texture_layer.borrow().texture;
+ let texture = &existing_texture_layer.texture;
buffer.native_surface.bind_to_texture(graphics_context, texture, size);
// Move on to the next sibling.
@@ -799,18 +767,19 @@ impl CompositorLayer {
let rect = buffer.rect;
let transform = identity().translate(rect.origin.x, rect.origin.y, 0.0);
let transform = transform.scale(rect.size.width, rect.size.height, 1.0);
- texture_layer.borrow().common.with_mut(|common| common.set_transform(transform));
+ texture_layer.common.borrow_mut().set_transform(transform);
}
// Add child layers.
for child in self.children.mut_iter().filter(|x| !x.child.hidden) {
current_layer_child = match current_layer_child {
None => {
- child.container.borrow().common.with_mut(|common| {
- common.parent = None;
- common.prev_sibling = None;
- common.next_sibling = None;
- });
+ {
+ let mut common = child.container.common.borrow_mut();
+ (*common).parent = None;
+ common.prev_sibling = None;
+ common.next_sibling = None;
+ }
ContainerLayer::add_child_end(self.root_layer.clone(),
ContainerLayerKind(child.container.clone()));
None
@@ -900,9 +869,7 @@ impl CompositorLayer {
match self.quadtree {
NoTree(..) => {} // Nothing to do
Tree(ref mut quadtree) => {
- // NOTE: work around borrowchk
- let tmp = child.get_ref().container.borrow().scissor.borrow();
- match *tmp.get() {
+ match child.get_ref().container.scissor.get() {
Some(rect) => {
quadtree.set_status_page(rect, Normal, false); // Unhide this rect
}
@@ -952,9 +919,7 @@ impl CompositorLayer {
Tree(ref mut quadtree) => quadtree,
};
for child in self.children.iter().filter(|x| !x.child.hidden) {
- // NOTE: work around borrowchk
- let tmp = child.container.borrow().scissor.borrow();
- match *tmp.get() {
+ match child.container.scissor.get() {
None => {} // Nothing to do
Some(rect) => {
quadtree.set_status_page(rect, Hidden, false);
diff --git a/src/components/main/compositing/compositor_task.rs b/src/components/main/compositing/compositor_task.rs
index 4e0093fb2c4..f16beae7733 100644
--- a/src/components/main/compositing/compositor_task.rs
+++ b/src/components/main/compositing/compositor_task.rs
@@ -18,9 +18,9 @@ use servo_msg::compositor_msg::{RenderListener, RenderState, ScriptListener, Scr
use servo_msg::constellation_msg::{ConstellationChan, PipelineId};
use servo_util::opts::Opts;
use servo_util::time::ProfilerChan;
-use std::comm::{Chan, Port};
+use std::comm::{channel, Sender, Receiver};
-use extra::url::Url;
+use url::Url;
#[cfg(target_os="linux")]
use azure::azure_hl;
@@ -35,7 +35,7 @@ mod headless;
#[deriving(Clone)]
pub struct CompositorChan {
/// A channel on which messages can be sent to the compositor.
- chan: Chan<Msg>,
+ chan: Sender<Msg>,
}
/// Implementation of the abstract `ScriptListener` interface.
@@ -57,7 +57,7 @@ impl ScriptListener for CompositorChan {
}
fn close(&self) {
- let (port, chan) = Chan::new();
+ let (chan, port) = channel();
self.chan.send(Exit(chan));
port.recv();
}
@@ -70,7 +70,7 @@ impl ScriptListener for CompositorChan {
/// Implementation of the abstract `RenderListener` interface.
impl RenderListener for CompositorChan {
fn get_graphics_metadata(&self) -> Option<NativeGraphicsMetadata> {
- let (port, chan) = Chan::new();
+ let (chan, port) = channel();
self.chan.send(GetGraphicsMetadata(chan));
port.recv()
}
@@ -145,8 +145,8 @@ impl RenderListener for CompositorChan {
}
impl CompositorChan {
- pub fn new() -> (Port<Msg>, CompositorChan) {
- let (port, chan) = Chan::new();
+ pub fn new() -> (Receiver<Msg>, CompositorChan) {
+ let (chan, port) = channel();
let compositor_chan = CompositorChan {
chan: chan,
};
@@ -160,7 +160,7 @@ impl CompositorChan {
/// Messages from the painting task and the constellation task to the compositor task.
pub enum Msg {
/// Requests that the compositor shut down.
- Exit(Chan<()>),
+ Exit(Sender<()>),
/// Informs the compositor that the constellation has completed shutdown.
/// Required because the constellation can have pending calls to make (e.g. SetIds)
@@ -172,7 +172,7 @@ pub enum Msg {
/// is the pixel format.
///
/// The headless compositor returns `None`.
- GetGraphicsMetadata(Chan<Option<NativeGraphicsMetadata>>),
+ GetGraphicsMetadata(Sender<Option<NativeGraphicsMetadata>>),
/// Tells the compositor to create the root layer for a pipeline if necessary (i.e. if no layer
/// with that ID exists).
@@ -197,7 +197,7 @@ pub enum Msg {
/// Alerts the compositor to the current status of rendering.
ChangeRenderState(RenderState),
/// Sets the channel to the current layout and render tasks, along with their id
- SetIds(SendableFrameTree, Chan<()>, ConstellationChan),
+ SetIds(SendableFrameTree, Sender<()>, ConstellationChan),
/// Sets the color of unrendered content for a layer.
SetUnRenderedColor(PipelineId, LayerId, Color),
/// The load of a page for a given URL has completed.
@@ -239,7 +239,7 @@ impl CompositorTask {
}
pub fn create(opts: Opts,
- port: Port<Msg>,
+ port: Receiver<Msg>,
constellation_chan: ConstellationChan,
profiler_chan: ProfilerChan) {
diff --git a/src/components/main/compositing/headless.rs b/src/components/main/compositing/headless.rs
index 7acc2e2200a..899cf55e605 100644
--- a/src/components/main/compositing/headless.rs
+++ b/src/components/main/compositing/headless.rs
@@ -6,7 +6,7 @@ use compositing::*;
use geom::size::Size2D;
use servo_msg::constellation_msg::{ConstellationChan, ExitMsg, ResizedWindowMsg};
-use std::comm::{Empty, Disconnected, Data, Port};
+use std::comm::{Empty, Disconnected, Data, Receiver};
use servo_util::time::ProfilerChan;
use servo_util::time;
@@ -16,17 +16,17 @@ use servo_util::time;
/// It's intended for headless testing.
pub struct NullCompositor {
/// The port on which we receive messages.
- port: Port<Msg>,
+ port: Receiver<Msg>,
}
impl NullCompositor {
- fn new(port: Port<Msg>) -> NullCompositor {
+ fn new(port: Receiver<Msg>) -> NullCompositor {
NullCompositor {
port: port,
}
}
- pub fn create(port: Port<Msg>,
+ pub fn create(port: Receiver<Msg>,
constellation_chan: ConstellationChan,
profiler_chan: ProfilerChan) {
let compositor = NullCompositor::new(port);
diff --git a/src/components/main/compositing/quadtree.rs b/src/components/main/compositing/quadtree.rs
index ac4b1d9232e..f3570384095 100644
--- a/src/components/main/compositing/quadtree.rs
+++ b/src/components/main/compositing/quadtree.rs
@@ -10,10 +10,10 @@ use geom::size::Size2D;
use geom::rect::Rect;
use gfx::render_task::BufferRequest;
use std::cmp;
-use std::num::next_power_of_two;
-use std::vec;
use std::mem::replace;
-use std::vec::build;
+use std::num::next_power_of_two;
+use std::slice;
+use std::slice::build;
use servo_msg::compositor_msg::Tile;
#[cfg(test)]
@@ -355,8 +355,8 @@ impl<T: Tile> QuadtreeNode<T> {
if self.size <= tile_size {
let pix_x = (self.origin.x * scale).ceil() as uint;
let pix_y = (self.origin.y * scale).ceil() as uint;
- let page_width = cmp::min(clip_x - self.origin.x, self.size);
- let page_height = cmp::min(clip_y - self.origin.y, self.size);
+ let page_width = self.size.min(clip_x - self.origin.x);
+ let page_height = self.size.min(clip_y - self.origin.y);
let pix_width = (page_width * scale).ceil() as uint;
let pix_height = (page_height * scale).ceil() as uint;
self.status = Rendering;
@@ -483,8 +483,8 @@ impl<T: Tile> QuadtreeNode<T> {
}
// clip window to visible region
- let w_width = cmp::min(clip.width - w_x, w_width);
- let w_height = cmp::min(clip.height - w_y, w_height);
+ let w_width = w_width.min(clip.width - w_x);
+ let w_height = w_height.min(clip.height - w_y);
if s_size <= tile_size { // We are the child
return match self.tile {
@@ -546,7 +546,7 @@ impl<T: Tile> QuadtreeNode<T> {
}
};
- let quads_to_check = vec::build(Some(4), builder);
+ let quads_to_check = slice::build(Some(4), builder);
let mut request = ~[];
let mut unused = ~[];
@@ -556,20 +556,20 @@ impl<T: Tile> QuadtreeNode<T> {
// Recurse into child
let new_window = match *quad {
TL => Rect(window.origin,
- Size2D(cmp::min(w_width, s_x + s_size / 2.0 - w_x),
- cmp::min(w_height, (s_y + s_size / 2.0 - w_y)))),
- TR => Rect(Point2D(cmp::max(w_x, s_x + s_size / 2.0),
+ Size2D(w_width.min(s_x + s_size / 2.0 - w_x),
+ w_height.min(s_y + s_size / 2.0 - w_y))),
+ TR => Rect(Point2D(w_x.max(s_x + s_size / 2.0),
w_y),
- Size2D(cmp::min(w_width, w_x + w_width - (s_x + s_size / 2.0)),
- cmp::min(w_height, s_y + s_size / 2.0 - w_y))),
+ Size2D(w_width.min(w_x + w_width - (s_x + s_size / 2.0)),
+ w_height.min(s_y + s_size / 2.0 - w_y))),
BL => Rect(Point2D(w_x,
- cmp::max(w_y, s_y + s_size / 2.0)),
- Size2D(cmp::min(w_width, s_x + s_size / 2.0 - w_x),
- cmp::min(w_height, w_y + w_height - (s_y + s_size / 2.0)))),
- BR => Rect(Point2D(cmp::max(w_x, s_x + s_size / 2.0),
- cmp::max(w_y, s_y + s_size / 2.0)),
- Size2D(cmp::min(w_width, w_x + w_width - (s_x + s_size / 2.0)),
- cmp::min(w_height, w_y + w_height - (s_y + s_size / 2.0)))),
+ w_y.max(s_y + s_size / 2.0)),
+ Size2D(w_width.min(s_x + s_size / 2.0 - w_x),
+ w_height.min(w_y + w_height - (s_y + s_size / 2.0)))),
+ BR => Rect(Point2D(w_x.max(s_x + s_size / 2.0),
+ w_y.max(s_y + s_size / 2.0)),
+ Size2D(w_width.min(w_x + w_width - (s_x + s_size / 2.0)),
+ w_height.min(w_y + w_height - (s_y + s_size / 2.0)))),
};
diff --git a/src/components/main/constellation.rs b/src/components/main/constellation.rs
index 4894f94aafd..38efb084963 100644
--- a/src/components/main/constellation.rs
+++ b/src/components/main/constellation.rs
@@ -5,7 +5,6 @@
use compositing::{CompositorChan, LoadComplete, SetIds, SetLayerClipRect, ShutdownComplete};
use collections::hashmap::{HashMap, HashSet};
-use extra::url::Url;
use geom::rect::Rect;
use geom::size::Size2D;
use gfx::render_task;
@@ -33,11 +32,12 @@ use std::mem::replace;
use std::io;
use std::libc;
use std::rc::Rc;
+use url::Url;
/// Maintains the pipelines and navigation context and grants permission to composite
pub struct Constellation {
chan: ConstellationChan,
- request_port: Port<Msg>,
+ request_port: Receiver<Msg>,
compositor_chan: CompositorChan,
resource_task: ResourceTask,
image_cache_task: ImageCacheTask,
@@ -61,14 +61,15 @@ struct FrameTree {
// Need to clone the FrameTrees, but _not_ the Pipelines
impl Clone for FrameTree {
fn clone(&self) -> FrameTree {
- let children = self.children.borrow();
- let mut children = children.get().iter().map(|child_frame_tree| {
- child_frame_tree.clone()
- });
+ let children = self.children
+ .get()
+ .iter()
+ .map(|child_frame_tree| child_frame_tree.clone())
+ .collect();
FrameTree {
pipeline: self.pipeline.clone(),
parent: self.parent.clone(),
- children: RefCell::new(children.collect()),
+ children: RefCell::new(children),
}
}
}
@@ -106,40 +107,23 @@ enum ReplaceResult {
impl FrameTree {
fn contains(&self, id: PipelineId) -> bool {
- self.iter().any(|frame_tree| {
- // NOTE: work around borrowchk issue
- let tmp = frame_tree.borrow().pipeline.borrow();
- id == tmp.get().borrow().id
- })
+ self.iter().any(|frame_tree| id == frame_tree.pipeline.get().id)
}
/// Returns the frame tree whose key is id
fn find(&self, id: PipelineId) -> Option<Rc<FrameTree>> {
- self.iter().find(|frame_tree| {
- // NOTE: work around borrowchk issue
- let tmp = frame_tree.borrow().pipeline.borrow();
- id == tmp.get().borrow().id
- })
+ self.iter().find(|frame_tree| id == frame_tree.pipeline.get().id)
}
/// Replaces a node of the frame tree in place. Returns the node that was removed or the original node
/// if the node to replace could not be found.
fn replace_child(&self, id: PipelineId, new_child: Rc<FrameTree>) -> ReplaceResult {
for frame_tree in self.iter() {
- // NOTE: work around mutability issue
- let mut children = frame_tree.borrow().children.borrow_mut();
- let mut child = children.get().mut_iter()
- .find(|child| {
- // NOTE: work around borrowchk issue
- let tmp = child.frame_tree.borrow().pipeline.borrow();
- tmp.get().borrow().id == id
- });
+ let mut children = frame_tree.children.get();
+ let mut child = children.mut_iter()
+ .find(|child| child.frame_tree.pipeline.get().id == id);
for child in child.mut_iter() {
- // NOTE: work around lifetime issues
- {
- let tmp = child.frame_tree.borrow().parent.borrow();
- new_child.borrow().parent.set(tmp.get().clone());
- }
+ new_child.parent.set(child.frame_tree.parent.get().clone());
return ReplacedNode(replace(&mut child.frame_tree, new_child));
}
}
@@ -148,16 +132,8 @@ impl FrameTree {
fn to_sendable(&self) -> SendableFrameTree {
let sendable_frame_tree = SendableFrameTree {
- pipeline: {
- // NOTE: work around borrowchk issues
- let tmp = self.pipeline.borrow();
- tmp.get().borrow().to_sendable()
- },
- children: {
- // NOTE: work around borrowchk issues
- let tmp = self.children.borrow();
- tmp.get().iter().map(|frame_tree| frame_tree.to_sendable()).collect()
- },
+ pipeline: self.pipeline.get().to_sendable(),
+ children: self.children.get().iter().map(|frame_tree| frame_tree.to_sendable()).collect(),
};
sendable_frame_tree
}
@@ -172,7 +148,7 @@ impl FrameTree {
impl ChildFrameTree {
fn to_sendable(&self) -> SendableChildFrameTree {
SendableChildFrameTree {
- frame_tree: self.frame_tree.borrow().to_sendable(),
+ frame_tree: self.frame_tree.to_sendable(),
rect: self.rect,
}
}
@@ -189,12 +165,8 @@ impl Iterator<Rc<FrameTree>> for FrameTreeIterator {
fn next(&mut self) -> Option<Rc<FrameTree>> {
if !self.stack.is_empty() {
let next = self.stack.pop();
- {
- // NOTE: work around borrowchk issues
- let tmp = next.get_ref().borrow().children.borrow();
- for cft in tmp.get().rev_iter() {
- self.stack.push(cft.frame_tree.clone());
- }
+ for cft in next.get_ref().children.get().rev_iter() {
+ self.stack.push(cft.frame_tree.clone());
}
Some(next.unwrap())
} else {
@@ -245,11 +217,7 @@ impl NavigationContext {
/// Loads a new set of page frames, returning all evicted frame trees
pub fn load(&mut self, frame_tree: Rc<FrameTree>) -> ~[Rc<FrameTree>] {
- debug!("navigating to {:?}", {
- // NOTE: work around borrowchk issues
- let tmp = frame_tree.borrow().pipeline.borrow();
- tmp.get().borrow().id
- });
+ debug!("navigating to {:?}", frame_tree.pipeline.get().id);
let evicted = replace(&mut self.next, ~[]);
if self.current.is_some() {
self.previous.push(self.current.take_unwrap());
@@ -261,13 +229,13 @@ impl NavigationContext {
/// Returns the frame trees whose keys are pipeline_id.
pub fn find_all(&mut self, pipeline_id: PipelineId) -> ~[Rc<FrameTree>] {
let from_current = self.current.iter().filter_map(|frame_tree| {
- frame_tree.borrow().find(pipeline_id)
+ frame_tree.find(pipeline_id)
});
let from_next = self.next.iter().filter_map(|frame_tree| {
- frame_tree.borrow().find(pipeline_id)
+ frame_tree.find(pipeline_id)
});
let from_prev = self.previous.iter().filter_map(|frame_tree| {
- frame_tree.borrow().find(pipeline_id)
+ frame_tree.find(pipeline_id)
});
from_prev.chain(from_current).chain(from_next).collect()
}
@@ -279,7 +247,7 @@ impl NavigationContext {
let mut all_contained = from_prev.chain(from_current).chain(from_next);
all_contained.any(|frame_tree| {
- frame_tree.borrow().contains(pipeline_id)
+ frame_tree.contains(pipeline_id)
})
}
}
@@ -342,7 +310,7 @@ impl Constellation {
pub fn find_all(&mut self, pipeline_id: PipelineId) -> ~[Rc<FrameTree>] {
let matching_navi_frames = self.navigation_context.find_all(pipeline_id);
let matching_pending_frames = self.pending_frames.iter().filter_map(|frame_change| {
- frame_change.after.borrow().find(pipeline_id)
+ frame_change.after.find(pipeline_id)
});
matching_navi_frames.move_iter().chain(matching_pending_frames).collect()
}
@@ -406,7 +374,7 @@ impl Constellation {
fn handle_exit(&self) {
for (_id, ref pipeline) in self.pipelines.iter() {
- pipeline.borrow().exit();
+ pipeline.exit();
}
self.image_cache_task.exit();
self.resource_task.send(resource_task::Exit);
@@ -430,10 +398,10 @@ impl Constellation {
Some(id) => id.clone()
};
- let ScriptChan(ref old_script) = old_pipeline.borrow().script_chan;
+ let ScriptChan(ref old_script) = old_pipeline.script_chan;
old_script.try_send(ExitPipelineMsg(pipeline_id));
- old_pipeline.borrow().render_chan.chan.try_send(render_task::ExitMsg(None));
- let LayoutChan(ref old_layout) = old_pipeline.borrow().layout_chan;
+ old_pipeline.render_chan.chan.try_send(render_task::ExitMsg(None));
+ let LayoutChan(ref old_layout) = old_pipeline.layout_chan;
old_layout.try_send(layout_interface::ExitNowMsg);
self.pipelines.remove(&pipeline_id);
@@ -486,7 +454,7 @@ impl Constellation {
}),
navigation_type: constellation_msg::Load,
});
- self.pipelines.insert(pipeline_wrapped.borrow().id, pipeline_wrapped);
+ self.pipelines.insert(pipeline_wrapped.id, pipeline_wrapped);
}
fn handle_frame_rect_msg(&mut self, pipeline_id: PipelineId, subpage_id: SubpageId, rect: Rect<f32>) {
@@ -495,9 +463,7 @@ impl Constellation {
// Returns true if a child frame tree's subpage id matches the given subpage id
let subpage_eq = |child_frame_tree: & &mut ChildFrameTree| {
- // NOTE: work around borrowchk issues
- let tmp = child_frame_tree.frame_tree.borrow().pipeline.borrow();
- tmp.get().borrow().
+ child_frame_tree.frame_tree.pipeline.get().
subpage_id.expect("Constellation:
child frame does not have a subpage id. This should not be possible.")
== subpage_id
@@ -512,11 +478,11 @@ impl Constellation {
let update_child_rect = |child_frame_tree: &mut ChildFrameTree, is_active: bool| {
child_frame_tree.rect = Some(rect.clone());
// NOTE: work around borrowchk issues
- let pipeline = &child_frame_tree.frame_tree.borrow().pipeline.borrow();
- if !already_sent.contains(&pipeline.get().borrow().id) {
+ let pipeline = &child_frame_tree.frame_tree.pipeline;
+ if !already_sent.contains(&pipeline.get().id) {
let Size2D { width, height } = rect.size;
if is_active {
- let pipeline = pipeline.get().borrow();
+ let pipeline = pipeline.get();
let ScriptChan(ref script_chan) = pipeline.script_chan;
script_chan.send(ResizeMsg(pipeline.id, Size2D {
width: width as uint,
@@ -526,8 +492,7 @@ impl Constellation {
LayerId::null(),
rect));
} else {
- let pipeline = pipeline.get().borrow();
- already_sent.insert(pipeline.id);
+ already_sent.insert(pipeline.get().id);
}
};
};
@@ -535,20 +500,18 @@ impl Constellation {
// If the subframe is in the current frame tree, the compositor needs the new size
for current_frame in self.current_frame().iter() {
debug!("Constellation: Sending size for frame in current frame tree.");
- let source_frame = current_frame.borrow().find(pipeline_id);
+ let source_frame = current_frame.find(pipeline_id);
for source_frame in source_frame.iter() {
- // NOTE: work around borrowchk issues
- let mut tmp = source_frame.borrow().children.borrow_mut();
- let found_child = tmp.get().mut_iter().find(|child| subpage_eq(child));
+ let mut children = source_frame.children.get();
+ let found_child = children.mut_iter().find(|child| subpage_eq(child));
found_child.map(|child| update_child_rect(child, true));
}
}
// Update all frames with matching pipeline- and subpage-ids
for frame_tree in frames.iter() {
- // NOTE: work around borrowchk issues
- let mut tmp = frame_tree.borrow().children.borrow_mut();
- let found_child = tmp.get().mut_iter().find(|child| subpage_eq(child));
+ let mut children = frame_tree.children.get();
+ let found_child = children.mut_iter().find(|child| subpage_eq(child));
found_child.map(|child| update_child_rect(child, false));
}
}
@@ -575,7 +538,7 @@ impl Constellation {
let frame_trees: ~[Rc<FrameTree>] = {
let matching_navi_frames = self.navigation_context.find_all(source_pipeline_id);
let matching_pending_frames = self.pending_frames.iter().filter_map(|frame_change| {
- frame_change.after.borrow().find(source_pipeline_id)
+ frame_change.after.find(source_pipeline_id)
});
matching_navi_frames.move_iter().chain(matching_pending_frames).collect()
};
@@ -594,7 +557,7 @@ impl Constellation {
source Id of LoadIframeUrlMsg does have an associated pipeline in
constellation. This should be impossible.").clone();
- let source_url = source_pipeline.borrow().url.get().clone().expect("Constellation: LoadUrlIframeMsg's
+ let source_url = source_pipeline.url.get().clone().expect("Constellation: LoadUrlIframeMsg's
source's Url is None. There should never be a LoadUrlIframeMsg from a pipeline
that was never given a url to load.");
@@ -631,9 +594,7 @@ impl Constellation {
let pipeline_wrapped = Rc::new(pipeline);
let rect = self.pending_sizes.pop(&(source_pipeline_id, subpage_id));
for frame_tree in frame_trees.iter() {
- // NOTE: work around borrowchk issues
- let mut tmp = frame_tree.borrow().children.borrow_mut();
- tmp.get().push(ChildFrameTree {
+ frame_tree.children.get().push(ChildFrameTree {
frame_tree: Rc::new(FrameTree {
pipeline: RefCell::new(pipeline_wrapped.clone()),
parent: RefCell::new(Some(source_pipeline.clone())),
@@ -642,13 +603,13 @@ impl Constellation {
rect: rect,
});
}
- self.pipelines.insert(pipeline_wrapped.borrow().id, pipeline_wrapped);
+ self.pipelines.insert(pipeline_wrapped.id, pipeline_wrapped);
}
fn handle_load_url_msg(&mut self, source_id: PipelineId, url: Url) {
debug!("Constellation: received message to load {:s}", url.to_str());
// Make sure no pending page would be overridden.
- let source_frame = self.current_frame().get_ref().borrow().find(source_id).expect(
+ let source_frame = self.current_frame().get_ref().find(source_id).expect(
"Constellation: received a LoadUrlMsg from a pipeline_id associated
with a pipeline not in the active frame tree. This should be
impossible.");
@@ -657,10 +618,10 @@ impl Constellation {
let old_id = frame_change.before.expect("Constellation: Received load msg
from pipeline, but there is no currently active page. This should
be impossible.");
- let changing_frame = self.current_frame().get_ref().borrow().find(old_id).expect("Constellation:
+ let changing_frame = self.current_frame().get_ref().find(old_id).expect("Constellation:
Pending change has non-active source pipeline. This should be
impossible.");
- if changing_frame.borrow().contains(source_id) || source_frame.borrow().contains(old_id) {
+ if changing_frame.contains(source_id) || source_frame.contains(old_id) {
// id that sent load msg is being changed already; abort
return;
}
@@ -668,10 +629,8 @@ impl Constellation {
// Being here means either there are no pending frames, or none of the pending
// changes would be overriden by changing the subframe associated with source_id.
- let parent = source_frame.borrow().parent.clone();
- // NOTE: work around borrowchk issues
- let tmp = source_frame.borrow().pipeline.borrow();
- let subpage_id = tmp.get().borrow().subpage_id;
+ let parent = source_frame.parent.clone();
+ let subpage_id = source_frame.pipeline.get().subpage_id;
let next_pipeline_id = self.get_next_pipeline_id();
let pipeline = Pipeline::create(next_pipeline_id,
@@ -696,7 +655,7 @@ impl Constellation {
}),
navigation_type: constellation_msg::Load,
});
- self.pipelines.insert(pipeline_wrapped.borrow().id, pipeline_wrapped);
+ self.pipelines.insert(pipeline_wrapped.id, pipeline_wrapped);
}
fn handle_navigate_msg(&mut self, direction: constellation_msg::NavigationDirection) {
@@ -713,10 +672,8 @@ impl Constellation {
return;
} else {
let old = self.current_frame().get_ref();
- for frame in old.borrow().iter() {
- // NOTE: work around borrowchk issues
- let tmp = frame.borrow().pipeline.borrow();
- tmp.get().borrow().revoke_paint_permission();
+ for frame in old.iter() {
+ frame.pipeline.get().revoke_paint_permission();
}
}
self.navigation_context.forward()
@@ -727,20 +684,16 @@ impl Constellation {
return;
} else {
let old = self.current_frame().get_ref();
- for frame in old.borrow().iter() {
- // NOTE: work around borrowchk issues
- let tmp = frame.borrow().pipeline.borrow();
- tmp.get().borrow().revoke_paint_permission();
+ for frame in old.iter() {
+ frame.pipeline.get().revoke_paint_permission();
}
}
self.navigation_context.back()
}
};
- for frame in destination_frame.borrow().iter() {
- // NOTE: work around borrowchk issues
- let pipeline = &frame.borrow().pipeline.borrow();
- pipeline.get().borrow().reload();
+ for frame in destination_frame.iter() {
+ frame.pipeline.get().reload();
}
self.grant_paint_permission(destination_frame, constellation_msg::Navigate);
@@ -756,11 +709,9 @@ impl Constellation {
// Messages originating in the current frame are not navigations;
// TODO(tkuehn): In fact, this kind of message might be provably
// impossible to occur.
- if current_frame.borrow().contains(pipeline_id) {
- for frame in current_frame.borrow().iter() {
- // NOTE: work around borrowchk issues
- let tmp = frame.borrow().pipeline.borrow();
- tmp.get().borrow().grant_paint_permission();
+ if current_frame.contains(pipeline_id) {
+ for frame in current_frame.iter() {
+ frame.pipeline.get().grant_paint_permission();
}
return;
}
@@ -770,18 +721,15 @@ impl Constellation {
// If it is not found, it simply means that this pipeline will not receive
// permission to paint.
let pending_index = self.pending_frames.iter().rposition(|frame_change| {
- // NOTE: work around borrowchk issues
- let tmp = frame_change.after.borrow().pipeline.borrow();
- tmp.get().borrow().id == pipeline_id
+ frame_change.after.pipeline.get().id == pipeline_id
});
for &pending_index in pending_index.iter() {
- let frame_change = self.pending_frames.swap_remove(pending_index);
+ let frame_change = self.pending_frames.swap_remove(pending_index).unwrap();
let to_add = frame_change.after.clone();
// Create the next frame tree that will be given to the compositor
// NOTE: work around borrowchk issues
- let tmp = to_add.borrow().parent.clone();
- let tmp = tmp.borrow();
+ let tmp = to_add.parent.clone();
let next_frame_tree = if tmp.get().is_some() {
// NOTE: work around borrowchk issues
let tmp = self.current_frame().get_ref();
@@ -796,14 +744,12 @@ impl Constellation {
debug!("Constellation: revoking permission from {:?}", revoke_id);
let current_frame = self.current_frame().get_ref();
- let to_revoke = current_frame.borrow().find(revoke_id).expect(
+ let to_revoke = current_frame.find(revoke_id).expect(
"Constellation: pending frame change refers to an old
frame not contained in the current frame. This is a bug");
- for frame in to_revoke.borrow().iter() {
- // NOTE: work around borrowchk issues
- let tmp = frame.borrow().pipeline.borrow();
- tmp.get().borrow().revoke_paint_permission();
+ for frame in to_revoke.iter() {
+ frame.pipeline.get().revoke_paint_permission();
}
// If to_add is not the root frame, then replace revoked_frame with it.
@@ -811,45 +757,30 @@ impl Constellation {
// NOTE: work around borrowchk issue
let mut flag = false;
{
- // NOTE: work around borrowchk issue
- let tmp = to_add.borrow().parent.borrow();
- if tmp.get().is_some() {
+ if to_add.parent.get().is_some() {
debug!("Constellation: replacing {:?} with {:?} in {:?}",
- revoke_id, {
- // NOTE: work around borrowchk issues
- let tmp = to_add.borrow().pipeline.borrow();
- tmp.get().borrow().id
- }, {
- // NOTE: work around borrowchk issues
- let tmp = next_frame_tree.borrow().pipeline.borrow();
- tmp.get().borrow().id
- });
+ revoke_id, to_add.pipeline.get().id,
+ next_frame_tree.pipeline.get().id);
flag = true;
}
}
if flag {
- next_frame_tree.borrow().replace_child(revoke_id, to_add);
+ next_frame_tree.replace_child(revoke_id, to_add);
}
}
None => {
// Add to_add to parent's children, if it is not the root
- let parent = &to_add.borrow().parent;
- // NOTE: work around borrowchk issue
- let tmp = parent.borrow();
- for parent in tmp.get().iter() {
- // NOTE: work around borrowchk issues
- let tmp = to_add.borrow().pipeline.borrow();
- let subpage_id = tmp.get().borrow().subpage_id
+ let parent = &to_add.parent;
+ for parent in parent.get().iter() {
+ let subpage_id = to_add.pipeline.get().subpage_id
.expect("Constellation:
Child frame's subpage id is None. This should be impossible.");
- let rect = self.pending_sizes.pop(&(parent.borrow().id, subpage_id));
- let parent = next_frame_tree.borrow().find(parent.borrow().id).expect(
+ let rect = self.pending_sizes.pop(&(parent.id, subpage_id));
+ let parent = next_frame_tree.find(parent.id).expect(
"Constellation: pending frame has a parent frame that is not
active. This is a bug.");
- // NOTE: work around borrowchk issue
- let mut tmp = parent.borrow().children.borrow_mut();
- tmp.get().push(ChildFrameTree {
+ parent.children.get().push(ChildFrameTree {
frame_tree: to_add.clone(),
rect: rect,
});
@@ -866,18 +797,14 @@ impl Constellation {
let mut already_seen = HashSet::new();
for frame_tree in self.current_frame().iter() {
debug!("constellation sending resize message to active frame");
- // NOTE: work around borrowchk issues
- let tmp = frame_tree.borrow().pipeline.borrow();
- let pipeline = tmp.get().borrow();
+ let pipeline = &frame_tree.pipeline.get();
let ScriptChan(ref chan) = pipeline.script_chan;
chan.try_send(ResizeMsg(pipeline.id, new_size));
already_seen.insert(pipeline.id);
}
for frame_tree in self.navigation_context.previous.iter()
.chain(self.navigation_context.next.iter()) {
- // NOTE: work around borrowchk issues
- let tmp = frame_tree.borrow().pipeline.borrow();
- let pipeline = &tmp.get().borrow();
+ let pipeline = &frame_tree.pipeline.get();
if !already_seen.contains(&pipeline.id) {
debug!("constellation sending resize message to inactive frame");
let ScriptChan(ref chan) = pipeline.script_chan;
@@ -889,14 +816,10 @@ impl Constellation {
// If there are any pending outermost frames, then tell them to resize. (This is how the
// initial window size gets sent to the first page loaded, giving it permission to reflow.)
for change in self.pending_frames.iter() {
- let frame_tree = change.after.borrow();
- // NOTE: work around borrowchk issue
- let tmp = frame_tree.parent.borrow();
- if tmp.get().is_none() {
+ let frame_tree = &change.after;
+ if frame_tree.parent.get().is_none() {
debug!("constellation sending resize message to pending outer frame");
- // NOTE: work around borrowchk issues
- let tmp = frame_tree.pipeline.borrow();
- let pipeline = tmp.get().borrow();
+ let pipeline = frame_tree.pipeline.get();
let ScriptChan(ref chan) = pipeline.script_chan;
chan.send(ResizeMsg(pipeline.id, new_size))
}
@@ -909,10 +832,8 @@ impl Constellation {
fn close_pipelines(&mut self, frame_tree: Rc<FrameTree>) {
// TODO(tkuehn): should only exit once per unique script task,
// and then that script task will handle sub-exits
- for frame_tree in frame_tree.borrow().iter() {
- // NOTE: work around borrowchk issues
- let tmp = frame_tree.borrow().pipeline.borrow();
- let pipeline = tmp.get().borrow();
+ for frame_tree in frame_tree.iter() {
+ let pipeline = frame_tree.pipeline.get();
pipeline.exit();
self.pipelines.remove(&pipeline.id);
}
@@ -920,16 +841,12 @@ impl Constellation {
fn handle_evicted_frames(&mut self, evicted: ~[Rc<FrameTree>]) {
for frame_tree in evicted.iter() {
- // NOTE: work around borrowchk issues
- let tmp = frame_tree.borrow().pipeline.borrow();
- if !self.navigation_context.contains(tmp.get().borrow().id) {
+ if !self.navigation_context.contains(frame_tree.pipeline.get().id) {
self.close_pipelines(frame_tree.clone());
} else {
- // NOTE: work around borrowchk issue
- let tmp = frame_tree.borrow().children.borrow();
- let mut frames = tmp.get().iter()
- .map(|child| child.frame_tree.clone());
- self.handle_evicted_frames(frames.collect());
+ let frames = frame_tree.children.get().iter()
+ .map(|child| child.frame_tree.clone()).collect();
+ self.handle_evicted_frames(frames);
}
}
}
@@ -951,16 +868,14 @@ impl Constellation {
}
fn set_ids(&self, frame_tree: &Rc<FrameTree>) {
- let (port, chan) = Chan::new();
+ let (chan, port) = channel();
debug!("Constellation sending SetIds");
- self.compositor_chan.send(SetIds(frame_tree.borrow().to_sendable(), chan, self.chan.clone()));
+ self.compositor_chan.send(SetIds(frame_tree.to_sendable(), chan, self.chan.clone()));
match port.recv_opt() {
Some(()) => {
- let mut iter = frame_tree.borrow().iter();
+ let mut iter = frame_tree.iter();
for frame in iter {
- // NOTE: work around borrowchk issues
- let tmp = frame.borrow().pipeline.borrow();
- tmp.get().borrow().grant_paint_permission();
+ frame.pipeline.get().grant_paint_permission();
}
}
None => {} // message has been discarded, probably shutting down
diff --git a/src/components/main/css/matching.rs b/src/components/main/css/matching.rs
index 03d676045df..cb60e0d9781 100644
--- a/src/components/main/css/matching.rs
+++ b/src/components/main/css/matching.rs
@@ -18,7 +18,7 @@ use servo_util::smallvec::{SmallVec, SmallVec0, SmallVec16};
use servo_util::str::DOMString;
use std::cast;
use std::hash::{Hash, sip};
-use std::vec::Items;
+use std::slice::Items;
use style::{After, Before, ComputedValues, MatchedProperty, Stylist, TElement, TNode, cascade};
use sync::Arc;
@@ -458,13 +458,8 @@ impl<'ln> MatchMethods for LayoutNode<'ln> {
Some(shared_style) => {
// Yay, cache hit. Share the style.
let mut layout_data_ref = self.mutate_layout_data();
- match *layout_data_ref.get() {
- None => fail!(),
- Some(ref mut layout_data_ref) => {
- layout_data_ref.data.style = Some(shared_style);
- return StyleWasShared(i)
- }
- }
+ layout_data_ref.get_mut_ref().data.style = Some(shared_style);
+ return StyleWasShared(i)
}
None => {}
}
@@ -558,9 +553,9 @@ impl<'ln> MatchMethods for LayoutNode<'ln> {
};
let mut layout_data_ref = self.mutate_layout_data();
- match *layout_data_ref.get() {
- None => fail!("no layout data"),
- Some(ref mut layout_data) => {
+ match &mut *layout_data_ref {
+ &None => fail!("no layout data"),
+ &Some(ref mut layout_data) => {
self.cascade_node_pseudo_element(parent_style,
applicable_declarations.normal.as_slice(),
&mut layout_data.data.style,
diff --git a/src/components/main/css/node_util.rs b/src/components/main/css/node_util.rs
index 3b37d4ce016..f449a99ac44 100644
--- a/src/components/main/css/node_util.rs
+++ b/src/components/main/css/node_util.rs
@@ -27,8 +27,7 @@ impl<'ln> NodeUtil for ThreadSafeLayoutNode<'ln> {
let layout_data_ref = self.borrow_layout_data();
match self.get_element_type() {
Before | BeforeBlock => {
- cast::transmute_region(layout_data_ref.get()
- .as_ref()
+ cast::transmute_region(layout_data_ref.as_ref()
.unwrap()
.data
.before_style
@@ -36,8 +35,7 @@ impl<'ln> NodeUtil for ThreadSafeLayoutNode<'ln> {
.unwrap())
}
After | AfterBlock => {
- cast::transmute_region(layout_data_ref.get()
- .as_ref()
+ cast::transmute_region(layout_data_ref.as_ref()
.unwrap()
.data
.after_style
@@ -45,8 +43,7 @@ impl<'ln> NodeUtil for ThreadSafeLayoutNode<'ln> {
.unwrap())
}
Normal => {
- cast::transmute_region(layout_data_ref.get()
- .as_ref()
+ cast::transmute_region(layout_data_ref.as_ref()
.unwrap()
.data
.style
@@ -60,7 +57,7 @@ impl<'ln> NodeUtil for ThreadSafeLayoutNode<'ln> {
/// Does this node have a computed style yet?
fn have_css_select_results(&self) -> bool {
let layout_data_ref = self.borrow_layout_data();
- layout_data_ref.get().get_ref().data.style.is_some()
+ layout_data_ref.get_ref().data.style.is_some()
}
/// Get the description of how to account for recent style changes.
@@ -76,7 +73,6 @@ impl<'ln> NodeUtil for ThreadSafeLayoutNode<'ln> {
let layout_data_ref = self.borrow_layout_data();
layout_data_ref
- .get()
.get_ref()
.data
.restyle_damage
@@ -87,8 +83,8 @@ impl<'ln> NodeUtil for ThreadSafeLayoutNode<'ln> {
/// Set the restyle damage field.
fn set_restyle_damage(&self, damage: RestyleDamage) {
let mut layout_data_ref = self.mutate_layout_data();
- match *layout_data_ref.get() {
- Some(ref mut layout_data) => layout_data.data.restyle_damage = Some(damage.to_int()),
+ match &mut *layout_data_ref {
+ &Some(ref mut layout_data) => layout_data.data.restyle_damage = Some(damage.to_int()),
_ => fail!("no layout data for this node"),
}
}
diff --git a/src/components/main/css/select.rs b/src/components/main/css/select.rs
index 10ac49875d5..9465a6ba290 100644
--- a/src/components/main/css/select.rs
+++ b/src/components/main/css/select.rs
@@ -3,7 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use style::{Stylesheet, Stylist, UserAgentOrigin, with_errors_silenced};
-use extra::url;
+use url;
pub fn new_stylist() -> Stylist {
diff --git a/src/components/main/layout/block.rs b/src/components/main/layout/block.rs
index d8132650c70..b9f0e6fee55 100644
--- a/src/components/main/layout/block.rs
+++ b/src/components/main/layout/block.rs
@@ -755,8 +755,7 @@ impl BlockFlow {
// Consume all the static y-offsets bubbled up by kid.
for y_offset in kid_base.abs_descendants.static_y_offsets.move_iter() {
// The offsets are wrt the kid flow box. Translate them to current flow.
- y_offset = y_offset + kid_base.position.origin.y;
- abs_descendant_y_offsets.push(y_offset);
+ abs_descendant_y_offsets.push(y_offset + kid_base.position.origin.y);
}
}
}
@@ -1533,10 +1532,6 @@ impl Flow for BlockFlow {
self
}
- fn is_store_overflow_delayed(&mut self) -> bool {
- self.is_absolutely_positioned()
- }
-
/* Recursively (bottom-up) determine the context's preferred and
minimum widths. When called on this context, all child contexts
have had their min/pref widths set. This function must decide
@@ -1897,10 +1892,10 @@ pub trait WidthAndMarginsComputer {
// The associated box is the border box of this flow.
let mut position_ref = box_.border_box.borrow_mut();
// Left border edge.
- position_ref.get().origin.x = box_.margin.get().left;
+ position_ref.origin.x = box_.margin.borrow().left;
// Border box width
- position_ref.get().size.width = solution.width + box_.noncontent_width();
+ position_ref.size.width = solution.width + box_.noncontent_width();
}
/// Set the x coordinate of the given flow if it is absolutely positioned.
diff --git a/src/components/main/layout/box_.rs b/src/components/main/layout/box_.rs
index f5acd633944..ae9dc8ad381 100644
--- a/src/components/main/layout/box_.rs
+++ b/src/components/main/layout/box_.rs
@@ -16,7 +16,6 @@ use layout::model;
use layout::util::OpaqueNodeMethods;
use layout::wrapper::{TLayoutNode, ThreadSafeLayoutNode};
-use extra::url::Url;
use sync::{MutexArc, Arc};
use geom::{Point2D, Rect, Size2D, SideOffsets2D};
use geom::approxeq::ApproxEq;
@@ -40,12 +39,14 @@ use servo_util::smallvec::{SmallVec, SmallVec0};
use servo_util::str::is_whitespace;
use std::cast;
use std::cell::RefCell;
+use std::from_str::FromStr;
use std::num::Zero;
use style::{ComputedValues, TElement, TNode, cascade, initial_values};
use style::computed_values::{LengthOrPercentage, LengthOrPercentageOrAuto, overflow, LPA_Auto};
use style::computed_values::{background_attachment, background_repeat, border_style, clear};
use style::computed_values::{font_family, line_height, position, text_align, text_decoration};
use style::computed_values::{vertical_align, visibility, white_space};
+use url::Url;
/// Boxes (`struct Box`) are the leaves of the layout tree. They cannot position themselves. In
/// general, boxes do not have a simple correspondence with CSS boxes in the specification:
@@ -157,7 +158,7 @@ impl ImageBoxInfo {
/// Returns the calculated width of the image, accounting for the width attribute.
pub fn computed_width(&self) -> Au {
- match self.computed_width.borrow().get() {
+ match &*self.computed_width.borrow() {
&Some(width) => {
width
},
@@ -169,7 +170,7 @@ impl ImageBoxInfo {
/// Returns width of image(just original width)
pub fn image_width(&self) -> Au {
let mut image_ref = self.image.borrow_mut();
- Au::from_px(image_ref.get().get_size().unwrap_or(Size2D(0,0)).width)
+ Au::from_px(image_ref.get_size().unwrap_or(Size2D(0,0)).width)
}
// Return used value for width or height.
@@ -193,7 +194,7 @@ impl ImageBoxInfo {
}
/// Returns the calculated height of the image, accounting for the height attribute.
pub fn computed_height(&self) -> Au {
- match self.computed_height.borrow().get() {
+ match &*self.computed_height.borrow() {
&Some(height) => {
height
},
@@ -206,7 +207,7 @@ impl ImageBoxInfo {
/// Returns height of image(just original height)
pub fn image_height(&self) -> Au {
let mut image_ref = self.image.borrow_mut();
- Au::from_px(image_ref.get().get_size().unwrap_or(Size2D(0,0)).height)
+ Au::from_px(image_ref.get_size().unwrap_or(Size2D(0,0)).height)
}
}
@@ -353,7 +354,7 @@ macro_rules! def_noncontent( ($side:ident, $get:ident, $inline_get:ident) => (
pub fn $inline_get(&self) -> Au {
let mut val = Au::new(0);
let info = self.inline_info.borrow();
- match info.get() {
+ match &*info {
&Some(ref info) => {
for info in info.parent_info.iter() {
val = val + info.border.$side + info.padding.$side;
@@ -372,9 +373,9 @@ macro_rules! def_noncontent_horiz( ($side:ident, $merge:ident, $clear:ident) =>
let mut info = self.inline_info.borrow_mut();
let other_info = other_box.inline_info.borrow();
- match other_info.get() {
+ match &*other_info {
&Some(ref other_info) => {
- match info.get() {
+ match &mut *info {
&Some(ref mut info) => {
for other_item in other_info.parent_info.iter() {
for item in info.parent_info.mut_iter() {
@@ -396,7 +397,7 @@ macro_rules! def_noncontent_horiz( ($side:ident, $merge:ident, $clear:ident) =>
pub fn $clear(&self) {
let mut info = self.inline_info.borrow_mut();
- match info.get() {
+ match &mut *info {
&Some(ref mut info) => {
for item in info.parent_info.mut_iter() {
item.border.$side = Au::new(0);
@@ -807,7 +808,7 @@ impl Box {
// Go over the ancestor boxes and add all relative offsets (if any).
let info = self.inline_info.borrow();
- match info.get() {
+ match &*info {
&Some(ref info) => {
for info in info.parent_info.iter() {
if info.style.get().Box.get().position == position::relative {
@@ -959,7 +960,7 @@ impl Box {
// inefficient. What we really want is something like "nearest ancestor element that
// doesn't have a box".
let info = self.inline_info.borrow();
- match info.get() {
+ match &*info {
&Some(ref box_info) => {
let mut bg_rect = absolute_bounds.clone();
for info in box_info.parent_info.as_slice().rev_iter() {
@@ -972,10 +973,10 @@ impl Box {
if !background_color.alpha.approx_eq(&0.0) {
let solid_color_display_item = ~SolidColorDisplayItem {
base: BaseDisplayItem {
- bounds: bg_rect.clone(),
- node: self.node,
- },
- color: background_color.to_gfx_color(),
+ bounds: bg_rect.clone(),
+ node: self.node,
+ },
+ color: background_color.to_gfx_color(),
};
list.push(SolidColorDisplayItemClass(solid_color_display_item))
@@ -1312,7 +1313,7 @@ impl Box {
let mut flow_flags = flow::base(flow).flags_info.clone();
let inline_info = self.inline_info.borrow();
- match inline_info.get() {
+ match &*inline_info {
&Some(ref info) => {
for data in info.parent_info.as_slice().rev_iter() {
let parent_info = FlowFlagsInfo::new(data.style.get());
@@ -1385,7 +1386,7 @@ impl Box {
- self.noncontent_inline_right();
bounds.size.height = bounds.size.height - self.noncontent_height();
- match image_ref.get().get_image() {
+ match image_ref.get_image() {
Some(image) => {
debug!("(building display list) building image box");
@@ -1716,7 +1717,7 @@ impl Box {
};
let mut position = self.border_box.borrow_mut();
- position.get().size.width = width + self.noncontent_width() +
+ position.size.width = width + self.noncontent_width() +
self.noncontent_inline_left() + self.noncontent_inline_right();
image_box_info.computed_width.set(Some(width));
}
@@ -1724,7 +1725,7 @@ impl Box {
// Scanned text boxes will have already had their
// content_widths assigned by this point.
let mut position = self.border_box.borrow_mut();
- position.get().size.width = position.get().size.width + self.noncontent_width() +
+ position.size.width = position.size.width + self.noncontent_width() +
self.noncontent_inline_left() + self.noncontent_inline_right();
}
TableColumnBox(_) => fail!("Table column boxes do not have width"),
@@ -1766,15 +1767,15 @@ impl Box {
let mut position = self.border_box.borrow_mut();
image_box_info.computed_height.set(Some(height));
- position.get().size.height = height + self.noncontent_height()
+ position.size.height = height + self.noncontent_height()
}
ScannedTextBox(_) => {
// Scanned text boxes will have already had their widths assigned by this point
let mut position = self.border_box.borrow_mut();
// Scanned text boxes' content heights are calculated by the
// text run scanner during Flow construction.
- position.get().size.height
- = position.get().size.height + self.noncontent_height()
+ position.size.height
+ = position.size.height + self.noncontent_height()
}
TableColumnBox(_) => fail!("Table column boxes do not have height"),
UnscannedTextBox(_) => fail!("Unscanned text boxes should have been scanned by now!"),
diff --git a/src/components/main/layout/construct.rs b/src/components/main/layout/construct.rs
index e24805f687a..398f915197b 100644
--- a/src/components/main/layout/construct.rs
+++ b/src/components/main/layout/construct.rs
@@ -44,7 +44,6 @@ use layout::util::{LayoutDataAccess, OpaqueNodeMethods};
use layout::wrapper::{PostorderNodeMutTraversal, TLayoutNode, ThreadSafeLayoutNode};
use layout::wrapper::{Before, BeforeBlock, After, AfterBlock, Normal};
-use extra::url::Url;
use gfx::display_list::OpaqueNode;
use gfx::font_context::FontContext;
use script::dom::bindings::codegen::InheritTypes::TextCast;
@@ -68,6 +67,7 @@ use std::num::Zero;
use style::ComputedValues;
use style::computed_values::{display, position, float, white_space};
use sync::Arc;
+use url::Url;
/// The results of flow construction for a DOM node.
pub enum ConstructionResult {
@@ -683,11 +683,11 @@ impl<'a> FlowConstructor<'a> {
let parent_box = Box::new(self, parent_node);
let font_style = parent_box.font_style();
let font_group = self.font_context().get_resolved_font_for_style(&font_style);
- let (font_ascent,font_descent) = font_group.borrow().with_mut( |fg| {
- fg.fonts[0].borrow().with_mut( |font| {
- (font.metrics.ascent,font.metrics.descent)
- })
- });
+ let (font_ascent,font_descent) = {
+ let fg = font_group.borrow();
+ let font = fg.fonts[0].borrow();
+ (font.metrics.ascent,font.metrics.descent)
+ };
let boxes_len = boxes.len();
parent_box.compute_borders(parent_box.style());
@@ -697,8 +697,9 @@ impl<'a> FlowConstructor<'a> {
parent_box.compute_padding(parent_box.style(), Au(0));
for (i, box_) in boxes.iter().enumerate() {
- if box_.inline_info.with( |data| data.is_none() ) {
- box_.inline_info.set(Some(InlineInfo::new()));
+ let mut info = box_.inline_info.borrow_mut();
+ if info.is_none() {
+ *info = Some(InlineInfo::new());
}
let mut border = parent_box.border.get();
@@ -712,8 +713,7 @@ impl<'a> FlowConstructor<'a> {
padding.right = Zero::zero()
}
- let mut info = box_.inline_info.borrow_mut();
- match info.get() {
+ match &mut *info {
&Some(ref mut info) => {
// TODO(ksh8281): Compute margins.
info.parent_info.push(InlineParentInfo {
@@ -1122,8 +1122,8 @@ impl<'ln> NodeUtils for ThreadSafeLayoutNode<'ln> {
#[inline(always)]
fn set_flow_construction_result(&self, result: ConstructionResult) {
let mut layout_data_ref = self.mutate_layout_data();
- match *layout_data_ref.get() {
- Some(ref mut layout_data) =>{
+ match &mut *layout_data_ref {
+ &Some(ref mut layout_data) =>{
match self.get_element_type() {
Before | BeforeBlock => {
layout_data.data.before_flow_construction_result = result
@@ -1134,15 +1134,15 @@ impl<'ln> NodeUtils for ThreadSafeLayoutNode<'ln> {
Normal => layout_data.data.flow_construction_result = result,
}
},
- None => fail!("no layout data"),
+ &None => fail!("no layout data"),
}
}
#[inline(always)]
fn swap_out_construction_result(&self) -> ConstructionResult {
let mut layout_data_ref = self.mutate_layout_data();
- match *layout_data_ref.get() {
- Some(ref mut layout_data) => {
+ match &mut *layout_data_ref {
+ &Some(ref mut layout_data) => {
match self.get_element_type() {
Before | BeforeBlock => {
mem::replace(&mut layout_data.data.before_flow_construction_result,
@@ -1158,7 +1158,7 @@ impl<'ln> NodeUtils for ThreadSafeLayoutNode<'ln> {
}
}
}
- None => fail!("no layout data"),
+ &None => fail!("no layout data"),
}
}
}
diff --git a/src/components/main/layout/context.rs b/src/components/main/layout/context.rs
index 558d42924be..1b13470ed30 100644
--- a/src/components/main/layout/context.rs
+++ b/src/components/main/layout/context.rs
@@ -6,7 +6,6 @@
use css::matching::{ApplicableDeclarationsCache, StyleSharingCandidateCache};
-use extra::url::Url;
use geom::size::Size2D;
use gfx::display_list::OpaqueNode;
use gfx::font_context::{FontContext, FontContextInfo};
@@ -23,6 +22,7 @@ use std::rt::local::Local;
use std::rt::task::Task;
use style::{ComputedValues, Stylist};
use sync::{Arc, MutexArc};
+use url::Url;
#[thread_local]
static mut FONT_CONTEXT: *mut FontContext = 0 as *mut FontContext;
diff --git a/src/components/main/layout/extra.rs b/src/components/main/layout/extra.rs
index a5724aaabcd..387bbcd91e9 100644
--- a/src/components/main/layout/extra.rs
+++ b/src/components/main/layout/extra.rs
@@ -20,9 +20,9 @@ impl<'ln> LayoutAuxMethods for LayoutNode<'ln> {
/// FIXME(pcwalton): Do this as part of box building instead of in a traversal.
fn initialize_layout_data(&self, chan: LayoutChan) {
let mut layout_data_ref = self.mutate_layout_data();
- match *layout_data_ref.get() {
+ match *layout_data_ref {
None => {
- *layout_data_ref.get() = Some(LayoutDataWrapper {
+ *layout_data_ref = Some(LayoutDataWrapper {
chan: Some(chan),
data: ~PrivateLayoutData::new(),
});
diff --git a/src/components/main/layout/flow.rs b/src/components/main/layout/flow.rs
index d9bcb967670..2fd6b310d86 100644
--- a/src/components/main/layout/flow.rs
+++ b/src/components/main/layout/flow.rs
@@ -59,7 +59,7 @@ use servo_util::smallvec::{SmallVec, SmallVec0};
use std::cast;
use std::iter::Zip;
use std::sync::atomics::Relaxed;
-use std::vec::MutItems;
+use std::slice::MutItems;
use style::ComputedValues;
use style::computed_values::{clear, position, text_align};
diff --git a/src/components/main/layout/inline.rs b/src/components/main/layout/inline.rs
index 4c3e10fc265..940d2b50d95 100644
--- a/src/components/main/layout/inline.rs
+++ b/src/components/main/layout/inline.rs
@@ -821,7 +821,7 @@ impl Flow for InlineFlow {
bottommost = bottom_from_base;
}
- cur_box.border_box.borrow_mut().get().origin.y = line.bounds.origin.y + offset + top;
+ cur_box.border_box.borrow_mut().origin.y = line.bounds.origin.y + offset + top;
}
// Calculate the distance from baseline to the top of the biggest box with 'bottom'
@@ -850,21 +850,20 @@ impl Flow for InlineFlow {
_ => baseline_offset,
};
- cur_box.border_box.borrow_mut().get().origin.y = cur_box.border_box.get().origin.y +
+ cur_box.border_box.borrow_mut().origin.y = cur_box.border_box.get().origin.y +
adjust_offset;
- if cur_box.inline_info.with(|info| info.is_none()) {
- cur_box.inline_info.set(Some(InlineInfo::new()));
+ let mut info = cur_box.inline_info.borrow_mut();
+ if info.is_none() {
+ *info = Some(InlineInfo::new());
+ }
+ match &mut *info {
+ &Some(ref mut info) => {
+ // TODO (ksh8281) compute vertical-align, line-height
+ info.baseline = line.bounds.origin.y + baseline_offset;
+ },
+ &None => {}
}
- cur_box.inline_info.with_mut( |info| {
- match info {
- &Some(ref mut info) => {
- // TODO (ksh8281) compute vertical-align, line-height
- info.baseline = line.bounds.origin.y + baseline_offset;
- },
- &None => {}
- }
- });
}
// This is used to set the top y position of the next linebox in the next loop.
diff --git a/src/components/main/layout/layout_task.rs b/src/components/main/layout/layout_task.rs
index 267da50e62b..79ac3715a44 100644
--- a/src/components/main/layout/layout_task.rs
+++ b/src/components/main/layout/layout_task.rs
@@ -21,7 +21,6 @@ use layout::parallel;
use layout::util::{LayoutDataAccess, LayoutDataWrapper, OpaqueNodeMethods};
use layout::wrapper::{LayoutNode, TLayoutNode, ThreadSafeLayoutNode};
-use extra::url::Url;
use geom::point::Point2D;
use geom::rect::Rect;
use geom::size::Size2D;
@@ -55,13 +54,14 @@ use servo_util::task::send_on_failure;
use servo_util::workqueue::WorkQueue;
use std::cast::transmute;
use std::cast;
-use std::comm::Port;
+use std::comm::{channel, Sender, Receiver};
use std::mem;
use std::ptr;
use std::task;
use style::{AuthorOrigin, ComputedValues, Stylesheet, Stylist};
use style;
use sync::{Arc, MutexArc};
+use url::Url;
/// Information needed by the layout task.
pub struct LayoutTask {
@@ -69,7 +69,7 @@ pub struct LayoutTask {
id: PipelineId,
/// The port on which we receive messages.
- port: Port<Msg>,
+ port: Receiver<Msg>,
//// The channel to send messages to ourself.
chan: LayoutChan,
@@ -248,7 +248,7 @@ impl ImageResponder for LayoutImageResponder {
impl LayoutTask {
/// Spawns a new layout task.
pub fn create(id: PipelineId,
- port: Port<Msg>,
+ port: Receiver<Msg>,
chan: LayoutChan,
constellation_chan: ConstellationChan,
failure_msg: Failure,
@@ -257,7 +257,7 @@ impl LayoutTask {
img_cache_task: ImageCacheTask,
opts: Opts,
profiler_chan: ProfilerChan,
- shutdown_chan: Chan<()>) {
+ shutdown_chan: Sender<()>) {
let mut builder = task::task().named("LayoutTask");
let ConstellationChan(con_chan) = constellation_chan.clone();
send_on_failure(&mut builder, FailureMsg(failure_msg), con_chan);
@@ -280,7 +280,7 @@ impl LayoutTask {
/// Creates a new `LayoutTask` structure.
fn new(id: PipelineId,
- port: Port<Msg>,
+ port: Receiver<Msg>,
chan: LayoutChan,
constellation_chan: ConstellationChan,
script_chan: ScriptChan,
@@ -384,7 +384,7 @@ impl LayoutTask {
/// Enters a quiescent state in which no new messages except for `ReapLayoutDataMsg` will be
/// processed until an `ExitNowMsg` is received. A pong is immediately sent on the given
/// response channel.
- fn prepare_to_exit(&mut self, response_chan: Chan<()>) {
+ fn prepare_to_exit(&mut self, response_chan: Sender<()>) {
response_chan.send(());
loop {
match self.port.recv() {
@@ -409,7 +409,7 @@ impl LayoutTask {
/// Shuts down the layout task now. If there are any DOM nodes left, layout will now (safely)
/// crash.
fn exit_now(&mut self) {
- let (response_port, response_chan) = Chan::new();
+ let (response_chan, response_port) = channel();
match self.parallel_traversal {
None => {}
@@ -427,11 +427,11 @@ impl LayoutTask {
/// Retrieves the flow tree root from the root node.
fn get_layout_root(&self, node: LayoutNode) -> ~Flow {
let mut layout_data_ref = node.mutate_layout_data();
- let result = match *layout_data_ref.get() {
- Some(ref mut layout_data) => {
+ let result = match &mut *layout_data_ref {
+ &Some(ref mut layout_data) => {
mem::replace(&mut layout_data.data.flow_construction_result, NoConstructionResult)
}
- None => fail!("no layout data for root node"),
+ &None => fail!("no layout data for root node"),
};
let mut flow = match result {
FlowConstructionResult(mut flow, abs_descendants) => {
@@ -893,6 +893,6 @@ impl LayoutTask {
unsafe fn handle_reap_layout_data(&self, layout_data: LayoutDataRef) {
let mut layout_data_ref = layout_data.borrow_mut();
let _: Option<LayoutDataWrapper> = cast::transmute(
- mem::replace(layout_data_ref.get(), None));
+ mem::replace(&mut *layout_data_ref, None));
}
}
diff --git a/src/components/main/layout/parallel.rs b/src/components/main/layout/parallel.rs
index 3967609cf34..7150d518b0b 100644
--- a/src/components/main/layout/parallel.rs
+++ b/src/components/main/layout/parallel.rs
@@ -289,11 +289,11 @@ fn recalc_style_for_node(unsafe_layout_node: UnsafeLayoutNode,
}
if child_count != 0 {
let mut layout_data_ref = node.mutate_layout_data();
- match *layout_data_ref.get() {
- Some(ref mut layout_data) => {
+ match &mut *layout_data_ref {
+ &Some(ref mut layout_data) => {
layout_data.data.parallel.children_count.store(child_count as int, Relaxed)
}
- None => fail!("no layout data"),
+ &None => fail!("no layout data"),
}
// Enqueue kids.
@@ -338,11 +338,11 @@ fn construct_flows(mut unsafe_layout_node: UnsafeLayoutNode,
}
{
let mut layout_data_ref = node.mutate_layout_data();
- match *layout_data_ref.get() {
- Some(ref mut layout_data) => {
+ match &mut *layout_data_ref {
+ &Some(ref mut layout_data) => {
layout_data.data.parallel.children_count.store(child_count as int, Relaxed)
}
- None => fail!("no layout data"),
+ &None => fail!("no layout data"),
}
}
diff --git a/src/components/main/layout/table_row.rs b/src/components/main/layout/table_row.rs
index 8dbc40265d0..d0b251d08de 100644
--- a/src/components/main/layout/table_row.rs
+++ b/src/components/main/layout/table_row.rs
@@ -84,7 +84,7 @@ impl TableRowFlow {
fn assign_height_table_row_base(&mut self, layout_context: &mut LayoutContext, inorder: bool) {
let (top_offset, _, _) = self.initialize_offsets();
- let mut cur_y = top_offset;
+ let /* mut */ cur_y = top_offset;
// Per CSS 2.1 § 17.5.3, find max_y = max( computed `height`, minimum height of all cells )
let mut max_y = Au::new(0);
@@ -112,7 +112,7 @@ impl TableRowFlow {
Specified(value) => geometry::max(value, height)
};
}
- cur_y = cur_y + height;
+ // cur_y = cur_y + height;
// Assign the height of own box
//
diff --git a/src/components/main/layout/text.rs b/src/components/main/layout/text.rs
index 5aeb4650a3a..e321d4b8602 100644
--- a/src/components/main/layout/text.rs
+++ b/src/components/main/layout/text.rs
@@ -11,7 +11,7 @@ use gfx::font_context::FontContext;
use gfx::text::text_run::TextRun;
use gfx::text::util::{CompressWhitespaceNewline, transform_text, CompressNone};
use servo_util::range::Range;
-use std::vec;
+use std::slice;
use style::computed_values::white_space;
use sync::Arc;
@@ -135,7 +135,7 @@ impl TextRunScanner {
// font group fonts. This is probably achieved by creating the font group above
// and then letting `FontGroup` decide which `Font` to stick into the text run.
let fontgroup = font_context.get_resolved_font_for_style(&font_style);
- let run = ~fontgroup.borrow().with(|fg| fg.create_textrun(transformed_text.clone(), decoration));
+ let run = ~fontgroup.borrow().create_textrun(transformed_text.clone(), decoration);
debug!("TextRunScanner: pushing single text box in range: {} ({})",
self.clump,
@@ -180,7 +180,7 @@ impl TextRunScanner {
// First, transform/compress text of all the nodes.
let mut last_whitespace_in_clump = new_whitespace;
- let transformed_strs: ~[~str] = vec::from_fn(self.clump.length(), |i| {
+ let transformed_strs: ~[~str] = slice::from_fn(self.clump.length(), |i| {
// TODO(#113): We should be passing the compression context between calls to
// `transform_text`, so that boxes starting and/or ending with whitespace can
// be compressed correctly with respect to the text run.
@@ -220,11 +220,8 @@ impl TextRunScanner {
// sequence. If no clump takes ownership, however, it will leak.
let clump = self.clump;
let run = if clump.length() != 0 && run_str.len() > 0 {
- fontgroup.borrow().with(|fg| {
- fg.fonts[0].borrow().with_mut(|font| {
- Some(Arc::new(~TextRun::new(font, run_str.clone(), decoration)))
- })
- })
+ Some(Arc::new(~TextRun::new(&mut *fontgroup.borrow().fonts[0].borrow_mut(),
+ run_str.clone(), decoration)))
} else {
None
};
diff --git a/src/components/main/layout/util.rs b/src/components/main/layout/util.rs
index e9a2c47a16d..b375ae75002 100644
--- a/src/components/main/layout/util.rs
+++ b/src/components/main/layout/util.rs
@@ -17,7 +17,7 @@ use std::cast;
use std::cell::{Ref, RefMut};
use std::iter::Enumerate;
use std::libc::uintptr_t;
-use std::vec::Items;
+use std::slice::Items;
use style::ComputedValues;
use sync::Arc;
diff --git a/src/components/main/layout/wrapper.rs b/src/components/main/layout/wrapper.rs
index 755b5aa9fa7..b1160b46847 100644
--- a/src/components/main/layout/wrapper.rs
+++ b/src/components/main/layout/wrapper.rs
@@ -33,7 +33,6 @@
//! o Instead of `html_element_in_html_document()`, use
//! `html_element_in_html_document_for_layout()`.
-use extra::url::Url;
use script::dom::bindings::codegen::InheritTypes::{HTMLIFrameElementDerived};
use script::dom::bindings::codegen::InheritTypes::{HTMLImageElementDerived, TextDerived};
use script::dom::bindings::js::JS;
@@ -52,6 +51,7 @@ use style::{PropertyDeclarationBlock, TElement, TNode, AttrSelector, SpecificNam
use style::{AnyNamespace};
use style::computed_values::{content, display};
use layout::util::LayoutDataWrapper;
+use url::Url;
/// Allows some convenience methods on generic layout nodes.
pub trait TLayoutNode {
@@ -465,7 +465,7 @@ impl<'ln> TLayoutNode for ThreadSafeLayoutNode<'ln> {
fn text(&self) -> ~str {
if self.pseudo == Before || self.pseudo == After {
let layout_data_ref = self.borrow_layout_data();
- let node_layout_data_wrapper = layout_data_ref.get().get_ref();
+ let node_layout_data_wrapper = layout_data_ref.get_ref();
if self.pseudo == Before {
let before_style = node_layout_data_wrapper.data.before_style.get_ref();
@@ -557,7 +557,7 @@ impl<'ln> ThreadSafeLayoutNode<'ln> {
pub fn is_block(&self, kind: ElementType) -> bool {
let mut layout_data_ref = self.mutate_layout_data();
- let node_layout_data_wrapper = layout_data_ref.get().get_mut_ref();
+ let node_layout_data_wrapper = layout_data_ref.get_mut_ref();
let display = match kind {
Before | BeforeBlock => {
@@ -579,13 +579,13 @@ impl<'ln> ThreadSafeLayoutNode<'ln> {
pub fn has_before_pseudo(&self) -> bool {
let layout_data_wrapper = self.borrow_layout_data();
- let layout_data_wrapper_ref = layout_data_wrapper.get().get_ref();
+ let layout_data_wrapper_ref = layout_data_wrapper.get_ref();
layout_data_wrapper_ref.data.before_style.is_some()
}
pub fn has_after_pseudo(&self) -> bool {
let layout_data_wrapper = self.borrow_layout_data();
- let layout_data_wrapper_ref = layout_data_wrapper.get().get_ref();
+ let layout_data_wrapper_ref = layout_data_wrapper.get_ref();
layout_data_wrapper_ref.data.after_style.is_some()
}
diff --git a/src/components/main/pipeline.rs b/src/components/main/pipeline.rs
index 2cca7feeb97..f61de1deba3 100644
--- a/src/components/main/pipeline.rs
+++ b/src/components/main/pipeline.rs
@@ -5,7 +5,6 @@
use compositing::CompositorChan;
use layout::layout_task::LayoutTask;
-use extra::url::Url;
use geom::size::Size2D;
use gfx::render_task::{PaintPermissionGranted, PaintPermissionRevoked};
use gfx::render_task::{RenderChan, RenderTask};
@@ -20,6 +19,7 @@ use servo_util::opts::Opts;
use servo_util::time::ProfilerChan;
use std::cell::RefCell;
use std::rc::Rc;
+use url::Url;
/// A uniquely-identifiable pipeline of script task, layout task, and render task.
pub struct Pipeline {
@@ -28,8 +28,8 @@ pub struct Pipeline {
script_chan: ScriptChan,
layout_chan: LayoutChan,
render_chan: RenderChan,
- layout_shutdown_port: Port<()>,
- render_shutdown_port: Port<()>,
+ layout_shutdown_port: Receiver<()>,
+ render_shutdown_port: Receiver<()>,
/// The most recently loaded url
url: RefCell<Option<Url>>,
}
@@ -56,8 +56,8 @@ impl Pipeline {
-> Pipeline {
let (layout_port, layout_chan) = LayoutChan::new();
let (render_port, render_chan) = RenderChan::new();
- let (render_shutdown_port, render_shutdown_chan) = Chan::new();
- let (layout_shutdown_port, layout_shutdown_chan) = Chan::new();
+ let (render_shutdown_chan, render_shutdown_port) = channel();
+ let (layout_shutdown_chan, layout_shutdown_port) = channel();
let failure = Failure {
pipeline_id: id,
@@ -78,7 +78,7 @@ impl Pipeline {
layout_chan.clone(),
constellation_chan,
failure,
- script_pipeline.borrow().script_chan.clone(),
+ script_pipeline.script_chan.clone(),
render_chan.clone(),
image_cache_task.clone(),
opts.clone(),
@@ -86,17 +86,17 @@ impl Pipeline {
layout_shutdown_chan);
let new_layout_info = NewLayoutInfo {
- old_id: script_pipeline.borrow().id.clone(),
+ old_id: script_pipeline.id.clone(),
new_id: id,
layout_chan: layout_chan.clone(),
};
- let ScriptChan(ref chan) = script_pipeline.borrow().script_chan;
+ let ScriptChan(ref chan) = script_pipeline.script_chan;
chan.send(AttachLayoutMsg(new_layout_info));
Pipeline::new(id,
subpage_id,
- script_pipeline.borrow().script_chan.clone(),
+ script_pipeline.script_chan.clone(),
layout_chan,
render_chan,
layout_shutdown_port,
@@ -116,8 +116,8 @@ impl Pipeline {
let (script_port, script_chan) = ScriptChan::new();
let (layout_port, layout_chan) = LayoutChan::new();
let (render_port, render_chan) = RenderChan::new();
- let (render_shutdown_port, render_shutdown_chan) = Chan::new();
- let (layout_shutdown_port, layout_shutdown_chan) = Chan::new();
+ let (render_shutdown_chan, render_shutdown_port) = channel();
+ let (layout_shutdown_chan, layout_shutdown_port) = channel();
let pipeline = Pipeline::new(id,
subpage_id,
script_chan.clone(),
@@ -171,8 +171,8 @@ impl Pipeline {
script_chan: ScriptChan,
layout_chan: LayoutChan,
render_chan: RenderChan,
- layout_shutdown_port: Port<()>,
- render_shutdown_port: Port<()>)
+ layout_shutdown_port: Receiver<()>,
+ render_shutdown_port: Receiver<()>)
-> Pipeline {
Pipeline {
id: id,
diff --git a/src/components/main/platform/common/glfw_windowing.rs b/src/components/main/platform/common/glfw_windowing.rs
index 353c84a5acc..e8d39d0a804 100644
--- a/src/components/main/platform/common/glfw_windowing.rs
+++ b/src/components/main/platform/common/glfw_windowing.rs
@@ -144,8 +144,11 @@ impl WindowMethods<Application> for Window {
}
fn recv(&self) -> WindowEvent {
- if !self.event_queue.with_mut(|queue| queue.is_empty()) {
- return self.event_queue.with_mut(|queue| queue.shift().unwrap())
+ {
+ let mut event_queue = self.event_queue.borrow_mut();
+ if !event_queue.is_empty() {
+ return event_queue.shift().unwrap();
+ }
}
glfw::poll_events();
@@ -155,10 +158,8 @@ impl WindowMethods<Application> for Window {
if self.glfw_window.should_close() {
QuitWindowEvent
- } else if !self.event_queue.with_mut(|queue| queue.is_empty()) {
- self.event_queue.with_mut(|queue| queue.shift().unwrap())
} else {
- IdleWindowEvent
+ self.event_queue.borrow_mut().shift().unwrap_or(IdleWindowEvent)
}
}
@@ -174,7 +175,7 @@ impl WindowMethods<Application> for Window {
self.render_state.get() == RenderingRenderState &&
render_state == IdleRenderState {
// page loaded
- self.event_queue.with_mut(|queue| queue.push(FinishedWindowEvent));
+ self.event_queue.borrow_mut().push(FinishedWindowEvent);
}
self.render_state.set(render_state);
@@ -197,10 +198,10 @@ impl Window {
}
},
glfw::FramebufferSizeEvent(width, height) => {
- self.event_queue.with_mut(|queue| queue.push(ResizeWindowEvent(width as uint, height as uint)));
+ self.event_queue.borrow_mut().push(ResizeWindowEvent(width as uint, height as uint));
},
glfw::RefreshEvent => {
- self.event_queue.with_mut(|queue| queue.push(RefreshWindowEvent));
+ self.event_queue.borrow_mut().push(RefreshWindowEvent);
},
glfw::MouseButtonEvent(button, action, _mods) => {
let (x, y) = window.get_cursor_pos();
@@ -215,7 +216,7 @@ impl Window {
}
},
glfw::CursorPosEvent(xpos, ypos) => {
- self.event_queue.with_mut(|queue| queue.push(MouseWindowMoveEventClass(Point2D(xpos as f32, ypos as f32))));
+ self.event_queue.borrow_mut().push(MouseWindowMoveEventClass(Point2D(xpos as f32, ypos as f32)));
},
glfw::ScrollEvent(xpos, ypos) => {
let dx = (xpos as f32) * 30.0;
@@ -229,7 +230,7 @@ impl Window {
let x = x as f32 * hidpi;
let y = y as f32 * hidpi;
- self.event_queue.with_mut(|queue| queue.push(ScrollWindowEvent(Point2D(dx, dy), Point2D(x as i32, y as i32))));
+ self.event_queue.borrow_mut().push(ScrollWindowEvent(Point2D(dx, dy), Point2D(x as i32, y as i32)));
},
_ => {}
}
@@ -272,16 +273,16 @@ impl Window {
glfw::KeyEscape => self.glfw_window.set_should_close(true),
glfw::KeyL if mods.contains(glfw::Control) => self.load_url(), // Ctrl+L
glfw::KeyEqual if mods.contains(glfw::Control) => { // Ctrl-+
- self.event_queue.with_mut(|queue| queue.push(ZoomWindowEvent(1.1)));
+ self.event_queue.borrow_mut().push(ZoomWindowEvent(1.1));
}
glfw::KeyMinus if mods.contains(glfw::Control) => { // Ctrl--
- self.event_queue.with_mut(|queue| queue.push(ZoomWindowEvent(0.90909090909)));
+ self.event_queue.borrow_mut().push(ZoomWindowEvent(0.90909090909));
}
glfw::KeyBackspace if mods.contains(glfw::Shift) => { // Shift-Backspace
- self.event_queue.with_mut(|queue| queue.push(NavigationWindowEvent(Forward)));
+ self.event_queue.borrow_mut().push(NavigationWindowEvent(Forward));
}
glfw::KeyBackspace => { // Backspace
- self.event_queue.with_mut(|queue| queue.push(NavigationWindowEvent(Back)));
+ self.event_queue.borrow_mut().push(NavigationWindowEvent(Back));
}
_ => {}
}
@@ -307,7 +308,7 @@ impl Window {
if pixel_dist < max_pixel_dist {
let click_event = MouseWindowClickEvent(button as uint,
Point2D(x as f32, y as f32));
- self.event_queue.with_mut(|queue| queue.push(MouseWindowEventClass(click_event)));
+ self.event_queue.borrow_mut().push(MouseWindowEventClass(click_event));
}
}
Some(_) => (),
@@ -316,7 +317,7 @@ impl Window {
}
_ => fail!("I cannot recognize the type of mouse action that occured. :-(")
};
- self.event_queue.with_mut(|queue| queue.push(MouseWindowEventClass(event)));
+ self.event_queue.borrow_mut().push(MouseWindowEventClass(event));
}
/// Helper function to pop up an alert box prompting the user to load a URL.
@@ -326,9 +327,9 @@ impl Window {
alert.run();
let value = alert.prompt_value();
if "" == value { // To avoid crashing on Linux.
- self.event_queue.with_mut(|queue| queue.push(LoadUrlWindowEvent(~"http://purple.com/")))
+ self.event_queue.borrow_mut().push(LoadUrlWindowEvent(~"http://purple.com/"))
} else {
- self.event_queue.with_mut(|queue| queue.push(LoadUrlWindowEvent(value.clone())))
+ self.event_queue.borrow_mut().push(LoadUrlWindowEvent(value.clone()))
}
}
}
diff --git a/src/components/main/servo.rs b/src/components/main/servo.rs
index 3a056f9ef9f..225922f01d6 100755
--- a/src/components/main/servo.rs
+++ b/src/components/main/servo.rs
@@ -8,6 +8,10 @@
#[feature(globs, macro_rules, managed_boxes, phase, thread_local)];
+#[feature(phase)];
+#[phase(syntax, link)]
+extern crate log;
+
extern crate alert;
extern crate azure;
extern crate geom;
@@ -20,7 +24,6 @@ extern crate js;
extern crate layers;
extern crate opengles;
extern crate png;
-#[cfg(target_os="android")]
extern crate rustuv;
extern crate script;
#[phase(syntax)]
@@ -33,12 +36,12 @@ extern crate sharegl;
extern crate stb_image;
extern crate collections;
-extern crate extra;
extern crate green;
extern crate native;
extern crate serialize;
extern crate sync;
extern crate time;
+extern crate url;
#[cfg(target_os="macos")]
extern crate core_graphics;
@@ -66,12 +69,12 @@ use servo_util::url::parse_url;
#[cfg(not(test))]
use std::os;
-#[cfg(not(test))]
-use extra::url::Url;
#[cfg(not(test), target_os="android")]
use std::str;
#[cfg(not(test))]
use std::task::TaskOpts;
+#[cfg(not(test))]
+use url::Url;
#[path="compositing/compositor_task.rs"]
@@ -153,7 +156,7 @@ fn run(opts: opts::Opts) {
let opts_clone = opts.clone();
let profiler_chan_clone = profiler_chan.clone();
- let (result_port, result_chan) = Chan::new();
+ let (result_chan, result_port) = channel();
pool.spawn(TaskOpts::new(), proc() {
let opts = &opts_clone;
// Create a Servo instance.
@@ -178,7 +181,7 @@ fn run(opts: opts::Opts) {
// As a hack for easier command-line testing,
// assume that data URLs are not URL-encoded.
Url::new(~"data", None, ~"", None,
- filename.slice_from(5).to_owned(), ~[], None)
+ filename.slice_from(5).to_owned(), Vec::new(), None)
} else {
parse_url(*filename, None)
};
diff --git a/src/components/msg/constellation_msg.rs b/src/components/msg/constellation_msg.rs
index 825ef0c7f6f..b577f25ef7b 100644
--- a/src/components/msg/constellation_msg.rs
+++ b/src/components/msg/constellation_msg.rs
@@ -5,17 +5,17 @@
//! The high-level interface from script to constellation. Using this abstract interface helps reduce
/// coupling between these two components
-use extra::url::Url;
use geom::rect::Rect;
use geom::size::Size2D;
-use std::comm::Chan;
+use std::comm::{channel, Sender, Receiver};
+use url::Url;
#[deriving(Clone)]
-pub struct ConstellationChan(Chan<Msg>);
+pub struct ConstellationChan(Sender<Msg>);
impl ConstellationChan {
- pub fn new() -> (Port<Msg>, ConstellationChan) {
- let (port, chan) = Chan::new();
+ pub fn new() -> (Receiver<Msg>, ConstellationChan) {
+ let (chan, port) = channel();
(port, ConstellationChan(chan))
}
}
@@ -60,8 +60,8 @@ pub enum NavigationDirection {
Back,
}
-#[deriving(Clone, Eq, Hash, Encodable)]
+#[deriving(Clone, Eq, TotalEq, Hash, Encodable)]
pub struct PipelineId(uint);
-#[deriving(Clone, Eq, Hash, Encodable)]
+#[deriving(Clone, Eq, TotalEq, Hash, Encodable)]
pub struct SubpageId(uint);
diff --git a/src/components/msg/msg.rs b/src/components/msg/msg.rs
index cd874a69514..659de719d32 100644
--- a/src/components/msg/msg.rs
+++ b/src/components/msg/msg.rs
@@ -8,11 +8,11 @@
#[feature(managed_boxes)];
extern crate azure;
-extern crate extra;
extern crate geom;
extern crate layers;
extern crate serialize;
extern crate std;
+extern crate url;
#[cfg(target_os="macos")]
extern crate core_foundation;
diff --git a/src/components/net/data_loader.rs b/src/components/net/data_loader.rs
index 3feaa80ff6c..f2766022bc9 100644
--- a/src/components/net/data_loader.rs
+++ b/src/components/net/data_loader.rs
@@ -4,8 +4,8 @@
use resource_task::{Done, Payload, Metadata, LoadResponse, LoaderTask, start_sending};
-use extra::url::Url;
use serialize::base64::FromBase64;
+use url::Url;
use http::headers::test_utils::from_stream_with_str;
use http::headers::content_type::MediaType;
@@ -19,7 +19,7 @@ pub fn factory() -> LoaderTask {
}
}
-fn load(url: Url, start_chan: Chan<LoadResponse>) {
+fn load(url: Url, start_chan: Sender<LoadResponse>) {
assert!("data" == url.scheme);
let mut metadata = Metadata::default(url.clone());
@@ -71,8 +71,9 @@ fn assert_parse(url: &'static str,
charset: Option<~str>,
data: Option<~[u8]>) {
use std::from_str::FromStr;
+ use std::comm;
- let (start_port, start_chan) = Chan::new();
+ let (start_chan, start_port) = comm::channel();
load(FromStr::from_str(url).unwrap(), start_chan);
let response = start_port.recv();
diff --git a/src/components/net/file_loader.rs b/src/components/net/file_loader.rs
index 0b8d5240bc2..bfcb7a5fb5d 100644
--- a/src/components/net/file_loader.rs
+++ b/src/components/net/file_loader.rs
@@ -11,11 +11,11 @@ use servo_util::task::spawn_named;
//FIXME: https://github.com/mozilla/rust/issues/12892
static READ_SIZE: uint = 1;
-fn read_all(reader: &mut io::Stream, progress_chan: &Chan<ProgressMsg>)
+fn read_all(reader: &mut io::Stream, progress_chan: &Sender<ProgressMsg>)
-> Result<(), ()> {
loop {
let mut buf = ~[];
- match reader.push_bytes(&mut buf, READ_SIZE) {
+ match reader.push_exact(&mut buf, READ_SIZE) {
Ok(_) => progress_chan.send(Payload(buf)),
Err(e) => match e.kind {
io::EndOfFile => return Ok(()),
diff --git a/src/components/net/http_loader.rs b/src/components/net/http_loader.rs
index d6aba51e893..1bed5bf2e49 100644
--- a/src/components/net/http_loader.rs
+++ b/src/components/net/http_loader.rs
@@ -4,15 +4,15 @@
use resource_task::{Metadata, Payload, Done, LoadResponse, LoaderTask, start_sending};
-use std::vec;
use collections::hashmap::HashSet;
-use extra::url::Url;
use http::client::RequestWriter;
use http::method::Get;
use http::headers::HeaderEnum;
use std::io::Reader;
use std::io::net::tcp::TcpStream;
+use std::slice;
use servo_util::task::spawn_named;
+use url::Url;
pub fn factory() -> LoaderTask {
let f: LoaderTask = proc(url, start_chan) {
@@ -21,11 +21,11 @@ pub fn factory() -> LoaderTask {
f
}
-fn send_error(url: Url, start_chan: Chan<LoadResponse>) {
+fn send_error(url: Url, start_chan: Sender<LoadResponse>) {
start_sending(start_chan, Metadata::default(url)).send(Done(Err(())));
}
-fn load(mut url: Url, start_chan: Chan<LoadResponse>) {
+fn load(mut url: Url, start_chan: Sender<LoadResponse>) {
// FIXME: At the time of writing this FIXME, servo didn't have any central
// location for configuration. If you're reading this and such a
// repository DOES exist, please update this constant to use it.
@@ -95,7 +95,7 @@ fn load(mut url: Url, start_chan: Chan<LoadResponse>) {
let progress_chan = start_sending(start_chan, metadata);
loop {
- let mut buf = vec::with_capacity(1024);
+ let mut buf = slice::with_capacity(1024);
unsafe { buf.set_len(1024); }
match response.read(buf) {
diff --git a/src/components/net/image/holder.rs b/src/components/net/image/holder.rs
index ce9ed519264..22f49effe55 100644
--- a/src/components/net/image/holder.rs
+++ b/src/components/net/image/holder.rs
@@ -7,9 +7,9 @@ use image_cache_task::{ImageReady, ImageNotReady, ImageFailed};
use local_image_cache::LocalImageCache;
use sync::{Arc, MutexArc};
-use extra::url::Url;
use geom::size::Size2D;
use std::mem;
+use url::Url;
// FIXME: Nasty coupling here This will be a problem if we want to factor out image handling from
// the network stack. This should probably be factored out into an interface and use dependency
diff --git a/src/components/net/image_cache_task.rs b/src/components/net/image_cache_task.rs
index 6c0332ab0fe..1544ce05f3b 100644
--- a/src/components/net/image_cache_task.rs
+++ b/src/components/net/image_cache_task.rs
@@ -7,14 +7,14 @@ use resource_task;
use resource_task::ResourceTask;
use servo_util::url::{UrlMap, url_map};
-use std::comm::{Chan, Port};
+use std::comm::{channel, Receiver, Sender};
use std::mem::replace;
use std::task::spawn;
use std::to_str::ToStr;
use std::result;
use sync::{Arc,MutexArc};
-use extra::url::Url;
use serialize::{Encoder, Encodable};
+use url::Url;
pub enum Msg {
/// Tell the cache that we may need a particular image soon. Must be posted
@@ -35,21 +35,21 @@ pub enum Msg {
/// Request an Image object for a URL. If the image is not is not immediately
/// available then ImageNotReady is returned.
- GetImage(Url, Chan<ImageResponseMsg>),
+ GetImage(Url, Sender<ImageResponseMsg>),
/// Wait for an image to become available (or fail to load).
- WaitForImage(Url, Chan<ImageResponseMsg>),
+ WaitForImage(Url, Sender<ImageResponseMsg>),
/// Clients must wait for a response before shutting down the ResourceTask
- Exit(Chan<()>),
+ Exit(Sender<()>),
/// For testing
// FIXME: make this priv after visibility rules change
- WaitForStore(Chan<()>),
+ WaitForStore(Sender<()>),
/// For testing
// FIXME: make this priv after visibility rules change
- WaitForStorePrefetched(Chan<()>),
+ WaitForStorePrefetched(Sender<()>),
}
#[deriving(Clone)]
@@ -78,7 +78,7 @@ impl Eq for ImageResponseMsg {
#[deriving(Clone)]
pub struct ImageCacheTask {
- chan: Chan<Msg>,
+ chan: Sender<Msg>,
}
impl<S: Encoder> Encodable<S> for ImageCacheTask {
@@ -89,7 +89,7 @@ impl<S: Encoder> Encodable<S> for ImageCacheTask {
type DecoderFactory = fn() -> proc(&[u8]) -> Option<Image>;
pub fn ImageCacheTask(resource_task: ResourceTask) -> ImageCacheTask {
- let (port, chan) = Chan::new();
+ let (chan, port) = channel();
let chan_clone = chan.clone();
spawn(proc() {
@@ -111,7 +111,7 @@ pub fn ImageCacheTask(resource_task: ResourceTask) -> ImageCacheTask {
// FIXME: make this priv after visibility rules change
pub fn SyncImageCacheTask(resource_task: ResourceTask) -> ImageCacheTask {
- let (port, chan) = Chan::new();
+ let (chan, port) = channel();
spawn(proc() {
let inner_cache = ImageCacheTask(resource_task.clone());
@@ -141,14 +141,14 @@ struct ImageCache {
/// A handle to the resource task for fetching the image binaries
resource_task: ResourceTask,
/// The port on which we'll receive client requests
- port: Port<Msg>,
+ port: Receiver<Msg>,
/// A copy of the shared chan to give to child tasks
- chan: Chan<Msg>,
+ chan: Sender<Msg>,
/// The state of processsing an image for a URL
state_map: UrlMap<ImageState>,
/// List of clients waiting on a WaitForImage response
- wait_map: UrlMap<MutexArc<~[Chan<ImageResponseMsg>]>>,
- need_exit: Option<Chan<()>>,
+ wait_map: UrlMap<MutexArc<~[Sender<ImageResponseMsg>]>>,
+ need_exit: Option<Sender<()>>,
}
#[deriving(Clone)]
@@ -169,8 +169,8 @@ enum AfterPrefetch {
impl ImageCache {
pub fn run(&mut self) {
- let mut store_chan: Option<Chan<()>> = None;
- let mut store_prefetched_chan: Option<Chan<()>> = None;
+ let mut store_chan: Option<Sender<()>> = None;
+ let mut store_prefetched_chan: Option<Sender<()>> = None;
loop {
let msg = self.port.recv();
@@ -385,7 +385,7 @@ impl ImageCache {
}
}
- fn get_image(&self, url: Url, response: Chan<ImageResponseMsg>) {
+ fn get_image(&self, url: Url, response: Sender<ImageResponseMsg>) {
match self.get_state(url.clone()) {
Init => fail!(~"request for image before prefetch"),
Prefetching(DoDecode) => response.send(ImageNotReady),
@@ -396,7 +396,7 @@ impl ImageCache {
}
}
- fn wait_for_image(&mut self, url: Url, response: Chan<ImageResponseMsg>) {
+ fn wait_for_image(&mut self, url: Url, response: Sender<ImageResponseMsg>) {
match self.get_state(url.clone()) {
Init => fail!(~"request for image before prefetch"),
@@ -432,7 +432,7 @@ pub trait ImageCacheTaskClient {
impl ImageCacheTaskClient for ImageCacheTask {
fn exit(&self) {
- let (response_port, response_chan) = Chan::new();
+ let (response_chan, response_port) = channel();
self.send(Exit(response_chan));
response_port.recv();
}
@@ -444,22 +444,22 @@ impl ImageCacheTask {
}
#[cfg(test)]
- fn wait_for_store(&self) -> Port<()> {
- let (port, chan) = Chan::new();
+ fn wait_for_store(&self) -> Receiver<()> {
+ let (chan, port) = channel();
self.send(WaitForStore(chan));
port
}
#[cfg(test)]
- fn wait_for_store_prefetched(&self) -> Port<()> {
- let (port, chan) = Chan::new();
+ fn wait_for_store_prefetched(&self) -> Receiver<()> {
+ let (chan, port) = channel();
self.send(WaitForStorePrefetched(chan));
port
}
}
fn load_image_data(url: Url, resource_task: ResourceTask) -> Result<~[u8], ()> {
- let (response_port, response_chan) = Chan::new();
+ let (response_chan, response_port) = channel();
resource_task.send(resource_task::Load(url, response_chan));
let mut image_data = ~[];
@@ -481,11 +481,11 @@ fn load_image_data(url: Url, resource_task: ResourceTask) -> Result<~[u8], ()> {
}
-pub fn spawn_listener<A: Send>(f: proc(Port<A>)) -> Chan<A> {
- let (setup_port, setup_chan) = Chan::new();
+pub fn spawn_listener<A: Send>(f: proc(Receiver<A>)) -> Sender<A> {
+ let (setup_chan, setup_port) = channel();
spawn(proc() {
- let (port, chan) = Chan::new();
+ let (chan, port) = channel();
setup_chan.send(chan);
f(port);
});
@@ -501,10 +501,11 @@ mod tests {
use resource_task::{ResourceTask, Metadata, start_sending};
use image::base::test_image_bin;
use servo_util::url::parse_url;
+ use std::comm;
use std::comm::{Empty, Data, Disconnected};
- fn mock_resource_task(on_load: proc(resource: Chan<resource_task::ProgressMsg>)) -> ResourceTask {
- spawn_listener(proc(port: Port<resource_task::ControlMsg>) {
+ fn mock_resource_task(on_load: proc(resource: Sender<resource_task::ProgressMsg>)) -> ResourceTask {
+ spawn_listener(proc(port: Receiver<resource_task::ControlMsg>) {
loop {
match port.recv() {
resource_task::Load(_, response) => {
@@ -536,14 +537,14 @@ mod tests {
let image_cache_task = ImageCacheTask(mock_resource_task.clone());
let url = parse_url("file", None);
- let (port, chan) = Chan::new();
+ let (chan, port) = channel();
image_cache_task.send(GetImage(url, chan));
port.recv();
}
#[test]
fn should_request_url_from_resource_task_on_prefetch() {
- let (url_requested, url_requested_chan) = Chan::new();
+ let (url_requested_chan, url_requested) = channel();
let mock_resource_task = mock_resource_task(proc(response) {
url_requested_chan.send(());
@@ -561,7 +562,7 @@ mod tests {
#[test]
fn should_not_request_url_from_resource_task_on_multiple_prefetches() {
- let (url_requested, url_requested_chan) = Chan::new();
+ let (url_requested_chan, url_requested) = comm::channel();
let mock_resource_task = mock_resource_task(proc(response) {
url_requested_chan.send(());
@@ -584,7 +585,7 @@ mod tests {
#[test]
fn should_return_image_not_ready_if_data_has_not_arrived() {
- let (wait_port, wait_chan) = Chan::new();
+ let (wait_chan, wait_port) = comm::channel();
let mock_resource_task = mock_resource_task(proc(response) {
// Don't send the data until after the client requests
@@ -599,7 +600,7 @@ mod tests {
image_cache_task.send(Prefetch(url.clone()));
image_cache_task.send(Decode(url.clone()));
- let (response_port, response_chan) = Chan::new();
+ let (response_chan, response_port) = comm::channel();
image_cache_task.send(GetImage(url, response_chan));
assert!(response_port.recv() == ImageNotReady);
wait_chan.send(());
@@ -625,7 +626,7 @@ mod tests {
// Wait until our mock resource task has sent the image to the image cache
join_port.recv();
- let (response_port, response_chan) = Chan::new();
+ let (response_chan, response_port) = comm::channel();
image_cache_task.send(GetImage(url, response_chan));
match response_port.recv() {
ImageReady(_) => (),
@@ -655,7 +656,7 @@ mod tests {
join_port.recv();
for _ in range(0,2) {
- let (response_port, response_chan) = Chan::new();
+ let (response_chan, response_port) = comm::channel();
image_cache_task.send(GetImage(url.clone(), response_chan));
match response_port.recv() {
ImageReady(_) => (),
@@ -669,11 +670,11 @@ mod tests {
#[test]
fn should_not_request_image_from_resource_task_if_image_is_already_available() {
- let (image_bin_sent, image_bin_sent_chan) = Chan::new();
+ let (image_bin_sent_chan, image_bin_sent) = comm::channel();
- let (resource_task_exited, resource_task_exited_chan) = Chan::new();
+ let (resource_task_exited_chan, resource_task_exited) = comm::channel();
- let mock_resource_task = spawn_listener(proc(port: Port<resource_task::ControlMsg>) {
+ let mock_resource_task = spawn_listener(proc(port: Receiver<resource_task::ControlMsg>) {
loop {
match port.recv() {
resource_task::Load(_, response) => {
@@ -715,11 +716,11 @@ mod tests {
#[test]
fn should_not_request_image_from_resource_task_if_image_fetch_already_failed() {
- let (image_bin_sent, image_bin_sent_chan) = Chan::new();
+ let (image_bin_sent_chan, image_bin_sent) = comm::channel();
- let (resource_task_exited, resource_task_exited_chan) = Chan::new();
+ let (resource_task_exited_chan, resource_task_exited) = comm::channel();
- let mock_resource_task = spawn_listener(proc(port: Port<resource_task::ControlMsg>) {
+ let mock_resource_task = spawn_listener(proc(port: Receiver<resource_task::ControlMsg>) {
loop {
match port.recv() {
resource_task::Load(_, response) => {
@@ -780,7 +781,7 @@ mod tests {
// Wait until our mock resource task has sent the image to the image cache
join_port.recv();
- let (response_port, response_chan) = Chan::new();
+ let (response_chan, response_port) = comm::channel();
image_cache_task.send(GetImage(url, response_chan));
match response_port.recv() {
ImageFailed => (),
@@ -810,7 +811,7 @@ mod tests {
// Wait until our mock resource task has sent the image to the image cache
join_port.recv();
- let (response_port, response_chan) = Chan::new();
+ let (response_chan, response_port) = comm::channel();
image_cache_task.send(GetImage(url.clone(), response_chan));
match response_port.recv() {
ImageFailed => (),
@@ -818,7 +819,7 @@ mod tests {
}
// And ask again, we should get the same response
- let (response_port, response_chan) = Chan::new();
+ let (response_chan, response_port) = comm::channel();
image_cache_task.send(GetImage(url, response_chan));
match response_port.recv() {
ImageFailed => (),
@@ -849,7 +850,7 @@ mod tests {
join_port.recv();
// Make the request
- let (response_port, response_chan) = Chan::new();
+ let (response_chan, response_port) = comm::channel();
image_cache_task.send(GetImage(url, response_chan));
match response_port.recv() {
@@ -879,7 +880,7 @@ mod tests {
// Wait until our mock resource task has sent the image to the image cache
join_port.recv();
- let (response_port, response_chan) = Chan::new();
+ let (response_chan, response_port) = comm::channel();
image_cache_task.send(WaitForImage(url, response_chan));
match response_port.recv() {
ImageReady(..) => (),
@@ -892,7 +893,7 @@ mod tests {
#[test]
fn should_return_image_on_wait_if_image_is_not_yet_loaded() {
- let (wait_port, wait_chan) = Chan::new();
+ let (wait_chan, wait_port) = comm::channel();
let mock_resource_task = mock_resource_task(proc(response) {
wait_port.recv();
@@ -906,7 +907,7 @@ mod tests {
image_cache_task.send(Prefetch(url.clone()));
image_cache_task.send(Decode(url.clone()));
- let (response_port, response_chan) = Chan::new();
+ let (response_chan, response_port) = comm::channel();
image_cache_task.send(WaitForImage(url, response_chan));
wait_chan.send(());
@@ -922,7 +923,7 @@ mod tests {
#[test]
fn should_return_image_failed_on_wait_if_image_fails_to_load() {
- let (wait_port, wait_chan) = Chan::new();
+ let (wait_chan, wait_port) = comm::channel();
let mock_resource_task = mock_resource_task(proc(response) {
wait_port.recv();
@@ -936,7 +937,7 @@ mod tests {
image_cache_task.send(Prefetch(url.clone()));
image_cache_task.send(Decode(url.clone()));
- let (response_port, response_chan) = Chan::new();
+ let (response_chan, response_port) = comm::channel();
image_cache_task.send(WaitForImage(url, response_chan));
wait_chan.send(());
@@ -963,7 +964,7 @@ mod tests {
image_cache_task.send(Prefetch(url.clone()));
image_cache_task.send(Decode(url.clone()));
- let (response_port, response_chan) = Chan::new();
+ let (response_chan, response_port) = comm::channel();
image_cache_task.send(GetImage(url, response_chan));
match response_port.recv() {
ImageReady(_) => (),
diff --git a/src/components/net/local_image_cache.rs b/src/components/net/local_image_cache.rs
index 455e7e90c9a..c19c23f4699 100644
--- a/src/components/net/local_image_cache.rs
+++ b/src/components/net/local_image_cache.rs
@@ -11,10 +11,10 @@ multiple times and thus triggering reflows multiple times.
use image_cache_task::{Decode, GetImage, ImageCacheTask, ImageFailed, ImageNotReady, ImageReady};
use image_cache_task::{ImageResponseMsg, Prefetch, WaitForImage};
-use std::comm::Port;
+use std::comm::{Receiver, channel};
use servo_util::url::{UrlMap, url_map};
-use extra::url::Url;
use servo_util::task::spawn_named;
+use url::Url;
pub trait ImageResponder {
fn respond(&self) -> proc(ImageResponseMsg);
@@ -78,7 +78,7 @@ impl LocalImageCache {
}
// FIXME: Should return a Future
- pub fn get_image(&mut self, url: &Url) -> Port<ImageResponseMsg> {
+ pub fn get_image(&mut self, url: &Url) -> Receiver<ImageResponseMsg> {
{
let state = self.get_state(url);
@@ -89,13 +89,13 @@ impl LocalImageCache {
match state.last_response {
ImageReady(ref image) => {
- let (port, chan) = Chan::new();
+ let (chan, port) = channel();
chan.send(ImageReady(image.clone()));
return port;
}
ImageNotReady => {
if last_round == self.round_number {
- let (port, chan) = Chan::new();
+ let (chan, port) = channel();
chan.send(ImageNotReady);
return port;
} else {
@@ -104,14 +104,14 @@ impl LocalImageCache {
}
}
ImageFailed => {
- let (port, chan) = Chan::new();
+ let (chan, port) = channel();
chan.send(ImageFailed);
return port;
}
}
}
- let (response_port, response_chan) = Chan::new();
+ let (response_chan, response_port) = channel();
self.image_cache_task.send(GetImage((*url).clone(), response_chan));
let response = response_port.recv();
@@ -127,7 +127,7 @@ impl LocalImageCache {
let on_image_available = self.on_image_available.as_ref().unwrap().respond();
let url = (*url).clone();
spawn_named("LocalImageCache", proc() {
- let (response_port, response_chan) = Chan::new();
+ let (response_chan, response_port) = channel();
image_cache_task.send(WaitForImage(url.clone(), response_chan));
on_image_available(response_port.recv());
});
@@ -143,7 +143,7 @@ impl LocalImageCache {
};
self.get_state(url).last_response = response_copy;
- let (port, chan) = Chan::new();
+ let (chan, port) = channel();
chan.send(response);
return port;
}
diff --git a/src/components/net/net.rs b/src/components/net/net.rs
index 58c8cc05d98..7f4b340cf84 100644
--- a/src/components/net/net.rs
+++ b/src/components/net/net.rs
@@ -7,15 +7,19 @@
#[feature(globs, managed_boxes)];
+#[feature(phase)];
+#[phase(syntax, link)]
+extern crate log;
+
extern crate collections;
extern crate geom;
extern crate http;
extern crate servo_util = "util";
extern crate stb_image;
-extern crate extra;
extern crate png;
extern crate serialize;
extern crate sync;
+extern crate url;
/// Image handling.
///
diff --git a/src/components/net/resource_task.rs b/src/components/net/resource_task.rs
index 7f2e1c4adbe..27b05ac901b 100644
--- a/src/components/net/resource_task.rs
+++ b/src/components/net/resource_task.rs
@@ -8,17 +8,17 @@ use file_loader;
use http_loader;
use data_loader;
-use std::comm::{Chan, Port};
+use std::comm::{channel, Receiver, Sender};
use std::task;
-use extra::url::Url;
use http::headers::content_type::MediaType;
+use url::Url;
#[cfg(test)]
use std::from_str::FromStr;
pub enum ControlMsg {
/// Request the data associated with a particular URL
- Load(Url, Chan<LoadResponse>),
+ Load(Url, Sender<LoadResponse>),
Exit
}
@@ -71,11 +71,11 @@ pub struct LoadResponse {
/// Metadata, such as from HTTP headers.
metadata: Metadata,
/// Port for reading data.
- progress_port: Port<ProgressMsg>,
+ progress_port: Receiver<ProgressMsg>,
}
/// Messages sent in response to a `Load` message
-#[deriving(Eq)]
+#[deriving(Eq,Show)]
pub enum ProgressMsg {
/// Binary data - there may be multiple of these
Payload(~[u8]),
@@ -84,9 +84,9 @@ pub enum ProgressMsg {
}
/// For use by loaders in responding to a Load message.
-pub fn start_sending(start_chan: Chan<LoadResponse>,
- metadata: Metadata) -> Chan<ProgressMsg> {
- let (progress_port, progress_chan) = Chan::new();
+pub fn start_sending(start_chan: Sender<LoadResponse>,
+ metadata: Metadata) -> Sender<ProgressMsg> {
+ let (progress_chan, progress_port) = channel();
start_chan.send(LoadResponse {
metadata: metadata,
progress_port: progress_port,
@@ -97,7 +97,7 @@ pub fn start_sending(start_chan: Chan<LoadResponse>,
/// Convenience function for synchronously loading a whole resource.
pub fn load_whole_resource(resource_task: &ResourceTask, url: Url)
-> Result<(Metadata, ~[u8]), ()> {
- let (start_port, start_chan) = Chan::new();
+ let (start_chan, start_port) = channel();
resource_task.send(Load(url, start_chan));
let response = start_port.recv();
@@ -112,9 +112,9 @@ pub fn load_whole_resource(resource_task: &ResourceTask, url: Url)
}
/// Handle to a resource task
-pub type ResourceTask = Chan<ControlMsg>;
+pub type ResourceTask = Sender<ControlMsg>;
-pub type LoaderTask = proc(url: Url, Chan<LoadResponse>);
+pub type LoaderTask = proc(url: Url, Sender<LoadResponse>);
/**
Creates a task to load a specific resource
@@ -135,10 +135,10 @@ pub fn ResourceTask() -> ResourceTask {
}
fn create_resource_task_with_loaders(loaders: ~[(~str, LoaderTaskFactory)]) -> ResourceTask {
- let (setup_port, setup_chan) = Chan::new();
+ let (setup_chan, setup_port) = channel();
let builder = task::task().named("ResourceManager");
builder.spawn(proc() {
- let (port, chan) = Chan::new();
+ let (chan, port) = channel();
setup_chan.send(chan);
ResourceManager(port, loaders).start();
});
@@ -146,13 +146,13 @@ fn create_resource_task_with_loaders(loaders: ~[(~str, LoaderTaskFactory)]) -> R
}
pub struct ResourceManager {
- from_client: Port<ControlMsg>,
+ from_client: Receiver<ControlMsg>,
/// Per-scheme resource loaders
loaders: ~[(~str, LoaderTaskFactory)],
}
-pub fn ResourceManager(from_client: Port<ControlMsg>,
+pub fn ResourceManager(from_client: Receiver<ControlMsg>,
loaders: ~[(~str, LoaderTaskFactory)]) -> ResourceManager {
ResourceManager {
from_client : from_client,
@@ -175,7 +175,7 @@ impl ResourceManager {
}
}
- fn load(&self, url: Url, start_chan: Chan<LoadResponse>) {
+ fn load(&self, url: Url, start_chan: Sender<LoadResponse>) {
match self.get_loader_factory(&url) {
Some(loader_factory) => {
debug!("resource_task: loading url: {:s}", url.to_str());
@@ -211,7 +211,7 @@ fn test_exit() {
#[test]
fn test_bad_scheme() {
let resource_task = ResourceTask();
- let (start, start_chan) = Chan::new();
+ let (start_chan, start) = channel();
resource_task.send(Load(FromStr::from_str("bogus://whatever").unwrap(), start_chan));
let response = start.recv();
match response.progress_port.recv() {
@@ -226,7 +226,7 @@ static snicklefritz_payload: [u8, ..3] = [1, 2, 3];
#[cfg(test)]
fn snicklefritz_loader_factory() -> LoaderTask {
- let f: LoaderTask = proc(url: Url, start_chan: Chan<LoadResponse>) {
+ let f: LoaderTask = proc(url: Url, start_chan: Sender<LoadResponse>) {
let progress_chan = start_sending(start_chan, Metadata::default(url));
progress_chan.send(Payload(snicklefritz_payload.into_owned()));
progress_chan.send(Done(Ok(())));
@@ -238,7 +238,7 @@ fn snicklefritz_loader_factory() -> LoaderTask {
fn should_delegate_to_scheme_loader() {
let loader_factories = ~[(~"snicklefritz", snicklefritz_loader_factory)];
let resource_task = create_resource_task_with_loaders(loader_factories);
- let (start, start_chan) = Chan::new();
+ let (start_chan, start) = channel();
resource_task.send(Load(FromStr::from_str("snicklefritz://heya").unwrap(), start_chan));
let response = start.recv();
diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py
index ded87534683..cce35ffce82 100644
--- a/src/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/src/components/script/dom/bindings/codegen/CodegenRust.py
@@ -2023,7 +2023,7 @@ def CreateBindingJSObject(descriptor, parent=None):
assert not descriptor.createGlobal
handler = """
let js_info = aScope.get().page().js_info();
- let handler = js_info.get().get_ref().dom_static.proxy_handlers.get(&(PrototypeList::id::%s as uint));
+ let handler = js_info.get_ref().dom_static.proxy_handlers.get(&(PrototypeList::id::%s as uint));
""" % descriptor.name
create += handler + """ let obj = NewProxyObject(aCx, *handler,
&PrivateValue(squirrel_away_unique(aObject) as *libc::c_void),
@@ -2338,12 +2338,12 @@ class CGDefineDOMInterfaceMethod(CGAbstractMethod):
self.descriptor.name)
else:
body += """ js_info.dom_static.attribute_ids.insert(PrototypeList::id::%s as uint,
- vec::cast_to_mut(vec::from_slice(sAttributes_ids)));
+ slice::cast_to_mut(slice::from_slice(sAttributes_ids)));
""" % self.descriptor.name
body = "" #XXXjdm xray stuff isn't necessary yet
- return (body + """ let cx = js_info.js_context.borrow().ptr;
- let receiver = js_info.js_compartment.borrow().global_obj;
+ return (body + """ let cx = js_info.js_context.deref().ptr;
+ let receiver = js_info.js_compartment.global_obj;
let global: *JSObject = JS_GetGlobalForObject(cx, receiver);
return %s(cx, global, receiver).is_not_null();""" % (getter))
@@ -3700,7 +3700,7 @@ class CGXrayHelper(CGAbstractExternMethod):
methods = self.properties.methods
if methods.hasNonChromeOnly() or methods.hasChromeOnly():
methodArgs = "Some(zip_copies(%(methods)s, *method_ids))" % varNames
- setup += "let method_ids = js_info.get().get_ref().dom_static.method_ids.get(&(PrototypeList::id::ClientRect as uint));\n"
+ setup += "let method_ids = js_info.get_ref().dom_static.method_ids.get(&(PrototypeList::id::ClientRect as uint));\n"
else:
methodArgs = "None"
methodArgs = CGGeneric(methodArgs)
@@ -3708,7 +3708,7 @@ class CGXrayHelper(CGAbstractExternMethod):
attrs = self.properties.attrs
if attrs.hasNonChromeOnly() or attrs.hasChromeOnly():
attrArgs = "Some(zip_copies(%(attrs)s, *attr_ids))" % varNames
- setup += "let attr_ids = js_info.get().get_ref().dom_static.attribute_ids.get(&(PrototypeList::id::ClientRect as uint));\n"
+ setup += "let attr_ids = js_info.get_ref().dom_static.attribute_ids.get(&(PrototypeList::id::ClientRect as uint));\n"
else:
attrArgs = "None"
attrArgs = CGGeneric(attrArgs)
@@ -3716,7 +3716,7 @@ class CGXrayHelper(CGAbstractExternMethod):
consts = self.properties.consts
if consts.hasNonChromeOnly() or consts.hasChromeOnly():
constArgs = "Some(zip_copies(%(consts)s, *const_ids))" % varNames
- setup += "let const_ids = js_info.get().get_ref().dom_static.constant_ids.get(&(PrototypeList::id::ClientRect as uint));\n"
+ setup += "let const_ids = js_info.get_ref().dom_static.constant_ids.get(&(PrototypeList::id::ClientRect as uint));\n"
else:
constArgs = "None"
constArgs = CGGeneric(constArgs)
@@ -4774,7 +4774,7 @@ class CGBindingRoot(CGThing):
'std::cmp',
'std::libc',
'std::ptr',
- 'std::vec',
+ 'std::slice',
'std::str',
'std::num',
])
@@ -5336,7 +5336,7 @@ class CallbackMember(CGNativeMember):
if self.argCount > 0:
replacements["argCount"] = self.argCountStr
replacements["argvDecl"] = string.Template(
- "let mut argv = vec::from_elem(${argCount}, UndefinedValue());\n"
+ "let mut argv = slice::from_elem(${argCount}, UndefinedValue());\n"
).substitute(replacements)
else:
# Avoid weird 0-sized arrays
diff --git a/src/components/script/dom/bindings/conversions.rs b/src/components/script/dom/bindings/conversions.rs
index 311745603a5..513dac9964a 100644
--- a/src/components/script/dom/bindings/conversions.rs
+++ b/src/components/script/dom/bindings/conversions.rs
@@ -17,6 +17,7 @@ use js::jsval::JSVal;
use js::jsval::{NullValue, BooleanValue, Int32Value, UInt32Value, StringValue};
use js::jsval::ObjectValue;
use js::glue::RUST_JS_NumberValue;
+use std::default::Default;
use std::libc;
pub trait ToJSValConvertible {
diff --git a/src/components/script/dom/bindings/js.rs b/src/components/script/dom/bindings/js.rs
index e9fe15eb31f..71ca2d7ac86 100644
--- a/src/components/script/dom/bindings/js.rs
+++ b/src/components/script/dom/bindings/js.rs
@@ -64,14 +64,14 @@ impl<T> JS<T> {
pub fn get<'a>(&'a self) -> &'a T {
let borrowed = self.ptr.borrow();
unsafe {
- &(**borrowed.get())
+ &**borrowed
}
}
pub fn get_mut<'a>(&'a mut self) -> &'a mut T {
let mut borrowed = self.ptr.borrow_mut();
unsafe {
- &mut (**borrowed.get())
+ &mut **borrowed
}
}
diff --git a/src/components/script/dom/bindings/utils.rs b/src/components/script/dom/bindings/utils.rs
index 37c62fd4c3c..db6cb3290d7 100644
--- a/src/components/script/dom/bindings/utils.rs
+++ b/src/components/script/dom/bindings/utils.rs
@@ -15,8 +15,8 @@ use std::cmp::Eq;
use std::libc;
use std::ptr;
use std::ptr::null;
+use std::slice;
use std::str;
-use std::vec;
use js::glue::*;
use js::glue::{js_IsObjectProxyClass, js_IsFunctionProxyClass, IsProxyHandlerFamily};
use js::jsapi::{JS_AlreadyHasOwnProperty, JS_NewFunction};
@@ -136,7 +136,7 @@ pub fn jsstring_to_str(cx: *JSContext, s: *JSString) -> DOMString {
unsafe {
let length = 0;
let chars = JS_GetStringCharsAndLength(cx, s, &length);
- vec::raw::buf_as_slice(chars, length as uint, |char_vec| {
+ slice::raw::buf_as_slice(chars, length as uint, |char_vec| {
str::from_utf16(char_vec).unwrap()
})
}
@@ -646,8 +646,8 @@ pub fn global_object_for_js_object(obj: *JSObject) -> JS<window::Window> {
fn cx_for_dom_reflector(obj: *JSObject) -> *JSContext {
let win = global_object_for_js_object(obj);
let js_info = win.get().page().js_info();
- match *js_info.get() {
- Some(ref info) => info.js_context.borrow().ptr,
+ match *js_info {
+ Some(ref info) => info.js_context.deref().ptr,
None => fail!("no JS context for DOM global")
}
}
diff --git a/src/components/script/dom/document.rs b/src/components/script/dom/document.rs
index f2cfa57d136..b123b169d67 100644
--- a/src/components/script/dom/document.rs
+++ b/src/components/script/dom/document.rs
@@ -40,9 +40,9 @@ use servo_util::namespace::{Namespace, Null};
use servo_util::str::DOMString;
use collections::hashmap::HashMap;
-use extra::url::{Url, from_str};
use js::jsapi::JSContext;
use std::ascii::StrAsciiExt;
+use url::{Url, from_str};
use serialize::{Encoder, Encodable};
@@ -610,12 +610,15 @@ impl Document {
// TODO: support the case if multiple elements
// which haves same id are in the same document.
- self.idmap.mangle(id, element,
- |_, new_element: &JS<Element>| -> JS<Element> {
- new_element.clone()
- },
- |_, old_element: &mut JS<Element>, new_element: &JS<Element>| {
- *old_element = new_element.clone();
- });
+ // FIXME https://github.com/mozilla/rust/issues/13195
+ // Use mangle() when it exists again.
+ match self.idmap.find_mut(&id) {
+ Some(v) => {
+ *v = element.clone();
+ return;
+ },
+ None => (),
+ }
+ self.idmap.insert(id, element.clone());
}
}
diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs
index aa092bce325..a8d1f53f6fc 100644
--- a/src/components/script/dom/element.rs
+++ b/src/components/script/dom/element.rs
@@ -569,7 +569,7 @@ impl Element {
let doc = self.node.owner_doc();
let win = &doc.get().window;
let node: JS<Node> = NodeCast::from(abstract_self);
- let (port, chan) = Chan::new();
+ let (chan, port) = channel();
let addr = node.to_trusted_node_address();
let ContentBoxesResponse(rects) = win.get().page().query_layout(ContentBoxesQuery(addr, chan), port);
let rects = rects.map(|r| {
@@ -589,7 +589,7 @@ impl Element {
let doc = self.node.owner_doc();
let win = &doc.get().window;
let node: JS<Node> = NodeCast::from(abstract_self);
- let (port, chan) = Chan::new();
+ let (chan, port) = channel();
let addr = node.to_trusted_node_address();
let ContentBoxResponse(rect) = win.get().page().query_layout(ContentBoxQuery(addr, chan), port);
ClientRect::new(
diff --git a/src/components/script/dom/htmliframeelement.rs b/src/components/script/dom/htmliframeelement.rs
index a4999559cf5..a33e5baf84d 100644
--- a/src/components/script/dom/htmliframeelement.rs
+++ b/src/components/script/dom/htmliframeelement.rs
@@ -15,10 +15,10 @@ use dom::node::{Node, ElementNodeTypeId};
use dom::windowproxy::WindowProxy;
use servo_util::str::DOMString;
-use extra::url::Url;
use serialize::{Encoder, Encodable};
use servo_msg::constellation_msg::{PipelineId, SubpageId};
use std::ascii::StrAsciiExt;
+use url::Url;
enum SandboxAllowance {
AllowNothing = 0x00,
diff --git a/src/components/script/dom/htmlimageelement.rs b/src/components/script/dom/htmlimageelement.rs
index a70d6798431..f0ceeb89434 100644
--- a/src/components/script/dom/htmlimageelement.rs
+++ b/src/components/script/dom/htmlimageelement.rs
@@ -13,12 +13,12 @@ use dom::element::{AttributeHandlers, AfterSetAttrListener, BeforeRemoveAttrList
use dom::eventtarget::{EventTarget, NodeTargetTypeId};
use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId, NodeHelpers, window_from_node};
-use extra::url::Url;
use servo_util::geometry::to_px;
use layout_interface::{ContentBoxQuery, ContentBoxResponse};
use servo_net::image_cache_task;
use servo_util::url::parse_url;
use servo_util::str::DOMString;
+use url::Url;
use serialize::{Encoder, Encodable};
@@ -138,7 +138,7 @@ impl HTMLImageElement {
let node: JS<Node> = NodeCast::from(abstract_self);
let window = window_from_node(&node);
let page = window.get().page();
- let (port, chan) = Chan::new();
+ let (chan, port) = channel();
let addr = node.to_trusted_node_address();
let ContentBoxResponse(rect) = page.query_layout(ContentBoxQuery(addr, chan), port);
to_px(rect.size.width) as u32
@@ -153,7 +153,7 @@ impl HTMLImageElement {
let node = &self.htmlelement.element.node;
let doc = node.owner_doc();
let page = doc.get().window.get().page();
- let (port, chan) = Chan::new();
+ let (chan, port) = channel();
let this_node: JS<Node> = NodeCast::from(abstract_self);
let addr = this_node.to_trusted_node_address();
let ContentBoxResponse(rect) = page.query_layout(ContentBoxQuery(addr, chan), port);
diff --git a/src/components/script/dom/htmlobjectelement.rs b/src/components/script/dom/htmlobjectelement.rs
index d4e82a61da8..03fc8984845 100644
--- a/src/components/script/dom/htmlobjectelement.rs
+++ b/src/components/script/dom/htmlobjectelement.rs
@@ -18,12 +18,12 @@ use dom::validitystate::ValidityState;
use dom::windowproxy::WindowProxy;
use servo_util::str::DOMString;
-use extra::url::Url;
use servo_net::image_cache_task;
use servo_net::image_cache_task::ImageCacheTask;
use servo_util::url::parse_url;
use servo_util::namespace::Null;
use servo_util::url::is_image_data;
+use url::Url;
#[deriving(Encodable)]
pub struct HTMLObjectElement {
diff --git a/src/components/script/dom/location.rs b/src/components/script/dom/location.rs
index 8e7e1ca5ced..168ded0a4c7 100644
--- a/src/components/script/dom/location.rs
+++ b/src/components/script/dom/location.rs
@@ -27,7 +27,7 @@ struct Untraceable {
impl<S: Encoder> Encodable<S> for Untraceable {
fn encode(&self, s: &mut S) {
- self.page.borrow().encode(s);
+ self.page.encode(s);
}
}
@@ -60,7 +60,7 @@ impl Location {
}
pub fn Href(&self) -> DOMString {
- self.extra.page.borrow().get_url().to_str()
+ self.extra.page.get_url().to_str()
}
pub fn SetHref(&self, _href: DOMString) -> Fallible<()> {
diff --git a/src/components/script/dom/node.rs b/src/components/script/dom/node.rs
index 9211925edb8..0a35b5b6b0d 100644
--- a/src/components/script/dom/node.rs
+++ b/src/components/script/dom/node.rs
@@ -162,14 +162,12 @@ impl LayoutDataRef {
/// Returns true if there is layout data present.
#[inline]
pub fn is_present(&self) -> bool {
- let data_ref = self.data_cell.borrow();
- data_ref.get().is_some()
+ self.data_cell.borrow().is_some()
}
/// Take the chan out of the layout data if it is present.
pub fn take_chan(&self) -> Option<LayoutChan> {
- let mut data_ref = self.data_cell.borrow_mut();
- let layout_data = data_ref.get();
+ let mut layout_data = self.data_cell.borrow_mut();
match *layout_data {
None => None,
Some(..) => Some(layout_data.get_mut_ref().chan.take_unwrap()),
@@ -1353,7 +1351,7 @@ impl Node {
if copy.is_document() {
document = DocumentCast::to(&copy).unwrap();
}
- assert_eq!(copy.get().owner_doc(), &document);
+ assert!(copy.get().owner_doc() == &document);
// Step 4 (some data already copied in step 2).
match node.type_id() {
diff --git a/src/components/script/dom/window.rs b/src/components/script/dom/window.rs
index 9aaebee3303..dae0020abe8 100644
--- a/src/components/script/dom/window.rs
+++ b/src/components/script/dom/window.rs
@@ -28,14 +28,14 @@ use js::JSPROP_ENUMERATE;
use collections::hashmap::HashMap;
use std::cast;
use std::cmp;
-use std::comm::Chan;
+use std::comm::{channel, Sender, Receiver};
use std::comm::Select;
use std::hash::{Hash, sip};
use std::io::timer::Timer;
use std::rc::Rc;
use serialize::{Encoder, Encodable};
-use extra::url::{Url};
+use url::Url;
pub enum TimerControlMsg {
TimerMessageFire(~TimerData),
@@ -45,7 +45,7 @@ pub enum TimerControlMsg {
pub struct TimerHandle {
handle: i32,
- cancel_chan: Option<Chan<()>>,
+ cancel_chan: Option<Sender<()>>,
}
impl<S: Encoder> Encodable<S> for TimerHandle {
@@ -65,6 +65,12 @@ impl Eq for TimerHandle {
}
}
+impl TotalEq for TimerHandle {
+ fn equals(&self, other: &TimerHandle) -> bool {
+ self.eq(other)
+ }
+}
+
impl TimerHandle {
fn cancel(&self) {
self.cancel_chan.as_ref().map(|chan| chan.send(()));
@@ -87,25 +93,23 @@ pub struct Window {
struct Untraceable {
page: Rc<Page>,
compositor: ~ScriptListener,
- timer_chan: Chan<TimerControlMsg>,
+ timer_chan: Sender<TimerControlMsg>,
}
impl<S: Encoder> Encodable<S> for Untraceable {
fn encode(&self, s: &mut S) {
- let page = self.page.borrow();
- page.encode(s);
+ self.page.encode(s);
}
}
impl Window {
pub fn get_cx(&self) -> *JSObject {
let js_info = self.page().js_info();
- (*js_info.get()).get_ref().js_compartment.borrow().cx.borrow().ptr
+ js_info.get_ref().js_compartment.cx.deref().ptr
}
pub fn page<'a>(&'a self) -> &'a Page {
- let page = &self.extra.page;
- page.borrow()
+ &*self.extra.page
}
pub fn get_url(&self) -> Url {
self.page().get_url()
@@ -143,7 +147,7 @@ impl Window {
pub fn Document(&self) -> JS<Document> {
let frame = self.page().frame();
- (*frame.get()).get_ref().document.clone()
+ frame.get_ref().document.clone()
}
pub fn Name(&self) -> DOMString {
@@ -233,7 +237,7 @@ impl Window {
// Post a delayed message to the per-window timer task; it will dispatch it
// to the relevant script handler that will deal with it.
let tm = Timer::new().unwrap();
- let (cancel_port, cancel_chan) = Chan::new();
+ let (cancel_chan, cancel_port) = channel();
let chan = self.extra.timer_chan.clone();
spawn_named("Window:SetTimeout", proc() {
let mut tm = tm;
@@ -294,8 +298,8 @@ impl Window {
compositor: compositor,
page: page.clone(),
timer_chan: {
- let (timer_port, timer_chan): (Port<TimerControlMsg>, Chan<TimerControlMsg>) = Chan::new();
- let id = page.borrow().id.clone();
+ let (timer_chan, timer_port): (Sender<TimerControlMsg>, Receiver<TimerControlMsg>) = channel();
+ let id = page.id.clone();
spawn_named("timer controller", proc() {
let ScriptChan(script_chan) = script_chan;
loop {
diff --git a/src/components/script/html/cssparse.rs b/src/components/script/html/cssparse.rs
index 846af813461..c5cad0849de 100644
--- a/src/components/script/html/cssparse.rs
+++ b/src/components/script/html/cssparse.rs
@@ -4,13 +4,13 @@
/// Some little helpers for hooking up the HTML parser with the CSS parser.
-use std::comm::Port;
+use std::comm::{channel, Receiver};
use encoding::EncodingRef;
use encoding::all::UTF_8;
use style::Stylesheet;
use servo_net::resource_task::{Load, LoadResponse, ProgressMsg, Payload, Done, ResourceTask};
use servo_util::task::spawn_named;
-use extra::url::Url;
+use url::Url;
/// Where a style sheet comes from.
pub enum StylesheetProvenance {
@@ -20,8 +20,8 @@ pub enum StylesheetProvenance {
pub fn spawn_css_parser(provenance: StylesheetProvenance,
resource_task: ResourceTask)
- -> Port<Stylesheet> {
- let (result_port, result_chan) = Chan::new();
+ -> Receiver<Stylesheet> {
+ let (result_chan, result_port) = channel();
// TODO: Get the actual value. http://dev.w3.org/csswg/css-syntax/#environment-encoding
let environment_encoding = UTF_8 as EncodingRef;
@@ -30,7 +30,7 @@ pub fn spawn_css_parser(provenance: StylesheetProvenance,
let sheet = match provenance {
UrlProvenance(url) => {
debug!("cssparse: loading style sheet at {:s}", url.to_str());
- let (input_port, input_chan) = Chan::new();
+ let (input_chan, input_port) = channel();
resource_task.send(Load(url, input_chan));
let LoadResponse { metadata: metadata, progress_port: progress_port }
= input_port.recv();
@@ -52,7 +52,7 @@ pub fn spawn_css_parser(provenance: StylesheetProvenance,
}
struct ProgressMsgPortIterator {
- progress_port: Port<ProgressMsg>
+ progress_port: Receiver<ProgressMsg>
}
impl Iterator<~[u8]> for ProgressMsgPortIterator {
diff --git a/src/components/script/html/hubbub_html_parser.rs b/src/components/script/html/hubbub_html_parser.rs
index 5b6e1e80bb2..e2a870c2bc9 100644
--- a/src/components/script/html/hubbub_html_parser.rs
+++ b/src/components/script/html/hubbub_html_parser.rs
@@ -17,7 +17,6 @@ use dom::types::*;
use html::cssparse::{InlineProvenance, StylesheetProvenance, UrlProvenance, spawn_css_parser};
use script_task::Page;
-use extra::url::Url;
use hubbub::hubbub;
use servo_msg::constellation_msg::SubpageId;
use servo_net::resource_task::{Load, Payload, Done, ResourceTask, load_whole_resource};
@@ -28,9 +27,10 @@ use servo_util::url::parse_url;
use std::ascii::StrAsciiExt;
use std::cast;
use std::cell::RefCell;
-use std::comm::{Port, Chan};
+use std::comm::{channel, Sender, Receiver};
use std::str;
use style::Stylesheet;
+use url::Url;
macro_rules! handle_element(
($document: expr,
@@ -71,7 +71,7 @@ pub enum HtmlDiscoveryMessage {
}
pub struct HtmlParserResult {
- discovery_port: Port<HtmlDiscoveryMessage>,
+ discovery_port: Receiver<HtmlDiscoveryMessage>,
}
trait NodeWrapping {
@@ -103,8 +103,8 @@ spawned, collates them, and sends them to the given result channel.
* `from_parent` - A port on which to receive new links.
*/
-fn css_link_listener(to_parent: Chan<HtmlDiscoveryMessage>,
- from_parent: Port<CSSMessage>,
+fn css_link_listener(to_parent: Sender<HtmlDiscoveryMessage>,
+ from_parent: Receiver<CSSMessage>,
resource_task: ResourceTask) {
let mut result_vec = ~[];
@@ -126,8 +126,8 @@ fn css_link_listener(to_parent: Chan<HtmlDiscoveryMessage>,
}
}
-fn js_script_listener(to_parent: Chan<HtmlDiscoveryMessage>,
- from_parent: Port<JSMessage>,
+fn js_script_listener(to_parent: Sender<HtmlDiscoveryMessage>,
+ from_parent: Receiver<JSMessage>,
resource_task: ResourceTask) {
let mut result_vec = ~[];
@@ -256,9 +256,9 @@ pub fn parse_html(page: &Page,
// Spawn a CSS parser to receive links to CSS style sheets.
let resource_task2 = resource_task.clone();
- let (discovery_port, discovery_chan) = Chan::new();
+ let (discovery_chan, discovery_port) = channel();
let stylesheet_chan = discovery_chan.clone();
- let (css_msg_port, css_chan) = Chan::new();
+ let (css_chan, css_msg_port) = channel();
spawn_named("parse_html:css", proc() {
css_link_listener(stylesheet_chan, css_msg_port, resource_task2.clone());
});
@@ -266,13 +266,13 @@ pub fn parse_html(page: &Page,
// Spawn a JS parser to receive JavaScript.
let resource_task2 = resource_task.clone();
let js_result_chan = discovery_chan.clone();
- let (js_msg_port, js_chan) = Chan::new();
+ let (js_chan, js_msg_port) = channel();
spawn_named("parse_html:js", proc() {
js_script_listener(js_result_chan, js_msg_port, resource_task2.clone());
});
// Wait for the LoadResponse so that the parser knows the final URL.
- let (input_port, input_chan) = Chan::new();
+ let (input_chan, input_port) = channel();
resource_task.send(Load(url.clone(), input_chan));
let load_response = input_port.recv();
@@ -286,8 +286,7 @@ pub fn parse_html(page: &Page,
// Store the final URL before we start parsing, so that DOM routines
// (e.g. HTMLImageElement::update_image) can resolve relative URLs
// correctly.
- let mut page_url = page.mut_url();
- *page_url.get() = Some((url2.clone(), true));
+ *page.mut_url() = Some((url2.clone(), true));
}
let pipeline_id = page.id;
@@ -310,7 +309,7 @@ pub fn parse_html(page: &Page,
debug!("create comment");
// NOTE: tmp vars are workaround for lifetime issues. Both required.
let tmp_borrow = doc_cell.borrow();
- let tmp = tmp_borrow.get();
+ let tmp = &*tmp_borrow;
let comment: JS<Node> = NodeCast::from(&Comment::new(data, *tmp));
unsafe { comment.to_hubbub_node() }
},
@@ -322,7 +321,7 @@ pub fn parse_html(page: &Page,
force_quirks: _ } = doctype;
// NOTE: tmp vars are workaround for lifetime issues. Both required.
let tmp_borrow = doc_cell.borrow();
- let tmp = tmp_borrow.get();
+ let tmp = &*tmp_borrow;
let doctype_node = DocumentType::new(name, public_id, system_id, *tmp);
unsafe {
doctype_node.to_hubbub_node()
@@ -332,7 +331,7 @@ pub fn parse_html(page: &Page,
debug!("create element");
// NOTE: tmp vars are workaround for lifetime issues. Both required.
let tmp_borrow = doc_cell.borrow();
- let tmp = tmp_borrow.get();
+ let tmp = &*tmp_borrow;
let mut element = build_element_from_tag(tag.name.clone(), *tmp);
debug!("-- attach attrs");
@@ -398,7 +397,7 @@ pub fn parse_html(page: &Page,
debug!("create text");
// NOTE: tmp vars are workaround for lifetime issues. Both required.
let tmp_borrow = doc_cell.borrow();
- let tmp = tmp_borrow.get();
+ let tmp = &*tmp_borrow;
let text = Text::new(data, *tmp);
unsafe { text.to_hubbub_node() }
},
@@ -448,14 +447,14 @@ pub fn parse_html(page: &Page,
debug!("set quirks mode");
// NOTE: tmp vars are workaround for lifetime issues. Both required.
let mut tmp_borrow = doc_cell.borrow_mut();
- let tmp = tmp_borrow.get();
+ let tmp = &mut *tmp_borrow;
tmp.get_mut().set_quirks_mode(mode);
},
encoding_change: |encname| {
debug!("encoding change");
// NOTE: tmp vars are workaround for lifetime issues. Both required.
let mut tmp_borrow = doc_cell.borrow_mut();
- let tmp = tmp_borrow.get();
+ let tmp = &mut *tmp_borrow;
tmp.get_mut().set_encoding_name(encname);
},
complete_script: |script| {
diff --git a/src/components/script/layout_interface.rs b/src/components/script/layout_interface.rs
index 4ccf959f8ab..9dce53fc36e 100644
--- a/src/components/script/layout_interface.rs
+++ b/src/components/script/layout_interface.rs
@@ -8,16 +8,16 @@
use dom::node::LayoutDataRef;
-use extra::url::Url;
use geom::point::Point2D;
use geom::rect::Rect;
use geom::size::Size2D;
use script_task::{ScriptChan};
use servo_util::geometry::Au;
use std::cmp;
-use std::comm::Chan;
+use std::comm::{channel, Receiver, Sender};
use std::libc::c_void;
use style::Stylesheet;
+use url::Url;
/// Asynchronous messages that script can send to layout.
///
@@ -42,7 +42,7 @@ pub enum Msg {
/// Requests that the layout task enter a quiescent state in which no more messages are
/// accepted except `ExitMsg`. A response message will be sent on the supplied channel when
/// this happens.
- PrepareToExitMsg(Chan<()>),
+ PrepareToExitMsg(Sender<()>),
/// Requests that the layout task immediately shut down. There must be no more nodes left after
/// this, or layout will crash.
@@ -52,12 +52,12 @@ pub enum Msg {
/// Synchronous messages that script can send to layout.
pub enum LayoutQuery {
/// Requests the dimensions of the content box, as in the `getBoundingClientRect()` call.
- ContentBoxQuery(TrustedNodeAddress, Chan<ContentBoxResponse>),
+ ContentBoxQuery(TrustedNodeAddress, Sender<ContentBoxResponse>),
/// Requests the dimensions of all the content boxes, as in the `getClientRects()` call.
- ContentBoxesQuery(TrustedNodeAddress, Chan<ContentBoxesResponse>),
+ ContentBoxesQuery(TrustedNodeAddress, Sender<ContentBoxesResponse>),
/// Requests the node containing the point of interest
- HitTestQuery(TrustedNodeAddress, Point2D<f32>, Chan<Result<HitTestResponse, ()>>),
- MouseOverQuery(TrustedNodeAddress, Point2D<f32>, Chan<Result<MouseOverResponse, ()>>),
+ HitTestQuery(TrustedNodeAddress, Point2D<f32>, Sender<Result<HitTestResponse, ()>>),
+ MouseOverQuery(TrustedNodeAddress, Point2D<f32>, Sender<Result<MouseOverResponse, ()>>),
}
/// The address of a node known to be valid. These must only be sent from content -> layout,
@@ -74,7 +74,7 @@ pub struct HitTestResponse(UntrustedNodeAddress);
pub struct MouseOverResponse(~[UntrustedNodeAddress]);
/// Determines which part of the
-#[deriving(Eq, Ord)]
+#[deriving(Eq, Ord, TotalEq, TotalOrd)]
pub enum DocumentDamageLevel {
/// Reflow, but do not perform CSS selector matching.
ReflowDocumentDamage,
@@ -125,18 +125,18 @@ pub struct Reflow {
/// The current window size.
window_size: Size2D<uint>,
/// The channel that we send a notification to.
- script_join_chan: Chan<()>,
+ script_join_chan: Sender<()>,
/// Unique identifier
id: uint
}
/// Encapsulates a channel to the layout task.
#[deriving(Clone)]
-pub struct LayoutChan(Chan<Msg>);
+pub struct LayoutChan(Sender<Msg>);
impl LayoutChan {
- pub fn new() -> (Port<Msg>, LayoutChan) {
- let (port, chan) = Chan::new();
+ pub fn new() -> (Receiver<Msg>, LayoutChan) {
+ let (chan, port) = channel();
(port, LayoutChan(chan))
}
}
diff --git a/src/components/script/script.rs b/src/components/script/script.rs
index c9160b56131..9ab4c2cc671 100644
--- a/src/components/script/script.rs
+++ b/src/components/script/script.rs
@@ -10,11 +10,16 @@
#[feature(globs, macro_rules, struct_variant, managed_boxes, phase)];
+#[feature(phase)];
+#[phase(syntax, link)]
+extern crate log;
+
extern crate collections;
extern crate geom;
extern crate hubbub;
extern crate encoding;
extern crate js;
+extern crate native;
extern crate serialize;
#[phase(syntax)]
extern crate servo_macros = "macros";
@@ -22,8 +27,7 @@ extern crate servo_net = "net";
extern crate servo_util = "util";
extern crate style;
extern crate servo_msg = "msg";
-extern crate extra;
-extern crate native;
+extern crate url;
pub mod dom {
pub mod bindings {
diff --git a/src/components/script/script_task.rs b/src/components/script/script_task.rs
index 9d9897dfc54..c1c3a717f1a 100644
--- a/src/components/script/script_task.rs
+++ b/src/components/script/script_task.rs
@@ -29,7 +29,6 @@ use layout_interface::{Reflow, ReflowDocumentDamage, ReflowForDisplay, ReflowGoa
use layout_interface::ContentChangedDocumentDamage;
use layout_interface;
-use extra::url::Url;
use geom::point::Point2D;
use geom::size::Size2D;
use js::global::DEBUG_FNS;
@@ -51,11 +50,12 @@ use servo_util::task::send_on_failure;
use servo_util::namespace::Null;
use std::cast;
use std::cell::{RefCell, Ref, RefMut};
-use std::comm::{Port, Chan, Empty, Disconnected, Data};
+use std::comm::{channel, Sender, Receiver, Empty, Disconnected, Data};
use std::mem::replace;
use std::ptr;
use std::rc::Rc;
use std::task;
+use url::Url;
use serialize::{Encoder, Encodable};
@@ -91,7 +91,7 @@ pub struct NewLayoutInfo {
/// Encapsulates external communication with the script task.
#[deriving(Clone)]
-pub struct ScriptChan(Chan<ScriptMsg>);
+pub struct ScriptChan(Sender<ScriptMsg>);
impl<S: Encoder> Encodable<S> for ScriptChan {
fn encode(&self, _s: &mut S) {
@@ -100,8 +100,8 @@ impl<S: Encoder> Encodable<S> for ScriptChan {
impl ScriptChan {
/// Creates a new script chan.
- pub fn new() -> (Port<ScriptMsg>, ScriptChan) {
- let (port, chan) = Chan::new();
+ pub fn new() -> (Receiver<ScriptMsg>, ScriptChan) {
+ let (chan, port) = channel();
(port, ScriptChan(chan))
}
}
@@ -121,7 +121,7 @@ pub struct Page {
layout_chan: LayoutChan,
/// The port that we will use to join layout. If this is `None`, then layout is not running.
- layout_join_port: RefCell<Option<Port<()>>>,
+ layout_join_port: RefCell<Option<Receiver<()>>>,
/// What parts of the document are dirty, if any.
damage: RefCell<Option<DocumentDamage>>,
@@ -149,7 +149,7 @@ pub struct Page {
impl<S: Encoder> Encodable<S> for Page {
fn encode(&self, s: &mut S) {
let fragment_node = self.fragment_node.borrow();
- fragment_node.get().encode(s);
+ fragment_node.encode(s);
}
}
@@ -188,7 +188,7 @@ impl PageTree {
}
fn page<'a>(&'a self) -> &'a Page {
- self.page.borrow()
+ &*self.page
}
pub fn find<'a> (&'a mut self, id: PipelineId) -> Option<&'a mut PageTree> {
@@ -276,8 +276,7 @@ impl Page {
/// Adds the given damage.
pub fn damage(&self, level: DocumentDamageLevel) {
- let frame = self.frame();
- let root = match *frame.get() {
+ let root = match *self.frame() {
None => return,
Some(ref frame) => frame.document.get().GetDocumentElement()
};
@@ -285,8 +284,8 @@ impl Page {
None => {},
Some(root) => {
let root: JS<Node> = NodeCast::from(&root);
- let mut damage = self.damage.borrow_mut();
- match *damage.get() {
+ let mut damage = *self.damage.borrow_mut();
+ match damage {
None => {}
Some(ref mut damage) => {
// FIXME(pcwalton): This is wrong. We should trace up to the nearest ancestor.
@@ -296,7 +295,7 @@ impl Page {
}
}
- *damage.get() = Some(DocumentDamage {
+ *self.damage.borrow_mut() = Some(DocumentDamage {
root: root.to_trusted_node_address(),
level: level,
})
@@ -305,16 +304,15 @@ impl Page {
}
pub fn get_url(&self) -> Url {
- let url = self.url();
- url.get().get_ref().ref0().clone()
+ self.url().get_ref().ref0().clone()
}
/// Sends a ping to layout and waits for the response. The response will arrive when the
/// layout task has finished any pending request messages.
pub fn join_layout(&self) {
let mut layout_join_port = self.layout_join_port.borrow_mut();
- if layout_join_port.get().is_some() {
- let join_port = replace(layout_join_port.get(), None);
+ if layout_join_port.is_some() {
+ let join_port = replace(&mut *layout_join_port, None);
match join_port {
Some(ref join_port) => {
match join_port.try_recv() {
@@ -338,7 +336,7 @@ impl Page {
/// Sends the given query to layout.
pub fn query_layout<T: Send>(&self,
query: LayoutQuery,
- response_port: Port<T>)
+ response_port: Receiver<T>)
-> T {
self.join_layout();
let LayoutChan(ref chan) = self.layout_chan;
@@ -357,8 +355,7 @@ impl Page {
goal: ReflowGoal,
script_chan: ScriptChan,
compositor: &ScriptListener) {
- let frame = self.frame();
- let root = match *frame.get() {
+ let root = match *self.frame() {
None => return,
Some(ref frame) => {
frame.document.get().GetDocumentElement()
@@ -377,12 +374,12 @@ impl Page {
compositor.set_ready_state(PerformingLayout);
// Layout will let us know when it's done.
- let (join_port, join_chan) = Chan::new();
+ let (join_chan, join_port) = channel();
let mut layout_join_port = self.layout_join_port.borrow_mut();
- *layout_join_port.get() = Some(join_port);
+ *layout_join_port = Some(join_port);
let mut last_reflow_id = self.last_reflow_id.borrow_mut();
- *last_reflow_id.get() += 1;
+ *last_reflow_id += 1;
let root: JS<Node> = NodeCast::from(&root);
let mut damage = self.damage.borrow_mut();
@@ -393,11 +390,11 @@ impl Page {
document_root: root.to_trusted_node_address(),
url: self.get_url(),
goal: goal,
- window_size: *window_size.get(),
+ window_size: *window_size,
script_chan: script_chan,
script_join_chan: join_chan,
- damage: replace(damage.get(), None).unwrap(),
- id: *last_reflow_id.get(),
+ damage: replace(&mut *damage, None).unwrap(),
+ id: *last_reflow_id,
};
let LayoutChan(ref chan) = self.layout_chan;
@@ -414,8 +411,8 @@ impl Page {
// Note that the order that these variables are initialized is _not_ arbitrary. Switching
// them around can -- and likely will -- lead to things breaking.
- js_context.borrow().set_default_options_and_version();
- js_context.borrow().set_logging_error_reporter();
+ js_context.set_default_options_and_version();
+ js_context.set_logging_error_reporter();
let compartment = match js_context.new_compartment_with_global(global) {
Ok(c) => c,
@@ -423,11 +420,11 @@ impl Page {
};
unsafe {
- JS_InhibitGC(js_context.borrow().ptr);
+ JS_InhibitGC(js_context.deref().ptr);
}
let mut js_info = self.mut_js_info();
- *js_info.get() = Some(JSPageInfo {
+ *js_info = Some(JSPageInfo {
dom_static: GlobalStaticData(),
js_compartment: compartment,
js_context: js_context,
@@ -467,7 +464,7 @@ pub struct ScriptTask {
resource_task: ResourceTask,
/// The port on which the script task receives messages (load URL, exit, etc.)
- port: Port<ScriptMsg>,
+ port: Receiver<ScriptMsg>,
/// A channel to hand out when some other task needs to be able to respond to a message from
/// the script task.
chan: ScriptChan,
@@ -488,7 +485,7 @@ impl ScriptTask {
pub fn new(id: PipelineId,
compositor: ~ScriptListener,
layout_chan: LayoutChan,
- port: Port<ScriptMsg>,
+ port: Receiver<ScriptMsg>,
chan: ScriptChan,
constellation_chan: ConstellationChan,
resource_task: ResourceTask,
@@ -525,7 +522,7 @@ impl ScriptTask {
id: PipelineId,
compositor: ~C,
layout_chan: LayoutChan,
- port: Port<ScriptMsg>,
+ port: Receiver<ScriptMsg>,
chan: ScriptChan,
constellation_chan: ConstellationChan,
failure_msg: Failure,
@@ -545,7 +542,7 @@ impl ScriptTask {
resource_task,
image_cache_task,
window_size);
- script_task.borrow().start();
+ script_task.start();
});
}
@@ -557,13 +554,12 @@ impl ScriptTask {
{
let mut page_tree = self.page_tree.borrow_mut();
- for page in page_tree.get().iter() {
+ for page in page_tree.iter() {
// Only process a resize if layout is idle.
- let page = page.borrow();
let layout_join_port = page.layout_join_port.borrow();
- if layout_join_port.get().is_none() {
+ if layout_join_port.is_none() {
let mut resize_event = page.resize_event.borrow_mut();
- match resize_event.get().take() {
+ match resize_event.take() {
Some(size) => resizes.push((page.id, size)),
None => ()
}
@@ -585,9 +581,9 @@ impl ScriptTask {
match event {
ResizeMsg(id, size) => {
let mut page_tree = self.page_tree.borrow_mut();
- let page = page_tree.get().find(id).expect("resize sent to nonexistent pipeline").page();
+ let page = page_tree.find(id).expect("resize sent to nonexistent pipeline").page();
let mut resize_event = page.resize_event.borrow_mut();
- *resize_event.get() = Some(size);
+ *resize_event = Some(size);
}
_ => {
sequential.push(event);
@@ -629,12 +625,12 @@ impl ScriptTask {
} = new_layout_info;
let mut page_tree = self.page_tree.borrow_mut();
- let parent_page_tree = page_tree.get().find(old_id).expect("ScriptTask: received a layout
+ let parent_page_tree = page_tree.find(old_id).expect("ScriptTask: received a layout
whose parent has a PipelineId which does not correspond to a pipeline in the script
task's page tree. This is a bug.");
let new_page_tree = {
let window_size = parent_page_tree.page().window_size.borrow();
- PageTree::new(new_id, layout_chan, *window_size.get())
+ PageTree::new(new_id, layout_chan, *window_size)
};
parent_page_tree.inner.push(new_page_tree);
}
@@ -642,10 +638,10 @@ impl ScriptTask {
/// Handles a timer that fired.
fn handle_fire_timer_msg(&self, id: PipelineId, timer_data: ~TimerData) {
let mut page_tree = self.page_tree.borrow_mut();
- let page = page_tree.get().find(id).expect("ScriptTask: received fire timer msg for a
+ let page = page_tree.find(id).expect("ScriptTask: received fire timer msg for a
pipeline ID not associated with this script task. This is a bug.").page();
let frame = page.frame();
- let mut window = frame.get().get_ref().window.clone();
+ let mut window = frame.get_ref().window.clone();
let timer_handle = window.get_mut().active_timers.pop(&timer_data.handle);
if timer_handle.is_none() {
@@ -656,12 +652,12 @@ impl ScriptTask {
let this_value = if timer_data.args.len() > 0 {
fail!("NYI")
} else {
- js_info.get().get_ref().js_compartment.borrow().global_obj
+ js_info.get_ref().js_compartment.global_obj
};
// TODO: Support extra arguments. This requires passing a `*JSVal` array as `argv`.
let rval = NullValue();
- let cx = js_info.get().get_ref().js_context.borrow().ptr;
+ let cx = js_info.get_ref().js_context.deref().ptr;
with_gc_enabled(cx, || {
unsafe {
JS_CallFunctionValue(cx, this_value, timer_data.funval, 0, ptr::null(), &rval);
@@ -673,13 +669,13 @@ impl ScriptTask {
fn handle_reflow_complete_msg(&self, pipeline_id: PipelineId, reflow_id: uint) {
debug!("Script: Reflow {:?} complete for {:?}", reflow_id, pipeline_id);
let mut page_tree = self.page_tree.borrow_mut();
- let page = page_tree.get().find(pipeline_id).expect(
+ let page = page_tree.find(pipeline_id).expect(
"ScriptTask: received a load message for a layout channel that is not associated \
with this script task. This is a bug.").page();
let last_reflow_id = page.last_reflow_id.borrow();
- if *last_reflow_id.get() == reflow_id {
+ if *last_reflow_id == reflow_id {
let mut layout_join_port = page.layout_join_port.borrow_mut();
- *layout_join_port.get() = None;
+ *layout_join_port = None;
}
self.compositor.set_ready_state(FinishedLoading);
}
@@ -694,14 +690,14 @@ impl ScriptTask {
/// Window was resized, but this script was not active, so don't reflow yet
fn handle_resize_inactive_msg(&self, id: PipelineId, new_size: Size2D<uint>) {
let mut page_tree = self.page_tree.borrow_mut();
- let page = page_tree.get().find(id).expect("Received resize message for PipelineId not associated
+ let page = page_tree.find(id).expect("Received resize message for PipelineId not associated
with a page in the page tree. This is a bug.").page();
let mut window_size = page.window_size.borrow_mut();
- *window_size.get() = new_size;
+ *window_size = new_size;
let mut page_url = page.mut_url();
- let last_loaded_url = replace(page_url.get(), None);
+ let last_loaded_url = replace(&mut *page_url, None);
for url in last_loaded_url.iter() {
- *page_url.get() = Some((url.ref0().clone(), true));
+ *page_url = Some((url.ref0().clone(), true));
}
}
@@ -724,22 +720,20 @@ impl ScriptTask {
fn handle_exit_pipeline_msg(&self, id: PipelineId) -> bool {
// If root is being exited, shut down all pages
let mut page_tree = self.page_tree.borrow_mut();
- if page_tree.get().page().id == id {
- for page in page_tree.get().iter() {
- let page = page.borrow();
+ if page_tree.page().id == id {
+ for page in page_tree.iter() {
debug!("shutting down layout for root page {:?}", page.id);
- shut_down_layout(page)
+ shut_down_layout(&*page)
}
return true
}
// otherwise find just the matching page and exit all sub-pages
- match page_tree.get().remove(id) {
+ match page_tree.remove(id) {
Some(ref mut page_tree) => {
for page in page_tree.iter() {
- let page = page.borrow();
debug!("shutting down layout for page {:?}", page.id);
- shut_down_layout(page)
+ shut_down_layout(&*page)
}
false
}
@@ -757,18 +751,18 @@ impl ScriptTask {
debug!("ScriptTask: loading {:?} on page {:?}", url, pipeline_id);
let mut page_tree = self.page_tree.borrow_mut();
- let page_tree = page_tree.get().find(pipeline_id).expect("ScriptTask: received a load
+ let page_tree = page_tree.find(pipeline_id).expect("ScriptTask: received a load
message for a layout channel that is not associated with this script task. This
is a bug.");
let page = page_tree.page();
{
let mut page_url = page.mut_url();
- let last_loaded_url = replace(page_url.get(), None);
+ let last_loaded_url = replace(&mut *page_url, None);
for loaded in last_loaded_url.iter() {
let (ref loaded, needs_reflow) = *loaded;
if *loaded == url {
- *page_url.get() = Some((loaded.clone(), false));
+ *page_url = Some((loaded.clone(), false));
if needs_reflow {
page.damage(ContentChangedDocumentDamage);
page.reflow(ReflowForDisplay, self.chan.clone(), self.compositor);
@@ -780,7 +774,7 @@ impl ScriptTask {
let cx = self.js_runtime.cx();
// Create the window and document objects.
- let window = Window::new(cx.borrow().ptr,
+ let window = Window::new(cx.deref().ptr,
page_tree.page.clone(),
self.chan.clone(),
self.compositor.dup(),
@@ -789,7 +783,7 @@ impl ScriptTask {
{
let mut js_info = page.mut_js_info();
- RegisterBindings::Register(js_info.get().get_mut_ref());
+ RegisterBindings::Register(js_info.get_mut_ref());
}
self.compositor.set_ready_state(Loading);
@@ -809,7 +803,7 @@ impl ScriptTask {
{
// Create the root frame.
let mut frame = page.mut_frame();
- *frame.get() = Some(Frame {
+ *frame = Some(Frame {
document: document.clone(),
window: window.clone(),
});
@@ -857,7 +851,7 @@ impl ScriptTask {
{
// No more reflow required
let mut page_url = page.mut_url();
- *page_url.get() = Some((url.clone(), false));
+ *page_url = Some((url.clone(), false));
}
// Receive the JavaScript scripts.
@@ -868,11 +862,10 @@ impl ScriptTask {
// Define debug functions.
let cx = {
let js_info = page.js_info();
- let js_info = js_info.get().get_ref();
- let compartment = js_info.js_compartment.borrow();
- assert!(compartment.define_functions(DEBUG_FNS).is_ok());
+ let js_info = js_info.get_ref();
+ assert!(js_info.js_compartment.define_functions(DEBUG_FNS).is_ok());
- js_info.js_context.borrow().ptr
+ js_info.js_context.deref().ptr
};
// Evaluate every script in the document.
@@ -880,15 +873,15 @@ impl ScriptTask {
with_gc_enabled(cx, || {
let (cx, global_obj) = {
let js_info = page.js_info();
- (js_info.get().get_ref().js_context.clone(),
- js_info.get().get_ref().js_compartment.borrow().global_obj)
+ (js_info.get_ref().js_context.clone(),
+ js_info.get_ref().js_compartment.global_obj)
};
//FIXME: this should have some kind of error handling, or explicitly
// drop an exception on the floor.
- assert!(cx.borrow().evaluate_script(global_obj,
- file.data.clone(),
- file.url.to_str(),
- 1).is_ok());
+ assert!(cx.evaluate_script(global_obj,
+ file.data.clone(),
+ file.url.to_str(),
+ 1).is_ok());
});
}
@@ -903,7 +896,7 @@ impl ScriptTask {
let _ = wintarget.get_mut().dispatch_event_with_target(&winclone, Some(doctarget), &mut event);
let mut fragment_node = page.fragment_node.borrow_mut();
- *fragment_node.get() = fragment.map_or(None, |fragid| self.find_fragment_node(page, fragid));
+ *fragment_node = fragment.map_or(None, |fragid| self.find_fragment_node(page, fragid));
let ConstellationChan(ref chan) = self.constellation_chan;
chan.send(LoadCompleteMsg(page.id, url));
@@ -911,7 +904,7 @@ impl ScriptTask {
fn find_fragment_node(&self, page: &Page, fragid: ~str) -> Option<JS<Element>> {
let frame = page.frame();
- let document = frame.get().get_ref().document.clone();
+ let document = frame.get_ref().document.clone();
match document.get().GetElementById(fragid.to_owned()) {
Some(node) => Some(node),
None => {
@@ -928,7 +921,7 @@ impl ScriptTask {
}
fn scroll_fragment_point(&self, pipeline_id: PipelineId, page: &Page, node: JS<Element>) {
- let (port, chan) = Chan::new();
+ let (chan, port) = channel();
let node: JS<Node> = NodeCast::from(&node);
let ContentBoxResponse(rect) =
page.query_layout(ContentBoxQuery(node.to_trusted_node_address(), chan), port);
@@ -946,7 +939,7 @@ impl ScriptTask {
/// TODO: Actually perform DOM event dispatch.
fn handle_event(&self, pipeline_id: PipelineId, event: Event_) {
let mut page_tree = self.page_tree.borrow_mut();
- let page = page_tree.get().find(pipeline_id).expect("ScriptTask: received an event
+ let page = page_tree.find(pipeline_id).expect("ScriptTask: received an event
message for a layout channel that is not associated with this script task. This
is a bug.").page();
@@ -956,25 +949,25 @@ impl ScriptTask {
{
let mut window_size = page.window_size.borrow_mut();
- *window_size.get() = Size2D(new_width, new_height);
+ *window_size = Size2D(new_width, new_height);
}
{
let frame = page.frame();
- if frame.get().is_some() {
+ if frame.is_some() {
page.damage(ReflowDocumentDamage);
page.reflow(ReflowForDisplay, self.chan.clone(), self.compositor)
}
}
let mut fragment_node = page.fragment_node.borrow_mut();
- match fragment_node.get().take() {
+ match fragment_node.take() {
Some(node) => self.scroll_fragment_point(pipeline_id, page, node),
None => {}
}
let frame = page.frame();
- match *frame.get() {
+ match *frame {
Some(ref frame) => {
// http://dev.w3.org/csswg/cssom-view/#resizing-viewports
// https://dvcs.w3.org/hg/dom3events/raw-file/tip/html/DOM3-Events.html#event-type-resize
@@ -997,7 +990,7 @@ impl ScriptTask {
debug!("script got reflow event");
let frame = page.frame();
- if frame.get().is_some() {
+ if frame.is_some() {
page.damage(MatchSelectorsDocumentDamage);
page.reflow(ReflowForDisplay, self.chan.clone(), self.compositor)
}
@@ -1007,18 +1000,18 @@ impl ScriptTask {
debug!("ClickEvent: clicked at {:?}", point);
let frame = page.frame();
- let document = frame.get().get_ref().document.clone();
+ let document = frame.get_ref().document.clone();
let root = document.get().GetDocumentElement();
if root.is_none() {
return;
}
- let (port, chan) = Chan::new();
+ let (chan, port) = channel();
let root: JS<Node> = NodeCast::from(&root.unwrap());
match page.query_layout(HitTestQuery(root.to_trusted_node_address(), point, chan), port) {
Ok(HitTestResponse(node_address)) => {
debug!("node address is {:?}", node_address);
let mut node: JS<Node> =
- NodeHelpers::from_untrusted_node_address(self.js_runtime.borrow().ptr,
+ NodeHelpers::from_untrusted_node_address(self.js_runtime.deref().ptr,
node_address);
debug!("clicked on {:s}", node.debug_str());
@@ -1045,21 +1038,21 @@ impl ScriptTask {
MouseUpEvent(..) => {}
MouseMoveEvent(point) => {
let frame = page.frame();
- let document = frame.get().get_ref().document.clone();
+ let document = frame.get_ref().document.clone();
let root = document.get().GetDocumentElement();
if root.is_none() {
return;
}
let root: JS<Node> = NodeCast::from(&root.unwrap());
- let (port, chan) = Chan::new();
+ let (chan, port) = channel();
match page.query_layout(MouseOverQuery(root.to_trusted_node_address(), point, chan), port) {
Ok(MouseOverResponse(node_address)) => {
let mut target_list: ~[JS<Node>] = ~[];
let mut target_compare = false;
- let mut mouse_over_targets = self.mouse_over_targets.borrow_mut();
- match *mouse_over_targets.get() {
+ let mouse_over_targets = &mut *self.mouse_over_targets.borrow_mut();
+ match *mouse_over_targets {
Some(ref mut mouse_over_targets) => {
for node in mouse_over_targets.mut_iter() {
node.set_hover_state(false);
@@ -1071,7 +1064,7 @@ impl ScriptTask {
for node_address in node_address.iter() {
let mut node: JS<Node> =
NodeHelpers::from_untrusted_node_address(
- self.js_runtime.borrow().ptr, *node_address);
+ self.js_runtime.deref().ptr, *node_address);
// Traverse node generations until a node that is an element is
// found.
while !node.is_element() {
@@ -1084,7 +1077,7 @@ impl ScriptTask {
if node.is_element() {
node.set_hover_state(true);
- match *mouse_over_targets.get() {
+ match *mouse_over_targets {
Some(ref mouse_over_targets) => {
if !target_compare {
target_compare = !mouse_over_targets.contains(&node);
@@ -1095,7 +1088,7 @@ impl ScriptTask {
target_list.push(node);
}
}
- match *mouse_over_targets.get() {
+ match *mouse_over_targets {
Some(ref mouse_over_targets) => {
if mouse_over_targets.len() != target_list.len() {
target_compare = true;
@@ -1105,11 +1098,11 @@ impl ScriptTask {
}
if target_compare {
- if mouse_over_targets.get().is_some() {
+ if mouse_over_targets.is_some() {
page.damage(MatchSelectorsDocumentDamage);
page.reflow(ReflowForDisplay, self.chan.clone(), self.compositor);
}
- *mouse_over_targets.get() = Some(target_list);
+ *mouse_over_targets = Some(target_list);
}
},
Err(()) => {},
@@ -1146,7 +1139,7 @@ fn shut_down_layout(page: &Page) {
page.join_layout();
// Tell the layout task to begin shutting down.
- let (response_port, response_chan) = Chan::new();
+ let (response_chan, response_port) = channel();
let LayoutChan(ref chan) = page.layout_chan;
chan.send(layout_interface::PrepareToExitMsg(response_chan));
response_port.recv();
@@ -1156,12 +1149,12 @@ fn shut_down_layout(page: &Page) {
let mut js_info = page.mut_js_info();
unsafe {
- JS_AllowGC(js_info.get().get_ref().js_context.borrow().ptr);
+ JS_AllowGC(js_info.get_ref().js_context.deref().ptr);
}
let mut frame = page.mut_frame();
- *frame.get() = None;
- *js_info.get() = None;
+ *frame = None;
+ *js_info = None;
// Destroy the layout task. If there were node leaks, layout will now crash safely.
chan.send(layout_interface::ExitNowMsg);
diff --git a/src/components/style/media_queries.rs b/src/components/style/media_queries.rs
index a7ed89e8230..d939bf4d9a9 100644
--- a/src/components/style/media_queries.rs
+++ b/src/components/style/media_queries.rs
@@ -9,7 +9,7 @@ use cssparser::ast::*;
use errors::{ErrorLoggerIterator, log_css_error};
use stylesheets::{CSSRule, CSSMediaRule, parse_style_rule, parse_nested_at_rule};
use namespaces::NamespaceMap;
-use extra::url::Url;
+use url::Url;
pub struct MediaRule {
diff --git a/src/components/style/properties.rs.mako b/src/components/style/properties.rs.mako
index 118eee0f010..37e302027bc 100644
--- a/src/components/style/properties.rs.mako
+++ b/src/components/style/properties.rs.mako
@@ -8,7 +8,7 @@
pub use servo_util::url::parse_url;
use sync::Arc;
-pub use extra::url::Url;
+pub use url::Url;
use servo_util::cowarc::CowArc;
pub use cssparser::*;
@@ -568,7 +568,7 @@ pub mod longhands {
// The computed value is the same as the specified value.
pub use to_computed_value = super::computed_as_specified;
pub mod computed_value {
- pub use extra::url::Url;
+ pub use url::Url;
pub type T = Option<Url>;
}
pub type SpecifiedValue = computed_value::T;
diff --git a/src/components/style/selectors.rs b/src/components/style/selectors.rs
index 6b7ea7e3306..b3da47695ed 100644
--- a/src/components/style/selectors.rs
+++ b/src/components/style/selectors.rs
@@ -2,8 +2,9 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-use std::{cmp, vec, iter};
+use std::{cmp, iter};
use std::ascii::StrAsciiExt;
+use std::slice;
use sync::Arc;
use cssparser::ast::*;
@@ -103,7 +104,7 @@ pub enum NamespaceConstraint {
}
-type Iter = iter::Peekable<ComponentValue, vec::MoveItems<ComponentValue>>;
+type Iter = iter::Peekable<ComponentValue, slice::MoveItems<ComponentValue>>;
/// Parse a comma-separated list of Selectors.
@@ -599,8 +600,8 @@ mod tests {
#[test]
fn test_parsing() {
- assert_eq!(parse(""), None)
- assert_eq!(parse("e"), Some(~[Selector{
+ assert!(parse("") == None)
+ assert!(parse("e") == Some(~[Selector{
compound_selectors: Arc::new(CompoundSelector {
simple_selectors: ~[LocalNameSelector(~"e")],
next: None,
@@ -608,7 +609,7 @@ mod tests {
pseudo_element: None,
specificity: specificity(0, 0, 1),
}]))
- assert_eq!(parse(".foo"), Some(~[Selector{
+ assert!(parse(".foo") == Some(~[Selector{
compound_selectors: Arc::new(CompoundSelector {
simple_selectors: ~[ClassSelector(~"foo")],
next: None,
@@ -616,7 +617,7 @@ mod tests {
pseudo_element: None,
specificity: specificity(0, 1, 0),
}]))
- assert_eq!(parse("#bar"), Some(~[Selector{
+ assert!(parse("#bar") == Some(~[Selector{
compound_selectors: Arc::new(CompoundSelector {
simple_selectors: ~[IDSelector(~"bar")],
next: None,
@@ -624,7 +625,7 @@ mod tests {
pseudo_element: None,
specificity: specificity(1, 0, 0),
}]))
- assert_eq!(parse("e.foo#bar"), Some(~[Selector{
+ assert!(parse("e.foo#bar") == Some(~[Selector{
compound_selectors: Arc::new(CompoundSelector {
simple_selectors: ~[LocalNameSelector(~"e"),
ClassSelector(~"foo"),
@@ -634,7 +635,7 @@ mod tests {
pseudo_element: None,
specificity: specificity(1, 1, 1),
}]))
- assert_eq!(parse("e.foo #bar"), Some(~[Selector{
+ assert!(parse("e.foo #bar") == Some(~[Selector{
compound_selectors: Arc::new(CompoundSelector {
simple_selectors: ~[IDSelector(~"bar")],
next: Some((~CompoundSelector {
@@ -649,7 +650,7 @@ mod tests {
// Default namespace does not apply to attribute selectors
// https://github.com/mozilla/servo/pull/1652
let mut namespaces = NamespaceMap::new();
- assert_eq!(parse_ns("[Foo]", &namespaces), Some(~[Selector{
+ assert!(parse_ns("[Foo]", &namespaces) == Some(~[Selector{
compound_selectors: Arc::new(CompoundSelector {
simple_selectors: ~[AttrExists(AttrSelector {
name: ~"Foo",
@@ -664,7 +665,7 @@ mod tests {
// Default namespace does not apply to attribute selectors
// https://github.com/mozilla/servo/pull/1652
namespaces.default = Some(namespace::MathML);
- assert_eq!(parse_ns("[Foo]", &namespaces), Some(~[Selector{
+ assert!(parse_ns("[Foo]", &namespaces) == Some(~[Selector{
compound_selectors: Arc::new(CompoundSelector {
simple_selectors: ~[AttrExists(AttrSelector {
name: ~"Foo",
@@ -677,7 +678,7 @@ mod tests {
specificity: specificity(0, 1, 0),
}]))
// Default namespace does apply to type selectors
- assert_eq!(parse_ns("e", &namespaces), Some(~[Selector{
+ assert!(parse_ns("e", &namespaces) == Some(~[Selector{
compound_selectors: Arc::new(CompoundSelector {
simple_selectors: ~[
NamespaceSelector(namespace::MathML),
@@ -689,7 +690,7 @@ mod tests {
specificity: specificity(0, 0, 1),
}]))
// https://github.com/mozilla/servo/issues/1723
- assert_eq!(parse("::before"), Some(~[Selector{
+ assert!(parse("::before") == Some(~[Selector{
compound_selectors: Arc::new(CompoundSelector {
simple_selectors: ~[],
next: None,
@@ -697,7 +698,7 @@ mod tests {
pseudo_element: Some(Before),
specificity: specificity(0, 0, 1),
}]))
- assert_eq!(parse("div :after"), Some(~[Selector{
+ assert!(parse("div :after") == Some(~[Selector{
compound_selectors: Arc::new(CompoundSelector {
simple_selectors: ~[],
next: Some((~CompoundSelector {
diff --git a/src/components/style/style.rs b/src/components/style/style.rs
index 2ec36faae7f..c2659665063 100644
--- a/src/components/style/style.rs
+++ b/src/components/style/style.rs
@@ -10,14 +10,17 @@
#[feature(globs, macro_rules, managed_boxes)];
+#[feature(phase)];
+#[phase(syntax, link)] extern crate log;
+
extern crate cssparser;
extern crate collections;
extern crate encoding;
-extern crate extra;
extern crate num;
extern crate serialize;
extern crate servo_util = "util";
extern crate sync;
+extern crate url;
// Public API
diff --git a/src/components/style/stylesheets.rs b/src/components/style/stylesheets.rs
index 6c66b707022..e943001e9a5 100644
--- a/src/components/style/stylesheets.rs
+++ b/src/components/style/stylesheets.rs
@@ -4,7 +4,7 @@
use std::iter::Iterator;
use std::ascii::StrAsciiExt;
-use extra::url::Url;
+use url::Url;
use encoding::EncodingRef;
diff --git a/src/components/util/cache.rs b/src/components/util/cache.rs
index 3eb37145df7..450faebebdb 100644
--- a/src/components/util/cache.rs
+++ b/src/components/util/cache.rs
@@ -3,11 +3,11 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use collections::HashMap;
+use rand;
+use rand::Rng;
use std::hash::{Hash, sip};
-use std::rand::Rng;
-use std::rand;
-use std::vec::Items;
-use std::vec;
+use std::slice;
+use std::slice::Items;
#[cfg(test)]
use std::cell::Cell;
@@ -75,7 +75,7 @@ pub struct HashCache<K, V> {
entries: HashMap<K, V>,
}
-impl<K: Clone + Eq + Hash, V: Clone> HashCache<K,V> {
+impl<K: Clone + Eq + TotalEq + Hash, V: Clone> HashCache<K,V> {
pub fn new() -> HashCache<K, V> {
HashCache {
entries: HashMap::new(),
@@ -83,7 +83,7 @@ impl<K: Clone + Eq + Hash, V: Clone> HashCache<K,V> {
}
}
-impl<K: Clone + Eq + Hash, V: Clone> Cache<K,V> for HashCache<K,V> {
+impl<K: Clone + Eq + TotalEq + Hash, V: Clone> Cache<K,V> for HashCache<K,V> {
fn insert(&mut self, key: K, value: V) {
self.entries.insert(key, value);
}
@@ -188,7 +188,7 @@ impl<K:Clone+Eq+Hash,V:Clone> SimpleHashCache<K,V> {
pub fn new(cache_size: uint) -> SimpleHashCache<K,V> {
let mut r = rand::task_rng();
SimpleHashCache {
- entries: vec::from_elem(cache_size, None),
+ entries: slice::from_elem(cache_size, None),
k0: r.gen(),
k1: r.gen(),
}
diff --git a/src/components/util/concurrentmap.rs b/src/components/util/concurrentmap.rs
index a4ca68706b1..0c4c501d0ce 100644
--- a/src/components/util/concurrentmap.rs
+++ b/src/components/util/concurrentmap.rs
@@ -4,15 +4,15 @@
//! A Doug Lea-style concurrent hash map using striped locks.
+use rand;
+use rand::Rng;
use std::cast;
use std::hash::{Hash, sip};
use std::ptr;
-use std::rand::Rng;
-use std::rand;
use std::sync::atomics::{AtomicUint, Relaxed, SeqCst};
use std::unstable::mutex::StaticNativeMutex;
use std::mem;
-use std::vec;
+use std::slice;
/// When the size exceeds (number of buckets * LOAD_NUMERATOR/LOAD_DENOMINATOR), the hash table
/// grows.
@@ -57,12 +57,12 @@ impl<K:Hash + Eq,V> ConcurrentHashMap<K,V> {
k0: rand.gen(),
k1: rand.gen(),
size: AtomicUint::new(0),
- locks: vec::from_fn(lock_count, |_| {
+ locks: slice::from_fn(lock_count, |_| {
unsafe {
StaticNativeMutex::new()
}
}),
- buckets: vec::from_fn(lock_count * buckets_per_lock, |_| None),
+ buckets: slice::from_fn(lock_count * buckets_per_lock, |_| None),
}
}
@@ -295,7 +295,7 @@ impl<K:Hash + Eq,V> ConcurrentHashMap<K,V> {
let new_bucket_count = lock_count * new_buckets_per_lock;
if new_bucket_count > this.buckets.len() {
// Create a new set of buckets.
- let mut buckets = vec::from_fn(new_bucket_count, |_| None);
+ let mut buckets = slice::from_fn(new_bucket_count, |_| None);
mem::swap(&mut this.buckets, &mut buckets);
this.size.store(0, Relaxed);
@@ -484,13 +484,14 @@ impl<'a,K,V> Iterator<(&'a K, &'a V)> for ConcurrentHashMapIterator<'a,K,V> {
pub mod test {
use sync::Arc;
use native;
+ use std::comm;
use concurrentmap::ConcurrentHashMap;
#[test]
pub fn smoke() {
let m = Arc::new(ConcurrentHashMap::new());
- let (port, chan) = Chan::new();
+ let (chan, port) = comm::channel();
// Big enough to make it resize once.
for i in range(0, 5) {
diff --git a/src/components/util/cowarc.rs b/src/components/util/cowarc.rs
index c09a059ec22..caddd6cf4cb 100644
--- a/src/components/util/cowarc.rs
+++ b/src/components/util/cowarc.rs
@@ -31,13 +31,13 @@ impl<T> Drop for CowArc<T> {
}
}
-impl<T:Eq + Freeze + Clone> Eq for CowArc<T> {
+impl<T:Eq + Clone> Eq for CowArc<T> {
fn eq(&self, other: &CowArc<T>) -> bool {
self.get() == other.get()
}
}
-impl<T:Freeze + Clone> Clone for CowArc<T> {
+impl<T:Clone> Clone for CowArc<T> {
#[inline]
fn clone(&self) -> CowArc<T> {
unsafe {
@@ -49,7 +49,7 @@ impl<T:Freeze + Clone> Clone for CowArc<T> {
}
}
-impl<T:Freeze + Clone> CowArc<T> {
+impl<T:Clone> CowArc<T> {
#[inline]
pub fn new(value: T) -> CowArc<T> {
let alloc = ~CowArcAlloc {
diff --git a/src/components/util/debug.rs b/src/components/util/debug.rs
index 0cebc305a27..92b81891916 100644
--- a/src/components/util/debug.rs
+++ b/src/components/util/debug.rs
@@ -2,11 +2,15 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+#[feature(phase)];
+#[phase(syntax, link)]
+extern crate log;
+
use std::io;
use std::io::Writer;
-use std::vec::raw::buf_as_slice;
use std::cast::transmute;
use std::mem::size_of;
+use std::slice::raw::buf_as_slice;
fn hexdump_slice(buf: &[u8]) {
let mut stderr = io::stderr();
diff --git a/src/components/util/opts.rs b/src/components/util/opts.rs
index 9beaf6ce1e5..f48f1ef284c 100644
--- a/src/components/util/opts.rs
+++ b/src/components/util/opts.rs
@@ -15,7 +15,7 @@ use std::os;
#[deriving(Clone)]
pub struct Opts {
/// The initial URLs to load.
- urls: ~[~str],
+ urls: Vec<~str>,
/// The rendering backend to use (`-r`).
render_backend: BackendType,
diff --git a/src/components/util/sort.rs b/src/components/util/sort.rs
index 8170bc8af04..8f5a95e149e 100644
--- a/src/components/util/sort.rs
+++ b/src/components/util/sort.rs
@@ -79,8 +79,8 @@ pub fn quicksort<T:Ord + Eq>(arr: &mut [T]) {
#[cfg(test)]
pub mod test {
- use std::rand::{Rng, task_rng};
- use std::rand;
+ use rand;
+ use rand::{Rng, task_rng};
use sort;
diff --git a/src/components/util/task.rs b/src/components/util/task.rs
index e487c0b26fa..8500649370d 100644
--- a/src/components/util/task.rs
+++ b/src/components/util/task.rs
@@ -4,7 +4,7 @@
use std::str::IntoMaybeOwned;
use std::task;
-use std::comm::Chan;
+use std::comm::Sender;
use std::task::TaskBuilder;
pub fn spawn_named<S: IntoMaybeOwned<'static>>(name: S, f: proc()) {
@@ -14,7 +14,7 @@ pub fn spawn_named<S: IntoMaybeOwned<'static>>(name: S, f: proc()) {
/// Arrange to send a particular message to a channel if the task built by
/// this `TaskBuilder` fails.
-pub fn send_on_failure<T: Send>(builder: &mut TaskBuilder, msg: T, dest: Chan<T>) {
+pub fn send_on_failure<T: Send>(builder: &mut TaskBuilder, msg: T, dest: Sender<T>) {
let port = builder.future_result();
spawn(proc() {
match port.recv() {
diff --git a/src/components/util/time.rs b/src/components/util/time.rs
index 41325e9bb69..1be10d960e1 100644
--- a/src/components/util/time.rs
+++ b/src/components/util/time.rs
@@ -6,7 +6,8 @@
use std_time::precise_time_ns;
use collections::treemap::TreeMap;
-use std::comm::{Port, Chan};
+use std::comm::{Sender, channel, Receiver};
+use std::f64;
use std::iter::AdditiveIterator;
use task::{spawn_named};
@@ -28,7 +29,7 @@ impl Timer {
// front-end representation of the profiler used to communicate with the profiler
#[deriving(Clone)]
-pub struct ProfilerChan(Chan<ProfilerMsg>);
+pub struct ProfilerChan(Sender<ProfilerMsg>);
impl ProfilerChan {
pub fn send(&self, msg: ProfilerMsg) {
@@ -46,7 +47,8 @@ pub enum ProfilerMsg {
ExitMsg,
}
-#[deriving(Eq, Clone, TotalEq, TotalOrd)]
+#[repr(u32)]
+#[deriving(Eq, Clone, Ord, TotalEq, TotalOrd)]
pub enum ProfilerCategory {
CompositingCategory,
LayoutQueryCategory,
@@ -117,14 +119,14 @@ type ProfilerBuckets = TreeMap<ProfilerCategory, ~[f64]>;
// back end of the profiler that handles data aggregation and performance metrics
pub struct Profiler {
- port: Port<ProfilerMsg>,
+ port: Receiver<ProfilerMsg>,
buckets: ProfilerBuckets,
last_msg: Option<ProfilerMsg>,
}
impl Profiler {
pub fn create(period: Option<f64>) -> ProfilerChan {
- let (port, chan) = Chan::new();
+ let (chan, port) = channel();
match period {
Some(period) => {
let period = (period * 1000f64) as u64;
@@ -159,7 +161,7 @@ impl Profiler {
ProfilerChan(chan)
}
- pub fn new(port: Port<ProfilerMsg>) -> Profiler {
+ pub fn new(port: Receiver<ProfilerMsg>) -> Profiler {
Profiler {
port: port,
buckets: ProfilerCategory::empty_buckets(),
@@ -211,11 +213,11 @@ impl Profiler {
});
let data_len = data.len();
if data_len > 0 {
- let (mean, median, &min, &max) =
+ let (mean, median, min, max) =
(data.iter().map(|&x|x).sum() / (data_len as f64),
data[data_len / 2],
- data.iter().min().unwrap(),
- data.iter().max().unwrap());
+ data.iter().fold(f64::INFINITY, |a, &b| a.min(b)),
+ data.iter().fold(-f64::INFINITY, |a, &b| a.max(b)));
println!("{:-35s}: {:15.4f} {:15.4f} {:15.4f} {:15.4f} {:15u}",
category.format(), mean, median, min, max, data_len);
}
diff --git a/src/components/util/url.rs b/src/components/util/url.rs
index dafacbc55e4..dd265dccb6e 100644
--- a/src/components/util/url.rs
+++ b/src/components/util/url.rs
@@ -2,10 +2,11 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-use extra::url;
-use extra::url::Url;
use collections::HashMap;
use std::os;
+use std::vec::Vec;
+use std_url;
+use std_url::Url;
/**
Create a URL object from a string. Does various helpful browsery things like
@@ -17,9 +18,9 @@ Create a URL object from a string. Does various helpful browsery things like
*/
// TODO: about:failure->
-pub fn parse_url(str_url: &str, base_url: Option<Url>) -> Url {
+pub fn parse_url(str_url: &str, base_url: Option<std_url::Url>) -> std_url::Url {
let str_url = str_url.trim_chars(& &[' ', '\t', '\n', '\r', '\x0C']).to_owned();
- let schm = url::get_scheme(str_url);
+ let schm = std_url::get_scheme(str_url);
let str_url = match schm {
Err(_) => {
if base_url.is_none() {
@@ -38,7 +39,7 @@ pub fn parse_url(str_url: &str, base_url: Option<Url>) -> Url {
debug!("parse_url: base_url: {:?}", base_url);
let mut new_url = base_url.clone();
- new_url.query = ~[];
+ new_url.query = Vec::new();
new_url.fragment = None;
if str_url.starts_with("//") {
@@ -84,7 +85,7 @@ pub fn parse_url(str_url: &str, base_url: Option<Url>) -> Url {
};
// FIXME: Need to handle errors
- url::from_str(str_url).ok().expect("URL parsing failed")
+ std_url::from_str(str_url).ok().expect("URL parsing failed")
}
#[cfg(test)]
@@ -162,7 +163,7 @@ mod parse_url_tests {
#[test]
fn should_create_url_based_on_old_url_6() {
- use extra::url::UserInfo;
+ use std_url::UserInfo;
let old_str = "http://foo:bar@example.com:8080/index.html";
let old_url = parse_url(old_str, None);
@@ -190,7 +191,7 @@ mod parse_url_tests {
}
-pub type UrlMap<T> = HashMap<Url, T>;
+pub type UrlMap<T> = HashMap<std_url::Url, T>;
pub fn url_map<T: Clone + 'static>() -> UrlMap<T> {
HashMap::new()
diff --git a/src/components/util/util.rs b/src/components/util/util.rs
index f07fc0b6b2c..78ff97a5e05 100644
--- a/src/components/util/util.rs
+++ b/src/components/util/util.rs
@@ -7,15 +7,20 @@
#[feature(macro_rules, managed_boxes)];
+#[feature(phase)];
+#[phase(syntax, link)]
+extern crate log;
+
extern crate azure;
extern crate collections;
-extern crate extra;
extern crate geom;
extern crate getopts;
extern crate native;
+extern crate rand;
extern crate serialize;
extern crate sync;
extern crate std_time = "time";
+extern crate std_url = "url";
pub mod cache;
pub mod concurrentmap;
diff --git a/src/components/util/workqueue.rs b/src/components/util/workqueue.rs
index b5f4fc0799d..37e6e68e155 100644
--- a/src/components/util/workqueue.rs
+++ b/src/components/util/workqueue.rs
@@ -8,11 +8,11 @@
//! higher-level API on top of this could allow safe fork-join parallelism.
use native;
+use rand;
+use rand::{Rng, XorShiftRng};
use std::cast;
use std::comm;
use std::mem;
-use std::rand::{Rng, XorShiftRng};
-use std::rand;
use std::sync::atomics::{AtomicUint, SeqCst};
use std::sync::deque::{Abort, BufferPool, Data, Empty, Stealer, Worker};
use std::task::TaskOpts;
@@ -50,7 +50,7 @@ enum SupervisorMsg<QUD,WUD> {
/// Information that the supervisor thread keeps about the worker threads.
struct WorkerInfo<QUD,WUD> {
/// The communication channel to the workers.
- chan: Chan<WorkerMsg<QUD,WUD>>,
+ chan: Sender<WorkerMsg<QUD,WUD>>,
/// The buffer pool for this deque.
pool: BufferPool<WorkUnit<QUD,WUD>>,
/// The worker end of the deque, if we have it.
@@ -64,9 +64,9 @@ struct WorkerThread<QUD,WUD> {
/// The index of this worker.
index: uint,
/// The communication port from the supervisor.
- port: Port<WorkerMsg<QUD,WUD>>,
+ port: Receiver<WorkerMsg<QUD,WUD>>,
/// The communication channel on which messages are sent to the supervisor.
- chan: Chan<SupervisorMsg<QUD,WUD>>,
+ chan: Sender<SupervisorMsg<QUD,WUD>>,
/// The thief end of the work-stealing deque for all other workers.
other_deques: ~[Stealer<WorkUnit<QUD,WUD>>],
/// The random number generator for this worker.
@@ -191,7 +191,7 @@ pub struct WorkQueue<QUD,WUD> {
/// Information about each of the workers.
priv workers: ~[WorkerInfo<QUD,WUD>],
/// A port on which deques can be received from the workers.
- priv port: Port<SupervisorMsg<QUD,WUD>>,
+ priv port: Receiver<SupervisorMsg<QUD,WUD>>,
/// The amount of work that has been enqueued.
priv work_count: uint,
/// Arbitrary user data.
@@ -203,10 +203,10 @@ impl<QUD:Send,WUD:Send> WorkQueue<QUD,WUD> {
/// it.
pub fn new(task_name: &'static str, thread_count: uint, user_data: QUD) -> WorkQueue<QUD,WUD> {
// Set up data structures.
- let (supervisor_port, supervisor_chan) = Chan::new();
+ let (supervisor_chan, supervisor_port) = channel();
let (mut infos, mut threads) = (~[], ~[]);
for i in range(0, thread_count) {
- let (worker_port, worker_chan) = Chan::new();
+ let (worker_chan, worker_port) = channel();
let mut pool = BufferPool::new();
let (worker, thief) = pool.deque();
infos.push(WorkerInfo {