mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-05 00:25:27 +00:00
Bug 681550 - Add ability to save current frame of video. r=dolske
This commit is contained in:
parent
18098172ed
commit
e2343925d1
@ -167,6 +167,10 @@
|
||||
label="&saveAudioCmd.label;"
|
||||
accesskey="&saveAudioCmd.accesskey;"
|
||||
oncommand="gContextMenu.saveMedia();"/>
|
||||
<menuitem id="context-video-saveimage"
|
||||
accesskey="&videoSaveImage.accesskey;"
|
||||
label="&videoSaveImage.label;"
|
||||
oncommand="gContextMenu.saveVideoFrameAsImage();"/>
|
||||
<menuitem id="context-sendvideo"
|
||||
label="&sendVideoCmd.label;"
|
||||
accesskey="&sendVideoCmd.accesskey;"
|
||||
|
@ -224,6 +224,7 @@ nsContextMenu.prototype = {
|
||||
this.showItem("context-saveimage", this.onLoadedImage || this.onCanvas);
|
||||
this.showItem("context-savevideo", this.onVideo);
|
||||
this.showItem("context-saveaudio", this.onAudio);
|
||||
this.showItem("context-video-saveimage", this.onVideo);
|
||||
this.setItemAttr("context-savevideo", "disabled", !this.mediaURL);
|
||||
this.setItemAttr("context-saveaudio", "disabled", !this.mediaURL);
|
||||
// Send media URL (but not for canvas, since it's a big data: URL)
|
||||
@ -427,8 +428,11 @@ nsContextMenu.prototype = {
|
||||
this.setItemAttr("context-media-unmute", "disabled", hasError);
|
||||
this.setItemAttr("context-media-showcontrols", "disabled", hasError);
|
||||
this.setItemAttr("context-media-hidecontrols", "disabled", hasError);
|
||||
if (this.onVideo)
|
||||
this.setItemAttr("context-video-fullscreen", "disabled", hasError);
|
||||
if (this.onVideo) {
|
||||
let canSaveSnapshot = this.target.readyState >= this.target.HAVE_CURRENT_DATA;
|
||||
this.setItemAttr("context-video-saveimage", "disabled", !canSaveSnapshot);
|
||||
this.setItemAttr("context-video-fullscreen", "disabled", hasError);
|
||||
}
|
||||
}
|
||||
this.showItem("context-media-sep-commands", onMedia);
|
||||
},
|
||||
@ -826,6 +830,27 @@ nsContextMenu.prototype = {
|
||||
openUILink(viewURL, e, null, null, null, null, doc.documentURIObject );
|
||||
},
|
||||
|
||||
saveVideoFrameAsImage: function () {
|
||||
urlSecurityCheck(this.mediaURL, this.browser.contentPrincipal,
|
||||
Ci.nsIScriptSecurityManager.DISALLOW_SCRIPT);
|
||||
let name = "";
|
||||
try {
|
||||
let uri = makeURI(this.mediaURL);
|
||||
let url = uri.QueryInterface(Ci.nsIURL);
|
||||
if (url.fileBaseName)
|
||||
name = url.fileBaseName + ".jpg";
|
||||
} catch (e) { }
|
||||
if (!name)
|
||||
name = "snapshot.jpg";
|
||||
var video = this.target;
|
||||
var canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
|
||||
canvas.width = video.videoWidth;
|
||||
canvas.height = video.videoHeight;
|
||||
var ctxDraw = canvas.getContext("2d");
|
||||
ctxDraw.drawImage(video, 0, 0);
|
||||
saveImageURL(canvas.toDataURL("image/jpg", ""), name, "SaveImageTitle", true, false, document.documentURIObject);
|
||||
},
|
||||
|
||||
fullScreenVideo: function () {
|
||||
this.target.pause();
|
||||
|
||||
|
@ -339,6 +339,7 @@ function runTest(testNum) {
|
||||
"context-copyvideourl", true,
|
||||
"---", null,
|
||||
"context-savevideo", true,
|
||||
"context-video-saveimage", true,
|
||||
"context-sendvideo", true,
|
||||
"---", null,
|
||||
"context-inspect", true]);
|
||||
@ -357,6 +358,7 @@ function runTest(testNum) {
|
||||
"context-copyvideourl", true,
|
||||
"---", null,
|
||||
"context-savevideo", true,
|
||||
"context-video-saveimage", false,
|
||||
"context-sendvideo", true,
|
||||
"---", null,
|
||||
"context-inspect", true]);
|
||||
@ -375,6 +377,7 @@ function runTest(testNum) {
|
||||
"context-copyvideourl", false,
|
||||
"---", null,
|
||||
"context-savevideo", false,
|
||||
"context-video-saveimage", false,
|
||||
"context-sendvideo", false,
|
||||
"---", null,
|
||||
"context-inspect", true]);
|
||||
|
@ -432,6 +432,8 @@ can reach it easily. -->
|
||||
<!ENTITY mediaHideControls.accesskey "C">
|
||||
<!ENTITY videoFullScreen.label "Full Screen">
|
||||
<!ENTITY videoFullScreen.accesskey "F">
|
||||
<!ENTITY videoSaveImage.label "Save Snapshot As…">
|
||||
<!ENTITY videoSaveImage.accesskey "S">
|
||||
|
||||
|
||||
<!-- LOCALIZATION NOTE :
|
||||
|
Loading…
Reference in New Issue
Block a user