diff options
author | ecoal95 <ecoal95@gmail.com> | 2015-07-28 16:58:53 +0200 |
---|---|---|
committer | ecoal95 <ecoal95@gmail.com> | 2015-07-28 17:34:23 +0200 |
commit | bc908458ff24e42cc0c1ad32df44481456737bdb (patch) | |
tree | 0d1ac6a2490e56fb8dd159b2a3aee7bb926c051d /components/script/dom/webglrenderingcontext.rs | |
parent | e0bd80f80715bdbdf30de1de9c79a99a41cfd99e (diff) | |
download | servo-bc908458ff24e42cc0c1ad32df44481456737bdb.tar.gz servo-bc908458ff24e42cc0c1ad32df44481456737bdb.zip |
webgl: Make context creation fallible. Fixes #6806
Diffstat (limited to 'components/script/dom/webglrenderingcontext.rs')
-rw-r--r-- | components/script/dom/webglrenderingcontext.rs | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index 4dcd1705782..f02cd0d9524 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -64,20 +64,23 @@ impl WebGLRenderingContext { canvas: &HTMLCanvasElement, size: Size2D<i32>, attrs: GLContextAttributes) - -> Result<WebGLRenderingContext, &'static str> { + -> Result<WebGLRenderingContext, String> { let (sender, receiver) = ipc::channel().unwrap(); let constellation_chan = global.constellation_chan(); constellation_chan.0 .send(ConstellationMsg::CreateWebGLPaintTask(size, attrs, sender)) .unwrap(); - let (ipc_renderer, renderer_id) = receiver.recv().unwrap(); - Ok(WebGLRenderingContext { - reflector_: Reflector::new(), - global: GlobalField::from_rooted(&global), - renderer_id: renderer_id, - ipc_renderer: ipc_renderer, - last_error: Cell::new(None), - canvas: JS::from_ref(canvas), + let result = receiver.recv().unwrap(); + + result.map(|(ipc_renderer, renderer_id)| { + WebGLRenderingContext { + reflector_: Reflector::new(), + global: GlobalField::from_rooted(&global), + renderer_id: renderer_id, + ipc_renderer: ipc_renderer, + last_error: Cell::new(None), + canvas: JS::from_ref(canvas), + } }) } |