aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2020-07-14 12:06:46 -0400
committerJosh Matthews <josh@joshmatthews.net>2020-07-14 12:48:45 -0400
commit1ae117f67b63c0ce574b595a26cbad9fe309639d (patch)
tree4e1c9c3f8257f3d37497601b79b4a3076143c1a6
parent9fe92ecb4c35747fd58b13f6ae23eb0f31a14680 (diff)
downloadservo-1ae117f67b63c0ce574b595a26cbad9fe309639d.tar.gz
servo-1ae117f67b63c0ce574b595a26cbad9fe309639d.zip
dom: Add stub implementation for HTMLCanvasElement.captureStream.
-rw-r--r--components/config/prefs.rs3
-rw-r--r--components/script/dom/htmlcanvaselement.rs15
-rw-r--r--components/script/dom/webidls/HTMLCanvasElement.webidl5
-rw-r--r--resources/prefs.json1
4 files changed, 24 insertions, 0 deletions
diff --git a/components/config/prefs.rs b/components/config/prefs.rs
index bf78d8d584d..a3302e1f597 100644
--- a/components/config/prefs.rs
+++ b/components/config/prefs.rs
@@ -133,6 +133,9 @@ mod gen {
enabled: bool,
}
},
+ canvas_capture: {
+ enabled: bool,
+ },
canvas_text: {
enabled: bool,
},
diff --git a/components/script/dom/htmlcanvaselement.rs b/components/script/dom/htmlcanvaselement.rs
index 4b7d54b323d..c9060c7d8f3 100644
--- a/components/script/dom/htmlcanvaselement.rs
+++ b/components/script/dom/htmlcanvaselement.rs
@@ -7,10 +7,12 @@ use crate::dom::bindings::cell::{ref_filter_map, DomRefCell, Ref};
use crate::dom::bindings::codegen::Bindings::HTMLCanvasElementBinding::{
HTMLCanvasElementMethods, RenderingContext,
};
+use crate::dom::bindings::codegen::Bindings::MediaStreamBinding::MediaStreamMethods;
use crate::dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLContextAttributes;
use crate::dom::bindings::conversions::ConversionResult;
use crate::dom::bindings::error::{Error, Fallible};
use crate::dom::bindings::inheritance::Castable;
+use crate::dom::bindings::num::Finite;
use crate::dom::bindings::reflector::DomObject;
use crate::dom::bindings::root::{Dom, DomRoot, LayoutDom};
use crate::dom::bindings::str::{DOMString, USVString};
@@ -22,6 +24,8 @@ use crate::dom::element::{AttributeMutation, Element, LayoutElementHelpers};
use crate::dom::globalscope::GlobalScope;
use crate::dom::gpucanvascontext::GPUCanvasContext;
use crate::dom::htmlelement::HTMLElement;
+use crate::dom::mediastream::MediaStream;
+use crate::dom::mediastreamtrack::MediaStreamTrack;
use crate::dom::node::{window_from_node, Node};
use crate::dom::virtualmethods::VirtualMethods;
use crate::dom::webgl2renderingcontext::WebGL2RenderingContext;
@@ -41,6 +45,8 @@ use js::rust::HandleValue;
use profile_traits::ipc;
use script_layout_interface::{HTMLCanvasData, HTMLCanvasDataSource};
use script_traits::ScriptMsg;
+use servo_media::streams::registry::MediaStreamId;
+use servo_media::streams::MediaStreamType;
use style::attr::{AttrValue, LengthOrPercentageOrAuto};
const DEFAULT_WIDTH: u32 = 300;
@@ -429,6 +435,15 @@ impl HTMLCanvasElementMethods for HTMLCanvasElement {
base64::encode_config_buf(&png, base64::STANDARD, &mut url);
Ok(USVString(url))
}
+
+ /// https://w3c.github.io/mediacapture-fromelement/#dom-htmlcanvaselement-capturestream
+ fn CaptureStream(&self, _frame_request_rate: Option<Finite<f64>>) -> DomRoot<MediaStream> {
+ let global = self.global();
+ let stream = MediaStream::new(&*global);
+ let track = MediaStreamTrack::new(&*global, MediaStreamId::new(), MediaStreamType::Video);
+ stream.AddTrack(&track);
+ stream
+ }
}
impl VirtualMethods for HTMLCanvasElement {
diff --git a/components/script/dom/webidls/HTMLCanvasElement.webidl b/components/script/dom/webidls/HTMLCanvasElement.webidl
index 650357a905e..5c33aa3532e 100644
--- a/components/script/dom/webidls/HTMLCanvasElement.webidl
+++ b/components/script/dom/webidls/HTMLCanvasElement.webidl
@@ -23,4 +23,9 @@ interface HTMLCanvasElement : HTMLElement {
//OffscreenCanvas transferControlToOffscreen();
};
+partial interface HTMLCanvasElement {
+ [Pref="dom.canvas_capture.enabled"]
+ MediaStream captureStream (optional double frameRequestRate);
+};
+
//callback BlobCallback = void (Blob? blob);
diff --git a/resources/prefs.json b/resources/prefs.json
index 0b219f7966a..04ecb8f89b7 100644
--- a/resources/prefs.json
+++ b/resources/prefs.json
@@ -1,6 +1,7 @@
{
"dom.bluetooth.enabled": false,
"dom.bluetooth.testing.enabled": false,
+ "dom.canvas_capture.enabled": false,
"dom.canvas_text.enabled": true,
"dom.compositionevent.enabled": false,
"dom.customelements.enabled": true,